summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2020-07-17 12:49:59 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2020-07-26 20:31:15 +0100
commit732578eb53e3391a284425517bf34b49ddbb523e (patch)
treedac97c43c1e47130e95933624f0635d8db86bf5e
parent1124f2507d6a928dcce9878e23bc563efc65d801 (diff)
downloadgtk+-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.
-rw-r--r--gtk/gtkaccessibleattributeset.c249
-rw-r--r--gtk/gtkaccessibleattributesetprivate.h57
-rw-r--r--gtk/gtkaccessiblepropertyset.c218
-rw-r--r--gtk/gtkaccessiblepropertysetprivate.h49
-rw-r--r--gtk/gtkaccessiblerelationset.c217
-rw-r--r--gtk/gtkaccessiblerelationsetprivate.h49
-rw-r--r--gtk/gtkaccessiblestateset.c207
-rw-r--r--gtk/gtkaccessiblestatesetprivate.h49
-rw-r--r--gtk/gtkatcontext.c124
-rw-r--r--gtk/gtkatcontextprivate.h16
-rw-r--r--gtk/gtktestatcontext.c12
-rw-r--r--gtk/meson.build4
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',