From 4ced18c4198b2a6fcacdc2bed04c12df02606429 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Tue, 27 Feb 2024 15:30:53 +0100 Subject: [PATCH] DrawSketchController: Fix crazy focus behavior in tool widget (see in the translate tool). --- src/Mod/Sketcher/Gui/DrawSketchController.h | 4 +++- .../Gui/DrawSketchDefaultWidgetController.h | 6 ++++++ .../Sketcher/Gui/SketcherToolDefaultWidget.cpp | 15 ++++++++------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Mod/Sketcher/Gui/DrawSketchController.h b/src/Mod/Sketcher/Gui/DrawSketchController.h index e58b53db22..03906081a8 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchController.h +++ b/src/Mod/Sketcher/Gui/DrawSketchController.h @@ -520,7 +520,7 @@ protected: virtual void afterEnforceControlParameters() { // Give focus to current on-view parameter. In case user interacted outside of 3dview. - if (parameterWithFocus >= 0) { + if (focusAutoPassing && parameterWithFocus >= 0) { setFocusToOnViewParameter(parameterWithFocus); } } @@ -736,6 +736,8 @@ protected: return keymanager.get(); } + bool focusAutoPassing = true; + private: /** @name helper functions */ //@{ diff --git a/src/Mod/Sketcher/Gui/DrawSketchDefaultWidgetController.h b/src/Mod/Sketcher/Gui/DrawSketchDefaultWidgetController.h index f52ff94594..cf4a4e86f6 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchDefaultWidgetController.h +++ b/src/Mod/Sketcher/Gui/DrawSketchDefaultWidgetController.h @@ -147,7 +147,13 @@ public: { adaptDrawingToParameterChange(parameterindex, value); // specialisation interface + // we block the auto passing of focus back to OVP that would occur in mouseMove + // triggered in finishControlsChanged + ControllerBase::focusAutoPassing = false; + ControllerBase::finishControlsChanged(); + + ControllerBase::focusAutoPassing = true; } void parameterFocusOut(int parameterindex) diff --git a/src/Mod/Sketcher/Gui/SketcherToolDefaultWidget.cpp b/src/Mod/Sketcher/Gui/SketcherToolDefaultWidget.cpp index 6f89a4867e..8d8b591b3c 100644 --- a/src/Mod/Sketcher/Gui/SketcherToolDefaultWidget.cpp +++ b/src/Mod/Sketcher/Gui/SketcherToolDefaultWidget.cpp @@ -157,13 +157,14 @@ bool SketcherToolDefaultWidget::eventFilter(QObject* object, QEvent* event) } } } - else if (event->type() == QEvent::FocusOut) { - for (int i = 0; i < nParameters; i++) { - auto parameterSpinBox = getParameterSpinBox(i); - - if (object == parameterSpinBox) { - signalParameterFocusOut(i); - break; + else if (event->type() == QEvent::KeyPress) { + QKeyEvent* ke = static_cast(event); + if (ke->key() == Qt::Key_Tab || ke->key() == Qt::Key_Return) { + for (int i = 0; i < nParameters; i++) { + if (object == getParameterSpinBox(i)) { + signalParameterFocusOut(i); + return true; + } } } }