]> git.sesse.net Git - kdenlive/blobdiff - src/transitionsettings.cpp
Fix bug on transition change undo
[kdenlive] / src / transitionsettings.cpp
index 996d8a8948599431fcb3922bfa09d003123c8a61..dc8c0f4717c42728d057b620a804885763b04756 100644 (file)
@@ -122,9 +122,21 @@ void TransitionSettings::slotTransitionChanged(bool reinit, bool updateCurrent)
         m_effectEdit->transferParamDesc(e, m_usedTransition->info(), false);
     } else {
         // Same transition, we just want to update the parameters value
-        slotUpdateEffectParams(e, e);
-        if (m_usedTransition->hasGeometry())
-            m_effectEdit->transferParamDesc(m_usedTransition->toXML(), m_usedTransition->info(), false);
+        int ix = transitionList->findData(m_usedTransition->transitionInfo(), Qt::UserRole, Qt::MatchExactly);
+        if (ix != transitionList->currentIndex()) {
+           // Transition type changed, reload params
+           transitionList->blockSignals(true);
+           transitionList->setCurrentIndex(ix);
+           transitionList->blockSignals(false);
+           m_effectEdit->transferParamDesc(e, m_usedTransition->info(), false);
+       }
+       else {
+           slotUpdateEffectParams(e, e);
+           if (m_usedTransition->hasGeometry())
+               m_effectEdit->transferParamDesc(m_usedTransition->toXML(), m_usedTransition->info(), false);
+       }
+       if (m_effectEdit->needsMonitorEffectScene())
+           connect(m_effectEdit->monitor(), SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
     }
     slotCheckMonitorPosition(m_effectEdit->monitor()->render->seekFramePosition());
 }
@@ -153,7 +165,7 @@ void TransitionSettings::slotTransitionItemSelected(Transition* t, int nextTrack
     m_effectEdit->setFrameSize(p);
     m_autoTrackTransition = nextTrack;
     disconnect(m_effectEdit->monitor(), SIGNAL(renderPosition(int)), this, SLOT(slotRenderPos(int)));
-    if (t == m_usedTransition) {
+    if (t == m_usedTransition) {       
         if (t == NULL) return;
         if (update) {
             transitionTrack->blockSignals(true);