summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@digia.com>2013-12-04 12:03:33 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-05 09:16:47 +0100
commitec03058fa5b84b4570a2158bf2179f7ba4d83b99 (patch)
treee1783e517c4dfad05620394d7780121df40785be /src
parent5726999a8cb509ce86db10fe5555703c58678e41 (diff)
Clear QCocoaGLContext's m_currentWindow when window is hidden.
Task-number: QTBUG-35363 Change-Id: I1b3d883ed10200af8a2d4188fb1725b36eb78022 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.mm10
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm2
3 files changed, 14 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.h b/src/plugins/platforms/cocoa/qcocoaglcontext.h
index e1d4b602c9..30f1cdc278 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.h
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.h
@@ -75,6 +75,8 @@ public:
bool isSharing() const;
bool isValid() const;
+ void windowWasHidden();
+
private:
void setActiveWindow(QWindow *window);
void updateSurfaceFormat();
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
index 144144338f..777d4a871b 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
@@ -165,6 +165,16 @@ QSurfaceFormat QCocoaGLContext::format() const
return m_format;
}
+void QCocoaGLContext::windowWasHidden()
+{
+ // If the window is hidden, we need to unset the m_currentWindow
+ // variable so that succeeding makeCurrent's will not abort prematurely
+ // because of the optimization in setActiveWindow.
+ // Doing a full doneCurrent here is not preferable, because the GL context
+ // might be rendering in a different thread at this time.
+ m_currentWindow.clear();
+}
+
void QCocoaGLContext::swapBuffers(QPlatformSurface *surface)
{
QWindow *window = static_cast<QCocoaWindow *>(surface)->window();
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index b5b9cec2be..1aace958ed 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -388,6 +388,8 @@ void QCocoaWindow::setVisible(bool visible)
[m_contentView setHidden:NO];
} else {
// qDebug() << "close" << this;
+ if (m_glContext)
+ m_glContext->windowWasHidden();
if (m_nsWindow) {
if (m_hasModalSession) {
QCocoaEventDispatcher *cocoaEventDispatcher = qobject_cast<QCocoaEventDispatcher *>(QGuiApplication::instance()->eventDispatcher());