diff --git a/src/widgets/Ruler.cpp b/src/widgets/Ruler.cpp index 6d827921b..a097fdf0b 100644 --- a/src/widgets/Ruler.cpp +++ b/src/widgets/Ruler.cpp @@ -1911,6 +1911,7 @@ enum { OnTimelineToolTipID, OnAutoScrollID, OnLockPlayRegionID, + OnScrubBarID, OnTogglePinnedStateID, }; @@ -1927,6 +1928,7 @@ BEGIN_EVENT_TABLE(AdornedRulerPanel, OverlayPanel) EVT_MENU(OnTimelineToolTipID, AdornedRulerPanel::OnTimelineToolTips) EVT_MENU(OnAutoScrollID, AdornedRulerPanel::OnAutoScroll) EVT_MENU(OnLockPlayRegionID, AdornedRulerPanel::OnLockPlayRegion) + EVT_MENU(OnScrubBarID, AdornedRulerPanel::OnToggleScrubBarFromMenu) // Pop up menus on Windows EVT_CONTEXT_MENU(AdornedRulerPanel::OnContextMenu) @@ -2015,7 +2017,7 @@ namespace { bool ReadScrubEnabledPref() { bool result {}; - gPrefs->Read(scrubEnabledPrefName, &result, false); + gPrefs->Read(scrubEnabledPrefName, &result, true); return result; } @@ -2795,6 +2797,15 @@ void AdornedRulerPanel::UpdateStatusBarAndTooltips(StatusChoice choice) RegenerateTooltips(choice); } +// This version toggles ruler state indirectly via the scrubber +// to ensure that all the places where the state is shown update. +// For example buttons and menus must update. +void AdornedRulerPanel::OnToggleScrubBarFromMenu(wxCommandEvent& Evt) +{ + auto &scrubber = mProject->GetScrubber(); + scrubber.OnToggleScrubBar( Evt ); +} + void AdornedRulerPanel::OnToggleScrubBar(/*wxCommandEvent&*/) { mShowScrubbing = !mShowScrubbing; @@ -2911,6 +2922,12 @@ void AdornedRulerPanel::ShowMenu(const wxPoint & pos) prlitem = rulerMenu.Append(OnLockPlayRegionID, _("Unlock Play Region")); prlitem->Enable(mProject->IsPlayRegionLocked() || (mPlayRegionStart != mPlayRegionEnd)); + wxMenuItem *baritem; + if (mShowScrubbing) + baritem = rulerMenu.Append(OnScrubBarID, _("Disable Scrub Bar")); + else + baritem = rulerMenu.Append(OnScrubBarID, _("Enable Scrub Bar")); + PopupMenu(&rulerMenu, pos); } diff --git a/src/widgets/Ruler.h b/src/widgets/Ruler.h index db642219f..e7e845906 100644 --- a/src/widgets/Ruler.h +++ b/src/widgets/Ruler.h @@ -330,7 +330,8 @@ public: void UpdateQuickPlayPos(wxCoord &mousPosX); bool ShowingScrubBar() const { return mShowScrubbing; } - void OnToggleScrubBar(/*wxCommandEvent&*/); + void OnToggleScrubBar(/*wxCommandEvent& */); + void OnToggleScrubBarFromMenu(wxCommandEvent& ); void SetPanelSize();