diff --git a/glfw/cocoa_init.m b/glfw/cocoa_init.m index 1c635841e..a82f7654a 100644 --- a/glfw/cocoa_init.m +++ b/glfw/cocoa_init.m @@ -295,6 +295,7 @@ static GLFWbool initializeTIS(void) @end // GLFWHelper @interface GLFWApplication : NSApplication +- (void)tick_callback; @end extern void dispatchCustomEvent(NSEvent *event); @@ -305,6 +306,11 @@ extern void dispatchCustomEvent(NSEvent *event); dispatchCustomEvent(event); } else [super sendEvent:event]; } + +- (void)tick_callback +{ + _glfwDispatchTickCallback(); +} @end ////////////////////////////////////////////////////////////////////////// @@ -462,6 +468,7 @@ static GLFWtickcallback tick_callback = NULL; static void* tick_callback_data = NULL; static bool tick_callback_requested = false; + void _glfwDispatchTickCallback() { if (tick_callback) { tick_callback_requested = false; @@ -472,7 +479,7 @@ void _glfwDispatchTickCallback() { void _glfwPlatformRequestTickCallback() { if (!tick_callback_requested) { tick_callback_requested = true; - _glfwCocoaPostEmptyEvent(TICK_CALLBACK_EVENT_TYPE, 0, false); + [NSApp performSelectorOnMainThread:@selector(tick_callback) withObject:nil waitUntilDone:NO]; } } diff --git a/glfw/cocoa_platform.h b/glfw/cocoa_platform.h index d5c9594e5..664ff3354 100644 --- a/glfw/cocoa_platform.h +++ b/glfw/cocoa_platform.h @@ -39,7 +39,6 @@ typedef void* CVDisplayLinkRef; typedef enum { EMPTY_EVENT_TYPE, RENDER_FRAME_REQUEST_EVENT_TYPE, - TICK_CALLBACK_EVENT_TYPE } EventTypes; diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index 2110f9d26..7d48786e0 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -1769,10 +1769,6 @@ dispatchCustomEvent(NSEvent *event) { case EMPTY_EVENT_TYPE: break; - case TICK_CALLBACK_EVENT_TYPE: - _glfwDispatchTickCallback(); - break; - default: break; } diff --git a/kitty/glfw.c b/kitty/glfw.c index 5e473d39c..e763ba769 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -939,8 +939,8 @@ void wakeup_main_loop() { request_tick_callback(); #ifndef __APPLE__ - // On Cocoa request_tick_callback() uses an event which wakes up the - // main loop anyway + // On Cocoa request_tick_callback() uses performSelectorOnMainLoop which + // wakes up the main loop anyway glfwPostEmptyEvent(); #endif }