// +build !windows,!darwin,!plan9 // 16 february 2014 package ui import ( "fmt" "runtime" ) var uitask chan func() func ui(initDone chan error) { runtime.LockOSThread() uitask = make(chan func()) if gtk_init() != true { initDone <- fmt.Errorf("gtk_init failed (reason unknown; TODO)") return } initDone <- nil // thanks to tristan in irc.gimp.net/#gtk gdk_threads_add_idle(func() bool { select { case f := <-uitask: f() default: // do not block } return true // don't destroy the callback }) gtk_main() }