diff options
| author | Pietro Gagliardi <[email protected]> | 2014-08-19 13:33:06 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-08-19 13:33:06 -0400 |
| commit | d07230e55e6c1b001cd09e03816710e66a34e7f4 (patch) | |
| tree | 032efe21122bfb10a2ffe5b8fd8d86cc7a849984 /redo/uitask_unix.go | |
| parent | a3ff63490b80c9f744978f3cf6e096a066c626e3 (diff) | |
Implemented the modal queue on the GTK+ backend to ensure proper queue ordering.
Diffstat (limited to 'redo/uitask_unix.go')
| -rw-r--r-- | redo/uitask_unix.go | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/redo/uitask_unix.go b/redo/uitask_unix.go index d330e4b..86628dd 100644 --- a/redo/uitask_unix.go +++ b/redo/uitask_unix.go @@ -12,7 +12,8 @@ import ( // #cgo pkg-config: gtk+-3.0 // #cgo CFLAGS: --std=c99 // #include "gtk_unix.h" -// extern gboolean doissue(gpointer data); +// #include "modalqueue.h" +// extern gboolean xdoissue(gpointer data); import "C" func uiinit() error { @@ -36,17 +37,19 @@ func uistop() { } func issue(f *func()) { - C.gdk_threads_add_idle(C.GSourceFunc(C.doissue), C.gpointer(unsafe.Pointer(f))) + if C.queueIfModal(unsafe.Pointer(f)) == 0 { + C.gdk_threads_add_idle(C.GSourceFunc(C.xdoissue), C.gpointer(unsafe.Pointer(f))) + } } -// TODO this is not order-safe! -var inmodal = false - -//export doissue -func doissue(data C.gpointer) C.gboolean { - if inmodal { - return C.TRUE // wait for modal dialog to finish - } +//export xdoissue +func xdoissue(data C.gpointer) C.gboolean { perform(unsafe.Pointer(data)) return C.FALSE // don't repeat } + +//export doissue +func doissue(data unsafe.Pointer) { + // for the modal queue functions + perform(data) +} |
