summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukáš Tyrychtr <lukastyrychtr@gmail.com>2021-09-14 14:26:18 +0200
committerLukáš Tyrychtr <lukastyrychtr@gmail.com>2021-09-14 14:26:18 +0200
commitb664b2d1fd6779cc10b4759bc797f04da41a1146 (patch)
tree5ece34ec7dae3ad01c8c9476a998c7a3fa30898f
parent2a12a3e6d904225a74f82d02c3b6aadbbd453323 (diff)
downloadgtk+-b664b2d1fd6779cc10b4759bc797f04da41a1146.tar.gz
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
-rw-r--r--gtk/gtkmenubutton.c10
1 files changed, 10 insertions, 0 deletions
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;