]> git.sesse.net Git - kdenlive/commitdiff
Fix problem in effect stack that made keyframe effect go on top when editing paramete...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 23 Oct 2008 12:26:26 +0000 (12:26 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 23 Oct 2008 12:26:26 +0000 (12:26 +0000)
http://www.kdenlive.org/mantis/view.php?id=236

svn path=/branches/KDE4/; revision=2542

src/effectslist.cpp
src/renderer.cpp

index 331bb75b4dd503c14f650ca155856ae774db5934..ffb5c41bdc5b79b80927c368eae54a6d241aad15 100644 (file)
@@ -123,7 +123,6 @@ QStringList EffectsList::effectNames() {
         QDomNode namenode = effect.elementsByTagName("name").item(0);
         if (!namenode.isNull()) list.append(i18n(namenode.toElement().text().toUtf8().data()));
     }
-    qSort(list);
     return list;
 }
 
index ac1c2e5d36ca9265ac1286aac412a7977d52e484..ea763c051ba1d7e21dda93f76088b4b5e7174acf 100644 (file)
@@ -1531,6 +1531,20 @@ bool Render::mltAddEffect(int track, GenTime position, QHash <QString, QString>
     }
     Mlt::Service clipService(clip->get_service());
     m_isBlocked = true;
+
+    // temporarily remove all effects after insert point
+    QList <Mlt::Filter *> filtersList;
+    const int filer_ix = QString(args.value("kdenlive_ix")).toInt();
+    int ct = 0;
+    Mlt::Filter *filter = clipService.filter(ct);
+    while (filter) {
+        if (QString(filter->get("kdenlive_ix")).toInt() > filer_ix) {
+            filtersList.append(filter);
+            clipService.detach(*filter);
+        } else ct++;
+        filter = clipService.filter(ct);
+    }
+
     // create filter
     QString tag = args.value("tag");
     kDebug() << " / / INSERTING EFFECT: " << tag;
@@ -1605,6 +1619,12 @@ bool Render::mltAddEffect(int track, GenTime position, QHash <QString, QString>
     }
     delete[] filterId;
     delete[] filterTag;
+
+    // re-add following filters
+    for (int i = 0; i < filtersList.count(); i++) {
+        clipService.attach(*(filtersList.at(i)));
+    }
+
     m_isBlocked = false;
     if (doRefresh) refresh();
     return true;