diff options
Diffstat (limited to 'uitask_unix.go')
| -rw-r--r-- | uitask_unix.go | 30 |
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(>kIdleOp{ what: f, @@ -38,11 +50,5 @@ func ui(main func()) error { } }() - go func() { - main() - uitask <- gtk_main_quit - }() - C.gtk_main() - return nil } |
