From f818aa514ce39375684abebea8bf0387fe7fe6d8 Mon Sep 17 00:00:00 2001 From: xtemp09 Date: Fri, 24 Jan 2025 14:22:28 +0700 Subject: [PATCH] Change FocusPolicy of some PrefWidgets to StrongFocus This commit mollifies the issue #17684 by making the PrefWidgets receive mouse wheel events only when they have both focus and the mouse pointer at the widget. --- src/Gui/PrefWidgets.cpp | 45 +++++++++++++++++++++++++++++++++++++++++ src/Gui/PrefWidgets.h | 5 +++++ 2 files changed, 50 insertions(+) diff --git a/src/Gui/PrefWidgets.cpp b/src/Gui/PrefWidgets.cpp index 445392c041..f22dc64dfe 100644 --- a/src/Gui/PrefWidgets.cpp +++ b/src/Gui/PrefWidgets.cpp @@ -169,6 +169,15 @@ void PrefWidget::failedToRestore(const QString& name) const PrefSpinBox::PrefSpinBox ( QWidget * parent ) : QSpinBox(parent), PrefWidget() { + setFocusPolicy(Qt::FocusPolicy::StrongFocus); +} + +void PrefSpinBox::wheelEvent(QWheelEvent *event) +{ + if (hasFocus()) + QSpinBox::wheelEvent(event); + else + event->ignore(); } PrefSpinBox::~PrefSpinBox() = default; @@ -201,6 +210,15 @@ void PrefSpinBox::savePreferences() PrefDoubleSpinBox::PrefDoubleSpinBox ( QWidget * parent ) : QDoubleSpinBox(parent), PrefWidget() { + setFocusPolicy(Qt::FocusPolicy::StrongFocus); +} + +void PrefDoubleSpinBox::wheelEvent(QWheelEvent *event) +{ + if (hasFocus()) + QDoubleSpinBox::wheelEvent(event); + else + event->ignore(); } PrefDoubleSpinBox::~PrefDoubleSpinBox() = default; @@ -332,6 +350,15 @@ void PrefFileChooser::savePreferences() PrefComboBox::PrefComboBox ( QWidget * parent ) : QComboBox(parent), PrefWidget() { + setFocusPolicy(Qt::FocusPolicy::StrongFocus); +} + +void PrefComboBox::wheelEvent(QWheelEvent *event) +{ + if (hasFocus()) + QComboBox::wheelEvent(event); + else + event->ignore(); } PrefComboBox::~PrefComboBox() = default; @@ -566,6 +593,15 @@ void PrefColorButton::savePreferences() PrefUnitSpinBox::PrefUnitSpinBox ( QWidget * parent ) : QuantitySpinBox(parent), PrefWidget() { + setFocusPolicy(Qt::FocusPolicy::StrongFocus); +} + +void PrefUnitSpinBox::wheelEvent(QWheelEvent *event) +{ + if (hasFocus()) + QuantitySpinBox::wheelEvent(event); + else + event->ignore(); } PrefUnitSpinBox::~PrefUnitSpinBox() = default; @@ -662,6 +698,7 @@ PrefQuantitySpinBox::PrefQuantitySpinBox (QWidget * parent) : QuantitySpinBox(parent) , d_ptr(new PrefQuantitySpinBoxPrivate()) { + setFocusPolicy(Qt::FocusPolicy::StrongFocus); } PrefQuantitySpinBox::~PrefQuantitySpinBox() = default; @@ -708,6 +745,14 @@ void PrefQuantitySpinBox::contextMenuEvent(QContextMenuEvent *event) } } +void PrefQuantitySpinBox::wheelEvent(QWheelEvent *event) +{ + if (hasFocus()) + QuantitySpinBox::wheelEvent(event); + else + event->ignore(); +} + void PrefQuantitySpinBox::restorePreferences() { Q_D(PrefQuantitySpinBox); diff --git a/src/Gui/PrefWidgets.h b/src/Gui/PrefWidgets.h index d1f1b5ede3..c805f7d063 100644 --- a/src/Gui/PrefWidgets.h +++ b/src/Gui/PrefWidgets.h @@ -123,6 +123,7 @@ public: ~PrefSpinBox() override; protected: + void wheelEvent(QWheelEvent *event) override; // restore from/save to parameters void restorePreferences() override; void savePreferences() override; @@ -143,6 +144,7 @@ public: ~PrefDoubleSpinBox() override; protected: + void wheelEvent(QWheelEvent *event) override; // restore from/save to parameters void restorePreferences() override; void savePreferences() override; @@ -236,6 +238,7 @@ public: ~PrefComboBox() override; protected: + void wheelEvent(QWheelEvent *event) override; // restore from/save to parameters void restorePreferences() override; void savePreferences() override; @@ -351,6 +354,7 @@ public: ~PrefUnitSpinBox() override; protected: + void wheelEvent(QWheelEvent *event) override; // restore from/save to parameters void restorePreferences() override; void savePreferences() override; @@ -391,6 +395,7 @@ public: protected: void contextMenuEvent(QContextMenuEvent * event) override; + void wheelEvent(QWheelEvent *event) override; // restore from/save to parameters void restorePreferences() override; void savePreferences() override;