diff --git a/src/abstract_client.cpp b/src/abstract_client.cpp index 564bde09bc..aed7e17e15 100644 --- a/src/abstract_client.cpp +++ b/src/abstract_client.cpp @@ -240,6 +240,7 @@ void AbstractClient::markAsZombie() Q_ASSERT(!m_zombie); m_zombie = true; addWorkspaceRepaint(visibleGeometry()); + emit markedAsZombie(); } Layer AbstractClient::layer() const diff --git a/src/surfaceitem_x11.cpp b/src/surfaceitem_x11.cpp index 99c1c9395e..04f6f07cb1 100644 --- a/src/surfaceitem_x11.cpp +++ b/src/surfaceitem_x11.cpp @@ -16,6 +16,8 @@ SurfaceItemX11::SurfaceItemX11(Scene::Window *window, Item *parent) connect(toplevel, &Toplevel::bufferGeometryChanged, this, &SurfaceItemX11::handleBufferGeometryChanged); + connect(toplevel, &Toplevel::markedAsZombie, + this, &SurfaceItemX11::destroyDamage); connect(toplevel, &Toplevel::geometryShapeChanged, this, &SurfaceItemX11::discardQuads); diff --git a/src/toplevel.h b/src/toplevel.h index 2c15150fe4..d8d815942e 100644 --- a/src/toplevel.h +++ b/src/toplevel.h @@ -575,6 +575,7 @@ public: } Q_SIGNALS: + void markedAsZombie(); void opacityChanged(KWin::Toplevel* toplevel, qreal oldOpacity); void damaged(KWin::Toplevel* toplevel, const QRegion& damage); void inputTransformationChanged(); diff --git a/src/unmanaged.cpp b/src/unmanaged.cpp index aecddd2fb8..e767980356 100644 --- a/src/unmanaged.cpp +++ b/src/unmanaged.cpp @@ -128,6 +128,7 @@ bool Unmanaged::track(xcb_window_t w) void Unmanaged::release(ReleaseReason releaseReason) { addWorkspaceRepaint(visibleGeometry()); + emit markedAsZombie(); Deleted* del = nullptr; if (releaseReason != ReleaseReason::KWinShutsDown) { del = Deleted::create(this); @@ -214,15 +215,6 @@ QWindow *Unmanaged::findInternalWindow() const return nullptr; } -void Unmanaged::finishCompositing(ReleaseReason releaseReason) -{ - SurfaceItemX11 *item = qobject_cast(surfaceItem()); - if (item) { - item->destroyDamage(); - } - Toplevel::finishCompositing(releaseReason); -} - void Unmanaged::damageNotifyEvent() { Q_ASSERT(kwinApp()->operationMode() == Application::OperationModeX11); diff --git a/src/unmanaged.h b/src/unmanaged.h index 7861408a2c..8ad4a99834 100644 --- a/src/unmanaged.h +++ b/src/unmanaged.h @@ -38,8 +38,6 @@ public: NET::WindowType windowType(bool direct = false, int supported_types = 0) const override; bool isOutline() const override; - void finishCompositing(ReleaseReason releaseReason = ReleaseReason::Release) override; - public Q_SLOTS: void release(ReleaseReason releaseReason = ReleaseReason::Release); diff --git a/src/x11client.cpp b/src/x11client.cpp index 22aa9858cc..da6f34441e 100644 --- a/src/x11client.cpp +++ b/src/x11client.cpp @@ -1367,11 +1367,6 @@ bool X11Client::setupCompositing() void X11Client::finishCompositing(ReleaseReason releaseReason) { - SurfaceItemX11 *item = qobject_cast(surfaceItem()); - if (item) { - item->destroyDamage(); - } - Toplevel::finishCompositing(releaseReason); updateVisibility(); // for safety in case KWin is just resizing the window