Make sure to call damage on the buffer when we damage it
authorJørgen Lind <jorgen.lind@nokia.com>
Thu, 23 Jun 2011 12:30:04 +0000 (14:30 +0200)
committerJørgen Lind <jorgen.lind@nokia.com>
Thu, 23 Jun 2011 12:30:22 +0000 (14:30 +0200)
src/plugins/platforms/wayland/gl_integration/xcomposite_egl/xcomposite_egl.pri
src/plugins/platforms/wayland/qwaylandshmbackingstore.cpp
src/plugins/platforms/wayland/qwaylandwindow.cpp
src/plugins/platforms/wayland/qwaylandwindow.h

index a61391b..5f86bd9 100644 (file)
@@ -1,7 +1,4 @@
 include (../xcomposite_share/xcomposite_share.pri)
-load(qpa/egl/convenience)
-load(qpa/egl/context)
-load(qpa/egl/xlibintegration)
 
 LIBS += -lXcomposite -lEGL
 
index ccb50a7..25a1b46 100644 (file)
@@ -119,7 +119,12 @@ void QWaylandShmBackingStore::flush(QWindow *window, const QRegion &region, cons
     Q_UNUSED(offset);
     QWaylandShmWindow *waylandWindow = static_cast<QWaylandShmWindow *>(window->handle());
     Q_ASSERT(waylandWindow->windowType() == QWaylandWindow::Shm);
-    waylandWindow->damage(region);
+    QVector<QRect> rects = region.rects();
+    for (int i = 0; i < rects.size(); i++) {
+        const QRect rect = rects.at(i);
+        wl_buffer_damage(mBuffer->buffer(),rect.x(),rect.y(),rect.width(),rect.height());
+        waylandWindow->damage(rect);
+    }
 }
 
 void QWaylandShmBackingStore::resize(const QSize &size, const QRegion &)
index 8fc8700..2376df5 100644 (file)
@@ -129,22 +129,17 @@ void QWaylandWindow::attach(QWaylandBuffer *buffer)
     }
 }
 
-void QWaylandWindow::damage(const QRegion &region)
+void QWaylandWindow::damage(const QRect &rect)
 {
     //We have to do sync stuff before calling damage, or we might
     //get a frame callback before we get the timestamp
-    mDisplay->frameCallback(QWaylandWindow::frameCallback, mSurface, this);
-    mWaitingForFrameSync = true;
-
-    QVector<QRect> rects = region.rects();
-    for (int i = 0; i < rects.size(); i++) {
-        const QRect rect = rects.at(i);
-        wl_buffer_damage(mBuffer->buffer(), rect.x(), rect.y(), rect.width(), rect.height());
-        wl_surface_damage(mSurface,
-                          rect.x(), rect.y(), rect.width(), rect.height());
-        wl_buffer_damage(mBuffer->buffer(),
-                         rect.x(), rect.y(), rect.width(), rect.height());
+    if (!mWaitingForFrameSync) {
+        mDisplay->frameCallback(QWaylandWindow::frameCallback, mSurface, this);
+        mWaitingForFrameSync = true;
     }
+
+    wl_surface_damage(mSurface,
+                      rect.x(), rect.y(), rect.width(), rect.height());
 }
 
 void QWaylandWindow::newSurfaceCreated()
@@ -152,6 +147,7 @@ void QWaylandWindow::newSurfaceCreated()
     if (mBuffer) {
         wl_surface_attach(mSurface,mBuffer->buffer(),0,0);
         QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(), geometry().size()));
+        wl_surface_damage(mSurface,0,0,mBuffer->size().width(),mBuffer->size().height());
     }
 }
 
index ca9f4b1..4f1e2c8 100644 (file)
@@ -71,7 +71,7 @@ public:
                    int32_t x, int32_t y, int32_t width, int32_t height);
 
     void attach(QWaylandBuffer *buffer);
-    void damage(const QRegion &region);
+    void damage(const QRect &rect);
 
     void waitForFrameSync();