diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2019-04-03 15:59:35 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2019-04-30 10:02:31 +0200 |
commit | 5fa247364e1e8c09cbf686cb063d2e6107d5e196 (patch) | |
tree | 1f282113e70581600afefb7add60df808a261bc6 | |
parent | a2bff76d7829c4d565490f1664b48dbea8b43401 (diff) | |
download | atk-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.c | 71 | ||||
-rw-r--r-- | atk/atkobject.h | 7 | ||||
-rw-r--r-- | docs/atk-sections.txt | 2 | ||||
-rw-r--r-- | meson.build | 2 |
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']), |