]> git.sesse.net Git - kdenlive/commitdiff
Fix possible crash on track deletion: http://kdenlive.org/mantis/view.php?id=2967
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 4 Feb 2013 12:07:07 +0000 (13:07 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Mon, 4 Feb 2013 12:08:40 +0000 (13:08 +0100)
src/abstractclipitem.cpp
src/customtrackview.cpp

index cd4c2ed11a96ce12c08045d32c644040330a8403..86b325af3b5f1e5fb7f224b189492f720dc1e911 100644 (file)
@@ -58,6 +58,7 @@ void AbstractClipItem::closeAnimation()
 #if QT_VERSION >= 0x040600
     if (!isEnabled()) return;
     setEnabled(false);
+    setFlag(QGraphicsItem::ItemIsSelectable, false);
     if (!(KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::SimpleAnimationEffects)) {
         // animation disabled
         deleteLater();
index 15abfdebaa962de09f0eb814b0e2e68ddef4871b..c4563bfc6b1edf8953e0f9f1c6690e87524802c5 100644 (file)
@@ -3092,6 +3092,10 @@ void CustomTrackView::addTrack(TrackInfo type, int ix)
 
 void CustomTrackView::removeTrack(int ix)
 {
+    // Clear effect stack
+    clearSelection();
+    emit transitionItemSelected(NULL);
+
     // Delete track in MLT playlist
     m_document->renderer()->mltDeleteTrack(m_document->tracksCount() - ix);
     m_document->deleteTrack(m_document->tracksCount() - ix - 1);
@@ -3100,12 +3104,10 @@ void CustomTrackView::removeTrack(int ix)
     QRectF r(0, startY, sceneRect().width(), sceneRect().height() - startY);
     QList<QGraphicsItem *> selection = m_scene->items(r);
 
-    resetSelectionGroup();
-
     m_selectionGroup = new AbstractGroupItem(m_document->fps());
     scene()->addItem(m_selectionGroup);
     for (int i = 0; i < selection.count(); i++) {
-        if ((!selection.at(i)->parentItem()) && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET)) {
+        if ((selection.at(i) && !selection.at(i)->parentItem() && selection.at(i)->isEnabled()) && (selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET || selection.at(i)->type() == GROUPWIDGET)) {
             m_selectionGroup->addItem(selection.at(i));
         }
     }
@@ -6505,7 +6507,11 @@ void CustomTrackView::slotConfigTracks(int ix)
 void CustomTrackView::deleteTimelineTrack(int ix, TrackInfo trackinfo)
 {
     if (m_document->tracksCount() < 2) return;
-    double startY = ix * m_tracksHeight + 1 + m_tracksHeight / 2;
+    // Clear effect stack
+    clearSelection();
+    emit transitionItemSelected(NULL);
+    
+    double startY = ix * m_tracksHeight + 1 + m_tracksHeight / 2;    
     QRectF r(0, startY, sceneRect().width(), m_tracksHeight / 2 - 1);
     QList<QGraphicsItem *> selection = m_scene->items(r);
     QUndoCommand *deleteTrack = new QUndoCommand();
@@ -7347,6 +7353,7 @@ void CustomTrackView::insertZoneOverwrite(QStringList data, int in)
 
 void CustomTrackView::clearSelection(bool emitInfo)
 {
+    if (m_dragItem) m_dragItem->setSelected(false);
     resetSelectionGroup();
     scene()->clearSelection();
     m_dragItem = NULL;