--- a/kwin-4.7.3/kwin/effects/boxswitch/boxswitch.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/boxswitch/boxswitch.cpp 2011-11-03 23:29:58.226553852 -0400 @@ -950,6 +950,11 @@ } } +bool BoxSwitchEffect::isActive() const +{ + return mActivated; +} + BoxSwitchEffect::ItemInfo::ItemInfo() : iconFrame(NULL) { --- a/kwin-4.7.3/kwin/effects/boxswitch/boxswitch.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/boxswitch/boxswitch.h 2011-11-03 23:29:58.227553851 -0400 @@ -55,6 +55,7 @@ virtual void windowInputMouseEvent(Window w, QEvent* e); virtual void* proxy(); + virtual bool isActive() const; void activateFromProxy(int mode, bool animate, bool showText, float positioningFactor); void paintWindowsBox(const QRegion& region); --- a/kwin-4.7.3/kwin/effects/coverswitch/coverswitch.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/coverswitch/coverswitch.cpp 2011-11-03 23:29:58.229553850 -0400 @@ -1000,4 +1000,9 @@ } } +bool CoverSwitchEffect::isActive() const +{ + return mActivated || stop || stopRequested; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/coverswitch/coverswitch.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/coverswitch/coverswitch.h 2011-11-03 23:29:58.229553850 -0400 @@ -48,6 +48,7 @@ virtual void postPaintScreen(); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void windowInputMouseEvent(Window w, QEvent* e); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/cube/cube.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/cube/cube.cpp 2011-11-03 23:29:58.230553850 -0400 @@ -2064,4 +2064,9 @@ m_cubeInsideEffects.removeAll(effect); } +bool CubeEffect::isActive() const +{ + return activated; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/cube/cube.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/cube/cube.h 2011-11-03 23:29:58.230553850 -0400 @@ -50,6 +50,7 @@ virtual bool borderActivated(ElectricBorder border); virtual void grabbedKeyboardEvent(QKeyEvent* e); virtual void windowInputMouseEvent(Window w, QEvent* e); + virtual bool isActive() const; // proxy functions virtual void* proxy(); --- a/kwin-4.7.3/kwin/effects/cube/cubeslide.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/cube/cubeslide.cpp 2011-11-03 23:29:58.230553850 -0400 @@ -617,4 +617,9 @@ effects->addRepaintFull(); } +bool CubeSlideEffect::isActive() const +{ + return !slideRotations.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/cube/cubeslide.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/cube/cubeslide.h 2011-11-03 23:29:58.231553850 -0400 @@ -42,6 +42,7 @@ virtual void postPaintScreen(); virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/dashboard/dashboard.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/dashboard/dashboard.cpp 2011-11-03 23:29:58.231553850 -0400 @@ -199,4 +199,9 @@ } } +bool DashboardEffect::isActive() const +{ + return transformWindow; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/dashboard/dashboard.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/dashboard/dashboard.h 2011-11-03 23:29:58.231553850 -0400 @@ -43,6 +43,7 @@ virtual void propagate(); virtual void reconfigure(ReconfigureFlags); virtual void unpropagate(); + virtual bool isActive() const; public Q_SLOTS: void slotWindowAdded(EffectWindow* c); --- a/kwin-4.7.3/kwin/effects/desktopgrid/desktopgrid.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/desktopgrid/desktopgrid.cpp 2011-11-03 23:29:58.232553850 -0400 @@ -1223,10 +1223,10 @@ shortcut = KShortcut(seq); } -bool DesktopGridEffect::isMotionManagerMovingWindows() +bool DesktopGridEffect::isMotionManagerMovingWindows() const { if (isUsingPresentWindows()) { - QList::iterator it; + QList::const_iterator it; for (it = m_managers.begin(); it != m_managers.end(); ++it) { if ((*it).areWindowsMoving()) return true; @@ -1374,6 +1374,11 @@ effects->addRepaintFull(); } +bool DesktopGridEffect::isActive() const +{ + return timeline.currentValue() != 0 || (isUsingPresentWindows() && isMotionManagerMovingWindows()); +} + /************************************************ * DesktopButtonView ************************************************/ --- a/kwin-4.7.3/kwin/effects/desktopgrid/desktopgrid.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/desktopgrid/desktopgrid.h 2011-11-03 23:29:58.232553850 -0400 @@ -75,6 +75,7 @@ virtual void windowInputMouseEvent(Window w, QEvent* e); virtual void grabbedKeyboardEvent(QKeyEvent* e); virtual bool borderActivated(ElectricBorder border); + virtual bool isActive() const; enum { LayoutPager, LayoutAutomatic, LayoutCustom }; // Layout modes @@ -106,7 +107,7 @@ void setup(); void setupGrid(); void finish(); - bool isMotionManagerMovingWindows(); + bool isMotionManagerMovingWindows() const; bool isUsingPresentWindows() const; QRectF moveGeometryToDesktop(int desktop) const; void desktopsAdded(int old); --- a/kwin-4.7.3/kwin/effects/dialogparent/dialogparent.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/dialogparent/dialogparent.cpp 2011-11-03 23:29:58.232553850 -0400 @@ -95,4 +95,9 @@ effectStrength.remove(w); } +bool DialogParentEffect::isActive() const +{ + return !effectStrength.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/dialogparent/dialogparent.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/dialogparent/dialogparent.h 2011-11-03 23:29:58.232553850 -0400 @@ -46,6 +46,8 @@ virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintWindow(EffectWindow* w); + virtual bool isActive() const; + public Q_SLOTS: void slotWindowClosed(EffectWindow *c); void slotWindowActivated(EffectWindow *c); --- a/kwin-4.7.3/kwin/effects/dimscreen/dimscreen.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/dimscreen/dimscreen.cpp 2011-11-03 23:29:58.233553851 -0400 @@ -108,4 +108,10 @@ } } } + +bool DimScreenEffect::isActive() const +{ + return mActivated; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/dimscreen/dimscreen.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/dimscreen/dimscreen.h 2011-11-03 23:29:58.233553851 -0400 @@ -39,6 +39,7 @@ virtual void prePaintScreen(ScreenPrePaintData& data, int time); virtual void postPaintScreen(); virtual void paintWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data); + virtual bool isActive() const; public Q_SLOTS: void slotWindowActivated(EffectWindow *w); --- a/kwin-4.7.3/kwin/effects/explosion/explosion.cpp 2011-11-03 23:29:48.318553299 -0400 +++ a/kwin-4.7.3/kwin/effects/explosion/explosion.cpp 2011-11-03 23:29:58.233553851 -0400 @@ -202,5 +202,10 @@ mWindows.remove(c); } +bool ExplosionEffect::isActive() const +{ + return mActiveAnimations > 0; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/explosion/explosion.h 2011-11-03 23:29:48.318553299 -0400 +++ a/kwin-4.7.3/kwin/effects/explosion/explosion.h 2011-11-03 23:29:58.233553851 -0400 @@ -47,6 +47,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/fade/fade.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/fade/fade.cpp 2011-11-03 23:29:58.233553851 -0400 @@ -199,4 +199,9 @@ return (!w->isDesktop() && !w->isUtility()); } +bool FadeEffect::isActive() const +{ + return !windows.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/fade/fade.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/fade/fade.h 2011-11-03 23:29:58.234553852 -0400 @@ -36,6 +36,7 @@ virtual void prePaintScreen(ScreenPrePaintData& data, int time); virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); + virtual bool isActive() const; // TODO react also on virtual desktop changes --- a/kwin-4.7.3/kwin/effects/fadedesktop/fadedesktop.cpp 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/fadedesktop/fadedesktop.cpp 2011-11-03 23:29:58.234553852 -0400 @@ -107,6 +107,11 @@ effects->addRepaintFull(); } +bool FadeDesktopEffect::isActive() const +{ + return m_fading; +} + } // namespace #include "fadedesktop.moc" --- a/kwin-4.7.3/kwin/effects/fadedesktop/fadedesktop.h 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/fadedesktop/fadedesktop.h 2011-11-03 23:29:58.234553852 -0400 @@ -39,6 +39,7 @@ virtual void postPaintScreen(); virtual void prePaintWindow(EffectWindow *w, WindowPrePaintData &data, int time); virtual void paintWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data); + virtual bool isActive() const; private Q_SLOTS: void slotDesktopChanged(int old); --- a/kwin-4.7.3/kwin/effects/fallapart/fallapart.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/fallapart/fallapart.cpp 2011-11-03 23:29:58.234553852 -0400 @@ -160,4 +160,9 @@ windows.remove(c); } +bool FallApartEffect::isActive() const +{ + return !windows.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/fallapart/fallapart.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/fallapart/fallapart.h 2011-11-03 23:29:58.234553852 -0400 @@ -37,6 +37,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; public Q_SLOTS: void slotWindowClosed(EffectWindow *c); --- a/kwin-4.7.3/kwin/effects/flipswitch/flipswitch.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/flipswitch/flipswitch.cpp 2011-11-03 23:29:58.235553852 -0400 @@ -934,6 +934,11 @@ } } +bool FlipSwitchEffect::isActive() const +{ + return m_active; +} + //************************************************************* // Item Info //************************************************************* --- a/kwin-4.7.3/kwin/effects/flipswitch/flipswitch.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/flipswitch/flipswitch.h 2011-11-03 23:29:58.235553852 -0400 @@ -47,6 +47,7 @@ virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual bool borderActivated(ElectricBorder border); virtual void grabbedKeyboardEvent(QKeyEvent* e); + virtual bool isActive() const; static bool supported(); private Q_SLOTS: --- a/kwin-4.7.3/kwin/effects/glide/glide.cpp 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/glide/glide.cpp 2011-11-03 23:29:58.235553852 -0400 @@ -226,6 +226,11 @@ return true; } +bool GlideEffect::isActive() const +{ + return !windows.isEmpty(); +} + GlideEffect::WindowInfo::WindowInfo() : deleted(false) , added(false) --- a/kwin-4.7.3/kwin/effects/glide/glide.h 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/glide/glide.h 2011-11-03 23:29:58.235553852 -0400 @@ -41,6 +41,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintWindow(EffectWindow* w); + virtual bool isActive() const; static bool supported(); public Q_SLOTS: --- a/kwin-4.7.3/kwin/effects/highlightwindow/highlightwindow.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/highlightwindow/highlightwindow.cpp 2011-11-03 23:29:58.236553852 -0400 @@ -257,4 +257,9 @@ m_windowOpacity.constBegin().key()->addRepaintFull(); } +bool HighlightWindowEffect::isActive() const +{ + return !m_windowOpacity.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/highlightwindow/highlightwindow.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/highlightwindow/highlightwindow.h 2011-11-03 23:29:58.236553852 -0400 @@ -36,6 +36,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); + virtual bool isActive() const; public Q_SLOTS: void slotWindowAdded(EffectWindow* w); --- a/kwin-4.7.3/kwin/effects/invert/invert.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/invert/invert.cpp 2011-11-03 23:29:58.236553852 -0400 @@ -161,6 +161,11 @@ effects->activeWindow()->addRepaintFull(); } +bool InvertEffect::isActive() const +{ + return m_valid && (m_allWindows || !m_windows.isEmpty()); +} + } // namespace #include "invert.moc" --- a/kwin-4.7.3/kwin/effects/invert/invert.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/invert/invert.h 2011-11-03 23:29:58.236553852 -0400 @@ -44,6 +44,7 @@ virtual void prePaintScreen(ScreenPrePaintData &data, int time); virtual void prePaintWindow(EffectWindow *w, WindowPrePaintData &data, int time); virtual void paintEffectFrame(KWin::EffectFrame* frame, QRegion region, double opacity, double frameOpacity); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/login/login.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/login/login.cpp 2011-11-03 23:29:58.236553852 -0400 @@ -96,4 +96,9 @@ return false; } +bool LoginEffect::isActive() const +{ + return login_window != NULL; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/login/login.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/login/login.h 2011-11-03 23:29:58.237553852 -0400 @@ -37,6 +37,7 @@ virtual void postPaintScreen(); virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); + virtual bool isActive() const; public Q_SLOTS: void slotWindowClosed(EffectWindow *w); --- a/kwin-4.7.3/kwin/effects/logout/logout.cpp 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/logout/logout.cpp 2011-11-03 23:29:58.237553852 -0400 @@ -396,4 +396,9 @@ canDoPersistent = true; } +bool LogoutEffect::isActive() const +{ + return progress != 0; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/logout/logout.h 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/logout/logout.h 2011-11-03 23:29:58.237553852 -0400 @@ -44,6 +44,7 @@ virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); virtual void postPaintScreen(); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); + virtual bool isActive() const; public Q_SLOTS: void slotWindowAdded(EffectWindow* w); void slotWindowClosed(EffectWindow *w); --- a/kwin-4.7.3/kwin/effects/lookingglass/lookingglass.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/lookingglass/lookingglass.cpp 2011-11-03 23:29:58.237553852 -0400 @@ -247,6 +247,11 @@ } } +bool LookingGlassEffect::isActive() const +{ + return m_valid && m_enabled; +} + } // namespace #include "lookingglass.moc" --- a/kwin-4.7.3/kwin/effects/lookingglass/lookingglass.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/lookingglass/lookingglass.h 2011-11-03 23:29:58.237553852 -0400 @@ -48,6 +48,7 @@ virtual void prePaintScreen(ScreenPrePaintData& data, int time); virtual void postPaintScreen(); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/magiclamp/magiclamp.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/magiclamp/magiclamp.cpp 2011-11-03 23:29:58.238553852 -0400 @@ -353,4 +353,9 @@ mTimeLineWindows[w]->setCurrentTime(mAnimationDuration); } +bool MagicLampEffect::isActive() const +{ + return !mTimeLineWindows.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/magiclamp/magiclamp.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/magiclamp/magiclamp.h 2011-11-03 23:29:58.238553852 -0400 @@ -40,6 +40,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/magnifier/magnifier.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/magnifier/magnifier.cpp 2011-11-03 23:29:58.238553852 -0400 @@ -209,6 +209,11 @@ effects->addRepaintFull(); } +bool MagnifierEffect::isActive() const +{ + return zoom != 1.0 || zoom != target_zoom; +} + } // namespace #include "magnifier.moc" --- a/kwin-4.7.3/kwin/effects/magnifier/magnifier.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/magnifier/magnifier.h 2011-11-03 23:29:58.238553852 -0400 @@ -36,6 +36,7 @@ virtual void prePaintScreen(ScreenPrePaintData& data, int time); virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; static bool supported(); private slots: void zoomIn(); --- a/kwin-4.7.3/kwin/effects/minimizeanimation/minimizeanimation.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/minimizeanimation/minimizeanimation.cpp 2011-11-03 23:29:58.238553852 -0400 @@ -148,5 +148,10 @@ timeline->setCurrentTime(timeline->duration()); } +bool MinimizeAnimationEffect::isActive() const +{ + return !mTimeLineWindows.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/minimizeanimation/minimizeanimation.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/minimizeanimation/minimizeanimation.h 2011-11-03 23:29:58.239553852 -0400 @@ -43,6 +43,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; public Q_SLOTS: void slotWindowDeleted(EffectWindow *w); --- a/kwin-4.7.3/kwin/effects/mousemark/mousemark.cpp 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/mousemark/mousemark.cpp 2011-11-03 23:29:58.239553852 -0400 @@ -186,6 +186,12 @@ return ret; } +bool MouseMarkEffect::isActive() const +{ + return !marks.isEmpty() || !drawing.isEmpty(); +} + + } // namespace #include "mousemark.moc" --- a/kwin-4.7.3/kwin/effects/mousemark/mousemark.h 2011-11-03 23:29:48.319553300 -0400 +++ a/kwin-4.7.3/kwin/effects/mousemark/mousemark.h 2011-11-03 23:29:58.239553852 -0400 @@ -36,6 +36,7 @@ ~MouseMarkEffect(); virtual void reconfigure(ReconfigureFlags); virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); + virtual bool isActive() const; private slots: void clear(); void clearLast(); --- a/kwin-4.7.3/kwin/effects/outline/outline.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/outline/outline.cpp 2011-11-03 23:29:58.239553852 -0400 @@ -75,4 +75,9 @@ effects->addRepaint(geometry); } +bool OutlineEffect::isActive() const +{ + return m_active; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/outline/outline.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/outline/outline.h 2011-11-03 23:29:58.239553852 -0400 @@ -35,6 +35,7 @@ virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); virtual bool provides(Feature feature); + virtual bool isActive() const; public Q_SLOTS: void slotShowOutline(const QRect &geometry); --- a/kwin-4.7.3/kwin/effects/presentwindows/presentwindows.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/presentwindows/presentwindows.cpp 2011-11-03 23:29:58.240553852 -0400 @@ -1967,6 +1967,11 @@ shortcutClass = KShortcut(seq); } +bool PresentWindowsEffect::isActive() const +{ + return m_activated || m_motionManager.managingWindows(); +} + /************************************************ * CloseWindowView ************************************************/ --- a/kwin-4.7.3/kwin/effects/presentwindows/presentwindows.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/presentwindows/presentwindows.h 2011-11-03 23:29:58.240553852 -0400 @@ -103,6 +103,7 @@ virtual bool borderActivated(ElectricBorder border); virtual void windowInputMouseEvent(Window w, QEvent *e); virtual void grabbedKeyboardEvent(QKeyEvent *e); + virtual bool isActive() const; enum { LayoutNatural, LayoutRegularGrid, LayoutFlexibleGrid }; // Layout modes enum PresentWindowsMode { --- a/kwin-4.7.3/kwin/effects/scalein/scalein.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/scalein/scalein.cpp 2011-11-03 23:29:58.241553852 -0400 @@ -95,4 +95,9 @@ delete mTimeLineWindows.take(c); } +bool ScaleInEffect::isActive() const +{ + return !mTimeLineWindows.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/scalein/scalein.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/scalein/scalein.h 2011-11-03 23:29:58.241553852 -0400 @@ -38,6 +38,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintWindow(EffectWindow* w); + virtual bool isActive() const; // TODO react also on virtual desktop changes public Q_SLOTS: void slotWindowAdded(EffectWindow* c); --- a/kwin-4.7.3/kwin/effects/screenshot/screenshot.cpp 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/screenshot/screenshot.cpp 2011-11-03 23:29:58.241553852 -0400 @@ -200,4 +200,9 @@ img = img.mirrored(); } +bool ScreenShotEffect::isActive() const +{ + return m_scheduledScreenshot != NULL; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/screenshot/screenshot.h 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/screenshot/screenshot.h 2011-11-03 23:29:58.241553852 -0400 @@ -40,6 +40,7 @@ ScreenShotEffect(); virtual ~ScreenShotEffect(); virtual void postPaintScreen(); + virtual bool isActive() const; static bool supported(); static void convertFromGLImage(QImage &img, int w, int h); --- a/kwin-4.7.3/kwin/effects/sheet/sheet.cpp 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/sheet/sheet.cpp 2011-11-03 23:29:58.241553852 -0400 @@ -186,6 +186,11 @@ return (w->isModal() || w->data(IsSheetWindow).toBool()); } +bool SheetEffect::isActive() const +{ + return !windows.isEmpty(); +} + SheetEffect::WindowInfo::WindowInfo() : deleted(false) , added(false) --- a/kwin-4.7.3/kwin/effects/sheet/sheet.h 2011-11-03 23:29:48.322553301 -0400 +++ a/kwin-4.7.3/kwin/effects/sheet/sheet.h 2011-11-03 23:29:58.242553852 -0400 @@ -40,6 +40,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintWindow(EffectWindow* w); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/slide/slide.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/slide/slide.cpp 2011-11-03 23:29:58.242553852 -0400 @@ -227,6 +227,11 @@ effects->addRepaintFull(); } +bool SlideEffect::isActive() const +{ + return slide; +} + } // namespace #include "slide.moc" --- a/kwin-4.7.3/kwin/effects/slide/slide.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/slide/slide.h 2011-11-03 23:29:58.242553852 -0400 @@ -41,6 +41,7 @@ virtual void postPaintScreen(); virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); + virtual bool isActive() const; private Q_SLOTS: void slotDesktopChanged(int old, int current); --- a/kwin-4.7.3/kwin/effects/slideback/slideback.cpp 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/slideback/slideback.cpp 2011-11-03 23:29:58.242553852 -0400 @@ -373,4 +373,9 @@ return modalGroupGeometry; } +bool SlideBackEffect::isActive() const +{ + return motionManager.managingWindows(); +} + } //Namespace --- a/kwin-4.7.3/kwin/effects/slideback/slideback.h 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/slideback/slideback.h 2011-11-03 23:29:58.242553852 -0400 @@ -40,6 +40,7 @@ virtual void prePaintScreen(ScreenPrePaintData &data, int time); virtual void postPaintScreen(); + virtual bool isActive() const; public Q_SLOTS: void slotWindowAdded(EffectWindow *w); --- a/kwin-4.7.3/kwin/effects/slidingpopups/slidingpopups.cpp 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/slidingpopups/slidingpopups.cpp 2011-11-03 23:29:58.243553852 -0400 @@ -243,4 +243,10 @@ } mWindowsData[ w ] = animData; } + +bool SlidingPopupsEffect::isActive() const +{ + return !mAppearingWindows.isEmpty() || !mDisappearingWindows.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/slidingpopups/slidingpopups.h 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/slidingpopups/slidingpopups.h 2011-11-03 23:29:58.243553852 -0400 @@ -41,6 +41,7 @@ virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintWindow(EffectWindow* w); virtual void reconfigure(ReconfigureFlags flags); + virtual bool isActive() const; // TODO react also on virtual desktop changes public Q_SLOTS: --- a/kwin-4.7.3/kwin/effects/snaphelper/snaphelper.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/snaphelper/snaphelper.cpp 2011-11-03 23:29:58.243553852 -0400 @@ -216,4 +216,9 @@ } } +bool SnapHelperEffect::isActive() const +{ + return m_timeline.currentValue() != 0.0; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/snaphelper/snaphelper.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/snaphelper/snaphelper.h 2011-11-03 23:29:58.243553852 -0400 @@ -39,6 +39,7 @@ virtual void prePaintScreen(ScreenPrePaintData &data, int time); virtual void postPaintScreen(); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/startupfeedback/startupfeedback.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/startupfeedback/startupfeedback.cpp 2011-11-03 23:29:58.244553852 -0400 @@ -417,4 +417,9 @@ return rect; } +bool StartupFeedbackEffect::isActive() const +{ + return m_active; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/startupfeedback/startupfeedback.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/startupfeedback/startupfeedback.h 2011-11-03 23:29:58.244553852 -0400 @@ -41,6 +41,7 @@ virtual void prePaintScreen(ScreenPrePaintData& data, int time); virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; static bool supported(); --- a/kwin-4.7.3/kwin/effects/taskbarthumbnail/taskbarthumbnail.cpp 2011-11-03 23:29:48.318553299 -0400 +++ a/kwin-4.7.3/kwin/effects/taskbarthumbnail/taskbarthumbnail.cpp 2011-11-03 23:29:58.244553852 -0400 @@ -161,4 +161,9 @@ } } +bool TaskbarThumbnailEffect::isActive() const +{ + return !thumbnails.isEmpty(); +} + } // namespace --- a/kwin-4.7.3/kwin/effects/taskbarthumbnail/taskbarthumbnail.h 2011-11-03 23:29:48.318553299 -0400 +++ a/kwin-4.7.3/kwin/effects/taskbarthumbnail/taskbarthumbnail.h 2011-11-03 23:29:58.244553852 -0400 @@ -38,6 +38,7 @@ virtual void prePaintScreen(ScreenPrePaintData& data, int time); virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); + virtual bool isActive() const; public Q_SLOTS: void slotWindowAdded(EffectWindow *w); --- a/kwin-4.7.3/kwin/effects/thumbnailaside/thumbnailaside.cpp 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/thumbnailaside/thumbnailaside.cpp 2011-11-03 23:29:58.244553852 -0400 @@ -172,6 +172,11 @@ effects->addRepaint(d.rect); } +bool ThumbnailAsideEffect::isActive() const +{ + return !windows.isEmpty(); +} + } // namespace #include "thumbnailaside.moc" --- a/kwin-4.7.3/kwin/effects/thumbnailaside/thumbnailaside.h 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/thumbnailaside/thumbnailaside.h 2011-11-03 23:29:58.245553852 -0400 @@ -48,6 +48,7 @@ void slotWindowClosed(EffectWindow *w); void slotWindowGeometryShapeChanged(EffectWindow *w, const QRect &old); void slotWindowDamaged(EffectWindow* w, const QRect& damage); + virtual bool isActive() const; private: void addThumbnail(EffectWindow* w); void removeThumbnail(EffectWindow* w); --- a/kwin-4.7.3/kwin/effects/trackmouse/trackmouse.cpp 2011-11-03 23:29:48.318553299 -0400 +++ a/kwin-4.7.3/kwin/effects/trackmouse/trackmouse.cpp 2011-11-03 23:29:58.245553852 -0400 @@ -213,4 +213,9 @@ #endif } +bool TrackMouseEffect::isActive() const +{ + return active; +} + } // namespace --- a/kwin-4.7.3/kwin/effects/trackmouse/trackmouse.h 2011-11-03 23:29:48.318553299 -0400 +++ a/kwin-4.7.3/kwin/effects/trackmouse/trackmouse.h 2011-11-03 23:29:58.245553852 -0400 @@ -41,6 +41,7 @@ virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); virtual void postPaintScreen(); virtual void reconfigure(ReconfigureFlags); + virtual bool isActive() const; private slots: void toggle(); void slotMouseChanged(const QPoint& pos, const QPoint& old, --- a/kwin-4.7.3/kwin/effects/windowgeometry/windowgeometry.cpp 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/windowgeometry/windowgeometry.cpp 2011-11-03 23:29:58.245553852 -0400 @@ -178,3 +178,7 @@ } } +bool WindowGeometry::isActive() const +{ + return iAmActive; +} --- a/kwin-4.7.3/kwin/effects/windowgeometry/windowgeometry.h 2011-11-03 23:29:48.320553301 -0400 +++ a/kwin-4.7.3/kwin/effects/windowgeometry/windowgeometry.h 2011-11-03 23:29:58.245553852 -0400 @@ -38,6 +38,7 @@ } void reconfigure(ReconfigureFlags); void paintScreen(int mask, QRegion region, ScreenPaintData &data); + virtual bool isActive() const; private slots: void toggle(); --- a/kwin-4.7.3/kwin/effects/wobblywindows/wobblywindows.cpp 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/wobblywindows/wobblywindows.cpp 2011-11-03 23:29:58.246553852 -0400 @@ -1218,6 +1218,10 @@ wwi.buffer = tmp; } +bool WobblyWindowsEffect::isActive() const +{ + return !windows.isEmpty(); +} } // namespace KWin --- a/kwin-4.7.3/kwin/effects/wobblywindows/wobblywindows.h 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects/wobblywindows/wobblywindows.h 2011-11-03 23:29:58.246553852 -0400 @@ -35,6 +35,7 @@ virtual void prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time); virtual void paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; // Wobbly model parameters void setStiffness(qreal stiffness); --- a/kwin-4.7.3/kwin/effects/zoom/zoom.cpp 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/zoom/zoom.cpp 2011-11-03 23:29:58.246553852 -0400 @@ -496,6 +496,11 @@ } } +bool ZoomEffect::isActive() const +{ + return zoom != 1.0 || zoom != target_zoom; +} + } // namespace #include "zoom.moc" --- a/kwin-4.7.3/kwin/effects/zoom/zoom.h 2011-11-03 23:29:48.321553301 -0400 +++ a/kwin-4.7.3/kwin/effects/zoom/zoom.h 2011-11-03 23:29:58.247553852 -0400 @@ -43,6 +43,7 @@ virtual void prePaintScreen(ScreenPrePaintData& data, int time); virtual void paintScreen(int mask, QRegion region, ScreenPaintData& data); virtual void postPaintScreen(); + virtual bool isActive() const; private slots: void zoomIn(); void zoomOut(); --- a/kwin-4.7.3/kwin/effects.cpp 2011-11-03 23:29:48.323553301 -0400 +++ a/kwin-4.7.3/kwin/effects.cpp 2011-11-03 23:29:58.247553852 -0400 @@ -95,7 +95,6 @@ , fullscreen_effect(0) , next_window_quad_type(EFFECT_QUAD_TYPE_START) , mouse_poll_ref_count(0) - , current_paint_effectframe(0) { Workspace *ws = Workspace::self(); connect(ws, SIGNAL(currentDesktopChanged(int)), this, SLOT(slotDesktopChanged(int))); @@ -199,54 +198,54 @@ // the idea is that effects call this function again which calls the next one void EffectsHandlerImpl::prePaintScreen(ScreenPrePaintData& data, int time) { - if (current_paint_screen < loaded_effects.size()) { - loaded_effects.at(current_paint_screen++).second->prePaintScreen(data, time); - --current_paint_screen; + if (m_currentPaintScreenIterator != m_activeEffects.end()) { + (*m_currentPaintScreenIterator++)->prePaintScreen(data, time); + --m_currentPaintScreenIterator; } // no special final code } void EffectsHandlerImpl::paintScreen(int mask, QRegion region, ScreenPaintData& data) { - if (current_paint_screen < loaded_effects.size()) { - loaded_effects.at(current_paint_screen++).second->paintScreen(mask, region, data); - --current_paint_screen; + if (m_currentPaintScreenIterator != m_activeEffects.end()) { + (*m_currentPaintScreenIterator++)->paintScreen(mask, region, data); + --m_currentPaintScreenIterator; } else scene->finalPaintScreen(mask, region, data); } void EffectsHandlerImpl::postPaintScreen() { - if (current_paint_screen < loaded_effects.size()) { - loaded_effects.at(current_paint_screen++).second->postPaintScreen(); - --current_paint_screen; + if (m_currentPaintScreenIterator != m_activeEffects.end()) { + (*m_currentPaintScreenIterator++)->postPaintScreen(); + --m_currentPaintScreenIterator; } // no special final code } void EffectsHandlerImpl::prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time) { - if (current_paint_window < loaded_effects.size()) { - loaded_effects.at(current_paint_window++).second->prePaintWindow(w, data, time); - --current_paint_window; + if (m_currentPaintWindowIterator != m_activeEffects.end()) { + (*m_currentPaintWindowIterator++)->prePaintWindow(w, data, time); + --m_currentPaintWindowIterator; } // no special final code } void EffectsHandlerImpl::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) { - if (current_paint_window < loaded_effects.size()) { - loaded_effects.at(current_paint_window++).second->paintWindow(w, mask, region, data); - --current_paint_window; + if (m_currentPaintWindowIterator != m_activeEffects.end()) { + (*m_currentPaintWindowIterator++)->paintWindow(w, mask, region, data); + --m_currentPaintWindowIterator; } else scene->finalPaintWindow(static_cast(w), mask, region, data); } void EffectsHandlerImpl::paintEffectFrame(EffectFrame* frame, QRegion region, double opacity, double frameOpacity) { - if (current_paint_effectframe < loaded_effects.size()) { - loaded_effects.at(current_paint_effectframe++).second->paintEffectFrame(frame, region, opacity, frameOpacity); - --current_paint_effectframe; + if (m_currentPaintEffectFrameIterator != m_activeEffects.end()) { + (*m_currentPaintEffectFrameIterator++)->paintEffectFrame(frame, region, opacity, frameOpacity); + --m_currentPaintEffectFrameIterator; } else { const EffectFrameImpl* frameImpl = static_cast(frame); frameImpl->finalRender(region, opacity, frameOpacity); @@ -255,9 +254,9 @@ void EffectsHandlerImpl::postPaintWindow(EffectWindow* w) { - if (current_paint_window < loaded_effects.size()) { - loaded_effects.at(current_paint_window++).second->postPaintWindow(w); - --current_paint_window; + if (m_currentPaintWindowIterator != m_activeEffects.end()) { + (*m_currentPaintWindowIterator++)->postPaintWindow(w); + --m_currentPaintWindowIterator; } // no special final code } @@ -272,18 +271,18 @@ void EffectsHandlerImpl::drawWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) { - if (current_draw_window < loaded_effects.size()) { - loaded_effects.at(current_draw_window++).second->drawWindow(w, mask, region, data); - --current_draw_window; + if (m_currentDrawWindowIterator != m_activeEffects.end()) { + (*m_currentDrawWindowIterator++)->drawWindow(w, mask, region, data); + --m_currentDrawWindowIterator; } else scene->finalDrawWindow(static_cast(w), mask, region, data); } void EffectsHandlerImpl::buildQuads(EffectWindow* w, WindowQuadList& quadList) { - if (current_build_quads < loaded_effects.size()) { - loaded_effects.at(current_build_quads++).second->buildQuads(w, quadList); - --current_build_quads; + if (m_currentBuildQuadsIterator != m_activeEffects.end()) { + (*m_currentBuildQuadsIterator++)->buildQuads(w, quadList); + --m_currentBuildQuadsIterator; } } @@ -305,10 +304,17 @@ // start another painting pass void EffectsHandlerImpl::startPaint() { - assert(current_paint_screen == 0); - assert(current_paint_window == 0); - assert(current_draw_window == 0); - assert(current_build_quads == 0); + m_activeEffects.clear(); + for(QVector< KWin::EffectPair >::iterator it = loaded_effects.begin(); it != loaded_effects.end(); ++it) { + if (it->second->isActive()) { + m_activeEffects << it->second; + } + } + m_currentDrawWindowIterator = m_activeEffects.begin(); + m_currentPaintWindowIterator = m_activeEffects.begin(); + m_currentPaintScreenIterator = m_activeEffects.begin(); + m_currentPaintEffectFrameIterator = m_activeEffects.begin(); + m_currentBuildQuadsIterator = m_activeEffects.begin(); } void EffectsHandlerImpl::slotClientMaximized(KWin::Client *c, KDecorationDefines::MaximizeMode maxMode) @@ -1022,10 +1028,6 @@ bool EffectsHandlerImpl::loadEffect(const QString& name, bool checkDefault) { Workspace::self()->addRepaintFull(); - assert(current_paint_screen == 0); - assert(current_paint_window == 0); - assert(current_draw_window == 0); - assert(current_build_quads == 0); if (!name.startsWith(QLatin1String("kwin4_effect_"))) kWarning(1212) << "Effect names usually have kwin4_effect_ prefix" ; @@ -1134,10 +1136,6 @@ void EffectsHandlerImpl::unloadEffect(const QString& name) { Workspace::self()->addRepaintFull(); - assert(current_paint_screen == 0); - assert(current_paint_window == 0); - assert(current_draw_window == 0); - assert(current_build_quads == 0); for (QMap< int, EffectPair >::iterator it = effect_order.begin(); it != effect_order.end(); ++it) { if (it.value().first == name) { --- a/kwin-4.7.3/kwin/effects.h 2011-11-03 23:29:48.327553301 -0400 +++ a/kwin-4.7.3/kwin/effects.h 2011-11-03 23:29:58.247553852 -0400 @@ -208,7 +208,14 @@ QHash< long, int > registered_atoms; int next_window_quad_type; int mouse_poll_ref_count; - int current_paint_effectframe; + +private: + QList< Effect* > m_activeEffects; + QList< Effect* >::iterator m_currentDrawWindowIterator; + QList< Effect* >::iterator m_currentPaintWindowIterator; + QList< Effect* >::iterator m_currentPaintEffectFrameIterator; + QList< Effect* >::iterator m_currentPaintScreenIterator; + QList< Effect* >::iterator m_currentBuildQuadsIterator; }; class EffectWindowImpl : public EffectWindow --- a/kwin-4.7.3/kwin/libkwineffects/kwineffects.cpp 2011-11-03 23:29:48.324553301 -0400 +++ a/kwin-4.7.3/kwin/libkwineffects/kwineffects.cpp 2011-11-03 23:29:58.248553852 -0400 @@ -172,6 +172,11 @@ return false; } +bool Effect::isActive() const +{ + return true; +} + void Effect::drawWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) { effects->drawWindow(w, mask, region, data); @@ -230,11 +235,7 @@ //**************************************** EffectsHandler::EffectsHandler(CompositingType type) - : current_paint_screen(0) - , current_paint_window(0) - , current_draw_window(0) - , current_build_quads(0) - , compositing_type(type) + : compositing_type(type) { if (compositing_type == NoCompositing) return; --- a/kwin-4.7.3/kwin/libkwineffects/kwineffects.h 2011-11-03 23:29:48.324553301 -0400 +++ a/kwin-4.7.3/kwin/libkwineffects/kwineffects.h 2011-11-03 23:37:36.975579384 -0400 @@ -447,6 +447,23 @@ virtual bool borderActivated(ElectricBorder border); + /** + * Overwrite this method to indicate whether your effect will be doing something in + * the next frame to be rendered. If the method returns @c false the effect will be + * excluded from the chained methods in the next rendered frame. + * + * This method is called always directly before the paint loop begins. So it is totally + * fine to e.g. react on a window event, issue a repaint to trigger an animation and + * change a flag to indicate that this method returns @c true. + * + * As the method is called each frame, you should not perform complex calculations. + * Best use just a boolean flag. + * + * The default implementation of this method returns @c true. + * @since 4.8 + **/ + virtual bool isActive() const; + static int displayWidth(); static int displayHeight(); static QPoint cursorPos(); @@ -1023,10 +1040,6 @@ QHash< QString, KLibrary* > effect_libraries; QList< InputWindowPair > input_windows; //QHash< QString, EffectFactory* > effect_factories; - int current_paint_screen; - int current_paint_window; - int current_draw_window; - int current_build_quads; CompositingType compositing_type; }; @@ -1739,14 +1752,14 @@ * Returns whether or not a specified window is being managed * by this manager object. */ - inline bool isManaging(EffectWindow *w) { + inline bool isManaging(EffectWindow *w) const { return m_managedWindows.contains(w); } /** * Returns whether or not this manager object is actually * managing any windows or not. */ - inline bool managingWindows() { + inline bool managingWindows() const { return !m_managedWindows.empty(); } /** @@ -1754,14 +1767,14 @@ * or not. Can be used to see if an effect should be * processed and displayed or not. */ - inline bool areWindowsMoving() { + inline bool areWindowsMoving() const { return !m_movingWindowsSet.isEmpty(); } /** * Returns whether a window has reached its targets yet * or not. */ - inline bool isWindowMoving(EffectWindow *w) { + inline bool isWindowMoving(EffectWindow *w) const { return m_movingWindowsSet.contains(w); }