diff options
author | Morten Johan Sørvig <morten.sorvig@digia.com> | 2015-01-27 14:46:23 +0100 |
---|---|---|
committer | Morten Johan Sørvig <morten.sorvig@theqtcompany.com> | 2015-02-12 20:33:11 +0000 |
commit | 1b79d1cfe28a8fb77a3fb32438231d3670a268bc (patch) | |
tree | 54e540afad7e097a12ab00fd2bf362e9459c4996 /src/plugins/platforms/cocoa/qcocoawindow.mm | |
parent | 20598f53df8da349e5b0cf4c4bed7d0f4c9292b0 (diff) |
Fix crash-on-exit when embedding QNView
The QWindow and QCocoaWindow may be deleted
before the QNSView (which Cocoa keeps a reference
to).
Clear pointers to the Qt windows on QCocoaWindow
destruction and add null-pointer check to QNView::isOpaque.
Change-Id: I71764886c27bf1d14fb4e684c15e7c72e1c0a17c
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoawindow.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index c7a57d5776..bbf487c309 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -446,6 +446,14 @@ QCocoaWindow::~QCocoaWindow() name:nil object:m_nsWindow]; } + // The QNSView object may outlive the corresponding QCocoaWindow object, + // for example during app shutdown when the QNSView is embedded in a + // foregin NSView hiearchy. Clear the pointers to the QWindow/QCocoaWindow + // here to make sure QNSView does not dereference stale pointers. + if (m_qtView) { + [m_qtView clearQWindowPointers]; + } + foreach (QCocoaWindow *child, m_childWindows) { [m_nsWindow removeChildWindow:child->m_nsWindow]; child->m_parentCocoaWindow = 0; |