From: Lukasz Oleksak Date: Fri, 26 May 2023 12:06:15 +0000 (+0200) Subject: Add routine for releasing memory allocated to reading material structure X-Git-Tag: accepted/tizen/unified/20230703.093328^0 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fat-spi2-core.git;a=commitdiff_plain;h=a442fbb2ab78e6b4d982e6b81ec9f0a1937efa1f Add routine for releasing memory allocated to reading material structure This patch moves memory releasing routine from screen-reader to at-spi2-core in order to make it available for other AT-clients that would like to use reading material protocol. Also new field "self" has been added to reading material structure. Change-Id: Ic10e2d795f9f9c5dbe3cd8098d8b18965add443e --- diff --git a/atspi/atspi-accessible.c b/atspi/atspi-accessible.c index 625e3b7..65b3fb1 100644 --- a/atspi/atspi-accessible.c +++ b/atspi/atspi-accessible.c @@ -509,19 +509,7 @@ atspi_accessible_get_navigable_at_point (AtspiAccessible *root, * * Gets reading material * - * Returns: reading material to be used screen-reader side. This is not stable. - * You have to handle all alocated memory as below on screen-reader side. - * - * AtspiAccessibleReadingMaterial *rm - * g_object_unref(rm->parent); - * g_object_unref(rm->described_by_accessible); - * g_hash_table_unref(rm->attributes); - * free(rm->name); - * free(rm->labeled_by_name); - * free(rm->text_interface_name); - * free(rm->localized_role_name); - * free(rm->description); - * free(rm); + * Returns: reading material to be used screen-reader side. **/ AtspiAccessibleReadingMaterial * atspi_accessible_get_reading_material (AtspiAccessible *obj, GError **error) @@ -687,10 +675,41 @@ atspi_accessible_get_reading_material (AtspiAccessible *obj, GError **error) dbus_message_unref(reply); + reading_material->self = g_object_ref(obj); + return reading_material; } /** + * atspi_accessible_free_reading_material: + * @rm: a pointer to the #AtspiAccessibleReadingMaterial object on which to operate. + * + * Release memory allocated for reading material + **/ +void atspi_accessible_free_reading_material(AtspiAccessibleReadingMaterial *rm) +{ + g_return_if_fail(rm != NULL); + + if (rm->self) + g_object_unref(rm->self); + + if (rm->parent) + g_object_unref(rm->parent); + + if (rm->described_by_accessible) + g_object_unref(rm->described_by_accessible); + + g_hash_table_unref(rm->attributes); + g_free(rm->name); + g_free(rm->labeled_by_name); + g_free(rm->text_interface_name); + g_free(rm->localized_role_name); + g_free(rm->description); + g_free(rm->value_text); + g_free(rm); +} + +/** * atspi_accessible_get_default_label_info: * @obj: a pointer to the #AtspiAccessible object would be window. * diff --git a/atspi/atspi-accessible.h b/atspi/atspi-accessible.h index 058ae2c..c6a3031 100644 --- a/atspi/atspi-accessible.h +++ b/atspi/atspi-accessible.h @@ -54,6 +54,7 @@ struct _AtspiAccessibleDefaultLabelInfo struct _AtspiAccessibleReadingMaterial { + AtspiAccessible *self; AtspiAccessible *parent; AtspiAccessible *described_by_accessible; GHashTable *attributes; @@ -126,6 +127,8 @@ AtspiAccessible *atspi_accessible_get_neighbor (AtspiAccessible *root, AtspiAcce AtspiAccessibleReadingMaterial *atspi_accessible_get_reading_material (AtspiAccessible *obj, GError **error); +void atspi_accessible_free_reading_material (AtspiAccessibleReadingMaterial *rm); + AtspiAccessibleDefaultLabelInfo *atspi_accessible_get_default_label_info (AtspiAccessible *obj, GError **error); AtspiAccessible * atspi_accessible_get_parent (AtspiAccessible *obj, GError **error);