summaryrefslogtreecommitdiff
path: root/redo/uitask_unix.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-19 13:33:06 -0400
committerPietro Gagliardi <[email protected]>2014-08-19 13:33:06 -0400
commitd07230e55e6c1b001cd09e03816710e66a34e7f4 (patch)
tree032efe21122bfb10a2ffe5b8fd8d86cc7a849984 /redo/uitask_unix.go
parenta3ff63490b80c9f744978f3cf6e096a066c626e3 (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.go23
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)
+}