summaryrefslogtreecommitdiff
path: root/uitask_unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'uitask_unix.go')
-rw-r--r--uitask_unix.go30
1 files changed, 18 insertions, 12 deletions
diff --git a/uitask_unix.go b/uitask_unix.go
index 030f096..a8cabd2 100644
--- a/uitask_unix.go
+++ b/uitask_unix.go
@@ -6,7 +6,6 @@ package ui
import (
"fmt"
- "runtime"
)
// #cgo pkg-config: gtk+-3.0
@@ -15,19 +14,32 @@ import "C"
var uitask chan func()
-func ui(main func()) error {
- runtime.LockOSThread()
-
- uitask = make(chan func())
+func uiinit() error {
err := gtk_init()
if err != nil {
return fmt.Errorf("gtk_init() failed: %v", err)
}
+ // do this only on success, just to be safe
+ uitask = make(chan func())
+ return nil
+}
+
+func ui() {
// thanks to tristan and Daniel_S in irc.gimp.net/#gtk
// see our_idle_callback in callbacks_unix.go for details
go func() {
- for f := range uitask {
+ for {
+ var f func()
+
+ select {
+ case f = <-uitask:
+ // do nothing
+ case <-Stop:
+ f = func() {
+ C.gtk_main_quit()
+ }
+ }
done := make(chan struct{})
gdk_threads_add_idle(&gtkIdleOp{
what: f,
@@ -38,11 +50,5 @@ func ui(main func()) error {
}
}()
- go func() {
- main()
- uitask <- gtk_main_quit
- }()
-
C.gtk_main()
- return nil
}