Schedule workspace repaint for destroyed clients

We need to schedule a workspace repaint in case no effect is going to
animate the window.

The workspace repaint is issued before creating a Deleted because the
latter takes the owner of the effect window, which means that after an
instance of Deleted has been created, visibleRect() returns the frame
geometry.

CCBUG: 425294
master
Vlad Zahorodnii 2020-09-24 17:12:02 +03:00
parent 6d433bdfc9
commit 12e59f9af8
2 changed files with 2 additions and 1 deletions

View File

@ -236,6 +236,7 @@ void AbstractClient::markAsZombie()
{ {
Q_ASSERT(!m_zombie); Q_ASSERT(!m_zombie);
m_zombie = true; m_zombie = true;
addWorkspaceRepaint(visibleRect());
} }
Layer AbstractClient::layer() const Layer AbstractClient::layer() const

View File

@ -87,6 +87,7 @@ bool Unmanaged::track(xcb_window_t w)
void Unmanaged::release(ReleaseReason releaseReason) void Unmanaged::release(ReleaseReason releaseReason)
{ {
addWorkspaceRepaint(visibleRect());
Deleted* del = nullptr; Deleted* del = nullptr;
if (releaseReason != ReleaseReason::KWinShutsDown) { if (releaseReason != ReleaseReason::KWinShutsDown) {
del = Deleted::create(this); del = Deleted::create(this);
@ -99,7 +100,6 @@ void Unmanaged::release(ReleaseReason releaseReason)
Xcb::selectInput(window(), XCB_EVENT_MASK_NO_EVENT); Xcb::selectInput(window(), XCB_EVENT_MASK_NO_EVENT);
} }
workspace()->removeUnmanaged(this); workspace()->removeUnmanaged(this);
addWorkspaceRepaint(visibleRect());
if (releaseReason != ReleaseReason::KWinShutsDown) { if (releaseReason != ReleaseReason::KWinShutsDown) {
disownDataPassedToDeleted(); disownDataPassedToDeleted();
del->unrefWindow(); del->unrefWindow();