const char *name, *desc;
dbus_uint32_t role;
- g_object_ref (G_OBJECT (obj));
-
set = atk_object_ref_state_set (obj);
{
AtkObject *application, *parent;
for (i = 0; i < childcount; i++)
{
AtkObject *child;
- gchar *child_path;
child = atk_object_ref_accessible_child (obj, i);
- spi_object_append_reference (&iter_sub_array, child);
- g_object_unref (G_OBJECT (child));
+ if (child)
+ {
+ spi_object_append_reference (&iter_sub_array, child);
+ g_object_unref (G_OBJECT (child));
+ }
}
}
if (ATK_IS_SOCKET (obj) && atk_socket_is_occupied (ATK_SOCKET (obj)))
}
dbus_message_iter_close_container (iter_array, &iter_struct);
g_object_unref (set);
- g_object_unref (obj);
}
/*---------------------------------------------------------------------------*/
+static void
+ref_accessible_hf (gpointer key, gpointer obj_data, gpointer data)
+{
+ g_object_ref (key);
+}
+
/* For use as a GHFunc */
static void
append_accessible_hf (gpointer key, gpointer obj_data, gpointer data)
append_cache_item (ATK_OBJECT (key), data);
}
+static void
+add_to_list_hf (gpointer key, gpointer obj_data, gpointer data)
+{
+ GSList **listptr = data;
+ *listptr = g_slist_prepend (*listptr, key);
+}
+
/*---------------------------------------------------------------------------*/
static void
"RemoveAccessible")))
{
DBusMessageIter iter;
- gchar *path;
dbus_message_iter_init_append (message, &iter);
DBusMessageIter iter;
dbus_message_iter_init_append (message, &iter);
+ g_object_ref (accessible);
append_cache_item (accessible, &iter);
+ g_object_unref (accessible);
dbus_connection_send (spi_global_app_data->bus, message, NULL);
{
DBusMessage *reply;
DBusMessageIter iter, iter_array;
+ GSList *pending_unrefs = NULL;
if (bus == spi_global_app_data->bus)
spi_atk_add_client (dbus_message_get_sender (message));
dbus_message_iter_init_append (reply, &iter);
dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY,
SPI_CACHE_ITEM_SIGNATURE, &iter_array);
+ spi_cache_foreach (spi_global_cache, ref_accessible_hf, NULL);
spi_cache_foreach (spi_global_cache, append_accessible_hf, &iter_array);
+ spi_cache_foreach (spi_global_cache, add_to_list_hf, &pending_unrefs);
+ g_slist_free_full (pending_unrefs, g_object_unref);
dbus_message_iter_close_container (&iter, &iter_array);
return reply;
}
{
droute_path_add_interface (path, ATSPI_DBUS_INTERFACE_CACHE, spi_org_a11y_atspi_Cache, methods, NULL);
- g_signal_connect (spi_global_cache,
- "object-added",
- (GCallback) emit_cache_add,
- NULL);
+ g_signal_connect (spi_global_cache, "object-added",
+ (GCallback) emit_cache_add, NULL);
- g_signal_connect (spi_global_cache,
- "object-removed",
- (GCallback) emit_cache_remove,
- NULL);
+ g_signal_connect (spi_global_cache, "object-removed",
+ (GCallback) emit_cache_remove, NULL);
};
/*END------------------------------------------------------------------------*/