From 385993792f62f47c4164466ee1d5248b0921b0a5 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Sat, 28 Jun 2014 21:40:44 -0400 Subject: Migrated the GTK+ backend to the new API. --- uitask_unix.go | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'uitask_unix.go') 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 } -- cgit v1.2.3