a11y: Move naming data to gtkatcontext.c
authorMatthias Clasen <mclasen@redhat.com>
Sun, 18 Jun 2023 20:43:58 +0000 (16:43 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 19 Jun 2023 15:17:47 +0000 (11:17 -0400)
This is in preparation for using this information
in the name computation.

gtk/gtkaccessibleprivate.h
gtk/gtkatcontext.c
gtk/inspector/a11yoverlay.c

index 6d2f2f212530502af30512ee1abdb82ebb077b9f..326506e626a55d2f9a10063caa9936e147f7b922 100644 (file)
@@ -57,6 +57,35 @@ const char *    gtk_accessible_role_to_name     (GtkAccessibleRole  role,
 
 gboolean gtk_accessible_role_is_range_subclass (GtkAccessibleRole role);
 
+/* < private >
+ * GtkAccessibleNaming:
+ * @GTK_ACCESSIBLE_NAME_ALLOWED:
+ *   The role allows an accessible name and description
+ * @GTK_ACCESSIBLE_NAME_PROHIBITED:
+ *   The role does not allow an accessible name and descirption
+ * @GTK_ACCESSIBLE_NAME_REQUIRED:
+ *   The role requires an accessible name and description
+ * @GTK_ACCESSIBLE_NAME_RECOMMENDED:
+ *   It is recommended to set the label property or labelled-by relation
+ *   for this role
+ * @GTK_ACCESSIBLE_NAME_NOT_RECOMMENDED:
+ *   It is recommended not to set the label property or labelled-by relation
+ *   for this role
+ *
+ * Information about naming requirements for accessible roles.
+ */
+typedef enum {
+  GTK_ACCESSIBLE_NAME_ALLOWED,
+  GTK_ACCESSIBLE_NAME_PROHIBITED,
+  GTK_ACCESSIBLE_NAME_REQUIRED,
+  GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  GTK_ACCESSIBLE_NAME_NOT_RECOMMENDED,
+} GtkAccessibleNaming;
+
+gboolean gtk_accessible_role_supports_name_from_author  (GtkAccessibleRole role);
+gboolean gtk_accessible_role_supports_name_from_content (GtkAccessibleRole role);
+GtkAccessibleNaming gtk_accessible_role_get_naming      (GtkAccessibleRole role);
+
 gboolean        gtk_accessible_should_present   (GtkAccessible     *self);
 
 void            gtk_accessible_update_children  (GtkAccessible           *self,
index 848a4514e352f87bc61bf4235705143f1cda4ace..ebcebc1c037c7aafd44cf1d067c475e5b8851924 100644 (file)
@@ -1010,7 +1010,146 @@ gtk_at_context_get_accessible_relation (GtkATContext          *self,
   return gtk_accessible_attribute_set_get_value (self->relations, relation);
 }
 
-/* See the WAI-ARIA § 4.3, "Accessible Name and Description Computation" */
+/* See the WAI-ARIA § 4.3, "Accessible Name and Description Computation",
+ * and https://www.w3.org/TR/accname-1.2/
+ */
+
+/* See ARIA 5.2.8.4, 5.2.8.5 and 5.2.8.6 for the prohibited, from author
+ * and from content parts, and the table in
+ * https://www.w3.org/WAI/ARIA/apg/practices/names-and-descriptions/
+ * for the recommended / not recommended parts.
+ */
+
+#define NAME_FROM_AUTHOR  (1 << 6)
+#define NAME_FROM_CONTENT (1 << 7)
+
+static guint8 naming[] = {
+  [GTK_ACCESSIBLE_ROLE_ALERT] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_ALERT_DIALOG] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_BANNER] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_BUTTON] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_CAPTION] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_CELL] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
+  [GTK_ACCESSIBLE_ROLE_CHECKBOX] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_COLUMN_HEADER] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_COMBO_BOX] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_COMMAND] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_COMPOSITE] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_DIALOG] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_DOCUMENT] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_FEED] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_FORM] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_GENERIC] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_GRID] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_GRID_CELL] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
+  [GTK_ACCESSIBLE_ROLE_GROUP] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_HEADING] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_IMG] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_INPUT] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_LABEL] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
+  [GTK_ACCESSIBLE_ROLE_LANDMARK] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_LEGEND] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_LINK] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_LIST] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_LIST_BOX] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_LIST_ITEM] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_NOT_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_LOG] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_MAIN] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_MARQUEE] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_MATH] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_METER] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_MENU] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_MENU_BAR] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_MENU_ITEM] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_MENU_ITEM_CHECKBOX] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_MENU_ITEM_RADIO] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_NAVIGATION] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_NONE] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_NOTE] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_OPTION] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_PRESENTATION] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_PROGRESS_BAR] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_RADIO] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_RADIO_GROUP] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_RANGE] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_REGION] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_ROW] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
+  [GTK_ACCESSIBLE_ROLE_ROW_GROUP] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_NOT_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_ROW_HEADER] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_SCROLLBAR] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_SEARCH] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_SEARCH_BOX] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_SECTION] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_SECTION_HEAD] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_SELECT] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_SEPARATOR] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_SLIDER] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_SPIN_BUTTON] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_STATUS] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_STRUCTURE] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_SWITCH] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_TAB] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_TABLE] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_TAB_LIST] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_TAB_PANEL] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_TEXT_BOX] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_TIME] = GTK_ACCESSIBLE_NAME_PROHIBITED,
+  [GTK_ACCESSIBLE_ROLE_TIMER] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_TOOLBAR] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_RECOMMENDED,
+  [GTK_ACCESSIBLE_ROLE_TOOLTIP] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
+  [GTK_ACCESSIBLE_ROLE_TREE] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_TREE_GRID] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_TREE_ITEM] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT|GTK_ACCESSIBLE_NAME_REQUIRED,
+  [GTK_ACCESSIBLE_ROLE_WIDGET] = NAME_FROM_AUTHOR|NAME_FROM_CONTENT,
+  [GTK_ACCESSIBLE_ROLE_WINDOW] = NAME_FROM_AUTHOR,
+  [GTK_ACCESSIBLE_ROLE_TOGGLE_BUTTON] = NAME_FROM_AUTHOR|GTK_ACCESSIBLE_NAME_REQUIRED,
+};
+
+/* < private >
+ * gtk_accessible_role_supports_name_from_author:
+ * @role: a `GtkAccessibleRole`
+ *
+ * Returns whether this role supports setting the label and description
+ * properties or the labelled-by and described-by relations.
+ *
+ * Returns: %TRUE if the role allows labelling
+ */
+gboolean
+gtk_accessible_role_supports_name_from_author (GtkAccessibleRole role)
+{
+  return (naming[role] & NAME_FROM_AUTHOR) != 0;
+}
+
+/* < private >
+ * gtk_accessible_role_supports_name_from_content:
+ * @role: a `GtkAccessibleRole`
+ *
+ * Returns whether this role will use content of child widgets such
+ * as labels for its accessible name and description if no explicit
+ * labels are provided.
+ *
+ * Returns: %TRUE if the role content naming
+ */
+gboolean
+gtk_accessible_role_supports_name_from_content (GtkAccessibleRole role)
+{
+  return (naming[role] & NAME_FROM_CONTENT) != 0;
+}
+
+/* < private >
+ * gtk_accessible_role_get_nameing:
+ * @role: a `GtkAccessibleRole`
+ *
+ * Returns naming information for this role.
+ *
+ * Returns: information about naming requirements for the role
+ */
+GtkAccessibleNaming
+gtk_accessible_role_get_naming (GtkAccessibleRole role)
+{
+  return (GtkAccessibleNaming) (naming[role] & ~(NAME_FROM_AUTHOR|NAME_FROM_CONTENT));
+}
+
 static void
 gtk_at_context_get_name_accumulate (GtkATContext *self,
                                     GPtrArray    *names,
@@ -1177,15 +1316,6 @@ gtk_at_context_get_description_accumulate (GtkATContext *self,
     }
 }
 
