a11y: Change the role for many containers
authorMatthias Clasen <mclasen@redhat.com>
Sat, 17 Jun 2023 21:12:37 +0000 (17:12 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 19 Jun 2023 15:15:48 +0000 (11:15 -0400)
The group role that we've used before has some
implications of semantic grouping, whereas these
containers are mainly about layout, so use the
generic role instead.

This should not affect the translation to AT-SPI
at all.

The affected containers are: box, grid, centerbox,
scrolledwindow, viewport, windowhandle, aspectframe.

The role of GtkTreeExpander has been changed to
button instead, since it acts as a button.

gtk/gtkaspectframe.c
gtk/gtkbox.c
gtk/gtkcenterbox.c
gtk/gtkenums.h
gtk/gtkgrid.c
gtk/gtkpopovercontent.c
gtk/gtkscrolledwindow.c
gtk/gtktreeexpander.c
gtk/gtkviewport.c
gtk/gtkwindowhandle.c

index 468c123d6f8e2f49152d7e9ba65ab25b6af476a9..95a4e69b27e6b8e5d0393bdba5d718d549f7986e 100644 (file)
  * # CSS nodes
  *
  * `GtkAspectFrame` uses a CSS node with name `frame`.
+ *
+ * # Accessibility
+ *
+ * Until GTK 4.10, `GtkAspectFrame` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Starting from GTK 4.12, `GtkAspectFrame` uses the `GTK_ACCESSIBLE_ROLE_GENERIC` role.
+
  */
 
 #include "config.h"
@@ -187,7 +194,7 @@ gtk_aspect_frame_class_init (GtkAspectFrameClass *class)
                                                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
 
   gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (class), I_("aspectframe"));
-  gtk_widget_class_set_accessible_role (GTK_WIDGET_CLASS (class), GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (GTK_WIDGET_CLASS (class), GTK_ACCESSIBLE_ROLE_GENERIC);
 }
 
 static void
index 52630d280043604a135d547b4d04f52f6e255b56..c8e780a9d78251b968c831501e9c95ff5225bfba 100644 (file)
@@ -56,7 +56,9 @@
  *
  * # Accessibility
  *
- * `GtkBox` uses the %GTK_ACCESSIBLE_ROLE_GROUP role.
+ * Until GTK 4.10, `GtkBox` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Starting from GTK 4.12, `GtkBox` uses the `GTK_ACCESSIBLE_ROLE_GENERIC` role.
  */
 
 #include "config.h"
@@ -304,8 +306,9 @@ gtk_box_class_init (GtkBoxClass *class)
 
   gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
   gtk_widget_class_set_css_name (widget_class, I_("box"));
-  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
 }
+
 static void
 gtk_box_init (GtkBox *box)
 {
index e76ffc31dd035162eb1064264557797372430ecb..1d9ab7caafcdebcaea48263a4d3957fad7b5252b 100644 (file)
@@ -52,7 +52,9 @@
  *
  * # Accessibility
  *
- * `GtkCenterBox` uses the %GTK_ACCESSIBLE_ROLE_GROUP role.
+ * Until GTK 4.10, `GtkCenterBox` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Starting from GTK 4.12, `GtkCenterBox` uses the `GTK_ACCESSIBLE_ROLE_GENERIC` role.
  */
 
 #include "config.h"
@@ -321,7 +323,7 @@ gtk_center_box_class_init (GtkCenterBoxClass *klass)
 
   gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_CENTER_LAYOUT);
   gtk_widget_class_set_css_name (widget_class, I_("box"));
-  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
 }
 
 static void
index 53fbee0b618360a557dc3c9d89b74bb943e78799..e01629ea13c16cdb03e8c5b54b40484129e66f90 100644 (file)
@@ -1259,11 +1259,12 @@ typedef enum {
  * @GTK_ACCESSIBLE_ROLE_DOCUMENT: Unused
  * @GTK_ACCESSIBLE_ROLE_FEED: Unused
  * @GTK_ACCESSIBLE_ROLE_FORM: Unused
- * @GTK_ACCESSIBLE_ROLE_GENERIC: Unused
+ * @GTK_ACCESSIBLE_ROLE_GENERIC: A nameless container that has no semantic meaning
+ *   of its own. This is the role that GTK uses by default for widgets and most containers.
  * @GTK_ACCESSIBLE_ROLE_GRID: A grid of items.
  * @GTK_ACCESSIBLE_ROLE_GRID_CELL: An item in a grid or tree grid.
- * @GTK_ACCESSIBLE_ROLE_GROUP: An element that groups multiple widgets. GTK uses
- *   this role for various containers, like [class@Box], [class@Viewport], and [class@HeaderBar].
+ * @GTK_ACCESSIBLE_ROLE_GROUP: An element that groups multiple related widgets. GTK uses
+ *   this role for various containers, like [class@Gtk.HeaderBar] or [class@Gtk.Notebook].
  * @GTK_ACCESSIBLE_ROLE_HEADING: Unused
  * @GTK_ACCESSIBLE_ROLE_IMG: An image.
  * @GTK_ACCESSIBLE_ROLE_INPUT: Abstract role.
index 5b2c1f4d76ff3e310dd8056c864383b773f32495..087b40c47df71f1d3a0e9698ccf5b62025a77937 100644 (file)
  *
  * # Accessibility
  *
- * `GtkGrid` uses the %GTK_ACCESSIBLE_ROLE_GROUP role.
+ * Until GTK 4.10, `GtkGrid` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Starting from GTK 4.12, `GtkGrid` uses the `GTK_ACCESSIBLE_ROLE_GENERIC` role.
  */
 
 typedef struct
@@ -477,7 +479,7 @@ gtk_grid_class_init (GtkGridClass *class)
 
   gtk_widget_class_set_css_name (widget_class, I_("grid"));
   gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_GRID_LAYOUT);
