diff --git a/app/widget/timelinewidget/undo/timelineundogeneral.cpp b/app/widget/timelinewidget/undo/timelineundogeneral.cpp index 0db6cf4d4..659b276b2 100644 --- a/app/widget/timelinewidget/undo/timelineundogeneral.cpp +++ b/app/widget/timelinewidget/undo/timelineundogeneral.cpp @@ -591,13 +591,18 @@ void TrackReplaceBlockWithGapCommand::CreateRemoveTransitionCommandIfNecessary(b } } -void TimelineRemoveTrackCommand::redo() +void TimelineRemoveTrackCommand::prepare() { list_ = track_->sequence()->track_list(track_->type()); index_ = list_->GetArrayIndexFromCacheIndex(track_->Index()); - Node::DisconnectEdge(track_, list_->track_input(index_)); + remove_command_ = new NodeRemoveWithExclusiveDependenciesAndDisconnect(track_); +} + +void TimelineRemoveTrackCommand::redo() +{ + remove_command_->redo_now(); list_->parent()->InputArrayRemove(list_->track_input(), index_); } @@ -606,7 +611,7 @@ void TimelineRemoveTrackCommand::undo() { list_->parent()->InputArrayInsert(list_->track_input(), index_); - Node::ConnectEdge(track_, list_->track_input(index_)); + remove_command_->undo_now(); } } diff --git a/app/widget/timelinewidget/undo/timelineundogeneral.h b/app/widget/timelinewidget/undo/timelineundogeneral.h index d2c3a8589..b8670a063 100644 --- a/app/widget/timelinewidget/undo/timelineundogeneral.h +++ b/app/widget/timelinewidget/undo/timelineundogeneral.h @@ -167,15 +167,23 @@ class TimelineRemoveTrackCommand : public UndoCommand { public: TimelineRemoveTrackCommand(Track *track) : - track_(track) + track_(track), + remove_command_(nullptr) {} + virtual ~TimelineRemoveTrackCommand() + { + delete remove_command_; + } + virtual Project* GetRelevantProject() const override { return track_->project(); } protected: + virtual void prepare() override; + virtual void redo() override; virtual void undo() override; @@ -187,6 +195,8 @@ private: int index_; + UndoCommand *remove_command_; + }; class TransitionRemoveCommand : public UndoCommand {