From: Lukáš Tyrychtr Date: Tue, 14 Sep 2021 12:26:18 +0000 (+0200) Subject: Set correct accessible relations for GtkMenuButton X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2^2~38 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5b186fab1af78b08093a0a5e19430ccdadd669d1;p=gtk4.git Set correct accessible relations for GtkMenuButton Up until now, as the focus was moved to the inner button, it was not possible for assistive technologies to determine the correct labels and descriptions because developers could set them only for the parent widget. Now, the proper relations are added so the labels should be picked up properly. Fixes #4254 --- diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index e1d8209ddc..3858dcf01f 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -633,6 +633,10 @@ gtk_menu_button_init (GtkMenuButton *self) gtk_widget_set_sensitive (self->button, FALSE); gtk_widget_add_css_class (GTK_WIDGET (self), "popup"); + + gtk_accessible_update_relation (GTK_ACCESSIBLE (self->button), GTK_ACCESSIBLE_RELATION_LABELLED_BY, self, NULL, + GTK_ACCESSIBLE_RELATION_DESCRIBED_BY, self, NULL, + -1); } /** @@ -949,6 +953,9 @@ gtk_menu_button_set_icon_name (GtkMenuButton *menu_button, box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_halign (box, GTK_ALIGN_CENTER); + // Because we are setting only an icon, let the inner button be labeled by us, so the accessible label can be overridden + gtk_accessible_update_relation (GTK_ACCESSIBLE (menu_button->button), GTK_ACCESSIBLE_RELATION_LABELLED_BY, menu_button, NULL, -1); + image_widget = g_object_new (GTK_TYPE_IMAGE, "accessible-role", GTK_ACCESSIBLE_ROLE_PRESENTATION, "icon-name", icon_name, @@ -1071,6 +1078,9 @@ gtk_menu_button_set_label (GtkMenuButton *menu_button, gtk_button_set_child (GTK_BUTTON (menu_button->button), box); menu_button->label_widget = label_widget; + // When the user explicitly set a label assume that it should be announced by assistive technologies as well + gtk_accessible_update_relation (GTK_ACCESSIBLE (menu_button->button), GTK_ACCESSIBLE_RELATION_LABELLED_BY, menu_button->label_widget, NULL, -1); + menu_button->image_widget = NULL; update_arrow (menu_button);