deregister_accessible (gpointer data, GObject *accessible)
{
guint ref;
- g_assert (ATK_IS_OBJECT (accessible));
+ g_return_if_fail (ATK_IS_OBJECT (accessible));
ref = object_to_ref (ATK_OBJECT(accessible));
if (ref != 0)
register_accessible (AtkObject *accessible)
{
guint ref;
- g_assert(ATK_IS_OBJECT(accessible));
+ g_return_if_fail (ATK_IS_OBJECT(accessible));
ref = assign_reference();
GQueue *traversal;
GQueue *emit_update;
+ g_return_if_fail (ATK_IS_OBJECT (accessible));
+
traversal = g_queue_new ();
emit_update = g_queue_new ();
update_accessible (AtkObject *accessible)
{
guint ref = 0;
- g_assert(ATK_IS_OBJECT(accessible));
+ g_return_if_fail (ATK_IS_OBJECT(accessible));
ref = object_to_ref (accessible);
if (ref)
guint index;
void *data;
- g_assert (path);
+ g_return_val_if_fail (path, NULL);
if (strncmp(path, SPI_ATK_OBJECT_PATH_PREFIX, SPI_ATK_PATH_PREFIX_LENGTH) != 0)
return NULL;
* have their signals processed.
*/
accessible = g_value_get_object (¶m_values[0]);
- g_assert (ATK_IS_OBJECT (accessible));
+ g_return_val_if_fail (ATK_IS_OBJECT (accessible), TRUE);
if (object_to_ref (accessible))
{
* have their signals processed.
*/
accessible = g_value_get_object (¶m_values[0]);
- g_assert (ATK_IS_OBJECT (accessible));
+ g_return_val_if_fail (ATK_IS_OBJECT (accessible), TRUE);
if (object_to_ref (accessible))
{
#endif
}
register_subtree (child);
+ update_accessible (accessible);
}
recursion_check_unset ();
return TRUE;
}
+static void
+spi_atk_register_toplevel_added (AtkObject *accessible,
+ guint index,
+ AtkObject *child)
+{
+ g_static_rec_mutex_lock (®istration_mutex);
+
+ g_return_if_fail (ATK_IS_OBJECT (accessible));
+
+ if (object_to_ref (accessible))
+ {
+#ifdef SPI_ATK_DEBUG
+ if (recursion_check_and_set ())
+ g_warning ("AT-SPI: Recursive use of registration module");
+
+ g_debug ("AT-SPI: Toplevel added listener");
+#endif
+ if (!ATK_IS_OBJECT (child))
+ {
+ child = atk_object_ref_accessible_child (accessible, index);
+#ifdef SPI_ATK_DEBUG
+ non_owned_accessible (child);
+#endif
+ }
+ register_subtree (child);
+ update_accessible (accessible);
+
+ recursion_check_unset ();
+ }
+
+ g_static_rec_mutex_unlock (®istration_mutex);
+}
+
+static void
+spi_atk_register_toplevel_removed (AtkObject *accessible,
+ guint index,
+ AtkObject *child)
+{
+ g_static_rec_mutex_lock (®istration_mutex);
+
+ g_return_if_fail (ATK_IS_OBJECT (accessible));
+
+ if (object_to_ref (accessible))
+ {
+#ifdef SPI_ATK_DEBUG
+ if (recursion_check_and_set ())
+ g_warning ("AT-SPI: Recursive use of registration module");
+
+ g_debug ("AT-SPI: Toplevel removed listener");
+#endif
+ update_accessible (accessible);
+ recursion_check_unset ();
+ }
+
+ g_static_rec_mutex_unlock (®istration_mutex);
+}
+
/*
* Initializes required global data. The update and removal lists
* and the reference lookup tables.
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");
+
+ g_signal_connect (root,
+ "children-changed::add",
+ (GCallback) spi_atk_register_toplevel_added,
+ NULL);
+ g_signal_connect (root,
+ "children-changed::remove",
+ (GCallback) spi_atk_register_toplevel_removed,
+ NULL);
}
/*END------------------------------------------------------------------------*/
-