From 9a53625ceb3a614e4a95c3ce4335d33a69a1538c Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 8 Aug 2015 18:55:31 -0400 Subject: [PATCH] Bug1134: Click and drag to move a track should make only one undo item --- src/TrackPanel.cpp | 22 +++++++++++++--------- src/TrackPanel.h | 1 + 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index ba657abed..3c1cec52c 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -5545,6 +5545,7 @@ void TrackPanel::HandleLabelClick(wxMouseEvent & event) // JH: also, capture the current track for rearranging, so the user // can drag the track up or down to swap it with others if (!unsafe) { + mRearrangeCount = 0; SetCapturedTrack( t, IsRearranging ); TrackPanel::CalculateRearrangingThresholds(event); } @@ -5580,7 +5581,16 @@ void TrackPanel::HandleRearrange(wxMouseEvent & event) { // are we finishing the drag? if (event.LeftUp()) { - SetCapturedTrack( NULL ); + if (mRearrangeCount != 0) { + wxString dir; + dir = mRearrangeCount < 0 ? _("up") : _("down"); + MakeParentPushState(wxString::Format(_("Moved '%s' %s"), + mCapturedTrack->GetName().c_str(), + dir.c_str()), + _("Move Track")); + } + + SetCapturedTrack(NULL); SetCursor(*mArrowCursor); return; } @@ -5591,10 +5601,9 @@ void TrackPanel::HandleRearrange(wxMouseEvent & event) return; MixerBoard* pMixerBoard = this->GetMixerBoard(); // Update mixer board, too. - wxString dir; if (event.m_y < mMoveUpThreshold || event.m_y < 0) { mTracks->MoveUp(mCapturedTrack); - dir = _("up"); + --mRearrangeCount; #ifdef EXPERIMENTAL_MIDI_OUT if (pMixerBoard && (mCapturedTrack->GetKind() == Track::Wave || mCapturedTrack->GetKind() == Track::Note)) @@ -5606,8 +5615,8 @@ void TrackPanel::HandleRearrange(wxMouseEvent & event) } else if (event.m_y > mMoveDownThreshold || event.m_y > GetRect().GetHeight()) { mTracks->MoveDown(mCapturedTrack); + ++mRearrangeCount; /* i18n-hint: a direction as in up or down.*/ - dir = _("down"); #ifdef EXPERIMENTAL_MIDI_OUT if (pMixerBoard && (mCapturedTrack->GetKind() == Track::Wave || mCapturedTrack->GetKind() == Track::Note)) @@ -5622,11 +5631,6 @@ void TrackPanel::HandleRearrange(wxMouseEvent & event) return; } - MakeParentPushState(wxString::Format(_("Moved '%s' %s"), - mCapturedTrack->GetName().c_str(), - dir.c_str()), - _("Move Track")); - // JH: if we moved up or down, recalculate the thresholds and make sure the // track is fully on-screen. TrackPanel::CalculateRearrangingThresholds(event); diff --git a/src/TrackPanel.h b/src/TrackPanel.h index 78579c089..c46d4e1e1 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -773,6 +773,7 @@ protected: // coordinate should the dragging track move up or down? int mMoveUpThreshold; int mMoveDownThreshold; + int mRearrangeCount; #ifdef EXPERIMENTAL_SCRUBBING_BASIC int mScrubToken;