diff --git a/app/internal/wm/os_darwin.go b/app/internal/wm/os_darwin.go index d804c9cf..1b6c6a3a 100644 --- a/app/internal/wm/os_darwin.go +++ b/app/internal/wm/os_darwin.go @@ -16,6 +16,7 @@ __attribute__ ((visibility ("hidden"))) void gio_setDisplayLinkDisplay(CFTypeRef __attribute__ ((visibility ("hidden"))) void gio_hideCursor(); __attribute__ ((visibility ("hidden"))) void gio_showCursor(); __attribute__ ((visibility ("hidden"))) void gio_setCursor(NSUInteger curID); +__attribute__ ((visibility ("hidden"))) bool gio_isMainThread(); */ import "C" import ( @@ -55,6 +56,10 @@ var mainFuncs = make(chan func(), 1) // runOnMain runs the function on the main thread. func runOnMain(f func()) { + if C.gio_isMainThread() { + f() + return + } go func() { mainFuncs <- f C.gio_wakeupMainThread() diff --git a/app/internal/wm/os_darwin.m b/app/internal/wm/os_darwin.m index dc4f00b7..8d37371e 100644 --- a/app/internal/wm/os_darwin.m +++ b/app/internal/wm/os_darwin.m @@ -11,6 +11,10 @@ void gio_wakeupMainThread(void) { }); } +bool gio_isMainThread() { + return [NSThread isMainThread]; +} + NSUInteger gio_nsstringLength(CFTypeRef cstr) { NSString *str = (__bridge NSString *)cstr; return [str length];