diff options
Diffstat (limited to 'src/compositor/compositor_api/qwaylandquicksurface.cpp')
-rw-r--r-- | src/compositor/compositor_api/qwaylandquicksurface.cpp | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/src/compositor/compositor_api/qwaylandquicksurface.cpp b/src/compositor/compositor_api/qwaylandquicksurface.cpp index ef78c8849..a05a5f9c2 100644 --- a/src/compositor/compositor_api/qwaylandquicksurface.cpp +++ b/src/compositor/compositor_api/qwaylandquicksurface.cpp @@ -73,19 +73,12 @@ public: void createTexture() { - if (bufferRef) - bufferRef.destroyTexture(); bufferRef = nextBuffer; + delete texture; + texture = 0; QQuickWindow *window = static_cast<QQuickWindow *>(surface->mainOutput()->window()); - - // If the next buffer is NULL do not delete the current texture. If the client called - // attach(0) the surface is going to be unmapped anyway, if instead the client attached - // a valid buffer but died before we got here we want to keep the old buffer around - // in case some destroy animation is run. - if (bufferRef) { - delete texture; - + if (nextBuffer) { if (bufferRef.isShm()) { texture = window->createTextureFromImage(bufferRef.image()); } else { @@ -101,6 +94,12 @@ public: update = false; } + void unmap() Q_DECL_OVERRIDE + { + nextBuffer = QWaylandBufferRef(); + update = true; + } + void invalidateTexture() { if (bufferRef) @@ -141,9 +140,6 @@ public: void surface_commit(Resource *resource) Q_DECL_OVERRIDE { - if (m_pending.newlyAttached) { - buffer->update = true; - } QWaylandSurfacePrivate::surface_commit(resource); Q_FOREACH (QtWayland::Output *output, outputs()) @@ -212,8 +208,6 @@ bool QWaylandQuickSurface::event(QEvent *e) this, &QWaylandQuickSurface::updateTexture); disconnect(oldWindow, &QQuickWindow::sceneGraphInvalidated, this, &QWaylandQuickSurface::invalidateTexture); - disconnect(oldWindow, &QQuickWindow::sceneGraphAboutToStop, - this, &QWaylandQuickSurface::invalidateTexture); } return true; @@ -230,9 +224,6 @@ 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; |