summaryrefslogtreecommitdiff
path: root/uitask_darwin.go
diff options
context:
space:
mode:
Diffstat (limited to 'uitask_darwin.go')
-rw-r--r--uitask_darwin.go19
1 files changed, 7 insertions, 12 deletions
diff --git a/uitask_darwin.go b/uitask_darwin.go
index 754418c..5932cac 100644
--- a/uitask_darwin.go
+++ b/uitask_darwin.go
@@ -14,30 +14,25 @@ import (
// #include "objc_darwin.h"
import "C"
-var uitask chan func()
+// can be run from any thread
+// will wait for return; see delegateuitask_darwin.m
+func uitask(f func()) {
+ C.douitask(appDelegate, unsafe.Pointer(&f))
+}
func ui(main func()) error {
runtime.LockOSThread()
- uitask = make(chan func())
-
err := initCocoa()
if err != nil {
return err
}
- // Cocoa must run on the first thread created by the program, so we run our dispatcher on another thread instead
- go func() {
- for f := range uitask {
- C.douitask(appDelegate, unsafe.Pointer(&f))
- }
- }()
-
go func() {
main()
- uitask <- func() {
+ uitask(func() {
C.breakMainLoop()
- }
+ })
}()
C.cocoaMainLoop()