diff --git a/src/ProjectHistory.cpp b/src/ProjectHistory.cpp index 5dff9db3a..a0682cfed 100644 --- a/src/ProjectHistory.cpp +++ b/src/ProjectHistory.cpp @@ -15,7 +15,6 @@ Paul Licameli split from ProjectManager.cpp #include "Project.h" #include "ProjectFileIO.h" #include "ProjectSettings.h" -#include "ProjectWindow.h" #include "Tags.h" #include "Track.h" #include "TrackPanel.h" @@ -147,7 +146,6 @@ void ProjectHistory::PopState(const UndoState &state) auto &projectFileIO = ProjectFileIO::Get( project ); auto &dstTracks = TrackList::Get( project ); auto &viewInfo = ViewInfo::Get( project ); - auto &window = ProjectWindow::Get( project ); viewInfo.selectedRegion = state.selectedRegion; @@ -192,8 +190,6 @@ void ProjectHistory::PopState(const UndoState &state) if(odUsed) ODManager::Instance()->AddNewTask(std::move(computeTask)); - window.HandleResize(); - MenuManager::Get( project ).UpdateMenus(); projectFileIO.AutoSave(); @@ -204,12 +200,10 @@ void ProjectHistory::SetStateTo(unsigned int n) auto &project = mProject; auto &trackPanel = TrackPanel::Get( project ); auto &undoManager = UndoManager::Get( project ); - auto &window = ProjectWindow::Get( project ); undoManager.SetStateTo(n, [this]( const UndoState &state ){ PopState(state); } ); - window.HandleResize(); trackPanel.SetFocusedTrack(NULL); trackPanel.Refresh(false); MenuManager::Get( project ).ModifyUndoMenuItems( project ); diff --git a/src/ProjectWindow.cpp b/src/ProjectWindow.cpp index aa9c19368..c5e332277 100644 --- a/src/ProjectWindow.cpp +++ b/src/ProjectWindow.cpp @@ -21,6 +21,7 @@ Paul Licameli split from AudacityProject.cpp #include "RefreshCode.h" #include "TrackPanel.h" #include "TrackPanelMouseEvent.h" +#include "UndoManager.h" #include "ViewInfo.h" #include "WaveClip.h" #include "WaveTrack.h" @@ -642,6 +643,9 @@ ProjectWindow::ProjectWindow(wxWindow * parent, wxWindowID id, mMainPage = pPage; mPlaybackScroller = std::make_unique( &project ); + + project.Bind( EVT_UNDO_OR_REDO, &ProjectWindow::OnUndoRedo, this ); + project.Bind( EVT_UNDO_RESET, &ProjectWindow::OnUndoReset, this ); } void ProjectWindow::Init() @@ -1436,6 +1440,20 @@ void ProjectWindow::OnToolBarUpdate(wxCommandEvent & event) event.Skip(false); /* No need to propagate any further */ } +void ProjectWindow::OnUndoRedo( wxCommandEvent &evt ) +{ + evt.Skip(); + HandleResize(); + CallAfter( [this]{ RedrawProject(); } ); +} + +void ProjectWindow::OnUndoReset( wxCommandEvent &evt ) +{ + evt.Skip(); + HandleResize(); + // CallAfter( [this]{ RedrawProject(); } ); // Should we do this here too? +} + void ProjectWindow::OnScroll(wxScrollEvent & WXUNUSED(event)) { auto &project = mProject; diff --git a/src/ProjectWindow.h b/src/ProjectWindow.h index eb56f2ff3..6b58c59b8 100644 --- a/src/ProjectWindow.h +++ b/src/ProjectWindow.h @@ -155,6 +155,8 @@ public: void DoScroll(); void OnScroll(wxScrollEvent & event); void OnToolBarUpdate(wxCommandEvent & event); + void OnUndoRedo( wxCommandEvent & ); + void OnUndoReset( wxCommandEvent & ); bool mbInitializingScrollbar{ false }; diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index d7a920d7d..56428251c 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -253,8 +253,6 @@ void DoUndo(AudacityProject &project) trackPanel.EnsureVisible(trackPanel.GetFirstSelectedTrack()); - window.RedrawProject(); - MenuManager::ModifyUndoMenuItems(project); } @@ -289,8 +287,6 @@ void OnRedo(const CommandContext &context) trackPanel.EnsureVisible(trackPanel.GetFirstSelectedTrack()); - window.RedrawProject(); - MenuManager::ModifyUndoMenuItems(project); }