diff options
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm index bf9ba4eccf..06978fb3fc 100644 --- a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm +++ b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm @@ -637,6 +637,8 @@ NSModalSession QCocoaEventDispatcherPrivate::currentModalSession() if (!info.session) { QMacAutoReleasePool pool; QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(info.window->handle()); + if (!cocoaWindow) + continue; NSWindow *nswindow = cocoaWindow->nativeWindow(); if (!nswindow) continue; @@ -647,6 +649,15 @@ NSModalSession QCocoaEventDispatcherPrivate::currentModalSession() [(NSWindow*) info.nswindow retain]; QRect rect = cocoaWindow->geometry(); info.session = [NSApp beginModalSessionForWindow:nswindow]; + + // The call to beginModalSessionForWindow above processes events and may + // have deleted or destroyed the window. Check if it's still valid. + if (!info.window) + continue; + cocoaWindow = static_cast<QCocoaWindow *>(info.window->handle()); + if (!cocoaWindow) + continue; + if (rect != cocoaWindow->geometry()) cocoaWindow->setGeometry(rect); } |