forked from AuroraMiddleware/gtk
Bug 701571 NSApp doesn't notice NSWindow destruction
Part 1 of the fix; part 2 awaits Glib developer approval (see https://bugzilla.gnome.org/show_bug.cgi?id=704374) and is more correctly associated with https://bugzilla.gnome.org/show_bug.cgi?id=674108
This commit is contained in:
parent
b0ff57538a
commit
31c2e95cbd
@ -618,7 +618,32 @@ gdk_event_prepare (GSource *source,
|
||||
gboolean retval;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
|
||||
/* The prepare stage is the stage before the main loop starts polling
|
||||
* and dispatching events. The autorelease poll is drained here for
|
||||
* the preceding main loop iteration or, in case of the first iteration,
|
||||
* for the operations carried out between event loop initialization and
|
||||
* this first iteration.
|
||||
*
|
||||
* The autorelease poll must only be drained when the following conditions
|
||||
* apply:
|
||||
* - We are at the base CFRunLoop level (indicated by current_loop_level),
|
||||
* - We are at the base g_main_loop level (indicated by
|
||||
* g_main_depth())
|
||||
* - We are at the base poll_func level (indicated by getting events).
|
||||
*
|
||||
* Messing with the autorelease pool at any level of nesting can cause access
|
||||
* to deallocated memory because autorelease_pool is static and releasing a
|
||||
* pool will cause all pools allocated inside of it to be released as well.
|
||||
*/
|
||||
if (current_loop_level == 0 && g_main_depth() == 0 && getting_events == 0)
|
||||
{
|
||||
if (autorelease_pool)
|
||||
[autorelease_pool drain];
|
||||
|
||||
autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
}
|
||||
|
||||
*timeout = -1;
|
||||
|
||||
if (_gdk_display->event_pause_count > 0)
|
||||
@ -659,21 +684,6 @@ gdk_event_dispatch (GSource *source,
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
/* Refresh the autorelease pool if we're at the base CFRunLoop level
|
||||
* (indicated by current_loop_level) and the base g_main_loop level
|
||||
* (indicated by g_main_depth()). Messing with the autorelease pool at
|
||||
* any level of nesting can cause access to deallocated memory because
|
||||
* autorelease_pool is static and releasing a pool will cause all pools
|
||||
* allocated inside of it to be released as well.
|
||||
*/
|
||||
if (current_loop_level == 0 && g_main_depth() == 0)
|
||||
{
|
||||
if (autorelease_pool)
|
||||
[autorelease_pool drain];
|
||||
|
||||
autorelease_pool = [[NSAutoreleasePool alloc] init];
|
||||
}
|
||||
|
||||
_gdk_quartz_display_queue_events (_gdk_display);
|
||||
|
||||
event = _gdk_event_unqueue (_gdk_display);
|
||||
|
Loading…
Reference in New Issue
Block a user