]> git.sesse.net Git - kdenlive/commitdiff
Fix crash on project clip deletion
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 17 Nov 2012 22:42:23 +0000 (23:42 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 17 Nov 2012 22:42:23 +0000 (23:42 +0100)
src/commands/refreshmonitorcommand.cpp
src/commands/refreshmonitorcommand.h
src/customtrackview.cpp

index 8130bbb3f28f6322b670f4fd05bf1f8215ab997e..384c79d694e4e14c717bb5ec8203cc153ccdbaa9 100644 (file)
 #include "customtrackview.h"
 
 
-RefreshMonitorCommand::RefreshMonitorCommand(CustomTrackView *view, bool execute, QUndoCommand * parent) :
+RefreshMonitorCommand::RefreshMonitorCommand(CustomTrackView *view, bool execute, bool refreshOnUndo, QUndoCommand * parent) :
         QUndoCommand(parent),
         m_view(view),
-        m_exec(execute)
+        m_exec(execute),
+        m_execOnUndo(refreshOnUndo)
 {
 }
 
@@ -33,12 +34,12 @@ RefreshMonitorCommand::RefreshMonitorCommand(CustomTrackView *view, bool execute
 // virtual
 void RefreshMonitorCommand::undo()
 {
-    m_view->monitorRefresh();
+    if (m_execOnUndo) m_view->monitorRefresh();
 }
 // virtual
 void RefreshMonitorCommand::redo()
 {
-    if (m_exec)
+    if (m_exec && !m_execOnUndo)
        m_view->monitorRefresh();
     m_exec = true;
 }
index 5a11a4ce5a5ff0a76c6b6c31f514de99479e0a8a..111daa42060a4f7b45d31489aabd132987440d29 100644 (file)
@@ -28,13 +28,14 @@ class CustomTrackView;
 class RefreshMonitorCommand : public QUndoCommand
 {
 public:
-    RefreshMonitorCommand(CustomTrackView *view, bool execute, QUndoCommand * parent = 0);
+    RefreshMonitorCommand(CustomTrackView *view, bool execute, bool refreshOnUndo, QUndoCommand * parent = 0);
     virtual void undo();
     virtual void redo();
 
 private:
     CustomTrackView *m_view;
     bool m_exec;
+    bool m_execOnUndo;
 };
 
 #endif
index ebeb71946c1f5c3ac2303570b9d0b24888520f70..6cc2333ded67a005759424ded0e34f938eee0cd2 100644 (file)
@@ -3439,6 +3439,7 @@ void CustomTrackView::deleteClip(const QString &clipId)
     resetSelectionGroup();
     QList<QGraphicsItem *> itemList = items();
     QUndoCommand *deleteCommand = new QUndoCommand();
+    new RefreshMonitorCommand(this, false, true, deleteCommand);
     int count = 0;
     for (int i = 0; i < itemList.count(); i++) {
         if (itemList.at(i)->type() == AVWIDGET) {
@@ -3458,10 +3459,10 @@ void CustomTrackView::deleteClip(const QString &clipId)
         delete deleteCommand;
     } else {
         updateTrackDuration(-1, deleteCommand);
-       new RefreshMonitorCommand(this, false, deleteCommand);
+       new RefreshMonitorCommand(this, false, false, deleteCommand);
         m_commandStack->push(deleteCommand);
     }
-    m_document->renderer()->doRefresh();    
+    m_document->renderer()->doRefresh();
 }
 
 void CustomTrackView::seekCursorPos(int pos)
@@ -4175,6 +4176,7 @@ void CustomTrackView::deleteSelectedClips()
     }
     scene()->clearSelection();
     QUndoCommand *deleteSelected = new QUndoCommand();
+    new RefreshMonitorCommand(this, false, true, deleteSelected);
 
     int groupCount = 0;
     int clipCount = 0;
@@ -4230,9 +4232,8 @@ void CustomTrackView::deleteSelectedClips()
         deleteSelected->setText(i18np("Delete selected transition", "Delete selected transitions", transitionCount));
     else deleteSelected->setText(i18n("Delete selected items"));
     updateTrackDuration(-1, deleteSelected);
-    new RefreshMonitorCommand(this, false, deleteSelected);
+    new RefreshMonitorCommand(this, true, false, deleteSelected);
     m_commandStack->push(deleteSelected);
-    m_document->renderer()->doRefresh();
 }
 
 
@@ -4491,8 +4492,9 @@ void CustomTrackView::addClip(QDomElement xml, const QString &clipId, ItemInfo i
         m_document->renderer()->mltAddEffect(info.track, info.startPos, getEffectArgs(item->effect(i)), false);
     }
     setDocumentModified();
-    if (refresh)
+    if (refresh) {
         m_document->renderer()->doRefresh();
+    }
     if (!baseclip->isPlaceHolder())
         m_waitingThumbs.append(item);
     m_thumbsTimer.start();
@@ -6028,6 +6030,7 @@ void CustomTrackView::pasteClip()
     }
     QUndoCommand *pasteClips = new QUndoCommand();
     pasteClips->setText("Paste clips");
+    new RefreshMonitorCommand(this, false, true, pasteClips);
 
     for (int i = 0; i < m_copiedItems.count(); i++) {
         // parse all clip names
@@ -6057,7 +6060,7 @@ void CustomTrackView::pasteClip()
         }
     }
     updateTrackDuration(-1, pasteClips);
-    new RefreshMonitorCommand(this, false, pasteClips);
+    new RefreshMonitorCommand(this, false, false, pasteClips);
     m_commandStack->push(pasteClips);
 }