From a3b7e870f1b6e72ec3a34d342dbdc03215780063 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sat, 17 Nov 2012 23:42:23 +0100 Subject: [PATCH 1/1] Fix crash on project clip deletion --- src/commands/refreshmonitorcommand.cpp | 9 +++++---- src/commands/refreshmonitorcommand.h | 3 ++- src/customtrackview.cpp | 15 +++++++++------ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/commands/refreshmonitorcommand.cpp b/src/commands/refreshmonitorcommand.cpp index 8130bbb3..384c79d6 100644 --- a/src/commands/refreshmonitorcommand.cpp +++ b/src/commands/refreshmonitorcommand.cpp @@ -22,10 +22,11 @@ #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; } diff --git a/src/commands/refreshmonitorcommand.h b/src/commands/refreshmonitorcommand.h index 5a11a4ce..111daa42 100644 --- a/src/commands/refreshmonitorcommand.h +++ b/src/commands/refreshmonitorcommand.h @@ -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 diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index ebeb7194..6cc2333d 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -3439,6 +3439,7 @@ void CustomTrackView::deleteClip(const QString &clipId) resetSelectionGroup(); QList 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); } -- 2.39.2