Add routine for releasing memory allocated to reading material structure 39/293439/3 accepted/tizen/unified/20230703.093328
authorLukasz Oleksak <l.oleksak@samsung.com>
Fri, 26 May 2023 12:06:15 +0000 (14:06 +0200)
committerLukasz Oleksak <l.oleksak@samsung.com>
Fri, 16 Jun 2023 12:39:08 +0000 (14:39 +0200)
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

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

index 625e3b7..65b3fb1 100644 (file)
@@ -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.
  *
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);