-/* See ARIA 5.2.8.6 */
-static GtkAccessibleRole name_forbidden[] = {
-  GTK_ACCESSIBLE_ROLE_CAPTION,
-  GTK_ACCESSIBLE_ROLE_GENERIC,
-  GTK_ACCESSIBLE_ROLE_NONE,
-  GTK_ACCESSIBLE_ROLE_PRESENTATION,
-  GTK_ACCESSIBLE_ROLE_TIME,
-};
-
 static gboolean
 is_nested_button (GtkATContext *self)
 {
@@ -1254,11 +1384,8 @@ gtk_at_context_get_name (GtkATContext *self)
 
   g_return_val_if_fail (GTK_IS_AT_CONTEXT (self), NULL);
 
-  for (unsigned int i = 0; i < G_N_ELEMENTS (name_forbidden); i++)
-    {
-      if (self->accessible_role == name_forbidden[i])
-        return g_strdup ("");
-    }
+  if (gtk_accessible_role_get_naming (self->accessible_role) == GTK_ACCESSIBLE_NAME_PROHIBITED)
+    return g_strdup ("");
 
   /* We special case this here since it is a common pattern:
    * We have a 'wrapper' object, like a GtkDropdown which
@@ -1322,11 +1449,8 @@ gtk_at_context_get_description (GtkATContext *self)
 
   g_return_val_if_fail (GTK_IS_AT_CONTEXT (self), NULL);
 
-  for (unsigned int i = 0; i < G_N_ELEMENTS (name_forbidden); i++)
-    {
-      if (self->accessible_role == name_forbidden[i])
-        return g_strdup ("");
-    }
+  if (gtk_accessible_role_get_naming (self->accessible_role) == GTK_ACCESSIBLE_NAME_PROHIBITED)
+    return g_strdup ("");
 
   /* We special case this here since it is a common pattern:
    * We have a 'wrapper' object, like a GtkDropdown which
index a729ec5175de28324e03c1c3b788e30d1f0b0f0f..481e780cc29efaf92ac5e17b7c33842d92a558a1 100644 (file)
@@ -46,98 +46,6 @@ struct _GtkA11yOverlayClass
 
 G_DEFINE_TYPE (GtkA11yOverlay, gtk_a11y_overlay, GTK_TYPE_INSPECTOR_OVERLAY)
 
-typedef enum
-{
-  NAMING_DISCRETIONARY,
-  NAMING_REQUIRED,
-  NAMING_RECOMMENDED,
-  NAMING_CONDITIONAL,
-  NAMING_NOT_RECOMMENDED,
-  NAMING_PROHIBITED
-} NamingNecessity;
-
-static NamingNecessity name_for_role[] = {
-  NAMING_DISCRETIONARY, // ALERT
-  NAMING_REQUIRED, // ALERT_DIALOG
-  NAMING_DISCRETIONARY, // BANNER
-  NAMING_CONDITIONAL, // BUTTON
-  NAMING_PROHIBITED, // CAPTION
-  NAMING_CONDITIONAL, // CELL
-  NAMING_CONDITIONAL, // CHECKBOX
-  NAMING_CONDITIONAL, // COLUMN_HEADER
-  NAMING_CONDITIONAL, // COMBO_BOX
-  NAMING_DISCRETIONARY, // COMMAND
-  NAMING_DISCRETIONARY, // COMPOSITE
-  NAMING_REQUIRED, // DIALOG
-  NAMING_DISCRETIONARY, // DOCUMENT
-  NAMING_RECOMMENDED, // FEED
-  NAMING_RECOMMENDED, // FORM
-  NAMING_PROHIBITED, // GENERIC
-  NAMING_REQUIRED, // GRID
-  NAMING_CONDITIONAL, // GRID_CELL
-  NAMING_DISCRETIONARY, // GROUP
-  NAMING_CONDITIONAL, // HEADING
-  NAMING_REQUIRED, // IMG
-  NAMING_DISCRETIONARY, // INPUT
-  NAMING_DISCRETIONARY, // LABEL
-  NAMING_DISCRETIONARY, // LANDMARK
-  NAMING_DISCRETIONARY, // LEGEND
-  NAMING_CONDITIONAL, // LINK
-  NAMING_DISCRETIONARY, // LIST
-  NAMING_REQUIRED, // LIST_BOX
-  NAMING_NOT_RECOMMENDED, // LIST_ITEM
-  NAMING_DISCRETIONARY, // LOG
-  NAMING_DISCRETIONARY, // MAIN
-  NAMING_DISCRETIONARY, // MARQUEE
-  NAMING_RECOMMENDED, // MATH
-  NAMING_REQUIRED, // METER
-  NAMING_RECOMMENDED, // MENU
-  NAMING_RECOMMENDED, // MENU_BAR
-  NAMING_CONDITIONAL, // MENU_ITEM
-  NAMING_CONDITIONAL, // MENU_ITEM_CHECKBOX
-  NAMING_CONDITIONAL, // MENU_ITEM_RADIO
-  NAMING_RECOMMENDED, // NAVIGATION
-  NAMING_PROHIBITED, // NONE
-  NAMING_DISCRETIONARY, // NOTE
-  NAMING_CONDITIONAL, // OPTION
-  NAMING_PROHIBITED, // PRESENTATION
-  NAMING_REQUIRED, // PROGRESS_BAR
-  NAMING_CONDITIONAL, // RADIO
-  NAMING_REQUIRED, // RADIO_GROUP
-  NAMING_DISCRETIONARY, // RANGE
-  NAMING_REQUIRED, // REGION
-  NAMING_CONDITIONAL, // ROW
-  NAMING_NOT_RECOMMENDED, // ROW_GROUP
-  NAMING_CONDITIONAL, // ROW_HEADER
-  NAMING_DISCRETIONARY, // SCROLLBAR
-  NAMING_RECOMMENDED, // SEARCH
-  NAMING_REQUIRED, // SEARCH_BOX
-  NAMING_DISCRETIONARY, // SECTION
-  NAMING_DISCRETIONARY, // SECTION_HEAD
-  NAMING_DISCRETIONARY, // SELECT
-  NAMING_DISCRETIONARY, // SEPARATOR
-  NAMING_REQUIRED, // SLIDER
-  NAMING_REQUIRED, // SPIN_BUTTON
-  NAMING_DISCRETIONARY, // STATUS
-  NAMING_DISCRETIONARY, // STRUCTURE
-  NAMING_CONDITIONAL, // SWITCH
-  NAMING_CONDITIONAL, // TAB
-  NAMING_REQUIRED, // TABLE
-  NAMING_RECOMMENDED, // TAB_LIST
-  NAMING_REQUIRED, // TAB_PANEL
-  NAMING_REQUIRED, // TEXT_BOX
-  NAMING_PROHIBITED, // TIME
-  NAMING_DISCRETIONARY, // TIMER
-  NAMING_RECOMMENDED, // TOOLBAR
-  NAMING_CONDITIONAL, // TOOLTIP
-  NAMING_REQUIRED, // TREE
-  NAMING_REQUIRED, // TREE_GRID
-  NAMING_CONDITIONAL, // TREE_ITEM
-  NAMING_DISCRETIONARY, // WIDGET
-  NAMING_DISCRETIONARY, // WINDOW
-  NAMING_CONDITIONAL, // TOGGLE_BUTTON
-};
-
 static GtkAccessibleRole abstract_roles[] = {
   GTK_ACCESSIBLE_ROLE_COMMAND,
   GTK_ACCESSIBLE_ROLE_COMPOSITE,
@@ -258,25 +166,44 @@ check_accessibility_errors (GtkWidget  *widget,
   label_set = gtk_at_context_has_accessible_property (context, GTK_ACCESSIBLE_PROPERTY_LABEL) ||
               gtk_at_context_has_accessible_relation (context, GTK_ACCESSIBLE_RELATION_LABELLED_BY);
 
-  switch (name_for_role[role])
+  switch (gtk_accessible_role_get_naming (role))
     {
-    case NAMING_DISCRETIONARY:
+    case GTK_ACCESSIBLE_NAME_ALLOWED:
       return SEVERITY_GOOD;
 
-    case NAMING_REQUIRED:
+    case GTK_ACCESSIBLE_NAME_REQUIRED:
       if (label_set)
         {
           return SEVERITY_GOOD;
         }
       else
         {
-          *hint = g_strdup_printf ("%s must have label", role_name);
+          if (gtk_accessible_role_supports_name_from_author (role))
+            {
+              char *name = gtk_at_context_get_name (context);
 
-          return SEVERITY_ERROR;
+              if (strcmp (name, "") == 0)
+                {
+                  g_free (name);
+                  *hint = g_strdup_printf ("%s must have text content or label", role_name);
+
+                  return SEVERITY_ERROR;
+                }
+              else
+                {
+                  return SEVERITY_GOOD;
+                }
+            }
+          else
+            {
+              *hint = g_strdup_printf ("%s must have label", role_name);
+
+              return SEVERITY_ERROR;
+            }
         }
       break;
 
-    case NAMING_PROHIBITED:
+    case GTK_ACCESSIBLE_NAME_PROHIBITED:
       if (label_set)
         {
           *hint = g_strdup_printf ("%s can't have label", role_name);
@@ -289,7 +216,7 @@ check_accessibility_errors (GtkWidget  *widget,
         }
       break;
 
-    case NAMING_RECOMMENDED:
+    case GTK_ACCESSIBLE_NAME_RECOMMENDED:
       if (label_set)
         {
           return SEVERITY_GOOD;
@@ -302,7 +229,7 @@ check_accessibility_errors (GtkWidget  *widget,
         }
       break;
 
-    case NAMING_NOT_RECOMMENDED:
+    case GTK_ACCESSIBLE_NAME_NOT_RECOMMENDED:
       if (!label_set)
         {
           return SEVERITY_GOOD;
@@ -315,24 +242,6 @@ check_accessibility_errors (GtkWidget  *widget,
         }
       break;
 
-    case NAMING_CONDITIONAL:
-      {
-        char *name = gtk_at_context_get_name (context);
-
-        if (strcmp (name, "") == 0)
-          {
-            g_free (name);
-            *hint = g_strdup_printf ("%s must have text content or label", role_name);
-
-            return SEVERITY_ERROR;
-          }
-        else
-          {
-            return SEVERITY_GOOD;
-          }
-      }
-      break;
-
     default:
       g_assert_not_reached ();
     }