]> git.sesse.net Git - kdenlive/commitdiff
Cleanup effect stack (part 2) - show monitor scene when required
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 17 Apr 2012 21:03:31 +0000 (23:03 +0200)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 17 Apr 2012 21:03:31 +0000 (23:03 +0200)
15 files changed:
src/cornerswidget.cpp
src/cornerswidget.h
src/effectstack/collapsibleeffect.cpp
src/effectstack/collapsibleeffect.h
src/effectstack/effectstackview2.cpp
src/effectstack/effectstackview2.h
src/effectstack/parametercontainer.cpp
src/effectstack/parametercontainer.h
src/effectstackedit.cpp
src/effectstackedit.h
src/geometrywidget.cpp
src/geometrywidget.h
src/monitor.cpp
src/rotoscoping/rotowidget.cpp
src/transitionsettings.cpp

index 1b9fd5dd2fa8318b0dadc46880a1fcf9e10b4645..6454a7c0d80b18dfbcb708d81c53857f17a3fa4c 100644 (file)
@@ -58,7 +58,6 @@ CornersWidget::CornersWidget(Monitor *monitor, QDomElement e, int minFrame, int
                           true, KdenliveSettings::onmonitoreffects_cornersshowlines());
 
     connect(edit, SIGNAL(showEdit(bool)), this, SLOT(slotShowScene(bool)));
-    connect(m_monitor, SIGNAL(renderPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
     connect(m_item, SIGNAL(changed()), this, SLOT(slotUpdateProperties()));
     connect(m_scene, SIGNAL(addKeyframe()), this, SLOT(slotInsertKeyframe()));
 
@@ -74,7 +73,6 @@ CornersWidget::~CornersWidget()
         MonitorEditWidget *edit = m_monitor->getEffectEdit();
         edit->showVisibilityButton(false);
         edit->removeCustomControls();
-        m_monitor->slotShowEffectScene(false);
     }
 }
 
index d71f656c7285d23d1501f7df536ebcaa395ab8b8..9b8351ad5e1bc97bb21026fea7bfae5b45a3d660 100644 (file)
@@ -46,8 +46,6 @@ public:
     virtual void addParameter(QDomElement e, int activeKeyframe = -1);
 
 public slots:
-    /** @brief Switches from normal monitor to monitor scene according to @param show. */
-    void slotShowScene(bool show = true);
     /** @brief Updates the on-monitor item.  */
     void slotSyncPosition(int relTimelinePos);
 
@@ -79,6 +77,9 @@ private slots:
 
     /** @brief Shows/Hides additional controls on the monitor according to @param show. */
     void slotShowControls(bool show = true);
+    
+    /** @brief Switches from normal monitor to monitor scene according to @param show. */
+    void slotShowScene(bool show = true);
 
 signals:
     void checkMonitorPosition(int);
index 8495d546c7c2a40119611a303f18265094646331..85b36c4aca8f97fc1586a3e32d4fad9892ca4016 100644 (file)
@@ -576,7 +576,7 @@ void CollapsibleEffect::adjustButtons(int ix, int max)
     buttonDown->setVisible(ix < max - 1);
 }
 
-bool CollapsibleEffect::needsMonitorEffectScene()
+bool CollapsibleEffect::needsMonitorEffectScene() const
 {
     return m_paramWidget->needsMonitorEffectScene();
 }
index e9a5ec9f94ed914d74bb8efd58d4b8f1c7d015dc..0572f7e15d3eaf78e4040e42fd570a85668fd4b5 100644 (file)
@@ -72,7 +72,7 @@ public:
     /** @brief Show / hide up / down buttons. */
     void adjustButtons(int ix, int max);
     /** @brief Returns true of this effect requires an on monitor adjustable effect scene. */
-    bool needsMonitorEffectScene();
+    bool needsMonitorEffectScene() const;
 
 public slots:
     void slotSyncEffectsPos(int pos);
