diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index f1d74e55a..dda321445 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -738,6 +738,9 @@ void ControlToolBar::OnKeyEvent(wxKeyEvent & event) void ControlToolBar::OnPlay(wxCommandEvent & WXUNUSED(evt)) { + auto doubleClicked = mPlay->IsDoubleClicked(); + mPlay->ClearDoubleClicked(); + if (!CanStopAudioStream()) return; diff --git a/src/toolbars/TranscriptionToolBar.cpp b/src/toolbars/TranscriptionToolBar.cpp index 0e49a775f..90ed5dc80 100644 --- a/src/toolbars/TranscriptionToolBar.cpp +++ b/src/toolbars/TranscriptionToolBar.cpp @@ -474,10 +474,15 @@ void TranscriptionToolBar::PlayAtSpeed(bool looped, bool cutPreview) // Come here from button clicks only void TranscriptionToolBar::OnPlaySpeed(wxCommandEvent & WXUNUSED(event)) { + auto button = mButtons[TTB_PlaySpeed]; + + auto doubleClicked = button->IsDoubleClicked(); + button->ClearDoubleClicked(); + // Let control have precedence over shift const bool cutPreview = mButtons[TTB_PlaySpeed]->WasControlDown(); const bool looped = !cutPreview && - mButtons[TTB_PlaySpeed]->WasShiftDown(); + button->WasShiftDown(); PlayAtSpeed(looped, cutPreview); } diff --git a/src/widgets/AButton.cpp b/src/widgets/AButton.cpp index 58c336771..6d1b4d5ee 100644 --- a/src/widgets/AButton.cpp +++ b/src/widgets/AButton.cpp @@ -407,6 +407,8 @@ void AButton::OnMouseEvent(wxMouseEvent & event) if (mEnabled && event.IsButton()) { if (event.ButtonIsDown(wxMOUSE_BTN_ANY)) { mIsClicking = true; + if (event.ButtonDClick()) + mIsDoubleClicked = true; if( !HasCapture() ) CaptureMouse(); } diff --git a/src/widgets/AButton.h b/src/widgets/AButton.h index bf06bd5ff..6858e7df8 100644 --- a/src/widgets/AButton.h +++ b/src/widgets/AButton.h @@ -109,6 +109,11 @@ class AButton final : public wxWindow { bool WasControlDown(); // returns true if control was held down // the last time the button was clicked bool IsDown(){ return mButtonIsDown;} + + // Double click is detected, but not automatically cleared. + bool IsDoubleClicked() const { return mIsDoubleClicked; } + void ClearDoubleClicked() { mIsDoubleClicked = false; } + void SetButtonToggles( bool toggler ){ mToggle = toggler;} void Toggle(){ mButtonIsDown ? PopUp() : PushDown();} void Click(); @@ -157,6 +162,7 @@ class AButton final : public wxWindow { bool mIsClicking; bool mEnabled; bool mUseDisabledAsDownHiliteImage; + bool mIsDoubleClicked {}; struct ImageArr { ImageRoll mArr[4]; }; std::vector<ImageArr> mImages;