#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);
guint detail1;
accessible = ATK_OBJECT (g_value_get_object (¶m_values[0]));
- pname = g_strdup (g_value_get_string (¶m_values[1]));
+ pname = g_value_get_string (¶m_values[1]);
- /* TODO - Possibly ignore a change to the 'defunct' state.
- * This is because without reference counting defunct objects should be removed.
- */
detail1 = (g_value_get_boolean (¶m_values[2])) ? 1 : 0;
emit_event (accessible, ITF_EVENT_OBJECT, STATE_CHANGED, pname, detail1, 0,
DBUS_TYPE_INT32_AS_STRING, 0, append_basic);
- g_free (pname);
+
+ if (!g_strcmp0 (pname, "defunct"))
+ 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;
g_object_unref (G_OBJECT (bo));
g_object_unref (ao);
+ if (listener_ids)
+ {
+ g_warning ("atk_bridge: spi_atk-register_event_listeners called multiple times");
+ return;
+ }
+
/* Register for focus event notifications, and register app with central registry */
listener_ids = g_array_sized_new (FALSE, TRUE, sizeof (guint), 16);
"Gtk:AtkTable:column-reordered");
add_signal_listener (generic_event_listener, "Gtk:AtkTable:column-deleted");
add_signal_listener (generic_event_listener, "Gtk:AtkTable:model-changed");
-
- /* Children signal listeners */
- atk_add_global_event_listener (children_changed_event_listener,
- "Gtk:AtkObject:children-changed");
+ add_signal_listener (children_changed_event_listener, "Gtk:AtkObject:children-changed");
#if 0
g_signal_connect (G_OBJECT (spi_global_app_data->root),
listener_ids = NULL;
if (atk_bridge_focus_tracker_id)
+ {
atk_remove_focus_tracker (atk_bridge_focus_tracker_id);
+ 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);
}
if (atk_bridge_key_event_listener_id)
+ {
atk_remove_key_event_listener (atk_bridge_key_event_listener_id);
+ atk_bridge_key_event_listener_id = 0;
+ }
}
/*---------------------------------------------------------------------------*/