index b2aa5de240b68ed47efb209ed8705aa9730d881e..a7d21662db8374afb9e2187034a230c47e3f5eff 100644 (file)
@@ -85,6 +85,7 @@ void EffectStackView2::updatePalette()
 void EffectStackView2::slotRenderPos(int pos)
 {
     if (m_effects.isEmpty()) return;
+    slotCheckMonitorPosition(pos);
     if (!m_effectMetaInfo.trackMode && m_clipref) pos = pos - m_clipref->startPos().frames(KdenliveSettings::project_fps());
 
     for (int i = 0; i< m_effects.count(); i++)
@@ -160,8 +161,6 @@ void EffectStackView2::setupListView()
     QVBoxLayout *vbox1 = new QVBoxLayout(view);
     vbox1->setContentsMargins(0, 0, 0, 0);
     vbox1->setSpacing(0);
-    
-    if (m_currentEffectList.isEmpty()) m_ui.labelComment->setHidden(true);
 
     for (int i = 0; i < m_currentEffectList.count(); i++) {
         QDomElement d = m_currentEffectList.at(i).cloneNode().toElement();
@@ -226,15 +225,20 @@ void EffectStackView2::setupListView()
        connectEffect(currentEffect);
     }
     
-    // Adjust group effects (up / down buttons)
-    QList<CollapsibleGroup *> allGroups = m_ui.container->widget()->findChildren<CollapsibleGroup *>();
-    for (int i = 0; i < allGroups.count(); i++) {
-       allGroups.at(i)->adjustEffects();
+    if (m_currentEffectList.isEmpty()) {
+       m_ui.labelComment->setHidden(true);
+    }
+    else {
+       // Adjust group effects (up / down buttons)
+       QList<CollapsibleGroup *> allGroups = m_ui.container->widget()->findChildren<CollapsibleGroup *>();
+       for (int i = 0; i < allGroups.count(); i++) {
+           allGroups.at(i)->adjustEffects();
+       }
+       connect(m_effectMetaInfo.monitor, SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
     }
     
     vbox1->addStretch(10);
     slotUpdateCheckAllButton();
-    connect(m_effectMetaInfo.monitor, SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
     
     // Wait a little bit for the new layout to be ready, then check if we have a scrollbar
     QTimer::singleShot(200, this, SLOT(slotCheckWheelEventFilter()));
@@ -252,7 +256,6 @@ void EffectStackView2::connectEffect(CollapsibleEffect *currentEffect)
     connect(currentEffect, SIGNAL(changeEffectPosition(QList <int>,bool)), this , SLOT(slotMoveEffectUp(QList <int>,bool)));
     connect(currentEffect, SIGNAL(effectStateChanged(bool,int,bool)), this, SLOT(slotUpdateEffectState(bool,int,bool)));
     connect(currentEffect, SIGNAL(activateEffect(int)), this, SLOT(slotSetCurrentEffect(int)));
-    connect(currentEffect, SIGNAL(checkMonitorPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
     connect(currentEffect, SIGNAL(seekTimeline(int)), this , SLOT(slotSeekTimeline(int)));
     connect(currentEffect, SIGNAL(createGroup(int)), this , SLOT(slotCreateGroup(int)));
     connect(currentEffect, SIGNAL(moveEffect(QList<int>,int,int,QString)), this , SLOT(slotMoveEffect(QList<int>,int,int,QString)));
@@ -406,12 +409,18 @@ void EffectStackView2::slotSeekTimeline(int pos)
 
 void EffectStackView2::slotCheckMonitorPosition(int renderPos)
 {
-    if (m_effectMetaInfo.trackMode || (m_clipref && renderPos >= m_clipref->startPos().frames(KdenliveSettings::project_fps()) && renderPos <= m_clipref->endPos().frames(KdenliveSettings::project_fps()))) {
-       if (!m_effectMetaInfo.monitor->effectSceneDisplayed())
-        //if (!m_effectMetaInfo.monitor->getEffectEdit()->getScene()->views().at(0)->isVisible())
-            m_effectMetaInfo.monitor->slotShowEffectScene(true);
-    } else {
-        m_effectMetaInfo.monitor->slotShowEffectScene(false);
+    CollapsibleEffect *current = currentEffect();
+    if (current && current->needsMonitorEffectScene()) {
+       if (m_effectMetaInfo.trackMode || (m_clipref && renderPos >= m_clipref->startPos().frames(KdenliveSettings::project_fps()) && renderPos <= m_clipref->endPos().frames(KdenliveSettings::project_fps()))) {
+           if (!m_effectMetaInfo.monitor->effectSceneDisplayed()) {
+               m_effectMetaInfo.monitor->slotShowEffectScene(true);
+           }
+       } else {
+           m_effectMetaInfo.monitor->slotShowEffectScene(false);
+       }
+    }
+    else {
+       m_effectMetaInfo.monitor->slotShowEffectScene(false);
     }
 }
 
@@ -522,8 +531,9 @@ void EffectStackView2::slotSetCurrentEffect(int ix)
         m_clipref->setSelectedEffect(ix);
        for (int i = 0; i < m_effects.count(); i++) {
            if (m_effects.at(i)->effectIndex() == ix) {
+               if (m_effects.at(i)->isActive()) return;
                m_effects.at(i)->setActive(true);
-               m_effectMetaInfo.monitor->slotShowEffectScene(m_effects.at(i)->needsMonitorEffectScene());
+               slotCheckMonitorPosition(m_effectMetaInfo.monitor->render->seekFramePosition());
                m_ui.labelComment->setText(i18n(m_effects.at(i)->effect().firstChildElement("description").firstChildElement("full").text().toUtf8().data()));
                m_ui.labelComment->setHidden(!m_ui.buttonShowComments->isChecked() || m_ui.labelComment->text().isEmpty());
            }
@@ -532,6 +542,14 @@ void EffectStackView2::slotSetCurrentEffect(int ix)
     }
 }
 
+CollapsibleEffect *EffectStackView2::currentEffect() const
+{
+    for (int i = 0; i < m_effects.count(); i++) {
+       if (m_effects.at(i)->isActive()) return m_effects.at(i);
+    }
+    return NULL;
+}
+
 void EffectStackView2::slotDeleteGroup(QDomDocument doc)
 {
     QDomNodeList effects = doc.elementsByTagName("effect");
index d6e0e9b14afee5c0cb718800b4353be93d452292..1166fa8d48769d46aac770d78954ca98584c7954 100644 (file)
@@ -119,6 +119,8 @@ private:
     void connectEffect(CollapsibleEffect *currentEffect);
     /** @brief Connect a group to its signals. */
     void connectGroup(CollapsibleGroup *group);
+    /** @brief Returns the currentl active effect. */
+    CollapsibleEffect *currentEffect() const;
 
 public slots:
     /** @brief Sets the clip whose effect list should be managed.
index 97e1cfbec6f01f7c7d3d33041945a04301acc922..40d617f1535075099f23778dfb3bf5117ed70741 100644 (file)
@@ -98,7 +98,8 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect
         m_keyframeEditor(NULL),
         m_geometryWidget(NULL),
         m_metaInfo(metaInfo),
-        m_effect(effect)
+        m_effect(effect),
+        m_needsMonitorEffectScene(false)
 {
     m_in = info.cropStart.frames(KdenliveSettings::project_fps());
     m_out = (info.cropStart + info.cropDuration).frames(KdenliveSettings::project_fps()) - 1;
@@ -214,9 +215,9 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect
             connect(pl, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
         } else if (type == "geometry") {
             if (KdenliveSettings::on_monitor_effects()) {
+               m_needsMonitorEffectScene = true;
                 m_geometryWidget = new GeometryWidget(m_metaInfo->monitor, m_metaInfo->timecode, 0, true, effect.hasAttribute("showrotation"), parent);
                 m_geometryWidget->setFrameSize(m_metaInfo->frameSize);
-                m_geometryWidget->slotShowScene(!disable);
                 // connect this before setupParam to make sure the monitor scene shows up at startup
                 connect(m_geometryWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
                 connect(m_geometryWidget, SIGNAL(parameterChanged()), this, SLOT(slotCollectAllParameters()));
@@ -251,7 +252,7 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect
                 if (pa.attribute("widget") == "corners") {
                     // we want a corners-keyframe-widget
                     CornersWidget *corners = new CornersWidget(m_metaInfo->monitor, pa, m_in, m_out, m_metaInfo->timecode, e.attribute("active_keyframe", "-1").toInt(), parent);
-                    corners->slotShowScene(!disable);
+                   m_needsMonitorEffectScene = true;
                     connect(corners, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
                     connect(this, SIGNAL(effectStateChanged(bool)), corners, SLOT(slotShowScene(bool)));
                     connect(this, SIGNAL(syncEffectsPos(int)), corners, SLOT(slotSyncPosition(int)));
@@ -340,8 +341,8 @@ ParameterContainer::ParameterContainer(QDomElement effect, ItemInfo info, Effect
                 meetDependency(paramName, type, EffectsList::parameter(e, depends));
 #ifdef USE_QJSON
         } else if (type == "roto-spline") {
+           m_needsMonitorEffectScene = true;
             RotoWidget *roto = new RotoWidget(value, m_metaInfo->monitor, info, m_metaInfo->timecode, parent);
-            roto->slotShowScene(!disable);
             connect(roto, SIGNAL(valueChanged()), this, SLOT(slotCollectAllParameters()));
             connect(roto, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
             connect(roto, SIGNAL(seekToPos(int)), this, SIGNAL(seekTimeline(int)));
@@ -836,7 +837,7 @@ void ParameterContainer::clearLayout(QLayout *layout)
     }
 }
 
-bool ParameterContainer::needsMonitorEffectScene()
+bool ParameterContainer::needsMonitorEffectScene() const
 {
-    return true;
+    return m_needsMonitorEffectScene;
 }
index b428f0d4946a96f8cd7064c675d96e3a232edec0..c41c9da860c136a2882420f41da9456a20f9522c 100644 (file)
@@ -65,7 +65,7 @@ public:
     void updateProjectFormat(MltVideoProfile profile, Timecode t);
     void updateParameter(const QString &key, const QString &value);
     /** @brief Returns true of this effect requires an on monitor adjustable effect scene. */
-    bool needsMonitorEffectScene();
+    bool needsMonitorEffectScene() const;
 
 private slots:
     void slotCollectAllParameters();
@@ -92,6 +92,7 @@ private:
     EffectMetaInfo *m_metaInfo;
     QDomElement m_effect;
     QVBoxLayout *m_vbox;
+    bool m_needsMonitorEffectScene;
 
 signals:
     void parameterChanged(const QDomElement, const QDomElement, int);
index 85f6a2b1d07569cacf33845a356e383e37cd7e24..168486d9c02e1dcc6a0a5d60eccf19a7500a0b53 100644 (file)
@@ -18,6 +18,7 @@
 #include "effectstackedit.h"
 #include "effectstack/effectstackview2.h"
 #include "effectslist.h"
+#include "monitor.h"
 #include "kdenlivesettings.h"
 
 #include <KDebug>
@@ -40,8 +41,6 @@
 
 EffectStackEdit::EffectStackEdit(Monitor *monitor, QWidget *parent) :
     QScrollArea(parent),
-    m_in(0),
-    m_out(0),
     m_paramWidget(NULL)
 {
     m_baseWidget = new QWidget(this);
@@ -159,7 +158,6 @@ void EffectStackEdit::transferParamDesc(const QDomElement &d, ItemInfo info, boo
     connect (m_paramWidget, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
     connect (m_paramWidget, SIGNAL(seekTimeline(int)), this, SIGNAL(seekTimeline(int)));
     
-    
     Q_FOREACH( QSpinBox * sp, m_baseWidget->findChildren<QSpinBox*>() ) {
         sp->installEventFilter( this );
         sp->setFocusPolicy( Qt::StrongFocus );
@@ -172,8 +170,6 @@ void EffectStackEdit::transferParamDesc(const QDomElement &d, ItemInfo info, boo
        cb->installEventFilter( this );
         cb->setFocusPolicy( Qt::StrongFocus );
     }
-    
-    return;
 }
 
 void EffectStackEdit::slotSyncEffectsPos(int pos)
@@ -181,5 +177,10 @@ void EffectStackEdit::slotSyncEffectsPos(int pos)
     emit syncEffectsPos(pos);
 }
 
+bool EffectStackEdit::needsMonitorEffectScene() const
+{
+    if (!m_paramWidget) return false;
+    return m_paramWidget->needsMonitorEffectScene();
+}
 
 
index e6b5efbd5e202330c22d576f12db9d05c946c3f0..6e73aaf939ffb78f81880360b12cd78df88b118e 100644 (file)
@@ -54,10 +54,10 @@ public:
     Monitor *monitor();
     /** @brief Install event filter so that scrolling with mouse wheel does not change parameter value. */
     virtual bool eventFilter( QObject * o, QEvent * e );
+    /** @brief Returns true if this transition requires an on monitor scene. */
+    bool needsMonitorEffectScene() const;
 
 private:
-    int m_in;
-    int m_out;
     Monitor *m_monitor;
     EffectMetaInfo m_metaInfo;
     QWidget *m_baseWidget;
index d654a7995eb9163674382b49472424b58c2cef22..f526a79fb35bfa14c82392d96edc8ba0825ac02a 100644 (file)
@@ -229,7 +229,6 @@ GeometryWidget::GeometryWidget(Monitor* monitor, Timecode timecode, int clipPos,
     connect(edit, SIGNAL(showEdit(bool)), this, SLOT(slotShowScene(bool)));
 
     connect(m_scene, SIGNAL(addKeyframe()),    this, SLOT(slotAddKeyframe()));
-    connect(m_monitor, SIGNAL(renderPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
     connect(this, SIGNAL(parameterChanged()), this, SLOT(slotUpdateProperties()));
 }
 
@@ -255,7 +254,6 @@ GeometryWidget::~GeometryWidget()
     }
     if (m_monitor) {
         m_monitor->getEffectEdit()->showVisibilityButton(false);
-        m_monitor->slotShowEffectScene(false);
     }
 }
 
index 65681b31f2060be2616d4207df3a5d53791a7dae..d22171bffc5070d4ad54c707bde927266c7afa02 100644 (file)
@@ -67,8 +67,6 @@ public slots:
     void setupParam(const QDomElement elem, int minframe, int maxframe);
     /** @brief Updates position of the local timeline to @param relTimelinePos.  */
     void slotSyncPosition(int relTimelinePos);
-    /** @brief Switches from normal monitor to monitor scene according to @param show. */
-    void slotShowScene(bool show = true);
 
 private:
     Ui::GeometryWidget_UI m_ui;
@@ -172,6 +170,8 @@ private slots:
     void slotFitToHeight();
     /** @brief Show / hide previous keyframe in monitor scene. */
     void slotShowPreviousKeyFrame(bool show);
+    /** @brief Switches from normal monitor to monitor scene according to @param show. */
+    void slotShowScene(bool show = true);
 
 signals:
     void parameterChanged();
index f97d491532845a420f5f3a4dd9f2de1757265423..2c9e6f2c3e697b534bbc61a201a99a26f5044ad3 100644 (file)
@@ -989,6 +989,8 @@ void Monitor::slotSetSelectedClip(Transition* item)
 void Monitor::slotShowEffectScene(bool show)
 {
     if (m_id == Kdenlive::projectMonitor) {
+       kDebug()<<"// SHOWING SCENE: "<<show<<", IS DISPLAYD: "<<m_effectWidget->isVisible();
+       if (m_effectWidget->isVisible() == show) return;
         if (videoSurface) {
             videoSurface->setVisible(!show);
         } else {
index 0116fd2fed398718996c7e874f375f831988a404..5210b7ea2bdeafcf1cb435ff19d65c2c36bc9f30 100644 (file)
@@ -65,7 +65,6 @@ RotoWidget::RotoWidget(QString data, Monitor *monitor, ItemInfo info, Timecode t
 
     connect(m_item, SIGNAL(changed(bool)), this, SLOT(slotUpdateData(bool)));
     connect(edit, SIGNAL(showEdit(bool)), this, SLOT(slotShowScene(bool)));
-    connect(m_monitor, SIGNAL(renderPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
     connect(m_keyframeWidget, SIGNAL(positionChanged(int)), this, SLOT(slotPositionChanged(int)));
     connect(m_keyframeWidget, SIGNAL(keyframeAdded(int)), this, SLOT(slotAddKeyframe(int)));
     connect(m_keyframeWidget, SIGNAL(keyframeRemoved(int)), this, SLOT(slotRemoveKeyframe(int)));
index f89fafc27f607d3698f96730da9baba484e51651..f38d7c635015486df02ac9b7e44490152e44b323 100644 (file)
@@ -65,8 +65,6 @@ TransitionSettings::TransitionSettings(Monitor *monitor, QWidget* parent) :
     connect(transitionList, SIGNAL(activated(int)), this, SLOT(slotTransitionChanged()));
     connect(transitionTrack, SIGNAL(activated(int)), this, SLOT(slotTransitionTrackChanged()));
     connect(m_effectEdit, SIGNAL(parameterChanged(const QDomElement, const QDomElement, int)), this , SLOT(slotUpdateEffectParams(const QDomElement, const QDomElement)));
-    connect(m_effectEdit, SIGNAL(checkMonitorPosition(int)), this, SLOT(slotCheckMonitorPosition(int)));
-    connect(monitor, SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
 }
 
 void TransitionSettings::updateProjectFormat(MltVideoProfile profile, Timecode t, const QList <TrackInfo> info)
@@ -123,6 +121,7 @@ void TransitionSettings::slotTransitionChanged(bool reinit, bool updateCurrent)
         if (m_usedTransition->hasGeometry())
             m_effectEdit->transferParamDesc(m_usedTransition->toXML(), m_usedTransition->info(), false);
     }
+    slotCheckMonitorPosition(m_effectEdit->monitor()->render->seekFramePosition());
 }
 
 void TransitionSettings::slotTransitionTrackChanged()
@@ -148,6 +147,7 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t, int nextTrack
     setEnabled(t != NULL);
     m_effectEdit->setFrameSize(p);
     m_autoTrackTransition = nextTrack;
+    disconnect(m_effectEdit->monitor(), SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
     if (t == m_usedTransition) {
         if (t == NULL) return;
         if (update) {
@@ -182,13 +182,15 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t, int nextTrack
             slotTransitionChanged(false, false);
             transitionList->blockSignals(false);
         }
+        if (m_effectEdit->needsMonitorEffectScene()) {
+           connect(m_effectEdit->monitor(), SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
+       }
     } else {
         // null transition selected
         m_usedTransition = NULL;
         ItemInfo info;
         m_effectEdit->transferParamDesc(QDomElement(), info, false);
     }
-
 }
 
 void TransitionSettings::slotUpdateEffectParams(const QDomElement oldparam, const QDomElement param)
@@ -211,8 +213,10 @@ void TransitionSettings::raiseWindow(QWidget* dock)
 
 void TransitionSettings::slotRenderPos(int pos)
 {
-    if (m_usedTransition)
+    if (m_usedTransition) {
         m_effectEdit->slotSyncEffectsPos(pos - m_usedTransition->startPos().frames(KdenliveSettings::project_fps()));
+       if (isEnabled()) slotCheckMonitorPosition(pos);
+    }
 }
 
 void TransitionSettings::slotSeekTimeline(int pos)
@@ -223,12 +227,18 @@ void TransitionSettings::slotSeekTimeline(int pos)
 
 void TransitionSettings::slotCheckMonitorPosition(int renderPos)
 {
-    if (renderPos >= m_usedTransition->startPos().frames(KdenliveSettings::project_fps()) && renderPos <= m_usedTransition->endPos().frames(KdenliveSettings::project_fps())) {
-        if (!m_effectEdit->monitor()->effectSceneDisplayed())
-           //m_effectEdit->monitor()->getEffectEdit()->getScene()->views().at(0)->isVisible())
-            m_effectEdit->monitor()->slotShowEffectScene(true);
-    } else {
-        m_effectEdit->monitor()->slotShowEffectScene(false);
+    if (!isEnabled()) return;
+    if (m_effectEdit->needsMonitorEffectScene()) {
+       if (renderPos >= m_usedTransition->startPos().frames(KdenliveSettings::project_fps()) && renderPos <= m_usedTransition->endPos().frames(KdenliveSettings::project_fps())) {
+           if (!m_effectEdit->monitor()->effectSceneDisplayed()) {
+               m_effectEdit->monitor()->slotShowEffectScene(true);
+           }
+       } else {
+           m_effectEdit->monitor()->slotShowEffectScene(false);
+       }
+    }
+    else {
+       m_effectEdit->monitor()->slotShowEffectScene(false);
     }
 }