-  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
 }
 
 static GtkBuildableIface *parent_buildable_iface;
index 06ca8d38ebcd0fc7f2e3f3aa72da186db269a3b9..4fd45e78178b158829212e7b759a869ee39741b0 100644 (file)
@@ -76,6 +76,7 @@ gtk_popover_content_class_init (GtkPopoverContentClass *klass)
   widget_class->css_changed = gtk_popover_content_css_changed;
 
   gtk_widget_class_set_css_name (widget_class, I_("contents"));
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
 }
 
 static void
index 5626bd27d5f326353018f20adfaeef57f27f9333..a2aa3d3a4840ab0055e1fc95a4e9e7d40a129b96 100644 (file)
  *
  * # Accessibility
  *
- * `GtkScrolledWindow` uses the %GTK_ACCESSIBLE_ROLE_GROUP role.
+ * Until GTK 4.10, `GtkScrolledWindow` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Starting from GTK 4.12, `GtkScrolledWindow` uses the `GTK_ACCESSIBLE_ROLE_GENERIC` role.
  */
 
 /* scrolled window policy and size requisition handling:
@@ -873,7 +875,7 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
   add_tab_bindings (widget_class, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD);
 
   gtk_widget_class_set_css_name (widget_class, I_("scrolledwindow"));
-  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
 }
 
 static gboolean
index 66a520b95c5218fefaf1d43e2b47a92c7a4f8998..c8e4813ed8f2e6d29e0e9171f4bc27d82aee9438 100644 (file)
  *
  * ## Accessibility
  *
- * `GtkTreeExpander` uses the %GTK_ACCESSIBLE_ROLE_GROUP role. The expander icon
- * is represented as a %GTK_ACCESSIBLE_ROLE_BUTTON, labelled by the expander's
- * child, and toggling it will change the %GTK_ACCESSIBLE_STATE_EXPANDED state.
+ * Until GTK 4.10, `GtkTreeExpander` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Since GTK 4.12, `GtkTreeExpander` uses the `GTK_ACCESSIBLE_ROLE_BUTTON` role.
+ * Toggling it will change the `GTK_ACCESSIBLE_STATE_EXPANDED` state.
  */
 
 struct _GtkTreeExpander
@@ -172,7 +173,7 @@ gtk_tree_expander_update_for_list_row (GtkTreeExpander *self)
               self->expander_icon =
                 g_object_new (GTK_TYPE_BUILTIN_ICON,
                               "css-name", "expander",
-                              "accessible-role", GTK_ACCESSIBLE_ROLE_BUTTON,
+                              "accessible-role", GTK_ACCESSIBLE_ROLE_NONE,
                               NULL);
 
               gesture = gtk_gesture_click_new ();
@@ -189,10 +190,6 @@ gtk_tree_expander_update_for_list_row (GtkTreeExpander *self)
               gtk_widget_insert_before (self->expander_icon,
                                         GTK_WIDGET (self),
                                         self->child);
-
-              gtk_accessible_update_property (GTK_ACCESSIBLE (self->expander_icon),
-                                              GTK_ACCESSIBLE_PROPERTY_LABEL, _("Expand"),
-                                              -1);
             }
 
           if (gtk_tree_list_row_get_expanded (self->list_row))
@@ -684,7 +681,7 @@ gtk_tree_expander_class_init (GtkTreeExpanderClass *klass)
 
   gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BOX_LAYOUT);
   gtk_widget_class_set_css_name (widget_class, I_("treeexpander"));
-  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_BUTTON);
 }
 
 static gboolean
index 443fec57ee262edc882defbedd7333af128984d8..5f9cc86fe49b9e0277daba6571db8cb7484bc4a1 100644 (file)
@@ -54,7 +54,9 @@
  *
  * # Accessibility
  *
- * `GtkViewport` uses the %GTK_ACCESSIBLE_ROLE_GROUP role.
+ * Until GTK 4.10, `GtkViewport` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Starting from GTK 4.12, `GtkViewport` uses the `GTK_ACCESSIBLE_ROLE_GENERIC` role.
  */
 
 typedef struct _GtkViewportPrivate       GtkViewportPrivate;
@@ -334,7 +336,7 @@ gtk_viewport_class_init (GtkViewportClass *class)
                                                         GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
 
   gtk_widget_class_set_css_name (widget_class, I_("viewport"));
-  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
 }
 
 static void
index 56594d8714a711d0e883f90d431ada0a475f5729..afb7215b308c766195b1a98b7f86248181448728 100644 (file)
@@ -50,7 +50,9 @@
  *
  * # Accessibility
  *
- * `GtkWindowHandle` uses the %GTK_ACCESSIBLE_ROLE_GROUP role.
+ * Until GTK 4.10, `GtkWindowHandle` used the `GTK_ACCESSIBLE_ROLE_GROUP` role.
+ *
+ * Starting from GTK 4.12, `GtkWindowHandle` uses the `GTK_ACCESSIBLE_ROLE_GENERIC` role.
  */
 
 struct _GtkWindowHandle {
@@ -544,7 +546,7 @@ gtk_window_handle_class_init (GtkWindowHandleClass *klass)
 
   gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
   gtk_widget_class_set_css_name (widget_class, I_("windowhandle"));
-  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GROUP);
+  gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_GENERIC);
 }
 
 static void