diff --git a/src/toolbars/ToolManager.cpp b/src/toolbars/ToolManager.cpp index eabef6fc7..8c4aba40e 100644 --- a/src/toolbars/ToolManager.cpp +++ b/src/toolbars/ToolManager.cpp @@ -1527,7 +1527,12 @@ void ToolManager::HandleEscapeKey() void ToolManager::DoneDragging() { - // Done dragging + // Done dragging - ensure grabber button isn't pushed + if( mDragBar ) + { + mDragBar->SetDocked( NULL, false ); + } + // Release capture auto &window = GetProjectFrame( *mParent ); if( window.HasCapture() ) diff --git a/src/widgets/Grabber.cpp b/src/widgets/Grabber.cpp index ed1057bab..eb4a1801d 100644 --- a/src/widgets/Grabber.cpp +++ b/src/widgets/Grabber.cpp @@ -44,6 +44,7 @@ BEGIN_EVENT_TABLE(Grabber, wxWindow) EVT_ENTER_WINDOW(Grabber::OnEnter) EVT_LEAVE_WINDOW(Grabber::OnLeave) EVT_LEFT_DOWN(Grabber::OnLeftDown) + EVT_LEFT_UP(Grabber::OnLeftUp) EVT_ERASE_BACKGROUND( Grabber::OnErase ) EVT_PAINT(Grabber::OnPaint) EVT_KEY_DOWN(Grabber::OnKeyDown) @@ -188,6 +189,8 @@ void Grabber::PushButton(bool state ) { if( mAsSpacer ) return; + if (!state) + mPressed = state; wxRect r = GetRect(); mOver = r.Contains(ScreenToClient(wxGetMousePosition())); @@ -210,6 +213,19 @@ void Grabber::OnLeftDown(wxMouseEvent & event) event.Skip(); } +// +// Handle left button up events +// +void Grabber::OnLeftUp(wxMouseEvent & event) +{ + // Normally, "left up" events are handled by the ToolManager::OnMouse() method + // but, if the user double clicks a grabber, the "left up" event will come here + // instead, so just "unpush" the button. + PushButton(false); + + event.Skip(); +} + // // Handle mouse enter events // diff --git a/src/widgets/Grabber.h b/src/widgets/Grabber.h index 0f3169dfe..b9503a7ef 100644 --- a/src/widgets/Grabber.h +++ b/src/widgets/Grabber.h @@ -124,6 +124,7 @@ class Grabber final : public wxWindow protected: void OnLeftDown(wxMouseEvent & event); + void OnLeftUp(wxMouseEvent & event); void OnEnter(wxMouseEvent & event); void OnLeave(wxMouseEvent & event); void OnErase(wxEraseEvent & event);