From: Matthias Clasen Date: Sun, 18 Jun 2023 20:43:58 +0000 (-0400) Subject: a11y: Move naming data to gtkatcontext.c X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~126^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a80dd28e3519451963dec57c5eea418e22a57c84;p=gtk4.git a11y: Move naming data to gtkatcontext.c This is in preparation for using this information in the name computation. --- diff --git a/gtk/gtkaccessibleprivate.h b/gtk/gtkaccessibleprivate.h index 6d2f2f2125..326506e626 100644 --- a/gtk/gtkaccessibleprivate.h +++ b/gtk/gtkaccessibleprivate.h @@ -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, diff --git a/gtk/gtkatcontext.c b/gtk/gtkatcontext.c index 848a4514e3..ebcebc1c03 100644 --- a/gtk/gtkatcontext.c +++ b/gtk/gtkatcontext.c @@ -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 diff --git a/gtk/inspector/a11yoverlay.c b/gtk/inspector/a11yoverlay.c index a729ec5175..481e780cc2 100644 --- a/gtk/inspector/a11yoverlay.c +++ b/gtk/inspector/a11yoverlay.c @@ -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 (); }