From 7d57a17ff453a64d928a801afebd3472090d0630 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Fri, 12 Jan 2018 16:24:54 -0500 Subject: [PATCH] Change details of focusing of tracks in presence of pending ones... ... Don't focus a pending changed track but remap it to the original. You can focus a pending added track. --- src/TrackPanel.cpp | 10 +++++----- src/TrackPanelAx.cpp | 10 +++++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index ffdf34b36..46c3e8146 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -2865,15 +2865,15 @@ void TrackPanel::SetFocusedTrack( Track *t ) if (t && !t->GetLinked() && t->GetLink()) t = (WaveTrack*)t->GetLink(); - if (t && AudacityProject::GetKeyboardCaptureHandler()) { + if ( !mAx->SetFocus( Track::Pointer( t ) ) ) + return; + + if (t && AudacityProject::GetKeyboardCaptureHandler()) AudacityProject::ReleaseKeyboard(this); - } - if (t) { + if (t) AudacityProject::CaptureKeyboard(this); - } - mAx->SetFocus( Track::Pointer( t ) ); Refresh( false ); } diff --git a/src/TrackPanelAx.cpp b/src/TrackPanelAx.cpp index 936f099fd..31a6e09de 100644 --- a/src/TrackPanelAx.cpp +++ b/src/TrackPanelAx.cpp @@ -131,8 +131,14 @@ bool TrackPanelAx::IsFocused( Track *track ) if( !focusedTrack ) focusedTrack = SetFocus(); + // Remap track pointer if there are oustanding pending updates + auto origTrack = + mTrackPanel->GetTracks()->FindById( track->GetId() ); + if (origTrack) + track = origTrack; + if( ( track == focusedTrack.get() ) || - ( track == focusedTrack->GetLink() ) ) + ( focusedTrack && track == focusedTrack->GetLink() ) ) { return true; } @@ -142,6 +148,8 @@ bool TrackPanelAx::IsFocused( Track *track ) int TrackPanelAx::TrackNum( const std::shared_ptr &target ) { + // Find 1-based position of the target in the visible tracks, or 0 if not + // found TrackListIterator iter( mTrackPanel->GetTracks() ); Track *t = iter.First(); int ndx = 0;