Cocoa: Fix QCocoaBackingStore::flush on 10.8
authorMorten Sorvig <morten.sorvig@nokia.com>
Fri, 25 May 2012 09:36:03 +0000 (11:36 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 6 Jun 2012 05:41:14 +0000 (07:41 +0200)
The call to displayRect works on 10.7 but does not
update the pixels on screen on 10.8. Many Qt windows
do not update properly.

This is a workaround found by trail and error
without fully understanding the underlying issue.
I would like to have this in place until we can
determine the cause of the bug.

Change-Id: I1ecee745f42a93ded4f651cc8ad51963f250e78d
Reviewed-by: Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com>
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
src/plugins/platforms/cocoa/qcocoabackingstore.mm

index 660c2b6..44243d3 100644 (file)
@@ -72,8 +72,18 @@ 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());
     QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window()->handle());
-    if (cocoaWindow)
+    if (cocoaWindow) {
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
+    if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) {
+        // Workaround for malfunctioning displayRect on 10.8 where
+        // calling it seems to have no effect. Call setImage like
+        // resize() does.
+        [cocoaWindow->m_contentView setImage:m_image];
+    }
+#endif
         [cocoaWindow->m_contentView displayRect:rect];
+   }
 }
 
 void QCocoaBackingStore::resize(const QSize &size, const QRegion &)