diff --git a/src/AudacityApp.cpp b/src/AudacityApp.cpp index 21a7508ef..63a40c7bb 100644 --- a/src/AudacityApp.cpp +++ b/src/AudacityApp.cpp @@ -241,6 +241,8 @@ It handles initialization and termination by subclassing wxApp. /// Custom events //////////////////////////////////////////////////////////// +wxDEFINE_EVENT( EVT_CLIPBOARD_CHANGE, wxCommandEvent); + DEFINE_EVENT_TYPE(EVT_OPEN_AUDIO_FILE); wxDEFINE_EVENT(EVT_LANGUAGE_CHANGE, wxCommandEvent); diff --git a/src/AudacityApp.h b/src/AudacityApp.h index 4809c8c0b..8f651304e 100644 --- a/src/AudacityApp.h +++ b/src/AudacityApp.h @@ -50,6 +50,11 @@ void QuitAudacity(); extern bool gIsQuitting; +// An event emitted by the application whenever the global clipboard's +// contents change. +wxDECLARE_EXPORTED_EVENT( AUDACITY_DLL_API, + EVT_CLIPBOARD_CHANGE, wxCommandEvent); + // Asynchronous open DECLARE_EXPORTED_EVENT_TYPE(AUDACITY_DLL_API, EVT_OPEN_AUDIO_FILE, -1); diff --git a/src/Project.cpp b/src/Project.cpp index 14429d661..fb7c9beac 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -5232,6 +5232,7 @@ void AudacityProject::EditClipboardByLabel( EditDestFunction action ) // Survived possibility of exceptions. Commit changes to the clipboard now. newClipboard.Swap(*msClipboard); + wxTheApp->AddPendingEvent( wxCommandEvent{ EVT_CLIPBOARD_CHANGE } ); msClipT0 = regions.front().start; msClipT1 = regions.back().end; diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index b011b2923..14461ee13 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -1,4 +1,5 @@ #include "../AdornedRulerPanel.h" +#include "../AudacityApp.h" // for EVT_CLIPBOARD_CHANGE #include "../HistoryWindow.h" #include "../LabelTrack.h" #include "../Menus.h" @@ -335,6 +336,7 @@ void OnCut(const CommandContext &context) // Survived possibility of exceptions. Commit changes to the clipboard now. newClipboard.Swap(*AudacityProject::msClipboard); + wxTheApp->AddPendingEvent( wxCommandEvent{ EVT_CLIPBOARD_CHANGE } ); // Proceed to change the project. If this throws, the project will be // rolled back by the top level handler. @@ -414,6 +416,7 @@ void OnCopy(const CommandContext &context) // Survived possibility of exceptions. Commit changes to the clipboard now. newClipboard.Swap(*AudacityProject::msClipboard); + wxTheApp->AddPendingEvent( wxCommandEvent{ EVT_CLIPBOARD_CHANGE } ); AudacityProject::msClipT0 = selectedRegion.t0(); AudacityProject::msClipT1 = selectedRegion.t1(); @@ -754,6 +757,7 @@ void OnSplitCut(const CommandContext &context) // Survived possibility of exceptions. Commit changes to the clipboard now. newClipboard.Swap(*AudacityProject::msClipboard); + wxTheApp->AddPendingEvent( wxCommandEvent{ EVT_CLIPBOARD_CHANGE } ); AudacityProject::msClipT0 = selectedRegion.t0(); AudacityProject::msClipT1 = selectedRegion.t1();