diff --git a/src/Gui/EditableDatumLabel.cpp b/src/Gui/EditableDatumLabel.cpp index 8608704d53..f863b76ab0 100644 --- a/src/Gui/EditableDatumLabel.cpp +++ b/src/Gui/EditableDatumLabel.cpp @@ -186,9 +186,16 @@ void EditableDatumLabel::startEdit(double val, QObject* eventFilteringObj, bool return; } - isSet = true; + if (!spinBox->hasValidInput()) { + // unset parameters in DrawSketchController, this is needed in a case + // when user removes values we reset state of the OVP + Q_EMIT this->parameterUnset(); + return; + } + value = spinBox->rawValue(); + isSet = true; Q_EMIT this->valueChanged(value); }; diff --git a/src/Gui/EditableDatumLabel.h b/src/Gui/EditableDatumLabel.h index 320f391a0e..380532a681 100644 --- a/src/Gui/EditableDatumLabel.h +++ b/src/Gui/EditableDatumLabel.h @@ -94,6 +94,7 @@ public: Q_SIGNALS: void valueChanged(double val); + void parameterUnset(); protected: bool eventFilter(QObject* watched, QEvent* event) override; diff --git a/src/Gui/QuantitySpinBox.cpp b/src/Gui/QuantitySpinBox.cpp index 4631b45c75..333f89d9b8 100644 --- a/src/Gui/QuantitySpinBox.cpp +++ b/src/Gui/QuantitySpinBox.cpp @@ -571,6 +571,11 @@ void QuantitySpinBox::userInput(const QString & text) } else { d->validInput = false; + + // we have to emit here signal explicitly as validator will not pass + // this value further but we want to check it to disable isSet flag if + // it has been set previously + Q_EMIT valueChanged(d->quantity.getValue()); return; } diff --git a/src/Mod/Sketcher/Gui/DrawSketchController.h b/src/Mod/Sketcher/Gui/DrawSketchController.h index 3642f9eca5..cf59ba0efb 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchController.h +++ b/src/Mod/Sketcher/Gui/DrawSketchController.h @@ -618,6 +618,16 @@ protected: parameter->setColor(colorManager.dimConstrColor); onViewValueChanged(i, value); }); + + // this gets triggered whenever user deletes content in OVP, we remove the + // constraints and unset everything to give user another change to select stuff + // with mouse + QObject::connect(parameter, + &Gui::EditableDatumLabel::parameterUnset, + [this, parameter]() { + unsetOnViewParameter(parameter); + finishControlsChanged(); + }); } } diff --git a/src/Mod/Sketcher/Gui/DrawSketchKeyboardManager.cpp b/src/Mod/Sketcher/Gui/DrawSketchKeyboardManager.cpp index 498200f70b..d678fa2aef 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchKeyboardManager.cpp +++ b/src/Mod/Sketcher/Gui/DrawSketchKeyboardManager.cpp @@ -101,8 +101,11 @@ void DrawSketchKeyboardManager::detectKeyboardEventHandlingMode(QKeyEvent* keyEv if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Tab || keyEvent->key() == Qt::Key_Backtab || keyEvent->key() == Qt::Key_Minus || keyEvent->key() == Qt::Key_Period - || keyEvent->key() == Qt::Key_Comma || match.hasMatch() - || keyEvent->matches(QKeySequence::Backspace) || keyEvent->matches(QKeySequence::Delete)) { + || keyEvent->key() == Qt::Key_Comma + || match.hasMatch() + // double check for backspace as there may be windows/unix inconsistencies + || keyEvent->key() == Qt::Key_Backspace || keyEvent->matches(QKeySequence::Backspace) + || keyEvent->matches(QKeySequence::Delete)) { keyMode = KeyboardEventHandlingMode::DSHControl; timer.start(timeOutValue); }