#include "accessible.h"
#include "application.h"
+#include <bonobo-activation/bonobo-activation-register.h>
+
#undef SPI_BRIDGE_DEBUG
static CORBA_Environment ev;
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,
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 (
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");
#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);
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);
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 : "<NULL>" , s2);
#endif
gobject = g_value_get_object (param_values + 0);
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 : "<NULL>" , s2);
+#endif
+
+ gobject = g_value_get_object (param_values + 0);
+ spi_atk_emit_eventv (gobject, 0, 0, "window:%s", name);
+
+ return TRUE;
+}