From edd1d758deb70d7a392a23b00fc3b241960b9049 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Mon, 20 Nov 2023 08:50:05 -0800 Subject: [PATCH] Fix wxCheckBox::SetValue() when in undetermined state with GTK State becomes determined when SetValue() is called. See #24074 --- src/gtk/checkbox.cpp | 7 +++++-- tests/controls/checkboxtest.cpp | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gtk/checkbox.cpp b/src/gtk/checkbox.cpp index 7f5c81f0e8..151346a836 100644 --- a/src/gtk/checkbox.cpp +++ b/src/gtk/checkbox.cpp @@ -191,11 +191,14 @@ void wxCheckBox::SetValue( bool state ) { wxCHECK_RET( m_widgetCheckbox != nullptr, wxT("invalid checkbox") ); - if (state == GetValue()) + GtkToggleButton* tglbtn = GTK_TOGGLE_BUTTON(m_widgetCheckbox); + + if (state == GetValue() && !gtk_toggle_button_get_inconsistent(tglbtn)) return; wxGtkEventsDisabler noEvents(this); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(m_widgetCheckbox), state ); + gtk_toggle_button_set_active(tglbtn, state); + gtk_toggle_button_set_inconsistent(tglbtn, false); } bool wxCheckBox::GetValue() const diff --git a/tests/controls/checkboxtest.cpp b/tests/controls/checkboxtest.cpp index 4a1c6a0574..ddca13d161 100644 --- a/tests/controls/checkboxtest.cpp +++ b/tests/controls/checkboxtest.cpp @@ -138,6 +138,9 @@ void CheckBoxTestCase::ThirdStateUser() m_check->Set3StateValue(wxCHK_UNDETERMINED); CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue()); + + m_check->SetValue(true); + CPPUNIT_ASSERT_EQUAL(wxCHK_CHECKED, m_check->Get3StateValue()); } void CheckBoxTestCase::InvalidStyles()