From b77c1628f3e342e16484495aa8e472438e498593 Mon Sep 17 00:00:00 2001 From: pierre Date: Fri, 2 Apr 2021 18:08:22 +0200 Subject: [PATCH] app/internal/wm: [macOS] run closure on main thread earlier if possible Signed-off-by: pierre --- app/internal/wm/os_darwin.go | 5 +++++ app/internal/wm/os_darwin.m | 4 ++++ 2 files changed, 9 insertions(+) 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];