summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylandwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/qwaylandwindow.cpp')
-rw-r--r--src/client/qwaylandwindow.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 52bee6ae3..1801c2a4b 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -248,6 +248,7 @@ void QWaylandWindow::reset(bool sendDestroyEvent)
}
mMask = QRegion();
+ mQueuedBuffer = nullptr;
}
QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface)
@@ -566,8 +567,29 @@ void QWaylandWindow::damage(const QRect &rect)
damage(rect.x(), rect.y(), rect.width(), rect.height());
}
+void QWaylandWindow::safeCommit(QWaylandBuffer *buffer, const QRegion &damage)
+{
+ if (isExposed()) {
+ commit(buffer, damage);
+ } else {
+ mQueuedBuffer = buffer;
+ mQueuedBufferDamage = damage;
+ }
+}
+
+void QWaylandWindow::handleExpose(const QRegion &region)
+{
+ QWindowSystemInterface::handleExposeEvent(window(), region);
+ if (mQueuedBuffer) {
+ commit(mQueuedBuffer, mQueuedBufferDamage);
+ mQueuedBuffer = nullptr;
+ mQueuedBufferDamage = QRegion();
+ }
+}
+
void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
{
+ Q_ASSERT(isExposed());
if (buffer->committed()) {
qCDebug(lcWaylandBackingstore) << "Buffer already committed, ignoring.";
return;