From 13ad458ccac0555044ef1cfc149de2e3ad96c198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Fri, 19 Jul 2013 11:34:01 +0200 Subject: [PATCH] Use const_iterators for our Effect iterators We never modify the list, so we don't need the mutuable iterator. This ensures that the data doesn't get detached. --- effects.cpp | 44 ++++++++++++++++++++++---------------------- effects.h | 12 +++++++----- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/effects.cpp b/effects.cpp index a81dfa1e66..3577535bd1 100644 --- a/effects.cpp +++ b/effects.cpp @@ -223,7 +223,7 @@ EffectsHandlerImpl::EffectsHandlerImpl(Compositor *compositor, Scene *scene) dbus.registerObject("/Effects", this); dbus.registerService("org.kde.kwin.Effects"); // init is important, otherwise causes crashes when quads are build before the first painting pass start - m_currentBuildQuadsIterator = m_activeEffects.end(); + m_currentBuildQuadsIterator = m_activeEffects.constEnd(); Workspace *ws = Workspace::self(); VirtualDesktopManager *vds = VirtualDesktopManager::self(); @@ -358,7 +358,7 @@ void EffectsHandlerImpl::slotEffectsQueried() // the idea is that effects call this function again which calls the next one void EffectsHandlerImpl::prePaintScreen(ScreenPrePaintData& data, int time) { - if (m_currentPaintScreenIterator != m_activeEffects.end()) { + if (m_currentPaintScreenIterator != m_activeEffects.constEnd()) { (*m_currentPaintScreenIterator++)->prePaintScreen(data, time); --m_currentPaintScreenIterator; } @@ -367,7 +367,7 @@ void EffectsHandlerImpl::prePaintScreen(ScreenPrePaintData& data, int time) void EffectsHandlerImpl::paintScreen(int mask, QRegion region, ScreenPaintData& data) { - if (m_currentPaintScreenIterator != m_activeEffects.end()) { + if (m_currentPaintScreenIterator != m_activeEffects.constEnd()) { (*m_currentPaintScreenIterator++)->paintScreen(mask, region, data); --m_currentPaintScreenIterator; } else @@ -382,8 +382,8 @@ void EffectsHandlerImpl::paintDesktop(int desktop, int mask, QRegion region, Scr m_currentRenderedDesktop = desktop; m_desktopRendering = true; // save the paint screen iterator - QList::iterator savedIterator = m_currentPaintScreenIterator; - m_currentPaintScreenIterator = m_activeEffects.begin(); + EffectsIterator savedIterator = m_currentPaintScreenIterator; + m_currentPaintScreenIterator = m_activeEffects.constBegin(); effects->paintScreen(mask, region, data); // restore the saved iterator m_currentPaintScreenIterator = savedIterator; @@ -392,7 +392,7 @@ void EffectsHandlerImpl::paintDesktop(int desktop, int mask, QRegion region, Scr void EffectsHandlerImpl::postPaintScreen() { - if (m_currentPaintScreenIterator != m_activeEffects.end()) { + if (m_currentPaintScreenIterator != m_activeEffects.constEnd()) { (*m_currentPaintScreenIterator++)->postPaintScreen(); --m_currentPaintScreenIterator; } @@ -401,7 +401,7 @@ void EffectsHandlerImpl::postPaintScreen() void EffectsHandlerImpl::prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int time) { - if (m_currentPaintWindowIterator != m_activeEffects.end()) { + if (m_currentPaintWindowIterator != m_activeEffects.constEnd()) { (*m_currentPaintWindowIterator++)->prePaintWindow(w, data, time); --m_currentPaintWindowIterator; } @@ -410,7 +410,7 @@ void EffectsHandlerImpl::prePaintWindow(EffectWindow* w, WindowPrePaintData& dat void EffectsHandlerImpl::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) { - if (m_currentPaintWindowIterator != m_activeEffects.end()) { + if (m_currentPaintWindowIterator != m_activeEffects.constEnd()) { (*m_currentPaintWindowIterator++)->paintWindow(w, mask, region, data); --m_currentPaintWindowIterator; } else @@ -419,7 +419,7 @@ void EffectsHandlerImpl::paintWindow(EffectWindow* w, int mask, QRegion region, void EffectsHandlerImpl::paintEffectFrame(EffectFrame* frame, QRegion region, double opacity, double frameOpacity) { - if (m_currentPaintEffectFrameIterator != m_activeEffects.end()) { + if (m_currentPaintEffectFrameIterator != m_activeEffects.constEnd()) { (*m_currentPaintEffectFrameIterator++)->paintEffectFrame(frame, region, opacity, frameOpacity); --m_currentPaintEffectFrameIterator; } else { @@ -430,7 +430,7 @@ void EffectsHandlerImpl::paintEffectFrame(EffectFrame* frame, QRegion region, do void EffectsHandlerImpl::postPaintWindow(EffectWindow* w) { - if (m_currentPaintWindowIterator != m_activeEffects.end()) { + if (m_currentPaintWindowIterator != m_activeEffects.constEnd()) { (*m_currentPaintWindowIterator++)->postPaintWindow(w); --m_currentPaintWindowIterator; } @@ -447,7 +447,7 @@ Effect *EffectsHandlerImpl::provides(Effect::Feature ef) void EffectsHandlerImpl::drawWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data) { - if (m_currentDrawWindowIterator != m_activeEffects.end()) { + if (m_currentDrawWindowIterator != m_activeEffects.constEnd()) { (*m_currentDrawWindowIterator++)->drawWindow(w, mask, region, data); --m_currentDrawWindowIterator; } else @@ -458,14 +458,14 @@ void EffectsHandlerImpl::buildQuads(EffectWindow* w, WindowQuadList& quadList) { static bool initIterator = true; if (initIterator) { - m_currentBuildQuadsIterator = m_activeEffects.begin(); + m_currentBuildQuadsIterator = m_activeEffects.constBegin(); initIterator = false; } - if (m_currentBuildQuadsIterator != m_activeEffects.end()) { + if (m_currentBuildQuadsIterator != m_activeEffects.constEnd()) { (*m_currentBuildQuadsIterator++)->buildQuads(w, quadList); --m_currentBuildQuadsIterator; } - if (m_currentBuildQuadsIterator == m_activeEffects.begin()) + if (m_currentBuildQuadsIterator == m_activeEffects.constBegin()) initIterator = true; } @@ -488,15 +488,15 @@ bool EffectsHandlerImpl::decorationSupportsBlurBehind() const void EffectsHandlerImpl::startPaint() { m_activeEffects.clear(); - for(QVector< KWin::EffectPair >::iterator it = loaded_effects.begin(); it != loaded_effects.end(); ++it) { + for(QVector< KWin::EffectPair >::const_iterator it = loaded_effects.constBegin(); it != loaded_effects.constEnd(); ++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_currentDrawWindowIterator = m_activeEffects.constBegin(); + m_currentPaintWindowIterator = m_activeEffects.constBegin(); + m_currentPaintScreenIterator = m_activeEffects.constBegin(); + m_currentPaintEffectFrameIterator = m_activeEffects.constBegin(); } void EffectsHandlerImpl::slotClientMaximized(KWin::Client *c, KDecorationDefines::MaximizeMode maxMode) @@ -752,7 +752,7 @@ void* EffectsHandlerImpl::getProxy(QString name) // All effects start with "kwin4_effect_", prepend it to the name name.prepend("kwin4_effect_"); - for (QVector< EffectPair >::iterator it = loaded_effects.begin(); it != loaded_effects.end(); ++it) + for (QVector< EffectPair >::const_iterator it = loaded_effects.constBegin(); it != loaded_effects.constEnd(); ++it) if ((*it).first == name) return (*it).second->proxy(); @@ -1512,7 +1512,7 @@ void EffectsHandlerImpl::unloadEffect(const QString& name) void EffectsHandlerImpl::reconfigureEffect(const QString& name) { - for (QVector< EffectPair >::iterator it = loaded_effects.begin(); it != loaded_effects.end(); ++it) + for (QVector< EffectPair >::const_iterator it = loaded_effects.constBegin(); it != loaded_effects.constEnd(); ++it) if ((*it).first == name) { (*it).second->reconfigure(Effect::ReconfigureAll); return; @@ -1531,7 +1531,7 @@ bool EffectsHandlerImpl::isEffectLoaded(const QString& name) const void EffectsHandlerImpl::reloadEffect(Effect *effect) { QString effectName; - for (QVector< EffectPair >::iterator it = loaded_effects.begin(); it != loaded_effects.end(); ++it) { + for (QVector< EffectPair >::const_iterator it = loaded_effects.constBegin(); it != loaded_effects.constEnd(); ++it) { if ((*it).second == effect) { effectName = (*it).first; break; diff --git a/effects.h b/effects.h index b641bfbe7d..1850089499 100644 --- a/effects.h +++ b/effects.h @@ -254,11 +254,13 @@ private Q_SLOTS: 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; + typedef QList< Effect*> EffectsList; + typedef EffectsList::const_iterator EffectsIterator; + EffectsIterator m_currentDrawWindowIterator; + EffectsIterator m_currentPaintWindowIterator; + EffectsIterator m_currentPaintEffectFrameIterator; + EffectsIterator m_currentPaintScreenIterator; + EffectsIterator m_currentBuildQuadsIterator; typedef QHash< QByteArray, QList< Effect*> > PropertyEffectMap; PropertyEffectMap m_propertiesForEffects; QHash m_managedProperties;