summaryrefslogtreecommitdiff
path: root/atk-adaptor/accessible-register.c
diff options
context:
space:
mode:
authorMark Doffman <mdoff@silver-wind.(none)>2009-03-12 16:36:38 +0000
committerMark Doffman <mdoff@silver-wind.(none)>2009-04-21 17:16:02 +0100
commitc767935ed5f324a9b498b78bd19c1b354aa06575 (patch)
treeab784abd8da7b4b9a9b0d7f5cf7d148cc72c6898 /atk-adaptor/accessible-register.c
parent5e2b5c468bfd5aa6dcbafe5fde091875c9b3bad1 (diff)
downloadat-spi2-atk-c767935ed5f324a9b498b78bd19c1b354aa06575.tar.gz
2009-03-12 Mark Doffman <mark.doffman@codethink.co.uk>
* atk-adaptor/accessible-register.c Add 'object:children-changed' signal emission on addition or removal of top-level objects. * pyatspi/* Changes neccessary to have accercier pick up new top level windows. Add correct hash function to accessible objects.
Diffstat (limited to 'atk-adaptor/accessible-register.c')
-rw-r--r--atk-adaptor/accessible-register.c68
1 files changed, 67 insertions, 1 deletions
diff --git a/atk-adaptor/accessible-register.c b/atk-adaptor/accessible-register.c
index 494763b..d235c2e 100644
--- a/atk-adaptor/accessible-register.c
+++ b/atk-adaptor/accessible-register.c
@@ -489,6 +489,7 @@ tree_update_children_listener (GSignalInvocationHint *signal_hint,
#endif
}
register_subtree (child);
+ update_accessible (accessible);
}
recursion_check_unset ();
@@ -499,6 +500,63 @@ tree_update_children_listener (GSignalInvocationHint *signal_hint,
return TRUE;
}
+static void
+spi_atk_register_toplevel_added (AtkObject *accessible,
+ guint index,
+ AtkObject *child)
+{
+ g_static_rec_mutex_lock (&registration_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 (&registration_mutex);
+}
+
+static void
+spi_atk_register_toplevel_removed (AtkObject *accessible,
+ guint index,
+ AtkObject *child)
+{
+ g_static_rec_mutex_lock (&registration_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 (&registration_mutex);
+}
+
/*
* Initializes required global data. The update and removal lists
* and the reference lookup tables.
@@ -522,7 +580,15 @@ atk_dbus_initialize (AtkObject *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");
+
+ 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------------------------------------------------------------------------*/
-