diff --git a/effects/fallapart/fallapart.h b/effects/fallapart/fallapart.h --- a/effects/fallapart/fallapart.h +++ b/effects/fallapart/fallapart.h @@ -55,6 +55,7 @@ void slotWindowClosed(KWin::EffectWindow *c); void slotWindowDeleted(KWin::EffectWindow *w); void slotWindowDataChanged(KWin::EffectWindow *w, int role); + void slotDesktopChanged(int oldDesktop, int newDesktop, KWin::EffectWindow *with); private: QHash< EffectWindow*, double > windows; diff --git a/effects/fallapart/fallapart.cpp b/effects/fallapart/fallapart.cpp --- a/effects/fallapart/fallapart.cpp +++ b/effects/fallapart/fallapart.cpp @@ -39,6 +39,7 @@ connect(effects, &EffectsHandler::windowClosed, this, &FallApartEffect::slotWindowClosed); connect(effects, &EffectsHandler::windowDeleted, this, &FallApartEffect::slotWindowDeleted); connect(effects, &EffectsHandler::windowDataChanged, this, &FallApartEffect::slotWindowDataChanged); + connect(effects, QOverload::of(&EffectsHandler::desktopChanged), this, &FallApartEffect::slotDesktopChanged); } void FallApartEffect::reconfigure(ReconfigureFlags) @@ -189,6 +190,14 @@ windows.erase(it); } +void FallApartEffect::slotDesktopChanged(int, int, KWin::EffectWindow *win) +{ + foreach(auto win, windows.keys()) { + win->unrefWindow(); + } + windows.clear(); +} + bool FallApartEffect::isActive() const { return !windows.isEmpty();