diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c index 02eb13b4a0..6552165824 100644 --- a/gtk/gtkmenubutton.c +++ b/gtk/gtkmenubutton.c @@ -669,6 +669,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); } static GtkBuildableIface *parent_buildable_iface; @@ -1017,6 +1021,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, @@ -1149,6 +1156,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; menu_button->child = NULL;