qt-compositor: frameFinished() is a per-surface thing
authorCorentin Chary <corentin.chary@gmail.com>
Fri, 20 May 2011 07:46:04 +0000 (09:46 +0200)
committerSamuel Rødal <samuel.rodal@nokia.com>
Fri, 20 May 2011 07:46:04 +0000 (09:46 +0200)
Signed-off-by: Corentin Chary <corentin.chary@gmail.com>
Merge-request: 3
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/qt-compositor/compositor_api/waylandcompositor.cpp
src/qt-compositor/compositor_api/waylandcompositor.h
src/qt-compositor/compositor_api/waylandsurface.cpp
src/qt-compositor/compositor_api/waylandsurface.h
src/qt-compositor/wayland_wrapper/wlcompositor.cpp
src/qt-compositor/wayland_wrapper/wlcompositor.h
src/qt-compositor/wayland_wrapper/wlsurface.cpp
src/qt-compositor/wayland_wrapper/wlsurface.h

index 01ad70d..b3a0431 100644 (file)
@@ -66,9 +66,10 @@ WaylandCompositor::~WaylandCompositor()
     delete m_compositor;
 }
 
-void WaylandCompositor::frameFinished()
+void WaylandCompositor::frameFinished(WaylandSurface *surface)
 {
-    m_compositor->frameFinished();
+    Wayland::Surface *surfaceImpl = surface? surface->handle():0;
+    m_compositor->frameFinished(surfaceImpl);
 }
 
 void WaylandCompositor::setInputFocus(WaylandSurface *surface)
index 058f1fe..94a6139 100644 (file)
@@ -64,7 +64,7 @@ public:
     WaylandCompositor(QWidget *topLevelWidget = 0);
     virtual ~WaylandCompositor();
 
-    void frameFinished();
+    void frameFinished(WaylandSurface *surface = 0);
 
     void setInputFocus(WaylandSurface *surface);
     void destroyClientForSurface(WaylandSurface *surface);
index a8c54eb..6793152 100644 (file)
@@ -105,6 +105,12 @@ void WaylandSurface::sendKeyReleaseEvent(uint code)
     d->surface->sendKeyReleaseEvent(code);
 }
 
+void WaylandSurface::frameFinished()
+{
+    Q_D(WaylandSurface);
+    d->surface->frameFinished();
+}
+
 void WaylandSurface::setInputFocus()
 {
     Q_D(WaylandSurface);
index 93fbfb2..899bcae 100644 (file)
@@ -88,6 +88,7 @@ public:
     void sendKeyPressEvent(uint code);
     void sendKeyReleaseEvent(uint code);
 
+    void frameFinished();
     void setInputFocus();
 
     Wayland::Surface *handle() const;
index 0767784..e46f749 100644 (file)
@@ -219,13 +219,16 @@ Compositor::~Compositor()
     delete m_display;
 }
 
-void Compositor::frameFinished()
+void Compositor::frameFinished(Surface *surface)
 {
-    QSet<Surface *>::iterator i;
-    for (i = m_dirty_surfaces.begin(); i != m_dirty_surfaces.end(); i++) {
-        wl_display_post_frame(m_display->handle(), (*i)->base(), currentTimeMsecs());
+    if (surface && m_dirty_surfaces.contains(surface)) {
+       wl_display_post_frame(m_display->handle(), surface->base(), currentTimeMsecs());
+       m_dirty_surfaces.remove(surface);
+    } else if (!surface) {
+       foreach (Surface *surface, m_dirty_surfaces)
+           wl_display_post_frame(m_display->handle(), surface->base(), currentTimeMsecs());
+       m_dirty_surfaces.clear();
     }
-    m_dirty_surfaces.clear();
 }
 
 void Compositor::createSurface(struct wl_client *client, int id)
index 719d2c7..2481401 100644 (file)
@@ -66,7 +66,7 @@ public:
     Compositor(WaylandCompositor *qt_compositor);
     ~Compositor();
 
-    void frameFinished();
+    void frameFinished(Surface *surface = 0);
     void setInputFocus(Surface *surface);
     void setKeyFocus(Surface *surface);
     void setPointerFocus(Surface *surface, const QPoint &point = QPoint());
index 45b430a..92e464d 100644 (file)
@@ -375,6 +375,12 @@ void Surface::sendKeyReleaseEvent(uint code)
     }
 }
 
+void Surface::frameFinished()
+{
+    Q_D(Surface);
+    d->compositor->frameFinished(this);
+}
+
 void Surface::setInputFocus()
 {
     Q_D(Surface);
index 725acd9..ff345d1 100644 (file)
@@ -93,6 +93,7 @@ public:
     void sendKeyPressEvent(uint code);
     void sendKeyReleaseEvent(uint code);
 
+    void frameFinished();
     void setInputFocus();
 
     WaylandSurface *handle() const;