diff options
author | David Boddie <dboddie@trolltech.com> | 2009-12-18 13:52:46 (GMT) |
---|---|---|
committer | David Boddie <dboddie@trolltech.com> | 2009-12-18 13:52:46 (GMT) |
commit | 79a7b643231ac690ffeaaa53cc1ff7e8538a3056 (patch) | |
tree | 87f4988bcfe1d59234882293214829a6fbee0cf5 /src/opengl/qgl_egl.cpp | |
parent | ba7927c84e0e1ed4df197e60b1c9eeec8ce1475c (diff) | |
parent | e581386148a9615ef6c11eb3ae6735d0fa9668f6 (diff) | |
download | Qt-79a7b643231ac690ffeaaa53cc1ff7e8538a3056.zip Qt-79a7b643231ac690ffeaaa53cc1ff7e8538a3056.tar.gz Qt-79a7b643231ac690ffeaaa53cc1ff7e8538a3056.tar.bz2 |
Merge branch '4.6' of git@scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.6
Diffstat (limited to 'src/opengl/qgl_egl.cpp')
-rw-r--r-- | src/opengl/qgl_egl.cpp | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp index fbf0349..839e8eb 100644 --- a/src/opengl/qgl_egl.cpp +++ b/src/opengl/qgl_egl.cpp @@ -142,19 +142,7 @@ void QGLContext::reset() d->cleanup(); doneCurrent(); if (d->eglContext) { - if (d->eglSurface != EGL_NO_SURFACE) { -#ifdef Q_WS_X11 - // Make sure we don't call eglDestroySurface on a surface which - // was created for a different winId: - if (d->paintDevice->devType() == QInternal::Widget) { - QGLWidget* w = static_cast<QGLWidget*>(d->paintDevice); - - if (w->d_func()->eglSurfaceWindowId == w->winId()) - eglDestroySurface(d->eglContext->display(), d->eglSurface); - } else -#endif - eglDestroySurface(d->eglContext->display(), d->eglSurface); - } + d->destroyEglSurfaceForDevice(); delete d->eglContext; } d->eglContext = 0; @@ -198,6 +186,26 @@ void QGLContext::swapBuffers() const d->eglContext->swapBuffers(d->eglSurface); } +void QGLContextPrivate::destroyEglSurfaceForDevice() +{ + if (eglSurface != EGL_NO_SURFACE) { +#ifdef Q_WS_X11 + // Make sure we don't call eglDestroySurface on a surface which + // was created for a different winId: + if (paintDevice->devType() == QInternal::Widget) { + QGLWidget* w = static_cast<QGLWidget*>(paintDevice); + + if (w->d_func()->eglSurfaceWindowId == w->winId()) + eglDestroySurface(eglContext->display(), eglSurface); + else + qWarning("WARNING: Potential EGL surface leak!"); + } else +#endif + eglDestroySurface(eglContext->display(), eglSurface); + eglSurface = EGL_NO_SURFACE; + } +} + void QGLWidget::setMouseTracking(bool enable) { QWidget::setMouseTracking(enable); |