summaryrefslogtreecommitdiffstats
path: root/src/compositor/compositor_api/qwaylandquicksurface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor/compositor_api/qwaylandquicksurface.cpp')
-rw-r--r--src/compositor/compositor_api/qwaylandquicksurface.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/compositor/compositor_api/qwaylandquicksurface.cpp b/src/compositor/compositor_api/qwaylandquicksurface.cpp
index 44e0edf5d..ef78c8849 100644
--- a/src/compositor/compositor_api/qwaylandquicksurface.cpp
+++ b/src/compositor/compositor_api/qwaylandquicksurface.cpp
@@ -103,9 +103,12 @@ public:
void invalidateTexture()
{
+ if (bufferRef)
+ bufferRef.destroyTexture();
delete texture;
texture = 0;
update = true;
+ bufferRef = QWaylandBufferRef();
}
QWaylandQuickSurface *surface;
@@ -209,6 +212,8 @@ bool QWaylandQuickSurface::event(QEvent *e)
this, &QWaylandQuickSurface::updateTexture);
disconnect(oldWindow, &QQuickWindow::sceneGraphInvalidated,
this, &QWaylandQuickSurface::invalidateTexture);
+ disconnect(oldWindow, &QQuickWindow::sceneGraphAboutToStop,
+ this, &QWaylandQuickSurface::invalidateTexture);
}
return true;
@@ -225,6 +230,9 @@ bool QWaylandQuickSurface::event(QEvent *e)
connect(window, &QQuickWindow::sceneGraphInvalidated,
this, &QWaylandQuickSurface::invalidateTexture,
Qt::DirectConnection);
+ connect(window, &QQuickWindow::sceneGraphAboutToStop,
+ this, &QWaylandQuickSurface::invalidateTexture,
+ Qt::DirectConnection);
}
return true;
@@ -236,10 +244,11 @@ bool QWaylandQuickSurface::event(QEvent *e)
void QWaylandQuickSurface::updateTexture()
{
Q_D(QWaylandQuickSurface);
+ const bool update = d->buffer->update;
if (d->buffer->update)
d->buffer->createTexture();
foreach (QWaylandSurfaceView *view, views())
- static_cast<QWaylandSurfaceItem *>(view)->updateTexture();
+ static_cast<QWaylandSurfaceItem *>(view)->updateTexture(update);
}
void QWaylandQuickSurface::invalidateTexture()
@@ -247,7 +256,8 @@ void QWaylandQuickSurface::invalidateTexture()
Q_D(QWaylandQuickSurface);
d->buffer->invalidateTexture();
foreach (QWaylandSurfaceView *view, views())
- static_cast<QWaylandSurfaceItem *>(view)->updateTexture();
+ static_cast<QWaylandSurfaceItem *>(view)->updateTexture(true);
+ emit redraw();
}
bool QWaylandQuickSurface::clientRenderingEnabled() const