From 302fb1f6968fbf6fe07a9f97ce0a4331dc5081ef Mon Sep 17 00:00:00 2001
From: Paul Licameli <paul.licameli@audacityteam.org>
Date: Mon, 24 Jul 2023 08:20:46 -0400
Subject: [PATCH] Fix crash when dragging clips between tracks with sync lock
 on

---
 src/tracks/ui/TimeShiftHandle.cpp | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/tracks/ui/TimeShiftHandle.cpp b/src/tracks/ui/TimeShiftHandle.cpp
index 0b94745c55..3695bbcfbb 100644
--- a/src/tracks/ui/TimeShiftHandle.cpp
+++ b/src/tracks/ui/TimeShiftHandle.cpp
@@ -363,7 +363,10 @@ void ClipMoveState::Init(
                for ( auto pTrack2 : group ) {
                   if (pTrack2 == &track)
                      continue;
-                  
+                  if (!pTrack2->IsLeader())
+                     continue;
+
+                  // shifters maps from leader tracks only
                   auto &shifter2 = *shifters[pTrack2];
                   auto size = shifter2.MovingIntervals().size();
                   shifter2.SelectInterval(*interval);
@@ -832,8 +835,10 @@ UIHandle::Result TimeShiftHandle::Drag
    const wxMouseEvent &event = evt.event;
    auto &viewInfo = ViewInfo::Get( *pProject );
 
+   auto &trackList = TrackList::Get(*pProject);
    ChannelView *trackView = dynamic_cast<ChannelView*>(evt.pCell.get());
-   Track *track = trackView ? trackView->FindTrack().get() : nullptr;
+   Track *track =
+      *trackList.FindLeader(trackView ? trackView->FindTrack().get() : nullptr);
 
    // Uncommenting this permits drag to continue to work even over the controls area
    /*
@@ -853,9 +858,6 @@ UIHandle::Result TimeShiftHandle::Drag
    if (!pTrack)
       return RefreshCode::RefreshNone;
 
-
-   auto &trackList = TrackList::Get( *pProject );
-
    // GM: slide now implementing snap-to
    // samples functionality based on sample rate.
 
-- 
GitLab