summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-09-06 16:44:59 +0200
committerGunnar Sletta <gunnar.sletta@nokia.com>2011-09-07 08:36:21 +0200
commit6119d12d7d7d63b00891e7fa21a5fab6751fb062 (patch)
treecde6a0b93fca880ac27f1e43a177c12ccca4734b
parent3883b4f5b1a55922bdbe4e69109ff1f6b7f8277d (diff)
Fixed tst_QGL::partialGLWidgetUpdates.
Change-Id: Ie37051e28b199b5d159f5be05be41efbd17fdf08 Reviewed-on: http://codereview.qt.nokia.com/4273 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp33
-rw-r--r--src/widgets/kernel/qwidgetbackingstore.cpp5
-rw-r--r--tests/auto/qgl/tst_qgl.cpp9
3 files changed, 34 insertions, 13 deletions
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index 41650efcdb..3d181dcf0c 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -125,15 +125,43 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const
class QEGLXcbPlatformContext : public QEGLPlatformContext
{
public:
- QEGLXcbPlatformContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share, EGLDisplay display)
+ QEGLXcbPlatformContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share,
+ EGLDisplay display, QXcbConnection *c)
: QEGLPlatformContext(glFormat, share, display)
+ , m_connection(c)
{
+ Q_XCB_NOOP(m_connection);
+ }
+
+ void swapBuffers(QPlatformSurface *surface)
+ {
+ Q_XCB_NOOP(m_connection);
+ QEGLPlatformContext::swapBuffers(surface);
+ Q_XCB_NOOP(m_connection);
+ }
+
+ bool makeCurrent(QPlatformSurface *surface)
+ {
+ Q_XCB_NOOP(m_connection);
+ bool ret = QEGLPlatformContext::makeCurrent(surface);
+ Q_XCB_NOOP(m_connection);
+ return ret;
+ }
+
+ void doneCurrent()
+ {
+ Q_XCB_NOOP(m_connection);
+ QEGLPlatformContext::doneCurrent();
+ Q_XCB_NOOP(m_connection);
}
EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface)
{
return static_cast<QXcbWindow *>(surface)->eglSurface()->surface();
}
+
+private:
+ QXcbConnection *m_connection;
};
#endif
@@ -143,7 +171,8 @@ QPlatformOpenGLContext *QXcbIntegration::createPlatformOpenGLContext(QOpenGLCont
#if defined(XCB_USE_GLX)
return new QGLXContext(screen, context->format(), context->shareHandle());
#elif defined(XCB_USE_EGL)
- return new QEGLXcbPlatformContext(context->format(), context->shareHandle(), screen->connection()->egl_display());
+ return new QEGLXcbPlatformContext(context->format(), context->shareHandle(),
+ screen->connection()->egl_display(), screen->connection());
#elif defined(XCB_USE_DRI2)
return new QDri2Context(context->format(), context->shareHandle());
#endif
diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp
index 1cb6f51619..d151d5e9e1 100644
--- a/src/widgets/kernel/qwidgetbackingstore.cpp
+++ b/src/widgets/kernel/qwidgetbackingstore.cpp
@@ -1353,11 +1353,8 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn)
extra->staticContentsSize = data.crect.size();
}
-#ifdef Q_WS_QPA //Dont even call q->p
- QPaintEngine *engine = 0;
-#else
QPaintEngine *engine = q->paintEngine();
-#endif
+
// QGLWidget does not support partial updates if:
// 1) The context is double buffered
// 2) The context is single buffered and auto-fill background is enabled.
diff --git a/tests/auto/qgl/tst_qgl.cpp b/tests/auto/qgl/tst_qgl.cpp
index e3a8500bda..e1c3462560 100644
--- a/tests/auto/qgl/tst_qgl.cpp
+++ b/tests/auto/qgl/tst_qgl.cpp
@@ -919,9 +919,7 @@ void tst_QGL::partialGLWidgetUpdates()
widget.setFixedSize(150, 150);
widget.setAutoFillBackground(autoFillBackground);
widget.show();
-#ifdef Q_WS_X11
- qt_x11_wait_for_window_manager(&widget);
-#endif
+
QTest::qWait(200);
if (widget.format().doubleBuffer() != doubleBufferedContext)
@@ -929,10 +927,7 @@ void tst_QGL::partialGLWidgetUpdates()
widget.paintEventRegion = QRegion();
widget.repaint(50, 50, 50, 50);
-#ifdef Q_WS_MAC
- // repaint() is not immediate on the Mac; it has to go through the event loop.
- QTest::qWait(200);
-#endif
+
if (supportsPartialUpdates)
QCOMPARE(widget.paintEventRegion, QRegion(50, 50, 50, 50));
else