a11y: Move naming data to gtkatcontext.c
This is in preparation for using this information in the name computation.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user