summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/a11y/gtkatspicache.c39
1 files changed, 7 insertions, 32 deletions
diff --git a/gtk/a11y/gtkatspicache.c b/gtk/a11y/gtkatspicache.c
index 880a64cc5c..81bfd030f2 100644
--- a/gtk/a11y/gtkatspicache.c
+++ b/gtk/a11y/gtkatspicache.c
@@ -191,9 +191,11 @@ emit_add_accessible (GtkAtSpiCache *self,
}
static void
-emit_remove_accessible (GtkAtSpiCache *self,
- GVariant *ref)
+emit_remove_accessible (GtkAtSpiCache *self,
+ GtkAtSpiContext *context)
{
+ GVariant *ref = gtk_at_spi_context_to_ref (context);
+
g_dbus_connection_emit_signal (self->connection,
NULL,
self->cache_path,
@@ -325,29 +327,6 @@ gtk_at_spi_cache_new (GDBusConnection *connection,
NULL);
}
-static void
-context_weak_unref (gpointer data,
- GObject *stale_context)
-{
- GtkAtSpiCache *self = data;
-
- const char *path = g_hash_table_lookup (self->contexts_to_path, stale_context);
- if (path == NULL)
- return;
-
- /* By the time we get here, the context has already been dropped,
- * so we need to generate the reference ourselves
- */
- emit_remove_accessible (self, g_variant_new ("(so)",
- g_dbus_connection_get_unique_name (self->connection),
- path));
-
- GTK_NOTE (A11Y, g_message ("Removing stale context '%s' from cache", path));
-
- g_hash_table_remove (self->contexts_by_path, path);
- g_hash_table_remove (self->contexts_to_path, stale_context);
-}
-
void
gtk_at_spi_cache_add_context (GtkAtSpiCache *self,
GtkAtSpiContext *context)
@@ -362,15 +341,13 @@ gtk_at_spi_cache_add_context (GtkAtSpiCache *self,
if (g_hash_table_contains (self->contexts_by_path, path))
return;
- g_object_weak_ref (G_OBJECT (context), context_weak_unref, self);
-
char *path_key = g_strdup (path);
g_hash_table_insert (self->contexts_by_path, path_key, context);
g_hash_table_insert (self->contexts_to_path, context, path_key);
- emit_add_accessible (self, context);
-
GTK_NOTE (A11Y, g_message ("Adding context '%s' to cache", path_key));
+
+ emit_add_accessible (self, context);
}
void
@@ -384,9 +361,7 @@ gtk_at_spi_cache_remove_context (GtkAtSpiCache *self,
if (!g_hash_table_contains (self->contexts_by_path, path))
return;
- emit_remove_accessible (self, gtk_at_spi_context_to_ref (context));
-
- g_object_weak_unref (G_OBJECT (context), context_weak_unref, self);
+ emit_remove_accessible (self, context);
/* The order is important: the value in contexts_by_path is the
* key in contexts_to_path