mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-25 16:48:44 +02:00
Fix dangling pointers to Project from LyricsWindow.cpp
This commit is contained in:
parent
13cb2c2a3f
commit
0ee9cbd83e
@ -64,7 +64,8 @@ LyricsWindow::LyricsWindow(AudacityProject *parent)
|
|||||||
// // WXMAC doesn't support wxFRAME_FLOAT_ON_PARENT, so we do
|
// // WXMAC doesn't support wxFRAME_FLOAT_ON_PARENT, so we do
|
||||||
// SetWindowClass((WindowRef) MacGetWindowRef(), kFloatingWindowClass);
|
// SetWindowClass((WindowRef) MacGetWindowRef(), kFloatingWindowClass);
|
||||||
// #endif
|
// #endif
|
||||||
mProject = parent;
|
auto pProject = parent->shared_from_this();
|
||||||
|
mProject = pProject;
|
||||||
|
|
||||||
SetWindowTitle();
|
SetWindowTitle();
|
||||||
auto titleChanged = [&](wxCommandEvent &evt)
|
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...
|
// 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,
|
&LyricsWindow::OnTimer,
|
||||||
this);
|
this);
|
||||||
Center();
|
Center();
|
||||||
@ -159,16 +160,18 @@ void LyricsWindow::OnStyle_Highlight(wxCommandEvent & WXUNUSED(event))
|
|||||||
|
|
||||||
void LyricsWindow::OnTimer(wxCommandEvent &event)
|
void LyricsWindow::OnTimer(wxCommandEvent &event)
|
||||||
{
|
{
|
||||||
if (ProjectAudioIO::Get( *mProject ).IsAudioActive())
|
if (auto pProject = mProject.lock()) {
|
||||||
{
|
if (ProjectAudioIO::Get( *pProject ).IsAudioActive())
|
||||||
auto gAudioIO = AudioIO::Get();
|
{
|
||||||
GetLyricsPanel()->Update(gAudioIO->GetStreamTime());
|
auto gAudioIO = AudioIO::Get();
|
||||||
}
|
GetLyricsPanel()->Update(gAudioIO->GetStreamTime());
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
// Reset lyrics display.
|
{
|
||||||
const auto &selectedRegion = ViewInfo::Get( *mProject ).selectedRegion;
|
// Reset lyrics display.
|
||||||
GetLyricsPanel()->Update(selectedRegion.t0());
|
const auto &selectedRegion = ViewInfo::Get( *pProject ).selectedRegion;
|
||||||
|
GetLyricsPanel()->Update(selectedRegion.t0());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let other listeners get the notification
|
// Let other listeners get the notification
|
||||||
@ -177,10 +180,11 @@ void LyricsWindow::OnTimer(wxCommandEvent &event)
|
|||||||
|
|
||||||
void LyricsWindow::SetWindowTitle()
|
void LyricsWindow::SetWindowTitle()
|
||||||
{
|
{
|
||||||
wxString name = mProject->GetProjectName();
|
wxString name;
|
||||||
if (!name.empty())
|
if (auto pProject = mProject.lock()) {
|
||||||
{
|
name = pProject->GetProjectName();
|
||||||
name.Prepend(wxT(" - "));
|
if (!name.empty())
|
||||||
|
name.Prepend(wxT(" - "));
|
||||||
}
|
}
|
||||||
|
|
||||||
SetTitle(AudacityKaraokeTitle.Format(name).Translation());
|
SetTitle(AudacityKaraokeTitle.Format(name).Translation());
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#define __AUDACITY_LYRICS_WINDOW__
|
#define __AUDACITY_LYRICS_WINDOW__
|
||||||
|
|
||||||
#include <wx/frame.h> // to inherit
|
#include <wx/frame.h> // to inherit
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "Prefs.h"
|
#include "Prefs.h"
|
||||||
|
|
||||||
@ -40,7 +41,7 @@ class LyricsWindow final : public wxFrame,
|
|||||||
// PrefsListener implementation
|
// PrefsListener implementation
|
||||||
void UpdatePrefs() override;
|
void UpdatePrefs() override;
|
||||||
|
|
||||||
AudacityProject *mProject;
|
std::weak_ptr<AudacityProject> mProject;
|
||||||
LyricsPanel *mLyricsPanel;
|
LyricsPanel *mLyricsPanel;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user