]> git.sesse.net Git - kdenlive/blobdiff - src/projectlist.cpp
Fix crash on clip deletion, fix issues with placeholder clips
[kdenlive] / src / projectlist.cpp
index 0f40dcc90f855ab407cf44fd50eba99437dcc799..fb099e49153d65e1e4d5e89290fd8639f3192634 100644 (file)
@@ -233,6 +233,8 @@ void ProjectList::editClipSelection(QList<QTreeWidgetItem *> list)
     commonproperties.insert("video_index", "-");
     commonproperties.insert("audio_index", "-");
 
+    bool allowDurationChange = true;
+    int commonDuration = -1;
     ProjectItem *item;
     for (int i = 0; i < list.count(); i++) {
         item = NULL;
@@ -245,6 +247,16 @@ void ProjectList::editClipSelection(QList<QTreeWidgetItem *> list)
             // check properties
             DocClipBase *clip = item->referencedClip();
             if (clipList.contains(clip)) continue;
+            if (clip->clipType() != COLOR && clip->clipType() != IMAGE && clip->clipType() != TEXT) {
+                allowDurationChange = false;
+            }
+            if (allowDurationChange && commonDuration != 0) {
+                if (commonDuration == -1) {
+                    commonDuration = clip->duration().frames(m_fps);
+                } else if (commonDuration != clip->duration().frames(m_fps)) {
+                    commonDuration = 0;
+                }
+            }
             clipList.append(clip);
             QMap <QString, QString> clipprops = clip->properties();
             QMapIterator<QString, QString> p(commonproperties);
@@ -258,6 +270,7 @@ void ProjectList::editClipSelection(QList<QTreeWidgetItem *> list)
             }
         }
     }
+    if (allowDurationChange) commonproperties.insert("out", QString::number(commonDuration));
     QMapIterator<QString, QString> p(commonproperties);
     while (p.hasNext()) {
         p.next();
@@ -843,7 +856,7 @@ void ProjectList::updateAllClips()
             if (item->referencedClip()->producer() == NULL) {
                 if (clip->isPlaceHolder() == false) {
                     requestClipInfo(clip->toXML(), clip->getId());
-                } else item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+                } else if (!clip->isPlaceHolder()) item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
             } else {
                 if (item->data(0, Qt::DecorationRole).isNull()) {
                     requestClipThumbnail(clip->getId());