*/
#include "config.h"
+#include "dbus/dbus-glib-lowlevel.h"
#include <X11/Xlib.h>
#include <X11/Xatom.h>
typedef struct _SpiAppData SpiAppData;
struct _SpiAppData
{
- DBusConnection *bus;
AtkObject *root;
DRouteData droute;
};
const GValue *param_values,
gpointer data);
-#if 0
-static void spi_atk_bridge_init_nil (CORBA_any *any,
- AtkObject *obj);
-static void spi_atk_bridge_init_object (CORBA_any *any,
- AtkObject *obj,
- CORBA_Object *c_obj);
-static void spi_atk_bridge_init_string (CORBA_any *any,
- AtkObject *obj,
- gchar **string);
-static void spi_atk_bridge_init_rect (CORBA_any *any,
- AtkObject *obj,
- AtkRectangle *rect);
-#endif
-
static gboolean
spi_atk_bridge_window_event_listener (GSignalInvocationHint *signal_hint,
guint n_param_values,
static gint spi_atk_bridge_key_listener (AtkKeyEventStruct *event,
gpointer data);
static void spi_atk_tidy_windows (void);
-static void deregister_application ();
+static void deregister_application (SpiAppData *app);
static void reinit_register_vars (void);
/* For automatic libgnome init */
}
static gboolean
-post_init (void)
+post_init (gpointer data)
{
during_init_shutdown = FALSE;
return FALSE;
NULL, NULL, NULL, NULL
};
-SpiAppData *
+static SpiAppData *
spi_app_init (AtkObject *root)
{
DBusError error;
dbus_error_init(&error);
- SpiAppData *ad = (SpiAppData *)malloc(sizeof(SpiAppData));
+ SpiAppData *ad = (SpiAppData *)calloc(sizeof(SpiAppData), 1);
if (!ad) return NULL;
ad->root = root;
- ad->bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
- if (!ad->bus)
+ ad->droute.bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
+ if (!ad->droute.bus)
{
g_warning("Couldn't connect to dbus: %s\n", error.message);
free(ad);
return NULL;
}
+ //dbus_connection_set_exit_on_disconnect(ad->droute.bus, FALSE);
+ //dbus_bus_register(ad->droute.bus, &error);
spi_dbus_initialize (&ad->droute);
/* Below line for testing -- it should be removed once at-spi-registryd is working */
- if (dbus_bus_request_name(ad->bus, "org.freedesktop.at-spi.test", 0, &error)) printf("Got test name.\n");
-printf("droute initialized\n");
- if (!dbus_connection_try_register_fallback (ad->bus, "/org/freedesktop/atspi", &droute_vtable, &ad->droute, &error))
+ if (dbus_bus_request_name(ad->droute.bus, "test.atspi.tree", 0, &error)) printf("Got test name.\n");
+ spi_register_tree_object(ad->droute.bus, "/org/freedesktop/atspi/tree");
+ if (!dbus_connection_try_register_fallback (ad->droute.bus, "/org/freedesktop/atspi/accessible/", &droute_vtable, &ad->droute, &error))
{
- printf("Couldn't register droute.\n");
+ g_warning("Couldn't register droute.\n");
}
- dbus_connection_setup_with_g_main(ad->bus, g_main_context_default());
+ dbus_connection_setup_with_g_main(ad->droute.bus, g_main_context_default());
return ad;
}
}
static const char *
-spi_atk_bridget_get_dec (void)
+spi_atk_bridge_get_dec (void)
{
return "/dec";
}
misc = NULL;
}
+static void emit(AtkObject *object, const char *name, int first_arg_type, ...)
+{
+ va_list args;
+ DBusMessage *sig;
+ char *path = spi_dbus_get_path(object);
+
+ spi_dbus_update_cache(&this_app->droute);
+ sig = dbus_message_new_signal(path, "org.freedesktop.atspi.Accessible", name);
+ va_start(args, first_arg_type);
+ if (first_arg_type != DBUS_TYPE_INVALID)
+ {
+ dbus_message_append_args_valist(sig, first_arg_type, args);
+ }
+ va_end(args);
+ dbus_connection_send(this_app->droute.bus, sig, NULL);
+ g_free(path);
+ dbus_message_unref(sig);
+}
+
static void
spi_atk_bridge_focus_tracker (AtkObject *object)
{
- Accessibility_Event e;
-
- e.type = "focus:";
- e.source = spi_dbus_get_path(object);
- e.detail1 = 0;
- e.detail2 = 0;
- if (0) // TODO: check for registry died
- registry_died = TRUE;
- else
- {
- bridge_threads_leave ();
- // TODO
- //spi_dbus_notify_event (this_app->bus, spi_atk_bridge_get_registry (), &e);
- bridge_threads_enter ();
- }
- // TODO: check for registry died?
-
- g_free(e.source);
+ emit(object, "focus", DBUS_TYPE_INVALID);
}
-static void
-spi_atk_emit_eventv (const GObject *gobject,
- long detail1,
- long detail2,
- GValue *any,
- const char *format, ...)
+static void emit_property_change(AtkObject *object, const char *name, int type, void *val)
{
- va_list args;
- Accessibility_Event e;
- AtkObject *aobject;
- const char *registry;
+ DBusMessage *sig;
+ char *path = spi_dbus_get_path(object);
+ DBusMessageIter iter, sub;
+ const char *type_as_string = NULL;
-#ifdef SPI_BRIDGE_DEBUG
- char *s = NULL;
-#endif
-
- va_start (args, format);
-
- if (ATK_IS_IMPLEMENTOR (gobject))
- {
- aobject = atk_implementor_ref_accessible (ATK_IMPLEMENTOR (gobject));
- e.source = spi_dbus_get_path (aobject);
- g_object_unref (G_OBJECT (aobject));
- }
- else if (ATK_IS_OBJECT (gobject))
- {
- aobject = ATK_OBJECT (gobject);
- // TODO: Do we need to specially handle remote objects?
- e.source = spi_dbus_get_path (aobject);
- }
+ spi_dbus_update_cache(&this_app->droute);
+ if (type == DBUS_TYPE_OBJECT_PATH)
+ {
+ type_as_string = "o";
+ if (!val) val = "";
+ }
+ else if (type == DBUS_TYPE_STRING) type_as_string = "s";
+ else if (type == DBUS_TYPE_INT32) type_as_string = "i";
+ else if (type == DBUS_TYPE_UINT32) type_as_string = "o";
else
- {
- aobject = NULL;
- DBG (0, g_warning ("received property-change event from non-AtkImplementor"));
- va_end (args);
- return;
- }
- e.type = g_strdup_vprintf (format, args);
- e.detail1 = detail1;
- e.detail2 = detail2;
+ {
+ g_warning("Unknown type %d in property change signal", type);
+ }
+ sig = dbus_message_new_signal(path, "org.freedesktop.atspi.Accessible", "PropertyChanged");
+ dbus_message_iter_init_append(sig, &iter);
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, type_as_string, &sub);
+ dbus_message_iter_append_basic(&sub, type, val);
+ dbus_message_iter_close_container(&iter, &sub);
+ dbus_connection_send(this_app->droute.bus, sig, NULL);
+ g_free(path);
+ dbus_message_unref(sig);
+}
-#ifdef SPI_BRIDGE_DEBUG
- g_message ("Emitting event '%s' (%lu, %lu) on %s",
- e.type, e.detail1, e.detail2, e.source);
-#endif
- registry = spi_atk_bridge_get_registry ();
- if (!registry_died)
- {
- bridge_threads_leave ();
-#if 0 // TODO
- if (!value) spi_dbus_notify_event (this_app->bus, registry, &e);
- else
+static void emit_rect(AtkObject *object, const char *name, AtkRectangle *rect)
+{
+ DBusMessage *sig;
+ char *path = spi_dbus_get_path(object);
+ DBusMessageIter iter, sub;
+ dbus_uint32_t x, y, width, height;
+
+ spi_dbus_update_cache(&this_app->droute);
+ x = rect->x;
+ y = rect->y;
+ width = rect->width;
+ height = rect->height;
+ sig = dbus_message_new_signal(path, "org.freedesktop.atspi.Accessible", "PropertyChanged");
+ if (sig)
{
- g_warning("TODO: support sending event with value");
- }
-#endif
- bridge_threads_enter ();
-#ifdef SPI_BRIDGE_DEBUG
- // TODO: display message for error
-#endif
- // TODO: check for error, set registry_died
+ dbus_message_iter_init_append (sig, &iter);
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+ if (!dbus_message_iter_open_container
+ (&iter, DBUS_TYPE_STRUCT, NULL, &sub))
+ goto oom;
+ dbus_message_iter_append_basic (&sub, DBUS_TYPE_INT32, &x);
+ dbus_message_iter_append_basic (&sub, DBUS_TYPE_INT32, &y);
+ dbus_message_iter_append_basic (&sub, DBUS_TYPE_INT32, &width);
+ dbus_message_iter_append_basic (&sub, DBUS_TYPE_INT32, &height);
+ if (!dbus_message_iter_close_container (&iter, &sub))
+ goto oom;
}
-
- g_free (e.type);
-
- va_end (args);
+ dbus_connection_send(this_app->droute.bus, sig, NULL);
+oom:
+ g_free(path);
+ dbus_message_unref(sig);
}
static gboolean
const GValue *param_values,
gpointer data)
{
-#if 0 // TODO
AtkPropertyValues *values;
- GObject *gobject;
+ AtkObject *obj;
const gchar *prop_name;
const gchar *sp = NULL;
AtkObject *ao;
#endif
- gobject = g_value_get_object (param_values + 0);
- name = atk_object_get_name (ATK_OBJECT (gobject));
+ obj = g_value_get_object (param_values + 0);
+ name = atk_object_get_name (obj);
values = (AtkPropertyValues*) g_value_get_pointer (param_values + 1);
prop_name = values->property_name;
if (strcmp (prop_name, "accessible-name") == 0)
{
- g_value_set_string(value, name);
+ spi_dbus_notify_change(obj, FALSE, &this_app->droute);
}
else if (strcmp (prop_name, "accessible-description") == 0)
{
- sp = atk_object_get_description (ATK_OBJECT (gobject));
- g_value_set_string(value, sp);
+ spi_dbus_notify_change(obj, FALSE, &this_app->droute);
}
else if (strcmp (prop_name, "accessible-parent") == 0)
{
- ao = atk_object_get_parent (ATK_OBJECT (gobject));
- if (ao)
- {
- s_ao = spi_accessible_new (ao);
- c_obj = BONOBO_OBJREF (s_ao);
- spi_atk_bridge_init_object (&any,
- ATK_OBJECT (gobject),
- &c_obj);
- }
- else
- {
- spi_atk_bridge_init_nil (&any,
- ATK_OBJECT (gobject));
- }
+ spi_dbus_notify_change(obj, FALSE, &this_app->droute);
}
else if (strcmp (prop_name, "accessible-table-summary") == 0)
{
- ao = atk_table_get_summary (ATK_TABLE (gobject));
- if (ao)
- {
- s_ao = spi_accessible_new (ao);
- c_obj = BONOBO_OBJREF (s_ao);
- spi_atk_bridge_init_object (&any,
- ATK_OBJECT (gobject),
- &c_obj);
- }
- else
- {
- spi_atk_bridge_init_nil (&any,
- ATK_OBJECT (gobject));
- }
+ ao = atk_table_get_summary (ATK_TABLE (obj));
+ s_ao = spi_dbus_get_path(ao);
+ emit_property_change(obj, prop_name, DBUS_TYPE_OBJECT_PATH, s_ao);
}
else if (strcmp (prop_name, "accessible-table-column-header") == 0)
{
i = g_value_get_int (&(values->new_value));
- ao = atk_table_get_column_header (ATK_TABLE (gobject), i);
- if (ao)
- {
- s_ao = spi_accessible_new (ao);
- c_obj = BONOBO_OBJREF (s_ao);
- spi_atk_bridge_init_object (&any,
- ATK_OBJECT (gobject),
- &c_obj);
- }
- else
- {
- spi_atk_bridge_init_nil (&any, ATK_OBJECT (gobject));
- }
+ ao = atk_table_get_column_header (ATK_TABLE (obj), i);
+ s_ao = spi_dbus_get_path(ao);
+ emit_property_change(obj, prop_name, DBUS_TYPE_OBJECT_PATH, s_ao);
}
else if (strcmp (prop_name, "accessible-table-row-header") == 0)
{
i = g_value_get_int (&(values->new_value));
- ao = atk_table_get_row_header (ATK_TABLE (gobject), i);
- if (ao)
- {
- s_ao = spi_accessible_new (ao);
- c_obj = BONOBO_OBJREF (s_ao);
- spi_atk_bridge_init_object (&any, ATK_OBJECT (gobject), &c_obj);
- }
- else
- {
- spi_atk_bridge_init_nil (&any, ATK_OBJECT (gobject));
- }
+ ao = atk_table_get_row_header (ATK_TABLE (obj), i);
+ s_ao = spi_dbus_get_path(ao);
+ emit_property_change(obj, prop_name, DBUS_TYPE_OBJECT_PATH, s_ao);
}
else if (strcmp (prop_name, "accessible-table-row-description") == 0)
{
i = g_value_get_int (&(values->new_value));
- sp = atk_table_get_row_description (ATK_TABLE (gobject), i);
- spi_atk_bridge_init_string (&any, ATK_OBJECT (gobject),
- (gchar **)&sp);
+ sp = atk_table_get_row_description (ATK_TABLE (obj), i);
+ emit_property_change(obj, prop_name, DBUS_TYPE_STRING, (void *)&sp);
}
else if (strcmp (prop_name, "accessible-table-column-description") == 0)
{
i = g_value_get_int (&(values->new_value));
- sp = atk_table_get_column_description (ATK_TABLE (gobject), i);
- spi_atk_bridge_init_string (&any, ATK_OBJECT (gobject),
- (gchar **)&sp);
+ sp = atk_table_get_column_description (ATK_TABLE(obj), i);
+ emit_property_change(obj, prop_name, DBUS_TYPE_STRING, (void *)&sp);
}
else if (strcmp (prop_name, "accessible-table-caption-object") == 0)
{
- ao = atk_table_get_caption (ATK_TABLE (gobject));
+ ao = atk_table_get_caption (ATK_TABLE(obj));
sp = atk_object_get_name (ao);
- spi_atk_bridge_init_string (&any, ATK_OBJECT (gobject),
- (gchar **)&sp);
+ emit_property_change(obj, prop_name, DBUS_TYPE_STRING, (void *)&sp);
}
else
{
- spi_atk_bridge_init_nil (&any, ATK_OBJECT (gobject));
+ long v = 0;
+ emit_property_change(obj, prop_name, DBUS_TYPE_INT32, &v);
}
-
- spi_atk_emit_eventv (gobject, 0, 0, &any,
- "object:property-change:%s", prop_name);
-
- if (s_ao)
- bonobo_object_unref (BONOBO_OBJECT (s_ao));
-
-#endif
+ if (s_ao) g_free(s_ao);
return TRUE;
}
const GValue *param_values,
gpointer data)
{
-#if 0
- GObject *gobject;
+ AtkObject *obj;
gchar *property_name;
- gchar *type;
unsigned long detail1;
#ifdef SPI_BRIDGE_DEBUG
GSignalQuery signal_query;
g_type_name (signal_query.itype), name);
#endif
- gobject = g_value_get_object (param_values + 0);
+ obj = ATK_OBJECT(g_value_get_object (param_values + 0));
property_name = g_strdup (g_value_get_string (param_values + 1));
+ /* Ignore defunct for now; we'll send a tree update to remove it when
+ the object goes away */
+ /* Also ignore state changes for objects not yet broadcast */
+ if ((property_name && !strcmp(property_name, "defunct")) ||
+ !spi_dbus_object_is_known(obj))
+ {
+ g_free(property_name);
+ return TRUE;
+ }
detail1 = (g_value_get_boolean (param_values + 2))
? 1 : 0;
- type = g_strdup_printf ("object:state-changed:%s", property_name);
- spi_atk_emit_eventv (gobject,
- detail1,
- 0,
- NULL,
- type);
+ emit(obj, "StateChanged", DBUS_TYPE_STRING, &property_name, DBUS_TYPE_UINT32, &detail1, DBUS_TYPE_INVALID);
g_free (property_name);
- g_free (type);
-#endif // TODO
return TRUE;
}
-#if 0
static void
spi_init_keystroke_from_atk_key_event (Accessibility_DeviceEvent *keystroke,
AtkKeyEventStruct *event)
g_print (_("WARNING: NULL key event reported."));
}
- keystroke->id = (CORBA_long) event->keyval;
- keystroke->hw_code = (CORBA_short) event->keycode;
- keystroke->timestamp = (CORBA_unsigned_long) event->timestamp;
- keystroke->modifiers = (CORBA_unsigned_short) (event->state & 0xFFFF);
+ keystroke->id = (dbus_int32_t) event->keyval;
+ keystroke->hw_code = (dbus_int16_t) event->keycode;
+ keystroke->timestamp = (dbus_uint32_t) event->timestamp;
+ keystroke->modifiers = (dbus_uint16_t) (event->state & 0xFFFF);
if (event->string)
{
gunichar c;
- keystroke->event_string = CORBA_string_dup (event->string);
+ keystroke->event_string = g_strdup (event->string);
c = g_utf8_get_char_validated (event->string, -1);
if (c > 0 && g_unichar_isprint (c))
- keystroke->is_text = CORBA_TRUE;
+ keystroke->is_text = TRUE;
else
- keystroke->is_text = CORBA_FALSE;
+ keystroke->is_text = FALSE;
}
else
{
- keystroke->event_string = CORBA_string_dup ("");
- keystroke->is_text = CORBA_FALSE;
+ keystroke->event_string = g_strdup ("");
+ keystroke->is_text = FALSE;
}
switch (event->type)
{
keystroke->event_string, (int) keystroke->is_text, (unsigned long) keystroke->timestamp);
#endif
}
-#endif
+
+static gboolean Accessibility_DeviceEventController_notifyListenersSync(const Accessibility_DeviceEvent *key_event)
+{
+ DBusMessage *message = dbus_message_new_method_call(SPI_DBUS_NAME_REGISTRY, SPI_DBUS_PATH_REGISTRY, "org.freedesktop.atspi.DeviceEventController", "notifyListenersSync");
+ DBusError error;
+ dbus_bool_t consumed = FALSE;
+
+ dbus_error_init(&error);
+ if (spi_dbus_marshall_deviceEvent(message, key_event))
+ {
+ DBusMessage *reply = dbus_connection_send_with_reply_and_block(this_app->droute.bus, message, 1000, &error);
+ if (reply)
+ {
+ DBusError error;
+ dbus_error_init(&error);
+ dbus_message_get_args(reply, &error, DBUS_TYPE_BOOLEAN, &consumed, DBUS_TYPE_INVALID);
+ dbus_message_unref(reply);
+ }
+ }
+ dbus_message_unref(message);
+ return consumed;
+}
static gint
spi_atk_bridge_key_listener (AtkKeyEventStruct *event, gpointer data)
{
gboolean result;
-#if 0
Accessibility_DeviceEvent key_event;
- CORBA_exception_init (&ev);
-
spi_init_keystroke_from_atk_key_event (&key_event, event);
bridge_threads_leave ();
- result = Accessibility_DeviceEventController_notifyListenersSync (
- spi_atk_bridget_get_dec (), &key_event, &ev);
+ result = Accessibility_DeviceEventController_notifyListenersSync (&key_event);
bridge_threads_enter ();
- if (key_event.event_string) CORBA_free (key_event.event_string);
-
- if (BONOBO_EX(&ev))
- {
- result = FALSE;
- CORBA_exception_free (&ev);
- }
+ if (key_event.event_string) g_free (key_event.event_string);
-#endif
return result;
}
const GValue *param_values,
gpointer data)
{
-#if 0
- GObject *gobject;
+ AtkObject *obj;
GSignalQuery signal_query;
const gchar *name;
const gchar *detail;
char *sp = NULL;
AtkObject *ao;
gint detail1 = 0, detail2 = 0;
- SpiAccessible *s_ao = NULL;
+ char *s_ao = NULL;
+ gchar *sig_name;
+ char *p;
#ifdef SPI_BRIDGE_DEBUG
const gchar *s, *s2;
#endif
name = signal_query.signal_name;
if (signal_hint->detail)
+ {
detail = g_quark_to_string (signal_hint->detail);
+ sig_name = g_strdup_printf("object_%s_%s", name, detail);
+ }
else
+ {
detail = NULL;
+ sig_name = g_strdup_printf("object_%s", name);
+ }
+ while ((p = strchr(sig_name, '-')) != NULL) *p = '_';
#ifdef SPI_BRIDGE_DEBUG
s2 = g_type_name (G_OBJECT_TYPE (g_value_get_object (param_values + 0)));
detail ? detail : "<NULL>", s ? s : "<NULL>" , s2);
#endif
- gobject = g_value_get_object (param_values + 0);
+ obj = ATK_OBJECT(g_value_get_object (param_values + 0));
-xyzzy
if (signal_query.signal_id == atk_signal_active_descendant_changed)
{
gpointer child = g_value_get_pointer (param_values + 1);
ao = ATK_OBJECT (child);
detail1 = atk_object_get_index_in_parent (ao);
- s_ao = spi_accessible_new (ao);
- c_obj = BONOBO_OBJREF (s_ao);
- spi_atk_bridge_init_object (&any, ATK_OBJECT (gobject), &c_obj);
+ s_ao = spi_dbus_get_path(child);
+ emit(obj, "name", DBUS_TYPE_OBJECT_PATH, s_ao, DBUS_TYPE_UINT32, &detail1, DBUS_TYPE_INVALID);
+ g_free(s_ao);
}
else if (signal_query.signal_id == atk_signal_link_selected)
{
if (G_VALUE_TYPE (param_values + 1) == G_TYPE_INT)
detail1 = g_value_get_int (param_values + 1);
- spi_atk_bridge_init_nil (&any, ATK_OBJECT (gobject));
+ emit(obj, "LinkSelected", DBUS_TYPE_UINT32, &detail1, DBUS_TYPE_INVALID);
}
else if (signal_query.signal_id == atk_signal_bounds_changed)
{
if (G_VALUE_HOLDS_BOXED (param_values + 1))
atk_rect = g_value_get_boxed (param_values + 1);
- spi_atk_bridge_init_rect (&any, ATK_OBJECT (gobject), atk_rect);
+ emit_rect(obj, "BoundsChanged", atk_rect);
}
- else if ((signal_query.signal_id == atk_signal_children_changed) && gobject)
+ else if ((signal_query.signal_id == atk_signal_children_changed) && obj)
{
- detail1 = g_value_get_uint (param_values + 1);
- ao = atk_object_ref_accessible_child (ATK_OBJECT (gobject),
- detail1);
- if (ao)
- {
- s_ao = spi_accessible_new (ao);
- c_obj = BONOBO_OBJREF (s_ao);
- spi_atk_bridge_init_object (&any, ATK_OBJECT (gobject), &c_obj);
- g_object_unref (ao);
- }
- else
- {
- spi_atk_bridge_init_nil (&any, ATK_OBJECT (gobject));
- }
+ spi_dbus_notify_change(obj, FALSE, &this_app->droute);
}
else
{
if (signal_query.signal_id == atk_signal_text_changed)
{
- sp = atk_text_get_text (ATK_TEXT (gobject),
+ sp = atk_text_get_text (ATK_TEXT (obj),
detail1,
detail1+detail2);
- spi_atk_bridge_init_string (&any, ATK_OBJECT (gobject),
- (gchar **) &sp);
+ emit(obj, sig_name, DBUS_TYPE_UINT32, &detail1, DBUS_TYPE_UINT32, &detail2, DBUS_TYPE_STRING, &sp, DBUS_TYPE_INVALID);
}
else if (signal_query.signal_id == atk_signal_text_selection_changed)
{
/* Return NULL as the selected string */
- spi_atk_bridge_init_nil (&any, ATK_OBJECT (gobject));
+ // TODO
+ emit(obj, sig_name, DBUS_TYPE_INVALID);
}
else
{
- spi_atk_bridge_init_nil (&any, ATK_OBJECT (gobject));
+ emit(obj, sig_name, DBUS_TYPE_INVALID);
}
}
- if (detail)
- spi_atk_emit_eventv (gobject, detail1, detail2, &any,
- "object:%s:%s", name, detail);
- else
- spi_atk_emit_eventv (gobject, detail1, detail2, &any,
- "object:%s", name);
-
if (sp)
g_free (sp);
if (s_ao)
- bonobo_object_unref (BONOBO_OBJECT (s_ao));
+ g_free (s_ao);
+ g_free(sig_name);
-#endif
return TRUE;
}
const GValue *param_values,
gpointer data)
{
-#if 0
- GObject *gobject;
+ AtkObject *obj;
GSignalQuery signal_query;
- CORBA_any any;
const gchar *name, *s;
#ifdef SPI_BRIDGE_DEBUG
const gchar *s2;
g_signal_query (signal_hint->signal_id, &signal_query);
name = signal_query.signal_name;
+ gchar *sig_name;
#ifdef SPI_BRIDGE_DEBUG
s2 = g_type_name (G_OBJECT_TYPE (g_value_get_object (param_values + 0)));
g_type_name (signal_query.itype), name, s ? s : "<NULL>" , s2);
#endif
- gobject = g_value_get_object (param_values + 0);
+ obj = ATK_OBJECT(g_value_get_object (param_values + 0));
+
+ s = atk_object_get_name (obj);
+ sig_name = g_strdup_printf("window_%s", name);
+ emit(obj, sig_name, DBUS_TYPE_STRING, &s, DBUS_TYPE_INVALID);
+ g_free(sig_name);
- s = atk_object_get_name (ATK_OBJECT (gobject));
- spi_atk_bridge_init_string (&any, ATK_OBJECT (gobject), (gchar **) &s);
-
- spi_atk_emit_eventv (gobject, 0, 0, &any,
- "window:%s", name);
-#endif
return TRUE;
}
const GValue *param_values,
gpointer data)
{
-#if 0
- GObject *gobject;
+ AtkObject *obj;
GSignalQuery signal_query;
- CORBA_any any;
const gchar *name, *s;
+ gchar *sig_name;
#ifdef SPI_BRIDGE_DEBUG
const gchar *s2;
#endif
g_type_name (signal_query.itype), name, s ? s : "<NULL>" , s2);
#endif
- gobject = g_value_get_object (param_values + 0);
+ obj = ATK_OBJECT(g_value_get_object (param_values + 0));
- s = atk_object_get_name (ATK_OBJECT (gobject));
- spi_atk_bridge_init_string (&any, ATK_OBJECT (gobject), (gchar **) &s);
-
- spi_atk_emit_eventv (gobject, 0, 0, &any,
- "document:%s", name);
-#endif
+ s = atk_object_get_name (obj);
+ sig_name = g_strdup_printf("document_%s", name);
+ emit(obj, sig_name, DBUS_TYPE_STRING, &s, DBUS_TYPE_INVALID);
+ g_free(sig_name);
return TRUE;
}
static void
spi_atk_tidy_windows (void)
{
-#if 0
AtkObject *root;
gint n_children;
gint i;
{
AtkObject *child;
AtkStateSet *stateset;
- CORBA_any any;
const gchar *name;
child = atk_object_ref_accessible_child (root, i);
name = atk_object_get_name (child);
if (atk_state_set_contains_state (stateset, ATK_STATE_ACTIVE))
{
- spi_atk_bridge_init_string (&any, child, (gchar**) &name);
- spi_atk_emit_eventv (G_OBJECT (child), 0, 0, &any, "window:deactivate");
- if (registry_died)
- return;
+ emit(child, "window:deactivate", DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID);
}
g_object_unref (stateset);
- spi_atk_bridge_init_string (&any, child, (gchar**) &name);
- spi_atk_emit_eventv (G_OBJECT (child), 0, 0, &any, "window:destroy");
+ emit(child, "window:destroy", DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID);
g_object_unref (child);
}
-#endif
}
static void
device_event_controller = NULL;
this_app = NULL;
}
-
-#if 0
-static void
-spi_atk_bridge_init_base (CORBA_any *any, AtkObject *obj,
- Accessibility_Application *app, Accessibility_Role *role,
- CORBA_string *name)
-{
- const gchar *s = atk_object_get_name (obj);
- *app = spi_accessible_new_return (atk_get_root (), FALSE, NULL);
- *role = spi_role_from_atk_role (atk_object_get_role (obj));
- *name = s ? s : ""; /* string gets dup-ed in util.c spi_init_any_* */
-}
-
-static void
-spi_atk_bridge_init_nil (CORBA_any *any, AtkObject *obj)
-{
- Accessibility_Application app = CORBA_OBJECT_NIL;
- Accessibility_Role role = Accessibility_ROLE_UNKNOWN;
- CORBA_string name;
- spi_atk_bridge_init_base (any, obj, &app, &role, &name);
- spi_init_any_nil (any, app, role, name);
-}
-
-static void
-spi_atk_bridge_init_object (CORBA_any *any, AtkObject *obj, CORBA_Object *c_obj)
-{
- Accessibility_Application app = CORBA_OBJECT_NIL;
- Accessibility_Role role = Accessibility_ROLE_UNKNOWN;
- CORBA_string name;
- spi_atk_bridge_init_base (any, obj, &app, &role, &name);
- spi_init_any_object (any, app, role, name, c_obj);
-}
-
-static void
-spi_atk_bridge_init_string (CORBA_any *any, AtkObject *obj, gchar **string)
-{
- Accessibility_Application app = CORBA_OBJECT_NIL;
- Accessibility_Role role = Accessibility_ROLE_UNKNOWN;
- CORBA_string name;
- spi_atk_bridge_init_base (any, obj, &app, &role, &name);
- spi_init_any_string (any, app, role, name, string);
-}
-
-static void
-spi_atk_bridge_init_rect (CORBA_any *any, AtkObject *obj, AtkRectangle *rect)
-{
- Accessibility_Application app = CORBA_OBJECT_NIL;
- Accessibility_Role role = Accessibility_ROLE_UNKNOWN;
- CORBA_string name;
- spi_atk_bridge_init_base (any, obj, &app, &role, &name);
- spi_init_any_rect (any, app, role, name, rect);
-}
-#endif