From 9670dfc4bebf107fff652a8facab25524ef4c0eb Mon Sep 17 00:00:00 2001 From: David Elliott Date: Thu, 9 Oct 2003 15:56:38 +0000 Subject: [PATCH] Prevent Cocoa from waiting indefinitely when stopping the event loop git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24136 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/cocoa/evtloop.mm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/cocoa/evtloop.mm b/src/cocoa/evtloop.mm index d7870baa9a..9381f37e59 100644 --- a/src/cocoa/evtloop.mm +++ b/src/cocoa/evtloop.mm @@ -88,6 +88,24 @@ void wxEventLoop::Exit(int rc) NSApplication *cocoaApp = [NSApplication sharedApplication]; wxLogDebug("wxEventLoop::Exit isRunning=%d", (int)[cocoaApp isRunning]); + // This works around a bug in Cocoa. + [NSEvent startPeriodicEventsAfterDelay:0.0 withPeriod:5.0]; + /* Notes: + This function is most often called during idle time. See + wxApp::CocoaInstallIdleHandler() for an overview of the implications + of idle event time. In short, Cocoa must have at least one real event + in the queue (of which an idle "event" is not) in order for it to + realize that the application has been stopped. The above method + generates the first periodic event immediately, and would generate + further events every 5 seconds if not for the fact that the next + method stops the event loop. + + If the application was active when closed then this is unnecessary + because it would receive a deactivate event anyway. However, if the + application was not active when closed, then no events would be + added to the queue by Cocoa and thus the application would wait + indefinitely for the next event. + */ [cocoaApp stop: cocoaApp]; }