diff --git a/src/tracks/ui/ScrubUI.cpp b/src/tracks/ui/ScrubUI.cpp index 999a78f56..317298437 100644 --- a/src/tracks/ui/ScrubUI.cpp +++ b/src/tracks/ui/ScrubUI.cpp @@ -225,6 +225,8 @@ struct ScrubForwarder mWindow = &ProjectWindow::Get( project ); if ( mWindow ) mWindow->PushEventHandler( this ); + mRuler = &AdornedRulerPanel::Get( project ); + mScrubber = Scrubber::Get( project ).shared_from_this(); } ~ScrubForwarder() @@ -235,6 +237,8 @@ struct ScrubForwarder AudacityProject &mProject; wxWindowPtr mWindow; + wxWeakRef mRuler; + std::weak_ptr mScrubber; void OnMouse(wxMouseEvent &event); DECLARE_EVENT_TABLE() @@ -242,9 +246,15 @@ struct ScrubForwarder void ScrubForwarder::OnMouse(wxMouseEvent &event) { - auto &scrubber = Scrubber::Get( mProject ); + auto pScrubber = mScrubber.lock(); + if ( !pScrubber || !mRuler ) { + event.Skip(); + return; + } - auto &ruler = AdornedRulerPanel::Get( mProject ); + auto &scrubber = *pScrubber; + + auto &ruler = *mRuler; const auto &state = ::wxGetMouseState(); const auto &position = state.GetPosition(); scrubber.SetMayDragToSeek( diff --git a/src/tracks/ui/Scrubbing.h b/src/tracks/ui/Scrubbing.h index 775f48260..6e2376557 100644 --- a/src/tracks/ui/Scrubbing.h +++ b/src/tracks/ui/Scrubbing.h @@ -42,6 +42,7 @@ class Scrubber final : public wxEvtHandler , public ClientData::Base , private PrefsListener + , public std::enable_shared_from_this< Scrubber > { public: static Scrubber &Get( AudacityProject &project );