From fb8cd418fbda05b2aff3f0f7035df3ef8343007d Mon Sep 17 00:00:00 2001 From: Morten Johan Sorvig Date: Fri, 20 Apr 2012 08:29:14 +0200 Subject: [PATCH] Fix crash in QCocoaBackingStore. 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 --- src/plugins/platforms/cocoa/qcocoabackingstore.h | 1 - src/plugins/platforms/cocoa/qcocoabackingstore.mm | 10 +++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.h b/src/plugins/platforms/cocoa/qcocoabackingstore.h index 489938c..72bb593 100644 --- a/src/plugins/platforms/cocoa/qcocoabackingstore.h +++ b/src/plugins/platforms/cocoa/qcocoabackingstore.h @@ -63,7 +63,6 @@ public: bool scroll(const QRegion &area, int dx, int dy); private: - QCocoaWindow *m_cocoaWindow; QImage *m_image; }; diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.mm b/src/plugins/platforms/cocoa/qcocoabackingstore.mm index f0ff7ba..660c2b6 100644 --- a/src/plugins/platforms/cocoa/qcocoabackingstore.mm +++ b/src/plugins/platforms/cocoa/qcocoabackingstore.mm @@ -50,7 +50,6 @@ QT_BEGIN_NAMESPACE QCocoaBackingStore::QCocoaBackingStore(QWindow *window) : QPlatformBackingStore(window) { - m_cocoaWindow = static_cast(window->handle()); m_image = new QImage(window->geometry().size(),QImage::Format_ARGB32_Premultiplied); } @@ -72,14 +71,19 @@ void QCocoaBackingStore::flush(QWindow *widget, const QRegion ®ion, 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(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(m_cocoaWindow->m_contentView) setImage:m_image]; + + QCocoaWindow *cocoaWindow = static_cast(window()->handle()); + if (cocoaWindow) + [static_cast(cocoaWindow->m_contentView) setImage:m_image]; } bool QCocoaBackingStore::scroll(const QRegion &area, int dx, int dy) -- 2.7.4