diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2020-07-17 12:49:59 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2020-07-26 20:31:15 +0100 |
commit | 732578eb53e3391a284425517bf34b49ddbb523e (patch) | |
tree | dac97c43c1e47130e95933624f0635d8db86bf5e /gtk | |
parent | 1124f2507d6a928dcce9878e23bc563efc65d801 (diff) | |
download | gtk+-732578eb53e3391a284425517bf34b49ddbb523e.tar.gz |
a11y: Consolidate the attributes container
While we have split the various attributes for convenience, there's no
reason why we should have specialised data types for the attributes
container object.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkaccessibleattributeset.c | 249 | ||||
-rw-r--r-- | gtk/gtkaccessibleattributesetprivate.h | 57 | ||||
-rw-r--r-- | gtk/gtkaccessiblepropertyset.c | 218 | ||||
-rw-r--r-- | gtk/gtkaccessiblepropertysetprivate.h | 49 | ||||
-rw-r--r-- | gtk/gtkaccessiblerelationset.c | 217 | ||||
-rw-r--r-- | gtk/gtkaccessiblerelationsetprivate.h | 49 | ||||
-rw-r--r-- | gtk/gtkaccessiblestateset.c | 207 | ||||
-rw-r--r-- | gtk/gtkaccessiblestatesetprivate.h | 49 | ||||
-rw-r--r-- | gtk/gtkatcontext.c | 124 | ||||
-rw-r--r-- | gtk/gtkatcontextprivate.h | 16 | ||||
-rw-r--r-- | gtk/gtktestatcontext.c | 12 | ||||
-rw-r--r-- | gtk/meson.build | 4 |
12 files changed, 408 insertions, 843 deletions
diff --git a/gtk/gtkaccessibleattributeset.c b/gtk/gtkaccessibleattributeset.c new file mode 100644 index 0000000000..0a24a7f16d --- /dev/null +++ b/gtk/gtkaccessibleattributeset.c @@ -0,0 +1,249 @@ +/* gtkaccessibleattributeset.c: Accessible attribute containt + * + * Copyright 2020 GNOME Foundation + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include "gtkaccessibleattributesetprivate.h" + +#include "gtkbitmaskprivate.h" +#include "gtkenums.h" + +struct _GtkAccessibleAttributeSet +{ + gsize n_attributes; + + GtkAccessibleAttributeDefaultFunc default_func; + + GtkBitmask *attributes_set; + + char **attribute_names; + GtkAccessibleValue **attribute_values; +}; + +static GtkAccessibleAttributeSet * +gtk_accessible_attribute_set_init (GtkAccessibleAttributeSet *self, + gsize n_attributes, + const char **attribute_names, + GtkAccessibleAttributeDefaultFunc default_func) +{ + self->n_attributes = n_attributes; + self->default_func = default_func; + self->attribute_names = g_new (char *, n_attributes); + self->attribute_values = g_new (GtkAccessibleValue *, n_attributes); + self->attributes_set = _gtk_bitmask_new (); + + /* Initialize all attribute values, so we can always get the full attribute */ + for (int i = 0; i < self->n_attributes; i++) + { + self->attribute_names[i] = g_strdup (attribute_names[i]); + self->attribute_values[i] = (* self->default_func) (i); + } + + return self; +} + +GtkAccessibleAttributeSet * +gtk_accessible_attribute_set_new (gsize n_attributes, + const char **attribute_names, + GtkAccessibleAttributeDefaultFunc default_func) +{ + GtkAccessibleAttributeSet *set = g_rc_box_new0 (GtkAccessibleAttributeSet); + + return gtk_accessible_attribute_set_init (set, n_attributes, attribute_names, default_func); +} + +GtkAccessibleAttributeSet * +gtk_accessible_attribute_set_ref (GtkAccessibleAttributeSet *self) +{ + g_return_val_if_fail (self != NULL, NULL); + + return g_rc_box_acquire (self); +} + +static void +gtk_accessible_attribute_set_free (gpointer data) +{ + GtkAccessibleAttributeSet *self = data; + + for (int i = 0; i < self->n_attributes; i++) + { + g_free (self->attribute_names[i]); + + if (self->attribute_values[i] != NULL) + gtk_accessible_value_unref (self->attribute_values[i]); + } + + g_free (self->attribute_names); + g_free (self->attribute_values); + + _gtk_bitmask_free (self->attributes_set); +} + +void +gtk_accessible_attribute_set_unref (GtkAccessibleAttributeSet *self) +{ + g_rc_box_release_full (self, gtk_accessible_attribute_set_free); +} + +/*< private > + * gtk_accessible_attribute_set_add: + * @self: a #GtkAccessibleAttributeSet + * @attribute: the attribute to set + * @value: (nullable): a #GtkAccessibleValue + * + * Adds @attribute to the attributes set, and sets its value. + * + * If @value is %NULL, the @attribute is reset to its default value. + * + * If you want to remove @attribute from the set, use gtk_accessible_attribute_set_remove() + * instead. + */ +void +gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self, + int attribute, + GtkAccessibleValue *value) +{ + g_return_if_fail (attribute >= 0 && attribute < self->n_attributes); + + g_clear_pointer (&(self->attribute_values[attribute]), gtk_accessible_value_unref); + + if (value != NULL) + self->attribute_values[attribute] = gtk_accessible_value_ref (value); + else + self->attribute_values[attribute] = (* self->default_func) (attribute); + + self->attributes_set = _gtk_bitmask_set (self->attributes_set, attribute, TRUE); +} + +void +gtk_accessible_attribute_set_remove (GtkAccessibleAttributeSet *self, + int attribute) +{ + g_return_if_fail (attribute >= 0 && attribute < self->n_attributes); + + g_clear_pointer (&(self->attribute_values[attribute]), gtk_accessible_value_unref); + + self->attribute_values[attribute] = (* self->default_func) (attribute); + self->attributes_set = _gtk_bitmask_set (self->attributes_set, attribute, FALSE); +} + +gboolean +gtk_accessible_attribute_set_contains (GtkAccessibleAttributeSet *self, + int attribute) + { + g_return_val_if_fail (attribute >= 0 && attribute < self->n_attributes, FALSE); + + return _gtk_bitmask_get (self->attributes_set, attribute); +} + +/*< private > + * gtk_accessible_attribute_set_get_value: + * @self: a #GtkAccessibleAttributeSet + * @attribute: the attribute to retrieve + * + * Retrieves the value of the given @attribute in the set. + * + * Returns: (transfer none): the value for the attribute + */ +GtkAccessibleValue * +gtk_accessible_attribute_set_get_value (GtkAccessibleAttributeSet *self, + int attribute) +{ + g_return_val_if_fail (attribute >= 0 && attribute < self->n_attributes, NULL); + + return self->attribute_values[attribute]; +} + +gsize +gtk_accessible_attribute_set_get_length (GtkAccessibleAttributeSet *self) +{ + return self->n_attributes; +} + +guint +gtk_accessible_attribute_set_get_changed (GtkAccessibleAttributeSet *self) +{ + guint changed = 0; + + for (gsize i = 0; i < self->n_attributes; i++) + { + if (gtk_accessible_attribute_set_contains (self, i)) + changed |= (1 << i); + } + + return changed; +} + +/*< private > + * gtk_accessible_attribute_set_print: + * @self: a #GtkAccessibleAttributeSet + * @only_set: %TRUE if only the set attributes should be printed + * @buffer: a #GString + * + * Prints the contents of the #GtkAccessibleAttributeSet into @buffer. + */ +void +gtk_accessible_attribute_set_print (GtkAccessibleAttributeSet *self, + gboolean only_set, + GString *buffer) +{ + if (only_set && _gtk_bitmask_is_empty (self->attributes_set)) + { + g_string_append (buffer, "{}"); + return; + } + + g_string_append (buffer, "{\n"); + + for (gsize i = 0; i < self->n_attributes; i++) + { + if (only_set && !_gtk_bitmask_get (self->attributes_set, i)) + continue; + + g_string_append (buffer, " "); + g_string_append (buffer, self->attribute_names[i]); + g_string_append (buffer, ": "); + + gtk_accessible_value_print (self->attribute_values[i], buffer); + + g_string_append (buffer, ",\n"); + } + + g_string_append (buffer, "}"); +} + +/*< private > + * gtk_accessible_attribute_set_to_string: + * @self: a #GtkAccessibleAttributeSet + * + * Prints the contents of a #GtkAccessibleAttributeSet into a string. + * + * Returns: (transfer full): a newly allocated string with the contents + * of the #GtkAccessibleAttributeSet + */ +char * +gtk_accessible_attribute_set_to_string (GtkAccessibleAttributeSet *self) +{ + GString *buf = g_string_new (NULL); + + gtk_accessible_attribute_set_print (self, TRUE, buf); + + return g_string_free (buf, FALSE); +} diff --git a/gtk/gtkaccessibleattributesetprivate.h b/gtk/gtkaccessibleattributesetprivate.h new file mode 100644 index 0000000000..57a1e63e35 --- /dev/null +++ b/gtk/gtkaccessibleattributesetprivate.h @@ -0,0 +1,57 @@ +/* gtkaccessibleattributesetprivate.h: Accessible attribute container + * + * Copyright 2020 GNOME Foundation + * + * SPDX-License-Identifier: LGPL-2.1-or-later + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see <http://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "gtkaccessibleprivate.h" +#include "gtkaccessiblevalueprivate.h" + +G_BEGIN_DECLS + +typedef struct _GtkAccessibleAttributeSet GtkAccessibleAttributeSet; + +typedef GtkAccessibleValue *(* GtkAccessibleAttributeDefaultFunc) (int attribute); + +GtkAccessibleAttributeSet * gtk_accessible_attribute_set_new (gsize n_attributes, + const char **attr_names, + GtkAccessibleAttributeDefaultFunc default_func); +GtkAccessibleAttributeSet * gtk_accessible_attribute_set_ref (GtkAccessibleAttributeSet *self); +void gtk_accessible_attribute_set_unref (GtkAccessibleAttributeSet *self); + +gsize gtk_accessible_attribute_set_get_length (GtkAccessibleAttributeSet *self); + +void gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self, + int attribute, + GtkAccessibleValue *value); +void gtk_accessible_attribute_set_remove (GtkAccessibleAttributeSet *self, + int state); +gboolean gtk_accessible_attribute_set_contains (GtkAccessibleAttributeSet *self, + int state); +GtkAccessibleValue * gtk_accessible_attribute_set_get_value (GtkAccessibleAttributeSet *self, + int state); + +guint gtk_accessible_attribute_set_get_changed (GtkAccessibleAttributeSet *self); + +void gtk_accessible_attribute_set_print (GtkAccessibleAttributeSet *self, + gboolean only_set, + GString *string); +char * gtk_accessible_attribute_set_to_string (GtkAccessibleAttributeSet *self); + +G_END_DECLS diff --git a/gtk/gtkaccessiblepropertyset.c b/gtk/gtkaccessiblepropertyset.c deleted file mode 100644 index a50ff8ae47..0000000000 --- a/gtk/gtkaccessiblepropertyset.c +++ /dev/null @@ -1,218 +0,0 @@ -/* gtkaccessiblepropertyset.c: Accessible properties - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkaccessiblepropertysetprivate.h" - -#include "gtkbitmaskprivate.h" -#include "gtkenums.h" - -/* Keep in sync with GtkAccessibleProperty in gtkenums.h */ -#define LAST_PROPERTY GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT - -struct _GtkAccessiblePropertySet -{ - GtkBitmask *property_set; - - GtkAccessibleValue **property_values; -}; - -static GtkAccessiblePropertySet * -gtk_accessible_property_set_init (GtkAccessiblePropertySet *self) -{ - self->property_set = _gtk_bitmask_new (); - self->property_values = g_new (GtkAccessibleValue *, LAST_PROPERTY); - - /* Initialize all property values, so we can always get the full set */ - for (int i = 0; i < LAST_PROPERTY; i++) - self->property_values[i] = gtk_accessible_value_get_default_for_property (i); - - return self; -} - -GtkAccessiblePropertySet * -gtk_accessible_property_set_new (void) -{ - GtkAccessiblePropertySet *set = g_rc_box_new0 (GtkAccessiblePropertySet); - - return gtk_accessible_property_set_init (set); -} - -GtkAccessiblePropertySet * -gtk_accessible_property_set_ref (GtkAccessiblePropertySet *self) -{ - g_return_val_if_fail (self != NULL, NULL); - - return g_rc_box_acquire (self); -} - -static void -gtk_accessible_property_set_free (gpointer data) -{ - GtkAccessiblePropertySet *self = data; - - for (int i = 0; i < LAST_PROPERTY; i++) - { - if (self->property_values[i] != NULL) - gtk_accessible_value_unref (self->property_values[i]); - } - - g_free (self->property_values); - - _gtk_bitmask_free (self->property_set); -} - -void -gtk_accessible_property_set_unref (GtkAccessiblePropertySet *self) -{ - g_rc_box_release_full (self, gtk_accessible_property_set_free); -} - -void -gtk_accessible_property_set_add (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property, - GtkAccessibleValue *value) -{ - g_return_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE && - property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT); - - if (gtk_accessible_property_set_contains (self, property)) - gtk_accessible_value_unref (self->property_values[property]); - else - self->property_set = _gtk_bitmask_set (self->property_set, property, TRUE); - - self->property_values[property] = gtk_accessible_value_ref (value); -} - -void -gtk_accessible_property_set_remove (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property) -{ - g_return_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE && - property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT); - - if (gtk_accessible_property_set_contains (self, property)) - { - g_clear_pointer (&(self->property_values[property]), gtk_accessible_value_unref); - self->property_set = _gtk_bitmask_set (self->property_set, property, FALSE); - } -} - -gboolean -gtk_accessible_property_set_contains (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property) -{ - g_return_val_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE && - property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, - FALSE); - - return _gtk_bitmask_get (self->property_set, property); -} - -GtkAccessibleValue * -gtk_accessible_property_set_get_value (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property) -{ - g_return_val_if_fail (property >= GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE && - property <= GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT, - NULL); - - return self->property_values[property]; -} - -static const char *property_names[] = { - [GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE] = "autocomplete", - [GTK_ACCESSIBLE_PROPERTY_DESCRIPTION] = "description", - [GTK_ACCESSIBLE_PROPERTY_HAS_POPUP] = "haspopup", - [GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS] = "keyshortcuts", - [GTK_ACCESSIBLE_PROPERTY_LABEL] = "label", - [GTK_ACCESSIBLE_PROPERTY_LEVEL] = "level", - [GTK_ACCESSIBLE_PROPERTY_MODAL] = "modal", - [GTK_ACCESSIBLE_PROPERTY_MULTI_LINE] = "multiline", - [GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE] = "multiselectable", - [GTK_ACCESSIBLE_PROPERTY_ORIENTATION] = "orientation", - [GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER] = "placeholder", - [GTK_ACCESSIBLE_PROPERTY_READ_ONLY] = "readonly", - [GTK_ACCESSIBLE_PROPERTY_REQUIRED] = "required", - [GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION] = "roledescription", - [GTK_ACCESSIBLE_PROPERTY_SORT] = "sort", - [GTK_ACCESSIBLE_PROPERTY_VALUE_MAX] = "valuemax", - [GTK_ACCESSIBLE_PROPERTY_VALUE_MIN] = "valuemin", - [GTK_ACCESSIBLE_PROPERTY_VALUE_NOW] = "valuenow", - [GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT] = "valuetext", -}; - -/*< private > - * gtk_accessible_property_set_print: - * @self: a #GtkAccessiblePropertySet - * @only_set: %TRUE if only the set properties should be printed - * @buffer: a #GString - * - * Prints the contents of the #GtkAccessiblePropertySet into @buffer. - */ -void -gtk_accessible_property_set_print (GtkAccessiblePropertySet *self, - gboolean only_set, - GString *buffer) -{ - if (only_set && _gtk_bitmask_is_empty (self->property_set)) - { - g_string_append (buffer, "{}"); - return; - } - - g_string_append (buffer, "{\n"); - - for (int i = 0; i < G_N_ELEMENTS (property_names); i++) - { - if (only_set && !_gtk_bitmask_get (self->property_set, i)) - continue; - - g_string_append (buffer, " "); - g_string_append (buffer, property_names[i]); - g_string_append (buffer, ": "); - - gtk_accessible_value_print (self->property_values[i], buffer); - - g_string_append (buffer, ",\n"); - } - - g_string_append (buffer, "}"); -} - -/*< private > - * gtk_accessible_property_set_to_string: - * @self: a #GtkAccessiblePropertySet - * - * Prints the contents of a #GtkAccessiblePropertySet into a string. - * - * Returns: (transfer full): a newly allocated string with the contents - * of the #GtkAccessiblePropertySet - */ -char * -gtk_accessible_property_set_to_string (GtkAccessiblePropertySet *self) -{ - GString *buf = g_string_new (NULL); - - gtk_accessible_property_set_print (self, TRUE, buf); - - return g_string_free (buf, FALSE); -} diff --git a/gtk/gtkaccessiblepropertysetprivate.h b/gtk/gtkaccessiblepropertysetprivate.h deleted file mode 100644 index a6874379c4..0000000000 --- a/gtk/gtkaccessiblepropertysetprivate.h +++ /dev/null @@ -1,49 +0,0 @@ -/* gtkaccessiblepropertysetprivate.h: Accessible property set - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include "gtkaccessibleprivate.h" -#include "gtkaccessiblevalueprivate.h" - -G_BEGIN_DECLS - -typedef struct _GtkAccessiblePropertySet GtkAccessiblePropertySet; - -GtkAccessiblePropertySet * gtk_accessible_property_set_new (void); -GtkAccessiblePropertySet * gtk_accessible_property_set_ref (GtkAccessiblePropertySet *self); -void gtk_accessible_property_set_unref (GtkAccessiblePropertySet *self); - -void gtk_accessible_property_set_add (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property, - GtkAccessibleValue *value); -void gtk_accessible_property_set_remove (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property); -gboolean gtk_accessible_property_set_contains (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property); -GtkAccessibleValue * gtk_accessible_property_set_get_value (GtkAccessiblePropertySet *self, - GtkAccessibleProperty property); - -void gtk_accessible_property_set_print (GtkAccessiblePropertySet *self, - gboolean only_set, - GString *string); -char * gtk_accessible_property_set_to_string (GtkAccessiblePropertySet *self); - -G_END_DECLS diff --git a/gtk/gtkaccessiblerelationset.c b/gtk/gtkaccessiblerelationset.c deleted file mode 100644 index 2e6a64b41f..0000000000 --- a/gtk/gtkaccessiblerelationset.c +++ /dev/null @@ -1,217 +0,0 @@ -/* gtkaccessiblerelationset.c: Accessible relation set - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkaccessiblerelationsetprivate.h" - -#include "gtkbitmaskprivate.h" -#include "gtkenums.h" - -/* Keep in sync with GtkAccessibleRelation in gtkenums.h */ -#define LAST_RELATION GTK_ACCESSIBLE_RELATION_SET_SIZE - -struct _GtkAccessibleRelationSet -{ - GtkBitmask *relation_set; - - GtkAccessibleValue **relation_values; -}; - -static GtkAccessibleRelationSet * -gtk_accessible_relation_set_init (GtkAccessibleRelationSet *self) -{ - self->relation_set = _gtk_bitmask_new (); - self->relation_values = g_new (GtkAccessibleValue *, LAST_RELATION); - - /* Initialize all relation values, so we can always get the full set */ - for (int i = 0; i < LAST_RELATION; i++) - self->relation_values[i] = gtk_accessible_value_get_default_for_relation (i); - - return self; -} - -GtkAccessibleRelationSet * -gtk_accessible_relation_set_new (void) -{ - GtkAccessibleRelationSet *set = g_rc_box_new0 (GtkAccessibleRelationSet); - - return gtk_accessible_relation_set_init (set); -} - -GtkAccessibleRelationSet * -gtk_accessible_relation_set_ref (GtkAccessibleRelationSet *self) -{ - g_return_val_if_fail (self != NULL, NULL); - - return g_rc_box_acquire (self); -} - -static void -gtk_accessible_relation_set_free (gpointer data) -{ - GtkAccessibleRelationSet *self = data; - - for (int i = 0; i < LAST_RELATION; i++) - { - if (self->relation_values[i] != NULL) - gtk_accessible_value_unref (self->relation_values[i]); - } - - g_free (self->relation_values); - - _gtk_bitmask_free (self->relation_set); -} - -void -gtk_accessible_relation_set_unref (GtkAccessibleRelationSet *self) -{ - g_rc_box_release_full (self, gtk_accessible_relation_set_free); -} - -void -gtk_accessible_relation_set_add (GtkAccessibleRelationSet *self, - GtkAccessibleRelation relation, - GtkAccessibleValue *value) -{ - g_return_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT && - relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE); - - if (gtk_accessible_relation_set_contains (self, relation)) - gtk_accessible_value_unref (self->relation_values[relation]); - else - self->relation_set = _gtk_bitmask_set (self->relation_set, relation, TRUE); - - self->relation_values[relation] = gtk_accessible_value_ref (value); -} - -void -gtk_accessible_relation_set_remove (GtkAccessibleRelationSet *self, - GtkAccessibleRelation relation) -{ - g_return_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT && - relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE); - - if (gtk_accessible_relation_set_contains (self, relation)) - { - g_clear_pointer (&(self->relation_values[relation]), gtk_accessible_value_unref); - self->relation_set = _gtk_bitmask_set (self->relation_set, relation, FALSE); - } -} - -gboolean -gtk_accessible_relation_set_contains (GtkAccessibleRelationSet *self, - GtkAccessibleRelation relation) -{ - g_return_val_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT && - relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE, - FALSE); - - return _gtk_bitmask_get (self->relation_set, relation); -} - -GtkAccessibleValue * -gtk_accessible_relation_set_get_value (GtkAccessibleRelationSet *self, - GtkAccessibleRelation relation) -{ - g_return_val_if_fail (relation >= GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT && - relation <= GTK_ACCESSIBLE_RELATION_SET_SIZE, - NULL); - - return self->relation_values[relation]; -} - -static const char *relation_names[] = { - [GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT] = "activedescendant", - [GTK_ACCESSIBLE_RELATION_COL_COUNT] = "colcount", - [GTK_ACCESSIBLE_RELATION_COL_INDEX] = "colindex", - [GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT] = "colindextext", - [GTK_ACCESSIBLE_RELATION_COL_SPAN] = "colspan", - [GTK_ACCESSIBLE_RELATION_CONTROLS] = "controls", - [GTK_ACCESSIBLE_RELATION_DESCRIBED_BY] = "describedby", - [GTK_ACCESSIBLE_RELATION_DETAILS] = "details", - [GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE] = "errormessage", - [GTK_ACCESSIBLE_RELATION_FLOW_TO] = "flowto", - [GTK_ACCESSIBLE_RELATION_LABELLED_BY] = "labelledby", - [GTK_ACCESSIBLE_RELATION_OWNS] = "owns", - [GTK_ACCESSIBLE_RELATION_POS_IN_SET] = "posinset", - [GTK_ACCESSIBLE_RELATION_ROW_COUNT] = "rowcount", - [GTK_ACCESSIBLE_RELATION_ROW_INDEX] = "rowindex", - [GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT] = "rowindextext", - [GTK_ACCESSIBLE_RELATION_ROW_SPAN] = "rowspan", - [GTK_ACCESSIBLE_RELATION_SET_SIZE] = "setsize", -}; - -/*< private > - * gtk_accessible_relation_set_print: - * @self: a #GtkAccessibleRelationSet - * @only_set: %TRUE if only the set relations should be printed - * @buffer: a #GString - * - * Prints the contents of the #GtkAccessibleRelationSet into @buffer. - */ -void -gtk_accessible_relation_set_print (GtkAccessibleRelationSet *self, - gboolean only_set, - GString *buffer) -{ - if (only_set && _gtk_bitmask_is_empty (self->relation_set)) - { - g_string_append (buffer, "{}"); - return; - } - - g_string_append (buffer, "{\n"); - - for (int i = 0; i < G_N_ELEMENTS (relation_names); i++) - { - if (only_set && !_gtk_bitmask_get (self->relation_set, i)) - continue; - - g_string_append (buffer, " "); - g_string_append (buffer, relation_names[i]); - g_string_append (buffer, ": "); - - gtk_accessible_value_print (self->relation_values[i], buffer); - - g_string_append (buffer, ",\n"); - } - - g_string_append (buffer, "}"); -} - -/*< private > - * gtk_accessible_relation_set_to_string: - * @self: a #GtkAccessibleRelationSet - * - * Prints the contents of a #GtkAccessibleRelationSet into a string. - * - * Returns: (transfer full): a newly allocated string with the contents - * of the #GtkAccessibleRelationSet - */ -char * -gtk_accessible_relation_set_to_string (GtkAccessibleRelationSet *self) -{ - GString *buf = g_string_new (NULL); - - gtk_accessible_relation_set_print (self, TRUE, buf); - - return g_string_free (buf, FALSE); -} diff --git a/gtk/gtkaccessiblerelationsetprivate.h b/gtk/gtkaccessiblerelationsetprivate.h deleted file mode 100644 index a2a33f9717..0000000000 --- a/gtk/gtkaccessiblerelationsetprivate.h +++ /dev/null @@ -1,49 +0,0 @@ -/* gtkaccessiblerelationsetprivate.h: Accessible relations set - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include "gtkaccessibleprivate.h" -#include "gtkaccessiblevalueprivate.h" - -G_BEGIN_DECLS - -typedef struct _GtkAccessibleRelationSet GtkAccessibleRelationSet; - -GtkAccessibleRelationSet * gtk_accessible_relation_set_new (void); -GtkAccessibleRelationSet * gtk_accessible_relation_set_ref (GtkAccessibleRelationSet *self); -void gtk_accessible_relation_set_unref (GtkAccessibleRelationSet *self); - -void gtk_accessible_relation_set_add (GtkAccessibleRelationSet *self, - GtkAccessibleRelation state, - GtkAccessibleValue *value); -void gtk_accessible_relation_set_remove (GtkAccessibleRelationSet *self, - GtkAccessibleRelation state); -gboolean gtk_accessible_relation_set_contains (GtkAccessibleRelationSet *self, - GtkAccessibleRelation state); -GtkAccessibleValue * gtk_accessible_relation_set_get_value (GtkAccessibleRelationSet *self, - GtkAccessibleRelation state); - -void gtk_accessible_relation_set_print (GtkAccessibleRelationSet *self, - gboolean only_set, - GString *string); -char * gtk_accessible_relation_set_to_string (GtkAccessibleRelationSet *self); - -G_END_DECLS diff --git a/gtk/gtkaccessiblestateset.c b/gtk/gtkaccessiblestateset.c deleted file mode 100644 index 799625864a..0000000000 --- a/gtk/gtkaccessiblestateset.c +++ /dev/null @@ -1,207 +0,0 @@ -/* gtkaccessiblestateset.c: Accessible state - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see <http://www.gnu.org/licenses/>. - */ - -#include "config.h" - -#include "gtkaccessiblestatesetprivate.h" - -#include "gtkbitmaskprivate.h" -#include "gtkenums.h" - -/* Keep in sync with GtkAccessibleState in gtkenums.h */ -#define LAST_STATE GTK_ACCESSIBLE_STATE_SELECTED - -struct _GtkAccessibleStateSet -{ - GtkBitmask *states_set; - - GtkAccessibleValue **state_values; -}; - -static GtkAccessibleStateSet * -gtk_accessible_state_set_init (GtkAccessibleStateSet *self) -{ - self->states_set = _gtk_bitmask_new (); - self->state_values = g_new (GtkAccessibleValue*, LAST_STATE); - - /* Initialize all state values, so we can always get the full state */ - for (int i = 0; i < LAST_STATE; i++) - self->state_values[i] = gtk_accessible_value_get_default_for_state (i); - - return self; -} - -GtkAccessibleStateSet * -gtk_accessible_state_set_new (void) -{ - GtkAccessibleStateSet *set = g_rc_box_new0 (GtkAccessibleStateSet); - - return gtk_accessible_state_set_init (set); -} - -GtkAccessibleStateSet * -gtk_accessible_state_set_ref (GtkAccessibleStateSet *self) -{ - g_return_val_if_fail (self != NULL, NULL); - - return g_rc_box_acquire (self); -} - -static void -gtk_accessible_state_set_free (gpointer data) -{ - GtkAccessibleStateSet *self = data; - - for (int i = 0; i < LAST_STATE; i++) - { - if (self->state_values[i] != NULL) - gtk_accessible_value_unref (self->state_values[i]); - } - - g_free (self->state_values); - - _gtk_bitmask_free (self->states_set); -} - -void -gtk_accessible_state_set_unref (GtkAccessibleStateSet *self) -{ - g_rc_box_release_full (self, gtk_accessible_state_set_free); -} - -void -gtk_accessible_state_set_add (GtkAccessibleStateSet *self, - GtkAccessibleState state, - GtkAccessibleValue *value) -{ - g_return_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY && - state <= GTK_ACCESSIBLE_STATE_SELECTED); - - if (gtk_accessible_state_set_contains (self, state)) - gtk_accessible_value_unref (self->state_values[state]); - else - self->states_set = _gtk_bitmask_set (self->states_set, state, TRUE); - - self->state_values[state] = gtk_accessible_value_ref (value); -} - -void -gtk_accessible_state_set_remove (GtkAccessibleStateSet *self, - GtkAccessibleState state) -{ - g_return_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY && - state <= GTK_ACCESSIBLE_STATE_SELECTED); - - if (gtk_accessible_state_set_contains (self, state)) - { - g_clear_pointer (&(self->state_values[state]), gtk_accessible_value_unref); - self->states_set = _gtk_bitmask_set (self->states_set, state, FALSE); - } -} - -gboolean -gtk_accessible_state_set_contains (GtkAccessibleStateSet *self, - GtkAccessibleState state) -{ - g_return_val_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY && - state <= GTK_ACCESSIBLE_STATE_SELECTED, - FALSE); - - return _gtk_bitmask_get (self->states_set, state); -} - -GtkAccessibleValue * -gtk_accessible_state_set_get_value (GtkAccessibleStateSet *self, - GtkAccessibleState state) -{ - g_return_val_if_fail (state >= GTK_ACCESSIBLE_STATE_BUSY && - state <= GTK_ACCESSIBLE_STATE_SELECTED, - NULL); - - return self->state_values[state]; -} - -static const char *state_names[] = { - [GTK_ACCESSIBLE_STATE_BUSY] = "busy", - [GTK_ACCESSIBLE_STATE_CHECKED] = "checked", - [GTK_ACCESSIBLE_STATE_DISABLED] = "disabled", - [GTK_ACCESSIBLE_STATE_EXPANDED] = "expanded", - [GTK_ACCESSIBLE_STATE_HIDDEN] = "hidden", - [GTK_ACCESSIBLE_STATE_INVALID] = "invalid", - [GTK_ACCESSIBLE_STATE_PRESSED] = "pressed", - [GTK_ACCESSIBLE_STATE_SELECTED] = "selected", -}; - -/*< private > - * gtk_accessible_state_set_print: - * @self: a #GtkAccessibleStateSet - * @only_set: %TRUE if only the set states should be printed - * @buffer: a #GString - * - * Prints the contents of the #GtkAccessibleStateSet into @buffer. - */ -void -gtk_accessible_state_set_print (GtkAccessibleStateSet *self, - gboolean only_set, - GString *buffer) -{ - if (only_set && _gtk_bitmask_is_empty (self->states_set)) - { - g_string_append (buffer, "{}"); - return; - } - - g_string_append (buffer, "{\n"); - - for (int i = 0; i < G_N_ELEMENTS (state_names); i++) - { - if (only_set && !_gtk_bitmask_get (self->states_set, i)) - continue; - - g_string_append (buffer, " "); - g_string_append (buffer, state_names[i]); - g_string_append (buffer, ": "); - - gtk_accessible_value_print (self->state_values[i], buffer); - - g_string_append (buffer, ",\n"); - } - - g_string_append (buffer, "}"); -} - -/*< private > - * gtk_accessible_state_set_to_string: - * @self: a #GtkAccessibleStateSet - * - * Prints the contents of a #GtkAccessibleStateSet into a string. - * - * Returns: (transfer full): a newly allocated string with the contents - * of the #GtkAccessibleStateSet - */ -char * -gtk_accessible_state_set_to_string (GtkAccessibleStateSet *self) -{ - GString *buf = g_string_new (NULL); - - gtk_accessible_state_set_print (self, TRUE, buf); - - return g_string_free (buf, FALSE); -} diff --git a/gtk/gtkaccessiblestatesetprivate.h b/gtk/gtkaccessiblestatesetprivate.h deleted file mode 100644 index 55d16aa7fd..0000000000 --- a/gtk/gtkaccessiblestatesetprivate.h +++ /dev/null @@ -1,49 +0,0 @@ -/* gtkaccessiblestatesetprivate.h: Accessible state container - * - * Copyright 2020 GNOME Foundation - * - * SPDX-License-Identifier: LGPL-2.1-or-later - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include "gtkaccessibleprivate.h" -#include "gtkaccessiblevalueprivate.h" - -G_BEGIN_DECLS - -typedef struct _GtkAccessibleStateSet GtkAccessibleStateSet; - -GtkAccessibleStateSet * gtk_accessible_state_set_new (void); -GtkAccessibleStateSet * gtk_accessible_state_set_ref (GtkAccessibleStateSet *self); -void gtk_accessible_state_set_unref (GtkAccessibleStateSet *self); - -void gtk_accessible_state_set_add (GtkAccessibleStateSet *self, - GtkAccessibleState state, - GtkAccessibleValue *value); -void gtk_accessible_state_set_remove (GtkAccessibleStateSet *self, - GtkAccessibleState state); -gboolean gtk_accessible_state_set_contains (GtkAccessibleStateSet *self, - GtkAccessibleState state); -GtkAccessibleValue * gtk_accessible_state_set_get_value (GtkAccessibleStateSet *self, - GtkAccessibleState state); - -void gtk_accessible_state_set_print (GtkAccessibleStateSet *self, - gboolean only_set, - GString *string); -char * gtk_accessible_state_set_to_string (GtkAccessibleStateSet *self); - -G_END_DECLS diff --git a/gtk/gtkatcontext.c b/gtk/gtkatcontext.c index 6466678ad7..7ea1f1a6bb 100644 --- a/gtk/gtkatcontext.c +++ b/gtk/gtkatcontext.c @@ -56,9 +56,9 @@ gtk_at_context_finalize (GObject *gobject) { GtkATContext *self = GTK_AT_CONTEXT (gobject); - gtk_accessible_property_set_unref (self->properties); - gtk_accessible_relation_set_unref (self->relations); - gtk_accessible_state_set_unref (self->states); + gtk_accessible_attribute_set_unref (self->properties); + gtk_accessible_attribute_set_unref (self->relations); + gtk_accessible_attribute_set_unref (self->states); G_OBJECT_CLASS (gtk_at_context_parent_class)->finalize (gobject); } @@ -114,9 +114,9 @@ gtk_at_context_real_state_change (GtkATContext *self, GtkAccessibleStateChange changed_states, GtkAccessiblePropertyChange changed_properties, GtkAccessibleRelationChange changed_relations, - GtkAccessibleStateSet *states, - GtkAccessiblePropertySet *properties, - GtkAccessibleRelationSet *relations) + GtkAccessibleAttributeSet *states, + GtkAccessibleAttributeSet *properties, + GtkAccessibleAttributeSet *relations) { } @@ -166,14 +166,81 @@ gtk_at_context_class_init (GtkATContextClass *klass) g_object_class_install_properties (gobject_class, N_PROPS, obj_props); } +#define N_PROPERTIES (GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT + 1) +#define N_RELATIONS (GTK_ACCESSIBLE_RELATION_SET_SIZE + 1) +#define N_STATES (GTK_ACCESSIBLE_STATE_SELECTED + 1) + +static const char *property_attrs[] = { + [GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE] = "autocomplete", + [GTK_ACCESSIBLE_PROPERTY_DESCRIPTION] = "description", + [GTK_ACCESSIBLE_PROPERTY_HAS_POPUP] = "haspopup", + [GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS] = "keyshortcuts", + [GTK_ACCESSIBLE_PROPERTY_LABEL] = "label", + [GTK_ACCESSIBLE_PROPERTY_LEVEL] = "level", + [GTK_ACCESSIBLE_PROPERTY_MODAL] = "modal", + [GTK_ACCESSIBLE_PROPERTY_MULTI_LINE] = "multiline", + [GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE] = "multiselectable", + [GTK_ACCESSIBLE_PROPERTY_ORIENTATION] = "orientation", + [GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER] = "placeholder", + [GTK_ACCESSIBLE_PROPERTY_READ_ONLY] = "readonly", + [GTK_ACCESSIBLE_PROPERTY_REQUIRED] = "required", + [GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION] = "roledescription", + [GTK_ACCESSIBLE_PROPERTY_SORT] = "sort", + [GTK_ACCESSIBLE_PROPERTY_VALUE_MAX] = "valuemax", + [GTK_ACCESSIBLE_PROPERTY_VALUE_MIN] = "valuemin", + [GTK_ACCESSIBLE_PROPERTY_VALUE_NOW] = "valuenow", + [GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT] = "valuetext", +}; + +static const char *relation_attrs[] = { + [GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT] = "activedescendant", + [GTK_ACCESSIBLE_RELATION_COL_COUNT] = "colcount", + [GTK_ACCESSIBLE_RELATION_COL_INDEX] = "colindex", + [GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT] = "colindextext", + [GTK_ACCESSIBLE_RELATION_COL_SPAN] = "colspan", + [GTK_ACCESSIBLE_RELATION_CONTROLS] = "controls", + [GTK_ACCESSIBLE_RELATION_DESCRIBED_BY] = "describedby", + [GTK_ACCESSIBLE_RELATION_DETAILS] = "details", + [GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE] = "errormessage", + [GTK_ACCESSIBLE_RELATION_FLOW_TO] = "flowto", + [GTK_ACCESSIBLE_RELATION_LABELLED_BY] = "labelledby", + [GTK_ACCESSIBLE_RELATION_OWNS] = "owns", + [GTK_ACCESSIBLE_RELATION_POS_IN_SET] = "posinset", + [GTK_ACCESSIBLE_RELATION_ROW_COUNT] = "rowcount", + [GTK_ACCESSIBLE_RELATION_ROW_INDEX] = "rowindex", + [GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT] = "rowindextext", + [GTK_ACCESSIBLE_RELATION_ROW_SPAN] = "rowspan", + [GTK_ACCESSIBLE_RELATION_SET_SIZE] = "setsize", +}; + +static const char *state_attrs[] = { + [GTK_ACCESSIBLE_STATE_BUSY] = "busy", + [GTK_ACCESSIBLE_STATE_CHECKED] = "checked", + [GTK_ACCESSIBLE_STATE_DISABLED] = "disabled", + [GTK_ACCESSIBLE_STATE_EXPANDED] = "expanded", + [GTK_ACCESSIBLE_STATE_HIDDEN] = "hidden", + [GTK_ACCESSIBLE_STATE_INVALID] = "invalid", + [GTK_ACCESSIBLE_STATE_PRESSED] = "pressed", + [GTK_ACCESSIBLE_STATE_SELECTED] = "selected", +}; + static void gtk_at_context_init (GtkATContext *self) { self->accessible_role = GTK_ACCESSIBLE_ROLE_WIDGET; - self->properties = gtk_accessible_property_set_new (); - self->relations = gtk_accessible_relation_set_new (); - self->states = gtk_accessible_state_set_new (); + self->properties = + gtk_accessible_attribute_set_new (N_PROPERTIES, + property_attrs, + (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_property); + self->relations = + gtk_accessible_attribute_set_new (N_RELATIONS, + relation_attrs, + (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_relation); + self->states = + gtk_accessible_attribute_set_new (N_STATES, + state_attrs, + (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_state); } /** @@ -271,27 +338,12 @@ gtk_at_context_update (GtkATContext *self) { g_return_if_fail (GTK_IS_AT_CONTEXT (self)); - GtkAccessibleStateChange changed_states = 0; - GtkAccessiblePropertyChange changed_properties = 0; - GtkAccessibleRelationChange changed_relations = 0; - - for (int i = 0; i < GTK_ACCESSIBLE_STATE_SELECTED; i++) - { - if (gtk_accessible_state_set_contains (self->states, i)) - changed_states |= (1 << i); - } - - for (int i = 0; i < GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT; i++) - { - if (gtk_accessible_property_set_contains (self->properties, i)) - changed_properties |= (1 << i); - } - - for (int i = 0; i < GTK_ACCESSIBLE_RELATION_SET_SIZE; i++) - { - if (gtk_accessible_relation_set_contains (self->relations, i)) - changed_relations |= (1 << i); - } + GtkAccessibleStateChange changed_states = + gtk_accessible_attribute_set_get_changed (self->states); + GtkAccessiblePropertyChange changed_properties = + gtk_accessible_attribute_set_get_changed (self->properties); + GtkAccessibleRelationChange changed_relations = + gtk_accessible_attribute_set_get_changed (self->relations); GTK_AT_CONTEXT_GET_CLASS (self)->state_change (self, changed_states, @@ -323,9 +375,9 @@ gtk_at_context_set_accessible_state (GtkATContext *self, g_return_if_fail (GTK_IS_AT_CONTEXT (self)); if (value != NULL) - gtk_accessible_state_set_add (self->states, state, value); + gtk_accessible_attribute_set_add (self->states, state, value); else - gtk_accessible_state_set_remove (self->states, state); + gtk_accessible_attribute_set_remove (self->states, state); } /*< private > @@ -349,9 +401,9 @@ gtk_at_context_set_accessible_property (GtkATContext *self, g_return_if_fail (GTK_IS_AT_CONTEXT (self)); if (value != NULL) - gtk_accessible_property_set_add (self->properties, property, value); + gtk_accessible_attribute_set_add (self->properties, property, value); else - gtk_accessible_property_set_remove (self->properties, property); + gtk_accessible_attribute_set_remove (self->properties, property); } /*< private > @@ -375,7 +427,7 @@ gtk_at_context_set_accessible_relation (GtkATContext *self, g_return_if_fail (GTK_IS_AT_CONTEXT (self)); if (value != NULL) - gtk_accessible_relation_set_add (self->relations, relation, value); + gtk_accessible_attribute_set_add (self->relations, relation, value); else - gtk_accessible_relation_set_remove (self->relations, relation); + gtk_accessible_attribute_set_remove (self->relations, relation); } diff --git a/gtk/gtkatcontextprivate.h b/gtk/gtkatcontextprivate.h index ee7a6dea7c..c7f59f8fae 100644 --- a/gtk/gtkatcontextprivate.h +++ b/gtk/gtkatcontextprivate.h @@ -22,9 +22,7 @@ #include "gtkatcontext.h" -#include "gtkaccessiblepropertysetprivate.h" -#include "gtkaccessiblerelationsetprivate.h" -#include "gtkaccessiblestatesetprivate.h" +#include "gtkaccessibleattributesetprivate.h" G_BEGIN_DECLS @@ -89,9 +87,9 @@ struct _GtkATContext GtkAccessibleRole accessible_role; GtkAccessible *accessible; - GtkAccessibleStateSet *states; - GtkAccessiblePropertySet *properties; - GtkAccessibleRelationSet *relations; + GtkAccessibleAttributeSet *states; + GtkAccessibleAttributeSet *properties; + GtkAccessibleAttributeSet *relations; }; struct _GtkATContextClass @@ -102,9 +100,9 @@ struct _GtkATContextClass GtkAccessibleStateChange changed_states, GtkAccessiblePropertyChange changed_properties, GtkAccessibleRelationChange changed_relations, - GtkAccessibleStateSet *states, - GtkAccessiblePropertySet *properties, - GtkAccessibleRelationSet *relations); + GtkAccessibleAttributeSet *states, + GtkAccessibleAttributeSet *properties, + GtkAccessibleAttributeSet *relations); }; GtkATContext * gtk_at_context_create (GtkAccessibleRole accessible_role, diff --git a/gtk/gtktestatcontext.c b/gtk/gtktestatcontext.c index e9b7e8c0b4..8eade3566c 100644 --- a/gtk/gtktestatcontext.c +++ b/gtk/gtktestatcontext.c @@ -37,15 +37,15 @@ gtk_test_at_context_state_change (GtkATContext *self, GtkAccessibleStateChange changed_states, GtkAccessiblePropertyChange changed_properties, GtkAccessibleRelationChange changed_relations, - GtkAccessibleStateSet *states, - GtkAccessiblePropertySet *properties, - GtkAccessibleRelationSet *relations) + GtkAccessibleAttributeSet *states, + GtkAccessibleAttributeSet *properties, + GtkAccessibleAttributeSet *relations) { GtkAccessible *accessible = gtk_at_context_get_accessible (self); GtkAccessibleRole role = gtk_at_context_get_accessible_role (self); - char *states_str = gtk_accessible_state_set_to_string (states); - char *properties_str = gtk_accessible_property_set_to_string (properties); - char *relations_str = gtk_accessible_relation_set_to_string (relations); + char *states_str = gtk_accessible_attribute_set_to_string (states); + char *properties_str = gtk_accessible_attribute_set_to_string (properties); + char *relations_str = gtk_accessible_attribute_set_to_string (relations); g_print ("*** Accessible state changed for accessible ā%sā, with role %d:\n" "*** states = %s\n" diff --git a/gtk/meson.build b/gtk/meson.build index ae3f81933f..2ae4267e96 100644 --- a/gtk/meson.build +++ b/gtk/meson.build @@ -16,9 +16,7 @@ gtk_private_sources = files([ 'fnmatch.c', 'tools/gdkpixbufutils.c', 'gsettings-mapping.c', - 'gtkaccessiblepropertyset.c', - 'gtkaccessiblerelationset.c', - 'gtkaccessiblestateset.c', + 'gtkaccessibleattributeset.c', 'gtkaccessiblevalue.c', 'gtkaccessiblevaluestatic.c', 'gtkactionhelper.c', |