From 28c31903e97abc939e7030bdda33868d14968ff7 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sun, 26 Jun 2016 13:31:00 -0400 Subject: [PATCH] Update mixer board selection state correctly for undo/redo --- src/Menus.cpp | 8 ++++++++ src/TrackPanel.cpp | 37 +++++++++++++++++++------------------ src/TrackPanel.h | 3 ++- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 6cb1045f0..219c4b4e8 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -3857,6 +3857,10 @@ void AudacityProject::OnUndo() if (mHistoryWindow) mHistoryWindow->UpdateDisplay(); + if (mMixerBoard) + // Mixer board may need to change for selection state and pan/gain + mMixerBoard->Refresh(); + ModifyUndoMenuItems(); } @@ -3882,6 +3886,10 @@ void AudacityProject::OnRedo() if (mHistoryWindow) mHistoryWindow->UpdateDisplay(); + if (mMixerBoard) + // Mixer board may need to change for selection state and pan/gain + mMixerBoard->Refresh(); + ModifyUndoMenuItems(); } diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index a3420e741..a26ebbcd9 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -4980,34 +4980,35 @@ void TrackPanel::HandleLabelClick(wxMouseEvent & event) TrackPanel::CalculateRearrangingThresholds(event); } - HandleListSelection(t, event.ShiftDown(), event.ControlDown()); - - if (!unsafe) - MakeParentModifyState(true); + HandleListSelection(t, event.ShiftDown(), event.ControlDown(), !unsafe); } -void TrackPanel::HandleListSelection(Track *t, bool shift, bool ctrl) +void TrackPanel::HandleListSelection(Track *t, bool shift, bool ctrl, + bool modifyState) { // AS: If the shift button is being held down, invert // the selection on this track. if (ctrl) { SelectTrack(t, !t->GetSelected()); Refresh(false); - return; + } + else { + SelectNone(); + if (shift && mLastPickedTrack) + SelectRangeOfTracks(t, mLastPickedTrack); + else + SelectTrack(t, true); + SetFocusedTrack(t); + SelectTrackLength(t); + + this->Refresh(false); + MixerBoard* pMixerBoard = this->GetMixerBoard(); + if (pMixerBoard) + pMixerBoard->RefreshTrackClusters(); } - SelectNone(); - if (shift && mLastPickedTrack) - SelectRangeOfTracks(t, mLastPickedTrack); - else - SelectTrack(t, true); - SetFocusedTrack(t); - SelectTrackLength(t); - - this->Refresh(false); - MixerBoard* pMixerBoard = this->GetMixerBoard(); - if (pMixerBoard) - pMixerBoard->RefreshTrackClusters(); + if (modifyState) + MakeParentModifyState(true); } /// The user is dragging one of the tracks: change the track order diff --git a/src/TrackPanel.h b/src/TrackPanel.h index a3099605d..0ea95e9e8 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -400,7 +400,8 @@ protected: virtual void HandleLabelClick(wxMouseEvent & event); public: - virtual void HandleListSelection(Track *t, bool shift, bool ctrl); + virtual void HandleListSelection(Track *t, bool shift, bool ctrl, + bool modifyState = true); protected: virtual void HandleRearrange(wxMouseEvent & event);