Merge pull request #12641 from Ondsel-Development/toolsettings_fix_focus_issue

[Sketcher] Toolsettings fix focus issue
This commit is contained in:
Chris Hennes
2024-03-22 10:40:10 -05:00
committed by GitHub
4 changed files with 29 additions and 17 deletions

View File

@@ -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 */
//@{

View File

@@ -100,7 +100,7 @@ private:
using Connection = boost::signals2::connection;
Connection connectionParameterFocusOut;
Connection connectionParameterTabOrEnterPressed;
Connection connectionParameterValueChanged;
Connection connectionCheckboxCheckedChanged;
Connection connectionComboboxSelectionChanged;
@@ -128,7 +128,7 @@ public:
~DrawSketchDefaultWidgetController() override
{
connectionParameterFocusOut.disconnect();
connectionParameterTabOrEnterPressed.disconnect();
connectionParameterValueChanged.disconnect();
connectionCheckboxCheckedChanged.disconnect();
connectionComboboxSelectionChanged.disconnect();
@@ -147,10 +147,16 @@ 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)
void parameterTabOrEnterPressed(int parameterindex)
{
Q_UNUSED(parameterindex);
passFocusToNextParameter();
@@ -355,8 +361,10 @@ private:
{
toolWidget = static_cast<SketcherToolDefaultWidget*>(widget); // NOLINT
connectionParameterFocusOut = toolWidget->registerParameterFocusOut(
std::bind(&DrawSketchDefaultWidgetController::parameterFocusOut, this, sp::_1));
connectionParameterTabOrEnterPressed = toolWidget->registerParameterTabOrEnterPressed(
std::bind(&DrawSketchDefaultWidgetController::parameterTabOrEnterPressed,
this,
sp::_1));
connectionParameterValueChanged = toolWidget->registerParameterValueChanged(
std::bind(&DrawSketchDefaultWidgetController::parameterValueChanged,
@@ -380,7 +388,8 @@ private:
/// Resets the widget
void resetDefaultWidget()
{
boost::signals2::shared_connection_block parameter_focus_block(connectionParameterFocusOut);
boost::signals2::shared_connection_block parameter_focus_block(
connectionParameterTabOrEnterPressed);
boost::signals2::shared_connection_block parameter_block(connectionParameterValueChanged);
boost::signals2::shared_connection_block checkbox_block(connectionCheckboxCheckedChanged);
boost::signals2::shared_connection_block combobox_block(connectionComboboxSelectionChanged);

View File

@@ -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<QKeyEvent*>(event);
if (ke->key() == Qt::Key_Tab || ke->key() == Qt::Key_Return) {
for (int i = 0; i < nParameters; i++) {
if (object == getParameterSpinBox(i)) {
signalParameterTabOrEnterPressed(i);
return true;
}
}
}
}

View File

@@ -155,9 +155,9 @@ public:
void restoreComboboxPref(int comboboxindex);
template<typename F>
boost::signals2::connection registerParameterFocusOut(F&& fn)
boost::signals2::connection registerParameterTabOrEnterPressed(F&& fn)
{
return signalParameterFocusOut.connect(std::forward<F>(fn));
return signalParameterTabOrEnterPressed.connect(std::forward<F>(fn));
}
template<typename F>
@@ -217,7 +217,7 @@ private:
private:
std::unique_ptr<Ui_SketcherToolDefaultWidget> ui;
boost::signals2::signal<void(int parameterindex)> signalParameterFocusOut;
boost::signals2::signal<void(int parameterindex)> signalParameterTabOrEnterPressed;
boost::signals2::signal<void(int parameterindex, double value)> signalParameterValueChanged;
boost::signals2::signal<void(int checkboxindex, bool value)> signalCheckboxCheckedChanged;
boost::signals2::signal<void(int comboindex, int value)> signalComboboxSelectionChanged;