X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/72ae85dd61608315d54cb417177d7850472c1989..6cc78259af5f54b52b53523e8c9a22ec33a46060:/src/cocoa/evtloop.mm?ds=sidebyside 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]; }