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));
return TRUE;
}
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++)
{
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;
+ }
}
/*---------------------------------------------------------------------------*/