diff options
| author | Pietro Gagliardi <[email protected]> | 2014-06-28 21:40:44 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-06-28 21:40:44 -0400 |
| commit | 385993792f62f47c4164466ee1d5248b0921b0a5 (patch) | |
| tree | 6b97f4541568f6651ea010579dc2f249713be134 /uitask_unix.go | |
| parent | affc65a5a402534527c4d4fbc5b381b5b1283445 (diff) | |
Migrated the GTK+ backend to the new API.
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 } |
