X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=atk-bridge%2Fbridge.c;h=96f64fc17d18365e01fe0e2094946f90fdfc2e7f;hb=09b09daa2b88f6b54895ee49f59cd060b14a5acf;hp=9779cd836a4e7d7ae88b1fd6a92a586d3e56a52c;hpb=5c60b3cbd3708d4562b4625c5c155e08269545e6;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/atk-bridge/bridge.c b/atk-bridge/bridge.c index 9779cd8..96f64fc 100644 --- a/atk-bridge/bridge.c +++ b/atk-bridge/bridge.c @@ -32,6 +32,8 @@ #include "accessible.h" #include "application.h" +#include + #undef SPI_BRIDGE_DEBUG static CORBA_Environment ev; @@ -46,6 +48,11 @@ static gboolean spi_atk_bridge_property_event_listener (GSignalInvocationHint *s guint n_param_values, const GValue *param_values, gpointer data); +static gboolean +spi_atk_bridge_window_event_listener (GSignalInvocationHint *signal_hint, + guint n_param_values, + const GValue *param_values, + gpointer data); static gboolean spi_atk_bridge_signal_listener (GSignalInvocationHint *signal_hint, guint n_param_values, const GValue *param_values, @@ -70,8 +77,8 @@ static GArray *listener_ids = NULL; extern void gnome_accessibility_module_init (void); extern void gnome_accessibility_module_shutdown (void); -int -gtk_module_init (gint *argc, gchar **argv[]) +static int +atk_bridge_init (gint *argc, gchar **argv[]) { CORBA_Environment ev; @@ -81,11 +88,20 @@ gtk_module_init (gint *argc, gchar **argv[]) } atk_bridge_initialized = TRUE; - if (!bonobo_init (argc, *argv)) + if (!bonobo_init (argc, argv ? *argv : NULL)) { g_error ("Could not initialize Bonobo"); } + /* + * We only want to enable the bridge for top level + * applications, we detect bonobo components by seeing + * if they were activated with the intention of extracting + * an impl. by IID - very solid. + */ + if (bonobo_activation_iid_get ()) + return 0; + CORBA_exception_init(&ev); registry = bonobo_activation_activate_from_id ( @@ -99,7 +115,7 @@ gtk_module_init (gint *argc, gchar **argv[]) CORBA_exception_free (&ev); } - if (CORBA_Object_is_nil (registry, &ev)) + if (registry == CORBA_OBJECT_NIL) { g_error ("Could not locate registry"); } @@ -123,6 +139,12 @@ gtk_module_init (gint *argc, gchar **argv[]) return 0; } +int +gtk_module_init (gint *argc, gchar **argv[]) +{ + return atk_bridge_init (argc, argv); +} + static gboolean spi_atk_bridge_idle_init (gpointer user_data) { @@ -166,7 +188,29 @@ spi_atk_register_event_listeners (void) id = atk_add_global_event_listener (spi_atk_bridge_property_event_listener, "Gtk:AtkObject:property-change"); g_array_append_val (listener_ids, id); + id = atk_add_global_event_listener (spi_atk_bridge_window_event_listener, + "window:create"); + g_array_append_val (listener_ids, id); + id = atk_add_global_event_listener (spi_atk_bridge_window_event_listener, + "window:destroy"); + g_array_append_val (listener_ids, id); + id = atk_add_global_event_listener (spi_atk_bridge_window_event_listener, + "window:minimize"); + g_array_append_val (listener_ids, id); + id = atk_add_global_event_listener (spi_atk_bridge_window_event_listener, + "window:maximize"); + g_array_append_val (listener_ids, id); + id = atk_add_global_event_listener (spi_atk_bridge_window_event_listener, + "window:restore"); + g_array_append_val (listener_ids, id); + id = atk_add_global_event_listener (spi_atk_bridge_window_event_listener, + "window:activate"); + g_array_append_val (listener_ids, id); + id = atk_add_global_event_listener (spi_atk_bridge_window_event_listener, + "window:deactivate"); + g_array_append_val (listener_ids, id); + add_signal_listener ("Gtk:AtkObject:state-change"); add_signal_listener ("Gtk:AtkObject:children-changed"); add_signal_listener ("Gtk:AtkObject:visible-data-changed"); add_signal_listener ("Gtk:AtkSelection:selection-changed"); @@ -242,7 +286,7 @@ spi_atk_bridge_exit_func (void) void gnome_accessibility_module_init (void) { - gtk_module_init (NULL, NULL); + atk_bridge_init (NULL, NULL); g_print("Atk Accessibilty bridge initialized\n"); } @@ -373,15 +417,17 @@ spi_atk_bridge_property_event_listener (GSignalInvocationHint *signal_hint, #ifdef SPI_BRIDGE_DEBUG GSignalQuery signal_query; const gchar *name; - gchar *s, *s2; + const gchar *s, *s2; g_signal_query (signal_hint->signal_id, &signal_query); name = signal_query.signal_name; s2 = g_type_name (G_OBJECT_TYPE (g_value_get_object (param_values + 0))); s = atk_object_get_name (ATK_OBJECT (g_value_get_object (param_values + 0))); - fprintf (stderr, "Received (property) signal %s:%s from object %s (gail %s)\n", - g_type_name (signal_query.itype), name, s, s2); + values = (AtkPropertyValues*) g_value_get_pointer (param_values + 1); + fprintf (stderr, "Received (property) signal %s:%s:%s from object %s (gail %s)\n", + g_type_name (signal_query.itype), name, values->property_name, s, s2); + #endif gobject = g_value_get_object (param_values + 0); @@ -512,7 +558,7 @@ spi_atk_bridge_signal_listener (GSignalInvocationHint *signal_hint, const gchar *name; gint detail1 = 0, detail2 = 0; #ifdef SPI_BRIDGE_DEBUG - gchar *s, *s2; + const gchar *s, *s2; #endif g_signal_query (signal_hint->signal_id, &signal_query); @@ -523,7 +569,7 @@ spi_atk_bridge_signal_listener (GSignalInvocationHint *signal_hint, s2 = g_type_name (G_OBJECT_TYPE (g_value_get_object (param_values + 0))); s = atk_object_get_name (ATK_OBJECT (g_value_get_object (param_values + 0))); fprintf (stderr, "Received signal %s:%s from object %s (gail %s)\n", - g_type_name (signal_query.itype), name, s, s2); + g_type_name (signal_query.itype), name, s ? s : "" , s2); #endif gobject = g_value_get_object (param_values + 0); @@ -536,3 +582,35 @@ spi_atk_bridge_signal_listener (GSignalInvocationHint *signal_hint, return TRUE; } + + + +static gboolean +spi_atk_bridge_window_event_listener (GSignalInvocationHint *signal_hint, + guint n_param_values, + const GValue *param_values, + gpointer data) +{ + GObject *gobject; + GSignalQuery signal_query; + const gchar *name; +#ifdef SPI_BRIDGE_DEBUG + const gchar *s, *s2; +#endif + + g_signal_query (signal_hint->signal_id, &signal_query); + + name = signal_query.signal_name; + +#ifdef SPI_BRIDGE_DEBUG + s2 = g_type_name (G_OBJECT_TYPE (g_value_get_object (param_values + 0))); + s = atk_object_get_name (ATK_OBJECT (g_value_get_object (param_values + 0))); + fprintf (stderr, "Received signal %s:%s from object %s (gail %s)\n", + g_type_name (signal_query.itype), name, s ? s : "" , s2); +#endif + + gobject = g_value_get_object (param_values + 0); + spi_atk_emit_eventv (gobject, 0, 0, "window:%s", name); + + return TRUE; +}