From 4801891532a973b231df2fe34e25a5caaf276718 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Tue, 21 Feb 2023 18:50:11 -0800 Subject: [PATCH] timeline: fix issue where transitions wouldn't reconnect on alt+drag --- app/widget/timelinewidget/tool/pointer.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/widget/timelinewidget/tool/pointer.cpp b/app/widget/timelinewidget/tool/pointer.cpp index 6c2296ab8..33adebd93 100644 --- a/app/widget/timelinewidget/tool/pointer.cpp +++ b/app/widget/timelinewidget/tool/pointer.cpp @@ -718,6 +718,7 @@ void PointerTool::FinishDrag(TimelineViewMouseEvent *event) if (!relinks.empty()) { for (auto it=relinks.cbegin(); it!=relinks.cend(); it++) { + // Re-connect links on duplicate clips for (auto jt=it.key()->links().cbegin(); jt!=it.key()->links().cend(); jt++) { Node *link = *jt; Node *copy_link = relinks.value(link); @@ -725,6 +726,24 @@ void PointerTool::FinishDrag(TimelineViewMouseEvent *event) command->add_child(new NodeLinkCommand(it.value(), copy_link, true)); } } + + // Re-connect transitions where applicable + if (ClipBlock *og_clip = dynamic_cast(it.key())) { + ClipBlock *cp_clip = static_cast(it.value()); + + TransitionBlock *og_in_transition = og_clip->in_transition(); + TransitionBlock *og_out_transition = og_clip->out_transition(); + + if (og_in_transition && relinks.contains(og_in_transition)) { + TransitionBlock *cp_in_transition = static_cast(relinks.value(og_in_transition)); + command->add_child(new NodeEdgeAddCommand(cp_clip, NodeInput(cp_in_transition, TransitionBlock::kInBlockInput))); + } + + if (og_out_transition && relinks.contains(og_out_transition)) { + TransitionBlock *cp_out_transition = static_cast(relinks.value(og_out_transition)); + command->add_child(new NodeEdgeAddCommand(cp_clip, NodeInput(cp_out_transition, TransitionBlock::kOutBlockInput))); + } + } } }