From e0bf6585debdbe4020f6d447a07796145de84ae1 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 21 Jun 2023 15:39:28 -0400 Subject: [PATCH 1/4] Cosmetics: typo fix --- gtk/gtkfilechooserwidget.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 592df92c02..4eb64048be 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -4573,7 +4573,7 @@ gtk_file_chooser_widget_unselect_all (GtkFileChooser *chooser) /* Checks whether the filename entry for Save modes contains a well-formed filename. * - * is_well_formed_ret - whether what the user typed passes gkt_file_system_make_path() + * is_well_formed_ret - whether what the user typed passes gtk_file_system_make_path() * * is_empty_ret - whether the file entry is totally empty * From 2983c0be7047e878b9bb585f8f50b4977afc4741 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 21 Jun 2023 16:05:29 -0400 Subject: [PATCH 2/4] widget: Don't let abstract role slip through When there isn't an accessible role set on the instance or in class_init, we want to default to 'generic'. There was one place where we failed to do so. --- gtk/gtkwidget.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 8576010eb3..dd2920e597 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -2401,6 +2401,8 @@ gtk_widget_root_at_context (GtkWidget *self) /* Reset the accessible role to its current value */ if (role == GTK_ACCESSIBLE_ROLE_WIDGET) role = GTK_WIDGET_GET_CLASS (self)->priv->accessible_role; + if (role == GTK_ACCESSIBLE_ROLE_WIDGET) + role = GTK_ACCESSIBLE_ROLE_GENERIC; gtk_at_context_set_accessible_role (priv->at_context, role); if (priv->root) From 32e6ed4ecabab3a9fc4a6dddf0d57ffbee6c0dc2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 21 Jun 2023 16:16:11 -0400 Subject: [PATCH 3/4] a11y: Use group role for color and font buttons This is needed since generic does not allow naming. --- gtk/gtkcolordialogbutton.c | 1 + gtk/gtkfontdialogbutton.c | 1 + 2 files changed, 2 insertions(+) diff --git a/gtk/gtkcolordialogbutton.c b/gtk/gtkcolordialogbutton.c index dce03690d1..d2438438c5 100644 --- a/gtk/gtkcolordialogbutton.c +++ b/gtk/gtkcolordialogbutton.c @@ -280,6 +280,7 @@ gtk_color_dialog_button_class_init (GtkColorDialogButtonClass *class) gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, "colorbutton"); + gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP); } /* }}} */ diff --git a/gtk/gtkfontdialogbutton.c b/gtk/gtkfontdialogbutton.c index 9dc25cce7c..2ee620a096 100644 --- a/gtk/gtkfontdialogbutton.c +++ b/gtk/gtkfontdialogbutton.c @@ -385,6 +385,7 @@ gtk_font_dialog_button_class_init (GtkFontDialogButtonClass *class) gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_css_name (widget_class, "fontbutton"); + gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP); } /* }}} */ From 76fcd5cf25effffd133ed3f62db67beb7d11348f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 21 Jun 2023 16:06:39 -0400 Subject: [PATCH 4/4] Add another a11y test This one catches the lingering 'widget' role that only happens when widgets are realized and rooted. --- testsuite/a11y/colordialogbutton.c | 29 +++++++++++++++++++++++++++++ testsuite/a11y/meson.build | 1 + 2 files changed, 30 insertions(+) create mode 100644 testsuite/a11y/colordialogbutton.c diff --git a/testsuite/a11y/colordialogbutton.c b/testsuite/a11y/colordialogbutton.c new file mode 100644 index 0000000000..6fc2b7496b --- /dev/null +++ b/testsuite/a11y/colordialogbutton.c @@ -0,0 +1,29 @@ +#include + +static void +color_dialog_button_role (void) +{ + GtkWidget *window, *widget; + + widget = gtk_color_dialog_button_new (NULL); + window = gtk_window_new (); + gtk_window_set_child (GTK_WINDOW (window), widget); + gtk_window_present (GTK_WINDOW (window)); + + while (!gtk_widget_get_realized (widget)) + g_main_context_iteration (NULL, FALSE); + + gtk_test_accessible_assert_role (widget, GTK_ACCESSIBLE_ROLE_GROUP); + + gtk_window_destroy (GTK_WINDOW (window)); +} + +int +main (int argc, char *argv[]) +{ + gtk_test_init (&argc, &argv, NULL); + + g_test_add_func ("/a11y/color-dialog-button/role", color_dialog_button_role); + + return g_test_run (); +} diff --git a/testsuite/a11y/meson.build b/testsuite/a11y/meson.build index 058baec406..2686d6c31f 100644 --- a/testsuite/a11y/meson.build +++ b/testsuite/a11y/meson.build @@ -11,6 +11,7 @@ tests = [ { 'name': 'box' }, { 'name': 'button' }, { 'name': 'checkbutton' }, + { 'name': 'colordialogbutton' }, { 'name': 'custom' }, { 'name': 'dialog' }, { 'name': 'entry' },