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)
WaylandCompositor(QWidget *topLevelWidget = 0);
virtual ~WaylandCompositor();
- void frameFinished();
+ void frameFinished(WaylandSurface *surface = 0);
void setInputFocus(WaylandSurface *surface);
void destroyClientForSurface(WaylandSurface *surface);
d->surface->sendKeyReleaseEvent(code);
}
+void WaylandSurface::frameFinished()
+{
+ Q_D(WaylandSurface);
+ d->surface->frameFinished();
+}
+
void WaylandSurface::setInputFocus()
{
Q_D(WaylandSurface);
void sendKeyPressEvent(uint code);
void sendKeyReleaseEvent(uint code);
+ void frameFinished();
void setInputFocus();
Wayland::Surface *handle() const;
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)
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());
}
}
+void Surface::frameFinished()
+{
+ Q_D(Surface);
+ d->compositor->frameFinished(this);
+}
+
void Surface::setInputFocus()
{
Q_D(Surface);
void sendKeyPressEvent(uint code);
void sendKeyReleaseEvent(uint code);
+ void frameFinished();
void setInputFocus();
WaylandSurface *handle() const;