From: Lukáš Tyrychtr Date: Thu, 19 Oct 2023 13:56:38 +0000 (+0200) Subject: a11y: When using rule 2.E for computing accessible name, use it only if appropriate X-Git-Tag: archive/raspbian/4.12.4+ds-3+rpi1^2~21^2^2~16 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e660e922fee4215fa35c7a6933fc711fcd41cf6b;p=gtk4.git a11y: When using rule 2.E for computing accessible name, use it only if appropriate We were using it in all cases, so, we were using it to compute descriptions, and also for non-embedded controls. That was overriding descriptions set, for example, in Gnome settings, and was causing the value of spinboxes to be read multiple times. --- diff --git a/gtk/gtkatcontext.c b/gtk/gtkatcontext.c index 1381f9c526..89f559e6b0 100644 --- a/gtk/gtkatcontext.c +++ b/gtk/gtkatcontext.c @@ -1290,33 +1290,36 @@ gtk_at_context_get_text_accumulate (GtkATContext *self, } /* Step 2.E */ - if (self->accessible_role == GTK_ACCESSIBLE_ROLE_TEXT_BOX) + if ((property == GTK_ACCESSIBLE_PROPERTY_LABEL && is_child) || (relation == GTK_ACCESSIBLE_RELATION_LABELLED_BY && is_ref)) { - if (GTK_IS_EDITABLE (self->accessible)) + if (self->accessible_role == GTK_ACCESSIBLE_ROLE_TEXT_BOX) { - const char *text = gtk_editable_get_text (GTK_EDITABLE (self->accessible)); - if (text && not_just_space (text)) - append_with_space (res, text); - } - return; - } - else if (gtk_accessible_role_is_range_subclass (self->accessible_role)) - { - if (gtk_accessible_attribute_set_contains (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT)) - { - value = gtk_accessible_attribute_set_get_value (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT); - append_with_space (res, gtk_string_accessible_value_get (value)); - } - else if (gtk_accessible_attribute_set_contains (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW)) + if (GTK_IS_EDITABLE (self->accessible)) + { + const char *text = gtk_editable_get_text (GTK_EDITABLE (self->accessible)); + if (text && not_just_space (text)) + append_with_space (res, text); + } + return; + } + else if (gtk_accessible_role_is_range_subclass (self->accessible_role)) { - value = gtk_accessible_attribute_set_get_value (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW); - if (res->len > 0) - g_string_append (res, " "); - g_string_append_printf (res, "%g", gtk_number_accessible_value_get (value)); - } + if (gtk_accessible_attribute_set_contains (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT)) + { + value = gtk_accessible_attribute_set_get_value (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT); + append_with_space (res, gtk_string_accessible_value_get (value)); + } + else if (gtk_accessible_attribute_set_contains (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW)) + { + value = gtk_accessible_attribute_set_get_value (self->properties, GTK_ACCESSIBLE_PROPERTY_VALUE_NOW); + if (res->len > 0) + g_string_append (res, " "); + g_string_append_printf (res, "%g", gtk_number_accessible_value_get (value)); + } - return; - } + return; + } + } /* Step 2.F */ if (gtk_accessible_role_supports_name_from_content (self->accessible_role) || is_ref || is_child)