From 93b098b8d2fce317b33bdffca21befc2c0849e4e Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 18 Nov 2020 20:50:40 -0500 Subject: [PATCH] Make Undo history window update properly when you compact the project --- src/HistoryWindow.cpp | 1 + src/UndoManager.cpp | 5 +++++ src/UndoManager.h | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/HistoryWindow.cpp b/src/HistoryWindow.cpp index 82d9adf1b..04501c549 100644 --- a/src/HistoryWindow.cpp +++ b/src/HistoryWindow.cpp @@ -169,6 +169,7 @@ HistoryDialog::HistoryDialog(AudacityProject *parent, UndoManager *manager): parent->Bind(EVT_UNDO_MODIFIED, &HistoryDialog::UpdateDisplay, this); parent->Bind(EVT_UNDO_OR_REDO, &HistoryDialog::UpdateDisplay, this); parent->Bind(EVT_UNDO_RESET, &HistoryDialog::UpdateDisplay, this); + parent->Bind(EVT_UNDO_PURGE, &HistoryDialog::UpdateDisplay, this); } void HistoryDialog::OnAudioIO(wxCommandEvent& evt) diff --git a/src/UndoManager.cpp b/src/UndoManager.cpp index 61f899083..6d05e4d50 100644 --- a/src/UndoManager.cpp +++ b/src/UndoManager.cpp @@ -45,6 +45,7 @@ wxDEFINE_EVENT(EVT_UNDO_PUSHED, wxCommandEvent); wxDEFINE_EVENT(EVT_UNDO_MODIFIED, wxCommandEvent); wxDEFINE_EVENT(EVT_UNDO_OR_REDO, wxCommandEvent); wxDEFINE_EVENT(EVT_UNDO_RESET, wxCommandEvent); +wxDEFINE_EVENT(EVT_UNDO_PURGE, wxCommandEvent); using SampleBlockID = long long; @@ -225,6 +226,10 @@ void UndoManager::RemoveStates(size_t begin, size_t end) // Success, commit the savepoint if (pTrans) pTrans->Commit(); + + if (begin != end) + // wxWidgets will own the event object + mProject.QueueEvent( safenew wxCommandEvent{ EVT_UNDO_PURGE } ); // Check sanity wxASSERT_MSG( diff --git a/src/UndoManager.h b/src/UndoManager.h index 841d5788e..4da773c7d 100644 --- a/src/UndoManager.h +++ b/src/UndoManager.h @@ -67,10 +67,13 @@ wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, EVT_UNDO_MODIFIED, wxCommandEvent); // contents did not change other than the pointer to current state wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, EVT_UNDO_OR_REDO, wxCommandEvent); -// Project state for changed other than single-step undo/redo; undo manager +// Project state changed other than for single-step undo/redo; undo manager // contents did not change other than the pointer to current state wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, EVT_UNDO_RESET, wxCommandEvent); +// Undo or redo states discarded +wxDECLARE_EXPORTED_EVENT(AUDACITY_DLL_API, EVT_UNDO_PURGE, wxCommandEvent); + class AudacityProject; class Tags; class Track;