summaryrefslogtreecommitdiff
path: root/atspi/atspi-accessible.c
diff options
context:
space:
mode:
Diffstat (limited to 'atspi/atspi-accessible.c')
-rw-r--r--atspi/atspi-accessible.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/atspi/atspi-accessible.c b/atspi/atspi-accessible.c
index 1ce6b707..0a78b6bc 100644
--- a/atspi/atspi-accessible.c
+++ b/atspi/atspi-accessible.c
@@ -1739,6 +1739,21 @@ atspi_accessible_set_cache_mask (AtspiAccessible *accessible, AtspiCache mask)
enable_caching = TRUE;
}
+static void
+atspi_accessible_clear_cache_internal (AtspiAccessible *obj, guint iteration_stamp)
+{
+ gint i;
+
+ if (obj && obj->priv->iteration_stamp != iteration_stamp)
+ {
+ obj->priv->iteration_stamp = iteration_stamp;
+ obj->cached_properties = ATSPI_CACHE_NONE;
+ if (obj->children)
+ for (i = 0; i < obj->children->len; i++)
+ atspi_accessible_clear_cache_internal (g_ptr_array_index (obj->children, i), iteration_stamp);
+ }
+}
+
/**
* atspi_accessible_clear_cache:
* @obj: The #AtspiAccessible whose cache to clear.
@@ -1749,15 +1764,9 @@ atspi_accessible_set_cache_mask (AtspiAccessible *accessible, AtspiCache mask)
void
atspi_accessible_clear_cache (AtspiAccessible *obj)
{
- gint i;
+ static guint iteration_stamp = 0;
- if (obj)
- {
- obj->cached_properties = ATSPI_CACHE_NONE;
- if (obj->children)
- for (i = 0; i < obj->children->len; i++)
- atspi_accessible_clear_cache (g_ptr_array_index (obj->children, i));
- }
+ atspi_accessible_clear_cache_internal (obj, ++iteration_stamp);
}
/**