From 72f66b70969bd71ab71a39571e9ad2ee4cb8c238 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 4 Jan 2020 12:11:32 -0500 Subject: [PATCH] Mac: don't crash in Preferences when there is no project window... ... and you press Preview in Spectrogram preferences. And complete null checks on GetActiveProject calls in src/prefs. And in fact, don't even show the useless Preview button when there is no project. --- src/prefs/SpectrumPrefs.cpp | 20 +++++++++++++------- src/prefs/WaveformPrefs.cpp | 9 ++++++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/prefs/SpectrumPrefs.cpp b/src/prefs/SpectrumPrefs.cpp index fb937b783..dcb62514a 100644 --- a/src/prefs/SpectrumPrefs.cpp +++ b/src/prefs/SpectrumPrefs.cpp @@ -429,9 +429,12 @@ void SpectrumPrefs::Rollback() } if (isOpenPage) { - auto &tp = TrackPanel::Get ( *::GetActiveProject() ); - tp.UpdateVRulers(); - tp.Refresh(false); + auto pProject = ::GetActiveProject(); + if ( pProject ) { + auto &tp = TrackPanel::Get ( *pProject ); + tp.UpdateVRulers(); + tp.Refresh(false); + } } } @@ -477,9 +480,12 @@ void SpectrumPrefs::Preview() } if (isOpenPage) { - auto &tp = TrackPanel::Get( *::GetActiveProject() ); - tp.UpdateVRulers(); - tp.Refresh(false); + auto pProject = ::GetActiveProject(); + if ( pProject ) { + auto &tp = TrackPanel::Get( *pProject ); + tp.UpdateVRulers(); + tp.Refresh(false); + } } } @@ -500,7 +506,7 @@ bool SpectrumPrefs::Commit() bool SpectrumPrefs::ShowsPreviewButton() { - return true; + return GetActiveProject() != nullptr; } void SpectrumPrefs::OnControl(wxCommandEvent&) diff --git a/src/prefs/WaveformPrefs.cpp b/src/prefs/WaveformPrefs.cpp index e1a081fa0..d947cc607 100644 --- a/src/prefs/WaveformPrefs.cpp +++ b/src/prefs/WaveformPrefs.cpp @@ -191,9 +191,12 @@ bool WaveformPrefs::Commit() } if (isOpenPage) { - auto &tp = TrackPanel::Get( *::GetActiveProject() ); - tp.UpdateVRulers(); - tp.Refresh(false); + auto pProject = ::GetActiveProject(); + if ( pProject ) { + auto &tp = TrackPanel::Get( *pProject ); + tp.UpdateVRulers(); + tp.Refresh(false); + } } return true;