From 32550fd6fc7bdb9f41575bf1cfaef336846e84bb Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 19 Jun 2023 06:45:28 -0400 Subject: [PATCH] a11y: Remove an overzealous optimisation The result of calling update_property needs to be that the property is marked as set afterward, even if the value we pass happens to match the default value. After this change, scrollbars have value-now show up as zero in the accessiblity page of the inspector, even when that matches the lower bound. Test included. Fixes: #5886 --- gtk/gtkaccessibleattributeset.c | 10 +++++++++- testsuite/a11y/meson.build | 1 + testsuite/a11y/value.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 testsuite/a11y/value.c diff --git a/gtk/gtkaccessibleattributeset.c b/gtk/gtkaccessibleattributeset.c index fececf9bd1..0206025346 100644 --- a/gtk/gtkaccessibleattributeset.c +++ b/gtk/gtkaccessibleattributeset.c @@ -121,7 +121,15 @@ gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self, if (value != NULL) { if (gtk_accessible_value_equal (value, self->attribute_values[attribute])) - return FALSE; + { + if (!_gtk_bitmask_get (self->attributes_set, attribute)) + { + self->attributes_set = _gtk_bitmask_set (self->attributes_set, attribute, TRUE); + return TRUE; + } + else + return FALSE; + } } else { diff --git a/testsuite/a11y/meson.build b/testsuite/a11y/meson.build index b3baa13b40..6d46647eef 100644 --- a/testsuite/a11y/meson.build +++ b/testsuite/a11y/meson.build @@ -29,6 +29,7 @@ tests = [ { 'name': 'switch' }, { 'name': 'textview' }, { 'name': 'togglebutton' }, + { 'name': 'value' }, { 'name': 'window' }, ] diff --git a/testsuite/a11y/value.c b/testsuite/a11y/value.c new file mode 100644 index 0000000000..666dcb2d47 --- /dev/null +++ b/testsuite/a11y/value.c @@ -0,0 +1,32 @@ +#include + +static void +value_set_unset (void) +{ + GtkAdjustment *adjustment = gtk_adjustment_new (0, 0, 100, 1, 10, 10); + GtkWidget *scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_HORIZONTAL, adjustment); + + g_object_ref_sink (scrollbar); + + gtk_test_accessible_assert_property (scrollbar, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, 0.); + + gtk_adjustment_set_value (adjustment, 10); + + gtk_test_accessible_assert_property (scrollbar, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, 10.); + + gtk_adjustment_set_value (adjustment, 0); + + gtk_test_accessible_assert_property (scrollbar, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW, 0.); + + g_object_unref (scrollbar); +} + +int +main (int argc, char *argv[]) +{ + gtk_test_init (&argc, &argv, NULL); + + g_test_add_func ("/a11y/value/set-unset", value_set_unset); + + return g_test_run (); +} -- 2.30.2