1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-31 16:09:28 +02:00

Fix update of minimized state (crash in MSVC debug runtime)...

... This time those run-time checks really did something useful for us.

There was a decrement of a begin iterator of an STL container, a no-no.
This commit is contained in:
Paul Licameli 2018-03-09 11:35:10 -05:00
parent ae351abbc2
commit 40a117b160
3 changed files with 17 additions and 8 deletions

View File

@ -58,8 +58,13 @@ void WaveTrackVRulerControls::DoZoomPreset( int i)
const auto wt = static_cast<WaveTrack*>(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<WaveTrack *>(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()) {

View File

@ -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<WaveTrack *>(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<WaveTrack *>(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<WaveTrack *>(pTrack->GetLink());
DoZoom(pProject, pTrack.get(), partner,
shiftDown ? (rightUp ? kZoom1to1 : kZoomOut) : kZoomIn,
mRect, mZoomStart, mZoomEnd, false);
}
}

View File

@ -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);