summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2019-04-03 15:59:35 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-04-30 10:02:31 +0200
commit5fa247364e1e8c09cbf686cb063d2e6107d5e196 (patch)
tree1f282113e70581600afefb7add60df808a261bc6
parenta2bff76d7829c4d565490f1664b48dbea8b43401 (diff)
downloadatk-5fa247364e1e8c09cbf686cb063d2e6107d5e196.tar.gz
Add accessible_id property
- Add AtkObjectPrivate structure containing accessible_id field. - Register AtkObjectPrivate structure to AtkObject class. - g_type_class_adjust_private_offset appeared with glib 2.38. - Add atk_object_[gs]et_accessible_id to manipulate it. - Add PROP_ACCESSIBLE_ID Fixes #9
-rw-r--r--atk/atkobject.c71
-rw-r--r--atk/atkobject.h7
-rw-r--r--docs/atk-sections.txt2
-rw-r--r--meson.build2
4 files changed, 81 insertions, 1 deletions
diff --git a/atk/atkobject.c b/atk/atkobject.c
index d50be54..110bf2e 100644
--- a/atk/atkobject.c
+++ b/atk/atkobject.c
@@ -78,6 +78,7 @@ enum
PROP_TABLE_SUMMARY,
PROP_TABLE_CAPTION_OBJECT,
PROP_HYPERTEXT_NUM_LINKS,
+ PROP_ACCESSIBLE_ID,
PROP_LAST /* gobject convention */
};
@@ -214,6 +215,12 @@ enum {
N_("description value")
#endif /* 0 */
+typedef struct {
+ gchar *accessible_id;
+} AtkObjectPrivate;
+
+static gint AtkObject_private_offset;
+
static void atk_object_class_init (AtkObjectClass *klass);
static void atk_object_init (AtkObject *accessible,
AtkObjectClass *klass);
@@ -321,10 +328,19 @@ atk_object_get_type (void)
(GInstanceInitFunc) atk_object_init,
} ;
type = g_type_register_static (G_TYPE_OBJECT, "AtkObject", &typeInfo, 0) ;
+
+ AtkObject_private_offset =
+ g_type_add_instance_private (type, sizeof (AtkObjectPrivate));
}
return type;
}
+static inline gpointer
+atk_object_get_instance_private (AtkObject *self)
+{
+ return (G_STRUCT_MEMBER_P (self, AtkObject_private_offset));
+}
+
static void
atk_object_class_init (AtkObjectClass *klass)
{
@@ -332,6 +348,9 @@ atk_object_class_init (AtkObjectClass *klass)
parent_class = g_type_class_peek_parent (klass);
+ if (AtkObject_private_offset != 0)
+ g_type_class_adjust_private_offset (klass, &AtkObject_private_offset);
+
gobject_class->set_property = atk_object_real_set_property;
gobject_class->get_property = atk_object_real_get_property;
gobject_class->finalize = atk_object_finalize;
@@ -670,11 +689,14 @@ static void
atk_object_init (AtkObject *accessible,
AtkObjectClass *klass)
{
+ AtkObjectPrivate *private = atk_object_get_instance_private (accessible);
+
accessible->name = NULL;
accessible->description = NULL;
accessible->accessible_parent = NULL;
accessible->relation_set = atk_relation_set_new();
accessible->role = ATK_ROLE_UNKNOWN;
+ private->accessible_id = NULL;
}
GType
@@ -1326,6 +1348,9 @@ atk_object_real_set_property (GObject *object,
if (ATK_IS_TABLE (accessible))
atk_table_set_caption (ATK_TABLE (accessible), g_value_get_object (value));
break;
+ case PROP_ACCESSIBLE_ID:
+ atk_object_set_accessible_id (accessible, g_value_get_string (value));
+ break;
default:
break;
}
@@ -1379,6 +1404,9 @@ atk_object_real_get_property (GObject *object,
if (ATK_IS_HYPERTEXT (accessible))
g_value_set_int (value, atk_hypertext_get_n_links (ATK_HYPERTEXT (accessible)));
break;
+ case PROP_ACCESSIBLE_ID:
+ g_value_set_string (value, atk_object_get_accessible_id (accessible));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1389,10 +1417,12 @@ static void
atk_object_finalize (GObject *object)
{
AtkObject *accessible;
+ AtkObjectPrivate *private;
g_return_if_fail (ATK_IS_OBJECT (object));
accessible = ATK_OBJECT (object);
+ private = atk_object_get_instance_private (accessible);
g_free (accessible->name);
g_free (accessible->description);
@@ -1406,6 +1436,8 @@ atk_object_finalize (GObject *object)
if (accessible->accessible_parent)
g_object_unref (accessible->accessible_parent);
+ g_free(private->accessible_id);
+
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -1709,6 +1741,45 @@ atk_object_remove_relationship (AtkObject *object,
return ret;
}
+/**
+ * atk_object_get_accessible_id:
+ * @accessible: an #AtkObject
+ *
+ * Gets the accessible id of the accessible.
+ *
+ * Since: 2.34
+ *
+ * Returns: a character string representing the accessible id of the object, or
+ * NULL if no such string was set.
+ **/
+const gchar*
+atk_object_get_accessible_id (AtkObject *accessible)
+{
+ AtkObjectPrivate *private = atk_object_get_instance_private (accessible);
+ return private->accessible_id;
+}
+
+/**
+ * atk_object_set_accessible_id:
+ * @accessible: an #AtkObject
+ * @name: a character string to be set as the accessible id
+ *
+ * Sets the accessible ID of the accessible. This is not meant to be presented
+ * to the user, but to be an ID which is stable over application development.
+ * Typically, this is the gtkbuilder ID. Such an ID will be available for
+ * instance to identify a given well-known accessible object for tailored screen
+ * reading, or for automatic regression testing.
+ *
+ * Since: 2.34
+ **/
+void
+atk_object_set_accessible_id (AtkObject *accessible, const gchar *id)
+{
+ AtkObjectPrivate *private = atk_object_get_instance_private (accessible);
+ g_free (private->accessible_id);
+ private->accessible_id = g_strdup (id);
+}
+
static void
atk_object_real_initialize (AtkObject *accessible,
gpointer data)
diff --git a/atk/atkobject.h b/atk/atkobject.h
index 711dda7..56dfb2f 100644
--- a/atk/atkobject.h
+++ b/atk/atkobject.h
@@ -766,6 +766,13 @@ AtkRole atk_role_register (const gchar *nam
ATK_AVAILABLE_IN_2_8
const gchar* atk_object_get_object_locale (AtkObject *accessible);
+ATK_AVAILABLE_IN_ALL
+const gchar* atk_object_get_accessible_id (AtkObject *accessible);
+
+ATK_AVAILABLE_IN_ALL
+void atk_object_set_accessible_id (AtkObject *accessible,
+ const gchar *name);
+
G_END_DECLS
#endif /* __ATK_OBJECT_H__ */
diff --git a/docs/atk-sections.txt b/docs/atk-sections.txt
index 5200dbe..3639286 100644
--- a/docs/atk-sections.txt
+++ b/docs/atk-sections.txt
@@ -196,6 +196,8 @@ atk_object_add_relationship
atk_object_remove_relationship
atk_object_get_attributes
atk_object_get_object_locale
+atk_object_get_accessible_id
+atk_object_set_accessible_id
atk_role_get_name
atk_role_get_localized_name
atk_role_for_name
diff --git a/meson.build b/meson.build
index 6d1ea59..8867161 100644
--- a/meson.build
+++ b/meson.build
@@ -92,7 +92,7 @@ foreach f: checked_funcs
endforeach
# Dependencies
-glib_req_version = '>= 2.31.2'
+glib_req_version = '>= 2.38.0'
glib_dep = [dependency('glib-2.0', version: glib_req_version,
fallback : ['glib', 'libglib_dep']),