diff --git a/scene.cpp b/scene.cpp index 6f4aec378a..277ce31649 100644 --- a/scene.cpp +++ b/scene.cpp @@ -920,6 +920,15 @@ WindowQuadList Scene::Window::makeQuads(WindowQuadType type, const QRegion& reg, return ret; } +void Scene::Window::updateShadow(Shadow* shadow) +{ + if (m_shadow == shadow) { + return; + } + delete m_shadow; + m_shadow = shadow; +} + //**************************************** // WindowPixmap //**************************************** diff --git a/scene.h b/scene.h index 2b4896971a..d16ed95bee 100644 --- a/scene.h +++ b/scene.h @@ -541,12 +541,6 @@ void Scene::Window::updateToplevel(Toplevel* c) toplevel = c; } -inline -void Scene::Window::updateShadow(Shadow* shadow) -{ - m_shadow = shadow; -} - inline const Shadow* Scene::Window::shadow() const { diff --git a/shadow.cpp b/shadow.cpp index 405ca064e7..0f647c7744 100644 --- a/shadow.cpp +++ b/shadow.cpp @@ -337,10 +337,11 @@ bool Shadow::updateShadow() auto clear = [this]() { if (m_topLevel && m_topLevel->effectWindow() && m_topLevel->effectWindow()->sceneWindow() && m_topLevel->effectWindow()->sceneWindow()->shadow()) { - m_topLevel->effectWindow()->sceneWindow()->updateShadow(0); - m_topLevel->effectWindow()->buildQuads(true); + auto w = m_topLevel->effectWindow(); + // this also deletes the shadow + w->sceneWindow()->updateShadow(nullptr); + w->buildQuads(true); } - deleteLater(); }; if (m_decorationShadow) { if (AbstractClient *c = qobject_cast(m_topLevel)) {