summaryrefslogtreecommitdiff
path: root/uitask_unix.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-06-30 09:57:44 -0400
committerPietro Gagliardi <[email protected]>2014-06-30 09:57:44 -0400
commit33155f7496a818a1ed83fe49cccb63be7842bc81 (patch)
treebbb14af3d92becf7d5ca5abfb28630a2b413ad93 /uitask_unix.go
parente032807546a96e6489d18a0e42ced51b7c31a55c (diff)
Reverted everything back to the old API.
Diffstat (limited to 'uitask_unix.go')
-rw-r--r--uitask_unix.go30
1 files changed, 12 insertions, 18 deletions
diff --git a/uitask_unix.go b/uitask_unix.go
index a8cabd2..030f096 100644
--- a/uitask_unix.go
+++ b/uitask_unix.go
@@ -6,6 +6,7 @@ package ui
import (
"fmt"
+ "runtime"
)
// #cgo pkg-config: gtk+-3.0
@@ -14,32 +15,19 @@ import "C"
var uitask chan func()
-func uiinit() error {
+func ui(main func()) error {
+ runtime.LockOSThread()
+
+ uitask = make(chan func())
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 {
- var f func()
-
- select {
- case f = <-uitask:
- // do nothing
- case <-Stop:
- f = func() {
- C.gtk_main_quit()
- }
- }
+ for f := range uitask {
done := make(chan struct{})
gdk_threads_add_idle(&gtkIdleOp{
what: f,
@@ -50,5 +38,11 @@ func ui() {
}
}()
+ go func() {
+ main()
+ uitask <- gtk_main_quit
+ }()
+
C.gtk_main()
+ return nil
}