* AT-SPI - Assistive Technology Service Provider Interface
* (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
*
+ * Copyright 2011, F123 Consulting & Mais Diferenças
* Copyright 2008, 2009, Codethink Ltd.
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.,
* Copyright 2001, 2002, 2003 Ximian, Inc.
#include "bridge.h"
#include "accessible-register.h"
-#include "common/spi-dbus.h"
+#include "spi-dbus.h"
#include "event.h"
#include "object.h"
static gboolean
Accessibility_DeviceEventController_NotifyListenersSync (const
- Accessibility_DeviceEvent
+ AtspiDeviceEvent
* key_event)
{
DBusMessage *message;
message =
dbus_message_new_method_call (SPI_DBUS_NAME_REGISTRY,
- SPI_DBUS_PATH_DEC,
- SPI_DBUS_INTERFACE_DEC,
+ ATSPI_DBUS_PATH_DEC,
+ ATSPI_DBUS_INTERFACE_DEC,
"NotifyListenersSync");
dbus_error_init (&error);
}
static void
-spi_init_keystroke_from_atk_key_event (Accessibility_DeviceEvent * keystroke,
+spi_init_keystroke_from_atk_key_event (AtspiDeviceEvent * keystroke,
AtkKeyEventStruct * event)
{
keystroke->id = (dbus_int32_t) event->keyval;
switch (event->type)
{
case (ATK_KEY_EVENT_PRESS):
- keystroke->type = Accessibility_KEY_PRESSED_EVENT;
+ keystroke->type = ATSPI_KEY_PRESSED;
break;
case (ATK_KEY_EVENT_RELEASE):
- keystroke->type = Accessibility_KEY_RELEASED_EVENT;
+ keystroke->type = ATSPI_KEY_RELEASED;
break;
default:
keystroke->type = 0;
spi_atk_bridge_key_listener (AtkKeyEventStruct * event, gpointer data)
{
gboolean result;
- Accessibility_DeviceEvent key_event;
+ AtspiDeviceEvent key_event;
spi_init_keystroke_from_atk_key_event (&key_event, event);
DBUS_TYPE_INT32_AS_STRING, 0, append_basic);
if (!g_strcmp0 (pname, "defunct"))
- spi_register_deregister_object (spi_global_register, G_OBJECT (accessible));
+ spi_register_deregister_object (spi_global_register, G_OBJECT (accessible),
+ TRUE);
return TRUE;
}
AtkObject *accessible;
GSignalQuery signal_query;
const gchar *name, *minor;
- gint detail1;
+ gint detail1 = 0;
g_signal_query (signal_hint->signal_id, &signal_query);
name = signal_query.signal_name;
GSignalQuery signal_query;
const gchar *name, *minor;
gchar *selected;
- gint detail1, detail2;
+ gint detail1 = 0, detail2 = 0;
g_signal_query (signal_hint->signal_id, &signal_query);
name = signal_query.signal_name;
GSignalQuery signal_query;
const gchar *name;
gchar *minor, *text;
- gint detail1, detail2;
+ gint detail1 = 0, detail2 = 0;
accessible = ATK_OBJECT (g_value_get_object (¶m_values[0]));
/* Get signal name for 'Gtk:AtkText:text-changed' so
GSignalQuery signal_query;
const gchar *name;
gchar *minor, *text;
- gint detail1, detail2;
+ gint detail1 = 0, detail2 = 0;
accessible = ATK_OBJECT (g_value_get_object (¶m_values[0]));
/* Get signal name for 'Gtk:AtkText:text-changed' so
AtkObject *accessible;
GSignalQuery signal_query;
const gchar *name, *minor;
- gint detail1, detail2;
+ gint detail1 = 0, detail2 = 0;
g_signal_query (signal_hint->signal_id, &signal_query);
name = signal_query.signal_name;
{
GSignalQuery signal_query;
const gchar *name, *minor;
- gint detail1, detail2 = 0;
+ gint detail1 = 0, detail2 = 0;
AtkObject *accessible, *ao=NULL;
gpointer child;
* and stores the signal id returned so that the function may be
* de-registered later.
*/
-static void
+static guint
add_signal_listener (GSignalEmissionHook listener, const char *signal_name)
{
guint id;
id = atk_add_global_event_listener (listener, signal_name);
- g_array_append_val (listener_ids, id);
+
+ if (id > 0) /* id == 0 is a failure */
+ g_array_append_val (listener_ids, id);
+
+ return id;
}
/*
*/
GObject *ao = g_object_new (ATK_TYPE_OBJECT, NULL);
AtkObject *bo = atk_no_op_object_new (ao);
+ guint id = 0;
g_object_unref (G_OBJECT (bo));
g_object_unref (ao);
add_signal_listener (property_event_listener,
"Gtk:AtkObject:property-change");
- add_signal_listener (window_event_listener, "window:create");
- add_signal_listener (window_event_listener, "window:destroy");
- add_signal_listener (window_event_listener, "window:minimize");
- add_signal_listener (window_event_listener, "window:maximize");
- add_signal_listener (window_event_listener, "window:restore");
- add_signal_listener (window_event_listener, "window:activate");
- add_signal_listener (window_event_listener, "window:deactivate");
+
+ /* window events: we tentative try to register using the old format */
+ id = add_signal_listener (window_event_listener, "window:create");
+
+ if (id != 0)
+ {
+ /* If we are able to register using the old format, we assume
+ * that the ATK implementor is managing window events without
+ * AtkWindow. We can't use the opposite test because after
+ * including AtkWindow on ATK you would be able to register to
+ * that event, although the ATK implementor could or not use it.
+ */
+
+ add_signal_listener (window_event_listener, "window:destroy");
+ add_signal_listener (window_event_listener, "window:minimize");
+ add_signal_listener (window_event_listener, "window:maximize");
+ add_signal_listener (window_event_listener, "window:restore");
+ add_signal_listener (window_event_listener, "window:activate");
+ add_signal_listener (window_event_listener, "window:deactivate");
+ }
+ else
+ {
+ add_signal_listener (window_event_listener, "Atk:AtkWindow:create");
+ add_signal_listener (window_event_listener, "Atk:AtkWindow:destroy");
+ add_signal_listener (window_event_listener, "Atk:AtkWindow:minimize");
+ add_signal_listener (window_event_listener, "Atk:AtkWindow:maximize");
+ add_signal_listener (window_event_listener, "Atk:AtkWindow:restore");
+ add_signal_listener (window_event_listener, "Atk:AtkWindow:activate");
+ add_signal_listener (window_event_listener, "Atk:AtkWindow:deactivate");
+ }
+
add_signal_listener (document_event_listener,
"Gtk:AtkDocument:load-complete");
add_signal_listener (document_event_listener, "Gtk:AtkDocument:reload");
atk_bridge_focus_tracker_id = 0;
}
- for (i = 0; ids && i < ids->len; i++)
+ if (ids)
{
- atk_remove_global_event_listener (g_array_index (ids, guint, i));
+ for (i = 0; i < ids->len; i++)
+ {
+ atk_remove_global_event_listener (g_array_index (ids, guint, i));
+ }
+ g_array_free (ids, TRUE);
}
- g_array_free (ids, TRUE);
if (atk_bridge_key_event_listener_id)
{