From 876a428f609f35dc7e9517555abd17e7c6b01693 Mon Sep 17 00:00:00 2001
From: Laszlo Agocs <laszlo.agocs@digia.com>
Date: Wed, 22 Oct 2014 17:53:24 +0200
Subject: [PATCH] Cocoa: avoid sending exposes too early

Expose events trigger backing store sync and thus paint events
on QGLWidgets. Sending the exposes too early may lead to failures
in the OpenGL calls. Sending exposes before even getting to calling
setVisible(true) in QWidget::show() is just wrong.

Task-number: QTBUG-36802
Change-Id: Ic7d5125f4e257d715009811217e453d79d0fcc7c
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
---
 src/plugins/platforms/cocoa/qnsview.mm | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 9cd075fdec6..4cb8fbb451d 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -361,8 +361,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
     // Send a geometry change event to Qt, if it's ready to handle events
     if (!m_platformWindow->m_inConstructor) {
         QWindowSystemInterface::handleGeometryChange(m_window, geometry);
-        m_platformWindow->updateExposedGeometry();
-        QWindowSystemInterface::flushWindowSystemEvents();
+        // Do not send incorrect exposes in case the window is not even visible yet.
+        // We might get here as a result of a resize() from QWidget's show(), for instance.
+        if (m_platformWindow->window()->isVisible()) {
+            m_platformWindow->updateExposedGeometry();
+            QWindowSystemInterface::flushWindowSystemEvents();
+        }
     }
 }
 
-- 
GitLab