From 8d0f19fd6a5bc44ffc84b9927a59aafb0235850b Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 3 Nov 2022 16:20:46 +0800 Subject: [PATCH] FIX: test HasCapture before CaptureMouse Change-Id: Ia18b2288b4601c1ae8769d56e5bf46b886a1264e --- src/slic3r/GUI/Widgets/Button.cpp | 3 ++- src/slic3r/GUI/Widgets/SpinInput.cpp | 9 ++++++--- src/slic3r/GUI/Widgets/StepCtrl.cpp | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index fa1dc15ee2..273d1d8415 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -237,7 +237,8 @@ void Button::mouseDown(wxMouseEvent& event) pressedDown = true; if (canFocus) SetFocus(); - CaptureMouse(); + if (!HasCapture()) + CaptureMouse(); } void Button::mouseReleased(wxMouseEvent& event) diff --git a/src/slic3r/GUI/Widgets/SpinInput.cpp b/src/slic3r/GUI/Widgets/SpinInput.cpp index d4b03795bc..f9eb1dc36a 100644 --- a/src/slic3r/GUI/Widgets/SpinInput.cpp +++ b/src/slic3r/GUI/Widgets/SpinInput.cpp @@ -230,19 +230,22 @@ Button *SpinInput::createButton(bool inc) delta = inc ? 1 : -1; SetValue(val + delta); text_ctrl->SetFocus(); - btn->CaptureMouse(); + if (!btn->HasCapture()) + btn->CaptureMouse(); delta *= 8; timer.Start(100); sendSpinEvent(); }); btn->Bind(wxEVT_LEFT_DCLICK, [=](auto &e) { delta = inc ? 1 : -1; - btn->CaptureMouse(); + if (!btn->HasCapture()) + btn->CaptureMouse(); SetValue(val + delta); sendSpinEvent(); }); btn->Bind(wxEVT_LEFT_UP, [=](auto &e) { - btn->ReleaseMouse(); + if (btn->HasCapture()) + btn->ReleaseMouse(); timer.Stop(); text_ctrl->SelectAll(); delta = 0; diff --git a/src/slic3r/GUI/Widgets/StepCtrl.cpp b/src/slic3r/GUI/Widgets/StepCtrl.cpp index fa47545815..c7071a564d 100644 --- a/src/slic3r/GUI/Widgets/StepCtrl.cpp +++ b/src/slic3r/GUI/Widgets/StepCtrl.cpp @@ -134,7 +134,8 @@ void StepCtrl::mouseDown(wxMouseEvent &event) if (rcThumb.Contains(pt)) { pos_thumb = wxPoint{circleX, size.y / 2}; drag_offset = pos_thumb - pt; - CaptureMouse(); + if (!HasCapture()) + CaptureMouse(); } else if (rcBar.Contains(pt)) { if (pt.x < circleX) { if (step > 0) SelectItem(step - 1);