diff --git a/app/dialog/speedduration/speedduration.cpp b/app/dialog/speedduration/speedduration.cpp index dbe43a1b8..af94d4799 100644 --- a/app/dialog/speedduration/speedduration.cpp +++ b/app/dialog/speedduration/speedduration.cpp @@ -172,10 +172,7 @@ void SpeedDurationDialog::accept() new TrackRippleRemoveBlockCommand(TrackOutput::TrackFromBlock(next_block), next_block, command); // Delete node and its exclusive deps - QList gap_and_its_deps; - gap_and_its_deps.append(next_block); - gap_and_its_deps.append(next_block->GetExclusiveDependencies()); - new NodeRemoveCommand(static_cast(next_block->parent()), gap_and_its_deps, command); + new NodeRemoveWithExclusiveDeps(static_cast(next_block->parent()), next_block, command); } else { // Otherwise we can just resize it new BlockResizeCommand(next_block, next_block->out() - new_clip_length, command); diff --git a/app/widget/nodeview/nodeviewundo.cpp b/app/widget/nodeview/nodeviewundo.cpp index a7cf98898..4c8cd693b 100644 --- a/app/widget/nodeview/nodeviewundo.cpp +++ b/app/widget/nodeview/nodeviewundo.cpp @@ -125,3 +125,12 @@ void NodeRemoveCommand::undo() edges_.clear(); } + +NodeRemoveWithExclusiveDeps::NodeRemoveWithExclusiveDeps(NodeGraph *graph, Node *node, QUndoCommand *parent) +{ + QList node_and_its_deps; + node_and_its_deps.append(node); + node_and_its_deps.append(node->GetExclusiveDependencies()); + + remove_command_ = new NodeRemoveCommand(graph, node_and_its_deps, this); +} diff --git a/app/widget/nodeview/nodeviewundo.h b/app/widget/nodeview/nodeviewundo.h index 72dcfaffc..14ae422ad 100644 --- a/app/widget/nodeview/nodeviewundo.h +++ b/app/widget/nodeview/nodeviewundo.h @@ -78,4 +78,14 @@ private: QList edges_; }; +class NodeRemoveWithExclusiveDeps : public QUndoCommand { +public: + NodeRemoveWithExclusiveDeps(NodeGraph* graph, + Node* node, + QUndoCommand* parent = nullptr); + +private: + NodeRemoveCommand* remove_command_; +}; + #endif // NODEVIEWUNDO_H diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 9dcab8a80..58e09b825 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -445,12 +445,7 @@ void TimelineWidget::DeleteSelectedInternal(const QList blocks, bool re } if (remove_from_graph) { - QList block_and_its_exclusive_deps; - - block_and_its_exclusive_deps.append(b); - block_and_its_exclusive_deps.append(b->GetExclusiveDependencies()); - - new NodeRemoveCommand(static_cast(b->parent()), block_and_its_exclusive_deps, command); + new NodeRemoveWithExclusiveDeps(static_cast(b->parent()), b, command); } } } diff --git a/app/widget/timelinewidget/tool/ripple.cpp b/app/widget/timelinewidget/tool/ripple.cpp index b5d684c5f..1ea64ea80 100644 --- a/app/widget/timelinewidget/tool/ripple.cpp +++ b/app/widget/timelinewidget/tool/ripple.cpp @@ -72,7 +72,7 @@ void TimelineWidget::RippleTool::MouseReleaseInternal(TimelineViewMouseEvent *ev // Assumed the Block was a Gap and it was reduced to zero length, remove it here new TrackRippleRemoveBlockCommand(parent()->GetTrackFromReference(ghost->Track()), b, command); - new NodeRemoveCommand(static_cast(b->parent()), {b}, command); + new NodeRemoveWithExclusiveDeps(static_cast(b->parent()), b, command); } } }