Fix crash in QCocoaBackingStore.
authorMorten Johan Sorvig <morten.sorvig@nokia.com>
Fri, 20 Apr 2012 06:29:14 +0000 (08:29 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 20 Apr 2012 10:46:47 +0000 (12:46 +0200)
QWindow->handle() may be null during construction,
and also during calls to resize(). Get and check
the pointer at each call instead of caching it
in the constructor.

Change-Id: Icd950b55e16fdd2077e3b7fe3c3393d8b89b5903
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
src/plugins/platforms/cocoa/qcocoabackingstore.h
src/plugins/platforms/cocoa/qcocoabackingstore.mm

index 489938c..72bb593 100644 (file)
@@ -63,7 +63,6 @@ public:
     bool scroll(const QRegion &area, int dx, int dy);
 
 private:
-    QCocoaWindow *m_cocoaWindow;
     QImage *m_image;
 };
 
index f0ff7ba..660c2b6 100644 (file)
@@ -50,7 +50,6 @@ QT_BEGIN_NAMESPACE
 QCocoaBackingStore::QCocoaBackingStore(QWindow *window)
     : QPlatformBackingStore(window)
 {
-    m_cocoaWindow = static_cast<QCocoaWindow *>(window->handle());
     m_image = new QImage(window->geometry().size(),QImage::Format_ARGB32_Premultiplied);
 }
 
@@ -72,14 +71,19 @@ void QCocoaBackingStore::flush(QWindow *widget, const QRegion &region, const QPo
 
     QRect geo = region.boundingRect();
     NSRect rect = NSMakeRect(geo.x(), geo.y(), geo.width(), geo.height());
-    [m_cocoaWindow->m_contentView displayRect:rect];
+    QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window()->handle());
+    if (cocoaWindow)
+        [cocoaWindow->m_contentView displayRect:rect];
 }
 
 void QCocoaBackingStore::resize(const QSize &size, const QRegion &)
 {
     delete m_image;
     m_image = new QImage(size, QImage::Format_ARGB32_Premultiplied);
-    [static_cast<QNSView *>(m_cocoaWindow->m_contentView) setImage:m_image];
+
+    QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window()->handle());
+    if (cocoaWindow)
+        [static_cast<QNSView *>(cocoaWindow->m_contentView) setImage:m_image];
 }
 
 bool QCocoaBackingStore::scroll(const QRegion &area, int dx, int dy)