diff --git a/src/tracks/ui/TrackButtonHandles.cpp b/src/tracks/ui/TrackButtonHandles.cpp index feb573ce4..82c0e9ae2 100644 --- a/src/tracks/ui/TrackButtonHandles.cpp +++ b/src/tracks/ui/TrackButtonHandles.cpp @@ -148,11 +148,15 @@ MenuButtonHandle &MenuButtonHandle::Instance() UIHandle::Result MenuButtonHandle::CommitChanges (const wxMouseEvent &, AudacityProject *, wxWindow *pParent) { - return mpCell->DoContextMenu(mRect, pParent, NULL); + auto pCell = mpCell.lock(); + if (!pCell) + return RefreshCode::Cancelled; + return pCell->DoContextMenu(mRect, pParent, NULL); } HitTestResult MenuButtonHandle::HitTest -(const wxMouseEvent &event, const wxRect &rect, TrackPanelCell *pCell) +(const wxMouseEvent &event, const wxRect &rect, + const std::shared_ptr &pCell) { wxRect buttonRect; TrackInfo::GetTitleBarRect(rect, buttonRect); diff --git a/src/tracks/ui/TrackButtonHandles.h b/src/tracks/ui/TrackButtonHandles.h index 6c4149194..91821d16e 100644 --- a/src/tracks/ui/TrackButtonHandles.h +++ b/src/tracks/ui/TrackButtonHandles.h @@ -76,10 +76,11 @@ protected: public: static HitTestResult HitTest - (const wxMouseEvent &event, const wxRect &rect, TrackPanelCell *pCell); + (const wxMouseEvent &event, const wxRect &rect, + const std::shared_ptr &pCell); private: - TrackPanelCell *mpCell{}; + std::weak_ptr mpCell; }; #endif diff --git a/src/tracks/ui/TrackControls.cpp b/src/tracks/ui/TrackControls.cpp index b512ea9fb..653b083ed 100644 --- a/src/tracks/ui/TrackControls.cpp +++ b/src/tracks/ui/TrackControls.cpp @@ -48,7 +48,8 @@ HitTestResult TrackControls::HitTest if (NULL != (result = CloseButtonHandle::HitTest(event, rect)).handle) return result; - if (NULL != (result = MenuButtonHandle::HitTest(event, rect, this)).handle) + if (NULL != (result = MenuButtonHandle::HitTest(event, rect, + this->FindTrack()->GetTrackControl())).handle) return result; if (NULL != (result = MinimizeButtonHandle::HitTest(event, rect)).handle)