diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp index 52aa03feb..d818167c8 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVRulerControls.cpp @@ -58,8 +58,13 @@ void WaveTrackVRulerControls::DoZoomPreset( int i) const auto wt = static_cast(pTrack.get()); + // Don't pass the partner, that causes problems when updating display + // during recording and there are special pending tracks. + // This function implements WaveTrack::DoSetMinimized which is always + // called in a context that loops over linked tracks too and reinvokes. + auto partner = nullptr; WaveTrackVZoomHandle::DoZoom( - NULL, wt, (i==1)?kZoomHalfWave: kZoom1to1, + NULL, wt, partner, (i==1)?kZoomHalfWave: kZoom1to1, wxRect(0,0,0,0), 0,0, true); } @@ -140,8 +145,9 @@ unsigned WaveTrackVRulerControls::HandleWheelRotation } else if (event.CmdDown() && !event.ShiftDown()) { const int yy = event.m_y; + const auto partner = static_cast(wt); WaveTrackVZoomHandle::DoZoom( - pProject, wt, (steps < 0)?kZoomOut:kZoomIn, + pProject, wt, partner, (steps < 0)?kZoomOut:kZoomIn, evt.rect, yy, yy, true); } else if (!event.CmdDown() && event.ShiftDown()) { diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp index 64d578bab..2d44c7eba 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.cpp @@ -65,13 +65,11 @@ void WaveTrackVZoomHandle::Enter(bool) // the zoomKind and cause a drag-zoom-in. void WaveTrackVZoomHandle::DoZoom (AudacityProject *pProject, - WaveTrack *pTrack, int ZoomKind, + WaveTrack *pTrack, WaveTrack *partner, int ZoomKind, const wxRect &rect, int zoomStart, int zoomEnd, bool fixedMousePoint) { static const float ZOOMLIMIT = 0.001f; - // Assume linked track is wave or null - const auto partner = static_cast(pTrack->GetLink()); int height = rect.height; int ypos = rect.y; @@ -398,8 +396,11 @@ void WaveTrackVRulerMenuTable::InitMenu(Menu *, void *pUserData) void WaveTrackVRulerMenuTable::OnZoom( int iZoomCode ) { + // Assume linked track is wave or null + const auto partner = static_cast(mpData->pTrack->GetLink()); WaveTrackVZoomHandle::DoZoom - (::GetActiveProject(), mpData->pTrack, iZoomCode, mpData->rect, mpData->yy, mpData->yy, false); + (::GetActiveProject(), mpData->pTrack, partner, + iZoomCode, mpData->rect, mpData->yy, mpData->yy, false); using namespace RefreshCode; mpData->result = UpdateVRuler | RefreshAll; @@ -684,7 +685,9 @@ UIHandle::Result WaveTrackVZoomHandle::Release if( bVZoom ){ if( shiftDown ) mZoomStart=mZoomEnd; - DoZoom(pProject, pTrack.get(), shiftDown ? (rightUp ? kZoom1to1 : kZoomOut) : kZoomIn, + const auto partner = static_cast(pTrack->GetLink()); + DoZoom(pProject, pTrack.get(), partner, + shiftDown ? (rightUp ? kZoom1to1 : kZoomOut) : kZoomIn, mRect, mZoomStart, mZoomEnd, false); } } diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h index 7d2ecf793..500c124a2 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackVZoomHandle.h @@ -42,7 +42,7 @@ public: static void DoZoom (AudacityProject *pProject, - WaveTrack *pTrack, int ZoomKind, + WaveTrack *pTrack, WaveTrack *partner, int ZoomKind, const wxRect &rect, int zoomStart, int zoomEnd, bool fixedMousePoint);