diff --git a/src/LyricsWindow.cpp b/src/LyricsWindow.cpp index d81a48cf3..f74d999f6 100644 --- a/src/LyricsWindow.cpp +++ b/src/LyricsWindow.cpp @@ -64,7 +64,8 @@ LyricsWindow::LyricsWindow(AudacityProject *parent) // // WXMAC doesn't support wxFRAME_FLOAT_ON_PARENT, so we do // SetWindowClass((WindowRef) MacGetWindowRef(), kFloatingWindowClass); // #endif - mProject = parent; + auto pProject = parent->shared_from_this(); + mProject = pProject; SetWindowTitle(); auto titleChanged = [&](wxCommandEvent &evt) @@ -136,7 +137,7 @@ LyricsWindow::LyricsWindow(AudacityProject *parent) //} // Events from the project don't propagate directly to this other frame, so... - mProject->Bind(EVT_TRACK_PANEL_TIMER, + pProject->Bind(EVT_TRACK_PANEL_TIMER, &LyricsWindow::OnTimer, this); Center(); @@ -159,16 +160,18 @@ void LyricsWindow::OnStyle_Highlight(wxCommandEvent & WXUNUSED(event)) void LyricsWindow::OnTimer(wxCommandEvent &event) { - if (ProjectAudioIO::Get( *mProject ).IsAudioActive()) - { - auto gAudioIO = AudioIO::Get(); - GetLyricsPanel()->Update(gAudioIO->GetStreamTime()); - } - else - { - // Reset lyrics display. - const auto &selectedRegion = ViewInfo::Get( *mProject ).selectedRegion; - GetLyricsPanel()->Update(selectedRegion.t0()); + if (auto pProject = mProject.lock()) { + if (ProjectAudioIO::Get( *pProject ).IsAudioActive()) + { + auto gAudioIO = AudioIO::Get(); + GetLyricsPanel()->Update(gAudioIO->GetStreamTime()); + } + else + { + // Reset lyrics display. + const auto &selectedRegion = ViewInfo::Get( *pProject ).selectedRegion; + GetLyricsPanel()->Update(selectedRegion.t0()); + } } // Let other listeners get the notification @@ -177,10 +180,11 @@ void LyricsWindow::OnTimer(wxCommandEvent &event) void LyricsWindow::SetWindowTitle() { - wxString name = mProject->GetProjectName(); - if (!name.empty()) - { - name.Prepend(wxT(" - ")); + wxString name; + if (auto pProject = mProject.lock()) { + name = pProject->GetProjectName(); + if (!name.empty()) + name.Prepend(wxT(" - ")); } SetTitle(AudacityKaraokeTitle.Format(name).Translation()); diff --git a/src/LyricsWindow.h b/src/LyricsWindow.h index 1c86bacf8..997871747 100644 --- a/src/LyricsWindow.h +++ b/src/LyricsWindow.h @@ -13,6 +13,7 @@ #define __AUDACITY_LYRICS_WINDOW__ #include // to inherit +#include #include "Prefs.h" @@ -40,7 +41,7 @@ class LyricsWindow final : public wxFrame, // PrefsListener implementation void UpdatePrefs() override; - AudacityProject *mProject; + std::weak_ptr mProject; LyricsPanel *mLyricsPanel; public: