static void
deregister_accessible (guint ref)
{
- g_hash_table_remove(ref2ptr, ref);
+ g_hash_table_remove(ref2ptr, GINT_TO_POINTER(ref));
}
/*
guint ref;
g_assert (ATK_IS_OBJECT (accessible));
- ref = atk_dbus_object_to_ref (ATK_OBJECT(accessible));
+ ref = object_to_ref (ATK_OBJECT(accessible));
if (ref != 0)
{
deregister_accessible (ref);
g_hash_table_insert (ref2ptr, GINT_TO_POINTER(ref), accessible);
g_object_set_data (G_OBJECT(accessible), "dbus-id", GINT_TO_POINTER(ref));
g_object_weak_ref(G_OBJECT(accessible), deregister_callback, NULL);
-
- *registered = g_list_prepend (*registered, current);
}
/*---------------------------------------------------------------------------*/
{
AtkObject *current, *tmp;
GQueue *stack;
- GList *uplist = NULL;
- guint i, ref;
+ guint i;
gboolean recurse;
if (!filter (accessible))
stack = g_queue_new ();
current = g_object_ref (accessible);
- action (visited, current)
+ action (visited, current);
g_queue_push_head (stack, GINT_TO_POINTER (0));
/*
g_queue_pop_head (stack);
}
}
-
- return ref;
}
/*---------------------------------------------------------------------------*/
guint ref = 0;
g_assert(ATK_IS_OBJECT(accessible));
- ref = atk_dbus_object_to_ref (accessible);
+ ref = object_to_ref (accessible);
if (ref)
{
spi_emit_cache_update (accessible, atk_adaptor_app_data->bus);
static void
register_action (GList **registered, AtkObject *accessible)
{
- register_accessible (accessible)
+ register_accessible (accessible);
*registered = g_list_prepend (*registered, accessible);
}
(ActionFunc) register_accessible,
(FilterFunc) register_filter);
- g_list_foreach (registered, register_foreach);
+ g_list_foreach (registered, register_foreach, NULL);
}
-/*---------------------------------------------------------------------------*/
-
-static gboolean
-deregister_filter (AtkObject *accessible)
-{
- if (!object_to_ref (accessible))
- return TRUE;
- else
- return FALSE;
-}
static void
-deregister_action (GList **deregistered, AtkObject *accessible)
+register_ancestors (AtkObject *accessible)
{
+ AtkObject *current;
guint ref;
- g_assert (ATK_IS_OBJECT (accessible));
-
- ref = atk_dbus_object_to_ref (accessible);
- if (ref != 0)
- {
- deregister_accessible (ref);
- *deregistered = g_list_prepend (*deregistered, GINT_TO_POINTER(ref));
- }
-}
-
-static void
-deregister_foreach (gpointer data, gpointer user_data)
-{
- spi_emit_cache_update (GPOINTER_TO_INT (data), atk_adaptor_app_data->bus);
-}
-
-static void
-deregister_subtree (AtkObject *accessible)
-{
- GList *deregistered = NULL;
+ GList *registered = NULL;
- traverse_atk_tree (accessible,
- &deregistered,
- (ActionFunc) deregister_accessible,
- (FilterFunc) deregister_filter);
+ current = atk_object_get_parent (accessible);
+ while (current)
+ {
+ ref = atk_dbus_ref_from_object (current);
+ if (!ref)
+ register_action (®istered, current);
+ current = atk_object_get_parent (accessible);
+ }
- g_list_foreach (deregistered, deregister_foreach);
+ g_list_foreach (registered, register_foreach, NULL);
}
/*---------------------------------------------------------------------------*/
guint ref;
g_assert(ATK_IS_OBJECT(accessible));
- ref = atk_dbus_object_to_ref (accessible);
+ ref = object_to_ref (accessible);
if (!ref)
return NULL;
else
pname = values[0].property_name;
- if (!atk_dbus_object_to_ref (accessible))
+ if (!object_to_ref (accessible))
return TRUE;
if (strcmp (pname, "accessible-name") == 0 ||
}
else if (strcmp (pname, "accessible-parent"))
{
- guint ref;
-
- ref = atk_dbus_object_to_ref;
- if (!ref)
+ register_ancestors (accessible);
}
return TRUE;
}
else
child = atk_object_ref_accessible_child (accessible, index);
- atk_dbus_register_subtree (child);
+ register_subtree (child);
g_object_unref (child);
}
return TRUE;
if (!ref2ptr)
ref2ptr = g_hash_table_new(g_direct_hash, g_direct_equal);
- atk_dbus_register_accessible (root);
+ register_subtree (root);
atk_add_global_event_listener (tree_update_listener, "Gtk:AtkObject:property-change");
atk_add_global_event_listener (tree_update_children_listener, "Gtk:AtkObject:children-changed");
/*---------------------------------------------------------------------------*/
-/* When sending events it is safe to register an accessible object if
- * one does not already exist for a given AtkObject.
- * This is because the cache update signal should then be send before
- * the event signal is sent.
- */
-static gchar *
-get_object_path (AtkObject *accessible)
-{
- guint ref;
-
- return atk_dbus_ref_to_path (ref);
-}
-
-/*---------------------------------------------------------------------------*/
-
static gboolean
Accessibility_DeviceEventController_notifyListenersSync(const Accessibility_DeviceEvent *key_event)
{
DBusMessageIter iter, sub;
gchar *path, *cname, *t;
- path = get_object_path (accessible);
+ path = atk_dbus_object_to_path (accessible);
/* Tough decision here
* We won't send events from accessible
gchar *path, *cname, *t;
dbus_int32_t dummy = 0;
- path = get_object_path (accessible);
+ path = atk_dbus_object_to_path (accessible);
/* Tough decision here
* We won't send events from accessible
if (strcmp (pname, "accessible-table-summary") == 0)
{
otemp = atk_table_get_summary(ATK_TABLE (accessible));
- stemp = get_object_path (otemp);
- emit(accessible, ITF_EVENT_OBJECT, PCHANGE, pname, 0, 0, DBUS_TYPE_OBJECT_PATH_AS_STRING, stemp);
+ stemp = atk_dbus_object_to_path (otemp);
+ if (stemp != NULL)
+ emit(accessible, ITF_EVENT_OBJECT, PCHANGE, pname, 0, 0, DBUS_TYPE_OBJECT_PATH_AS_STRING, stemp);
}
else if (strcmp (pname, "accessible-table-column-header") == 0)
{
i = g_value_get_int (&(values->new_value));
otemp = atk_table_get_column_header(ATK_TABLE (accessible), i);
- stemp = get_object_path (otemp);
- emit(accessible, ITF_EVENT_OBJECT, PCHANGE, pname, 0, 0, DBUS_TYPE_OBJECT_PATH_AS_STRING, stemp);
+ stemp = atk_dbus_object_to_path (otemp);
+ if (stemp != NULL)
+ emit(accessible, ITF_EVENT_OBJECT, PCHANGE, pname, 0, 0, DBUS_TYPE_OBJECT_PATH_AS_STRING, stemp);
}
else if (strcmp (pname, "accessible-table-row-header") == 0)
{
i = g_value_get_int (&(values->new_value));
otemp = atk_table_get_row_header(ATK_TABLE (accessible), i);
- stemp = get_object_path (otemp);
- emit(accessible, ITF_EVENT_OBJECT, PCHANGE, pname, 0, 0, DBUS_TYPE_OBJECT_PATH_AS_STRING, stemp);
+ stemp = atk_dbus_object_to_path (otemp);
+ if (stemp != NULL)
+ emit(accessible, ITF_EVENT_OBJECT, PCHANGE, pname, 0, 0, DBUS_TYPE_OBJECT_PATH_AS_STRING, stemp);
}
else if (strcmp (pname, "accessible-table-row-description") == 0)
{
minor = g_quark_to_string (signal_hint->detail);
detail1 = atk_object_get_index_in_parent (child);
- s = get_object_path (child);
+ s = atk_dbus_object_to_path (child);
+ if (s == NULL)
+ {
+ g_free (s);
+ return TRUE;
+ }
emit(accessible, ITF_EVENT_OBJECT, name, "", detail1, 0, DBUS_TYPE_OBJECT_PATH_AS_STRING, s);
g_free(s);