diff options
-rw-r--r-- | src/compositor/compositor_api/qwaylandview.cpp | 11 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandview.h | 1 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandview_p.h | 2 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/compositor/compositor_api/qwaylandview.cpp b/src/compositor/compositor_api/qwaylandview.cpp index 90f182c5d..fa1371925 100644 --- a/src/compositor/compositor_api/qwaylandview.cpp +++ b/src/compositor/compositor_api/qwaylandview.cpp @@ -200,18 +200,27 @@ void QWaylandView::attach(const QWaylandBufferRef &ref, const QRegion &damage) bool QWaylandView::advance() { Q_D(QWaylandView); - if (d->currentBuffer == d->nextBuffer) + if (d->currentBuffer == d->nextBuffer && !d->forceAdvanceSucceed) return false; if (d->bufferLock) return false; QMutexLocker locker(&d->bufferMutex); + d->forceAdvanceSucceed = false; d->currentBuffer = d->nextBuffer; d->currentDamage = d->nextDamage; return true; } +void QWaylandView::discardCurrentBuffer() +{ + Q_D(QWaylandView); + QMutexLocker locker(&d->bufferMutex); + d->currentBuffer = QWaylandBufferRef(); + d->forceAdvanceSucceed = true; +} + QWaylandBufferRef QWaylandView::currentBuffer() { Q_D(QWaylandView); diff --git a/src/compositor/compositor_api/qwaylandview.h b/src/compositor/compositor_api/qwaylandview.h index eddcdea49..bc7eea764 100644 --- a/src/compositor/compositor_api/qwaylandview.h +++ b/src/compositor/compositor_api/qwaylandview.h @@ -81,6 +81,7 @@ public: virtual void attach(const QWaylandBufferRef &ref, const QRegion &damage); virtual bool advance(); + virtual void discardCurrentBuffer(); virtual QWaylandBufferRef currentBuffer(); virtual QRegion currentDamage(); diff --git a/src/compositor/compositor_api/qwaylandview_p.h b/src/compositor/compositor_api/qwaylandview_p.h index c37cd6b71..b31c37112 100644 --- a/src/compositor/compositor_api/qwaylandview_p.h +++ b/src/compositor/compositor_api/qwaylandview_p.h @@ -60,6 +60,7 @@ public: , output(Q_NULLPTR) , bufferLock(false) , broadcastRequestedPositionChanged(false) + , forceAdvanceSucceed(false) { } void markSurfaceAsDestroyed(QWaylandSurface *surface); @@ -75,6 +76,7 @@ public: QRegion nextDamage; bool bufferLock; bool broadcastRequestedPositionChanged; + bool forceAdvanceSucceed; }; QT_END_NAMESPACE |