Add routine for releasing memory allocated to reading material structure 73/294573/1 accepted/tizen/7.0/unified/20230726.165531 accepted/tizen/7.0/unified/20231129.061633
authorLukasz Oleksak <l.oleksak@samsung.com>
Fri, 26 May 2023 12:06:15 +0000 (14:06 +0200)
committerLukasz Oleksak <l.oleksak@samsung.com>
Wed, 21 Jun 2023 08:59:24 +0000 (08:59 +0000)
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
(cherry picked from commit a442fbb2ab78e6b4d982e6b81ec9f0a1937efa1f)

atspi/atspi-accessible.c
atspi/atspi-accessible.h

index fa3d8f1..8943570 100644 (file)
@@ -507,19 +507,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)
@@ -685,10 +673,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.
  *
index 058ae2c..c6a3031 100644 (file)
@@ -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);