include/vcl/weld.hxx | 30 ++++++----------------------- vcl/inc/jsdialog/jsdialogbuilder.hxx | 2 - vcl/inc/qt5/QtInstanceCheckButton.hxx | 8 +------ vcl/inc/salvtables.hxx | 8 +------ vcl/jsdialog/jsdialogbuilder.cxx | 8 +++---- vcl/qt5/QtInstanceCheckButton.cxx | 32 ++++++------------------------- vcl/source/app/salvtables.cxx | 21 +++----------------- vcl/unx/gtk3/gtkinst.cxx | 35 ++++++++++++++++------------------ 8 files changed, 44 insertions(+), 100 deletions(-)
New commits: commit 71404cc52699e93ef6938e8c8e846b8f1882bb39 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Thu Jul 17 13:42:11 2025 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Fri Jul 18 07:08:11 2025 +0200 weld: Simplify internal CheckButton logic Align the internal logic more with the public interface by no longer requiring that implementations handle a (bool) inconsistent state and a (bool) active state separately, but instead require them to implement CheckButton::get_state and CheckButton::set_state that directly operate on a TriState parameter. With that in place, CheckButton::{g,s}et_inconsistent are no longer needed and CheckButton::{g,s}et_active can be implemented by the weld::CheckButton base class itself. Change-Id: Ia8a5d89faf33d441fb4683185ac01c1bf7d13821 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188007 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index bd4927a401c6..3184fbc25b2c 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1683,36 +1683,20 @@ class VCL_DLLPUBLIC MenuToggleButton : virtual public MenuButton class VCL_DLLPUBLIC CheckButton : virtual public Toggleable { public: - virtual TriState get_state() const override - { - if (get_inconsistent()) - return TRISTATE_INDET; - return weld::Toggleable::get_state(); - } + // must override Toggleable::get_state to support TRISTATE_INDET + virtual TriState get_state() const override = 0; + virtual void set_state(TriState eState) = 0; - void set_state(TriState eState) + virtual void set_active(bool bActive) override final { - switch (eState) - { - case TRISTATE_INDET: - set_inconsistent(); - break; - case TRISTATE_TRUE: - set_active(true); - break; - case TRISTATE_FALSE: - set_active(false); - break; - } + set_state(bActive ? TRISTATE_TRUE : TRISTATE_FALSE); } + virtual bool get_active() const override final { return get_state() == TRISTATE_TRUE; } + virtual void set_label(const OUString& rText) = 0; virtual OUString get_label() const = 0; virtual void set_label_wrap(bool wrap) = 0; - -protected: - virtual void set_inconsistent() = 0; - virtual bool get_inconsistent() const = 0; }; struct VCL_DLLPUBLIC TriStateEnabled diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index be76e9c54164..3fddebeddfe3 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -634,7 +634,7 @@ public: JSCheckButton(JSDialogSender* pSender, ::CheckBox* pCheckBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership); - virtual void set_active(bool active) override; + virtual void set_state(TriState eState) override; }; class JSDrawingArea final : public JSWidget<SalInstanceDrawingArea, VclDrawingArea> diff --git a/vcl/inc/qt5/QtInstanceCheckButton.hxx b/vcl/inc/qt5/QtInstanceCheckButton.hxx index df88c32ed3db..ad4fbf2e0291 100644 --- a/vcl/inc/qt5/QtInstanceCheckButton.hxx +++ b/vcl/inc/qt5/QtInstanceCheckButton.hxx @@ -23,13 +23,9 @@ class QtInstanceCheckButton : public QtInstanceWidget, public virtual weld::Chec public: QtInstanceCheckButton(QCheckBox* pCheckBox); - // weld::Toggleable methods - virtual void set_active(bool bActive) override; - virtual bool get_active() const override; - virtual void set_inconsistent() override; - virtual bool get_inconsistent() const override; + virtual void set_state(TriState eState) override; + virtual TriState get_state() const override; - // weld::CheckButton methods virtual void set_label(const OUString& rText) override; virtual OUString get_label() const override; virtual void set_label_wrap(bool bWrap) override; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index cfb17e112279..cd43bc4447c1 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1241,13 +1241,9 @@ private: public: SalInstanceCheckButton(CheckBox* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership); - virtual void set_active(bool active) override; - - virtual bool get_active() const override; - - virtual void set_inconsistent() override; + virtual void set_state(TriState eState) override; - virtual bool get_inconsistent() const override; + virtual TriState get_state() const override; virtual void set_label(const OUString& rText) override { SalInstanceButton::set_label(rText); } diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index c5414e70a615..cffd42128252 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1554,11 +1554,11 @@ JSCheckButton::JSCheckButton(JSDialogSender* pSender, ::CheckBox* pCheckBox, { } -void JSCheckButton::set_active(bool active) +void JSCheckButton::set_state(TriState eState) { - bool bWasActive = get_active(); - SalInstanceCheckButton::set_active(active); - if (bWasActive != active) + TriState eOldState = get_state(); + SalInstanceCheckButton::set_state(eState); + if (eOldState != eState) sendUpdate(); } diff --git a/vcl/qt5/QtInstanceCheckButton.cxx b/vcl/qt5/QtInstanceCheckButton.cxx index 747191171a37..e92afa8488f8 100644 --- a/vcl/qt5/QtInstanceCheckButton.cxx +++ b/vcl/qt5/QtInstanceCheckButton.cxx @@ -20,39 +20,21 @@ QtInstanceCheckButton::QtInstanceCheckButton(QCheckBox* pCheckBox) connect(m_pCheckBox, &QCheckBox::toggled, this, &QtInstanceCheckButton::handleToggled); } -void QtInstanceCheckButton::set_active(bool bActive) +void QtInstanceCheckButton::set_state(TriState eState) { SolarMutexGuard g; GetQtInstance().RunInMainThread([&] { - m_pCheckBox->setTristate(false); - m_pCheckBox->setChecked(bActive); + m_pCheckBox->setTristate(eState == TRISTATE_INDET); + m_pCheckBox->setCheckState(toQtCheckState(eState)); }); } -bool QtInstanceCheckButton::get_active() const +TriState QtInstanceCheckButton::get_state() const { SolarMutexGuard g; - bool bActive; - GetQtInstance().RunInMainThread([&] { bActive = m_pCheckBox->isChecked(); }); - return bActive; -} - -void QtInstanceCheckButton::set_inconsistent() -{ - SolarMutexGuard g; - GetQtInstance().RunInMainThread([&] { - m_pCheckBox->setTristate(true); - m_pCheckBox->setCheckState(Qt::PartiallyChecked); - }); -} - -bool QtInstanceCheckButton::get_inconsistent() const -{ - SolarMutexGuard g; - bool bInconsistent; - GetQtInstance().RunInMainThread( - [&] { bInconsistent = m_pCheckBox->checkState() == Qt::PartiallyChecked; }); - return bInconsistent; + TriState eState = TRISTATE_INDET; + GetQtInstance().RunInMainThread([&] { eState = toVclTriState(m_pCheckBox->checkState()); }); + return eState; } void QtInstanceCheckButton::set_label(const OUString& rText) diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index e338e42c8789..408fb4bb658b 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -3206,28 +3206,15 @@ SalInstanceCheckButton::SalInstanceCheckButton(CheckBox* pButton, SalInstanceBui m_xCheckButton->SetToggleHdl(LINK(this, SalInstanceCheckButton, ToggleHdl)); } -void SalInstanceCheckButton::set_active(bool active) +void SalInstanceCheckButton::set_state(TriState eState) { disable_notify_events(); - m_xCheckButton->EnableTriState(false); - m_xCheckButton->Check(active); + m_xCheckButton->EnableTriState(eState == TRISTATE_INDET); + m_xCheckButton->SetState(eState); enable_notify_events(); } -bool SalInstanceCheckButton::get_active() const { return m_xCheckButton->IsChecked(); } - -void SalInstanceCheckButton::set_inconsistent() -{ - disable_notify_events(); - m_xCheckButton->EnableTriState(true); - m_xCheckButton->SetState(TRISTATE_INDET); - enable_notify_events(); -} - -bool SalInstanceCheckButton::get_inconsistent() const -{ - return m_xCheckButton->GetState() == TRISTATE_INDET; -} +TriState SalInstanceCheckButton::get_state() const { return m_xCheckButton->GetState(); } void SalInstanceCheckButton::set_label_wrap(bool bWrap) { diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 15f9d92a9613..447b3e5fad6c 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -12782,38 +12782,37 @@ public: { } - virtual void set_active(bool active) override + virtual void set_state(TriState eState) override { disable_notify_events(); + const bool bInconsistent = eState == TRISTATE_INDET; #if GTK_CHECK_VERSION(4, 0, 0) - gtk_check_button_set_inconsistent(m_pCheckButton, false); - gtk_check_button_set_active(m_pCheckButton, active); + gtk_check_button_set_inconsistent(m_pCheckButton, bInconsistent); + if (!bInconsistent) + gtk_check_button_set_active(m_pCheckButton, eState == TRISTATE_TRUE); #else - gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(m_pCheckButton), false); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_pCheckButton), active); + gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(m_pCheckButton), bInconsistent); + if (!bInconsistent) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(m_pCheckButton), + eState == TRISTATE_TRUE); #endif enable_notify_events(); } - virtual bool get_active() const override - { -#if GTK_CHECK_VERSION(4, 0, 0) - return gtk_check_button_get_active(m_pCheckButton); -#else - return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_pCheckButton)); -#endif - } - - virtual void set_inconsistent() override + virtual TriState get_state() const override { + if (get_inconsistent()) + return TRISTATE_INDET; #if GTK_CHECK_VERSION(4, 0, 0) - gtk_check_button_set_inconsistent(m_pCheckButton, true); + if (gtk_check_button_get_active(m_pCheckButton)) #else - gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(m_pCheckButton), true); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(m_pCheckButton))) #endif + return TRISTATE_TRUE; + return TRISTATE_FALSE; } - virtual bool get_inconsistent() const override + bool get_inconsistent() const { #if GTK_CHECK_VERSION(4, 0, 0) return gtk_check_button_get_inconsistent(m_pCheckButton);