diff options
author | Mark Doffman <mdoff@silver-wind.(none)> | 2009-03-12 16:36:38 +0000 |
---|---|---|
committer | Mark Doffman <mdoff@silver-wind.(none)> | 2009-04-21 17:16:02 +0100 |
commit | c767935ed5f324a9b498b78bd19c1b354aa06575 (patch) | |
tree | ab784abd8da7b4b9a9b0d7f5cf7d148cc72c6898 /atk-adaptor/accessible-register.c | |
parent | 5e2b5c468bfd5aa6dcbafe5fde091875c9b3bad1 (diff) | |
download | at-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.c | 68 |
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 (®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. @@ -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------------------------------------------------------------------------*/ - |