+ if (dbus_bus_request_name
+ (spi_global_app_data->bus, atspi_dbus_name, 0, &error))
+ {
+ g_print ("AT-SPI Recieved D-Bus name - %s\n", atspi_dbus_name);
+ }
+ else
+ {
+ g_print
+ ("AT-SPI D-Bus name requested but could not be allocated - %s\n",
+ atspi_dbus_name);
+ }
+ }
+
+ spi_global_app_data->main_context = g_main_context_new ();
+
+ atspi_dbus_connection_setup_with_g_main (spi_global_app_data->bus, NULL);
+
+ /* Hook our plug-and socket functions */
+ install_plug_hooks ();
+
+ /*
+ * Create the leasing, register and cache objects.
+ * The order is important here, the cache depends on the
+ * register object.
+ */
+ spi_global_register = g_object_new (SPI_REGISTER_TYPE, NULL);
+ spi_global_leasing = g_object_new (SPI_LEASING_TYPE, NULL);
+
+ /* Register droute for routing AT-SPI messages */
+ spi_global_app_data->droute =
+ droute_new ();
+
+ accpath = droute_add_many (spi_global_app_data->droute,
+ "/org/a11y/atspi/accessible",
+ NULL,
+ introspect_children_cb,
+ NULL,
+ (DRouteGetDatumFunction)
+ spi_global_register_path_to_object);
+
+
+ /* Register all interfaces with droute and set up application accessible db */
+ spi_initialize_accessible (accpath);
+ spi_initialize_application (accpath);
+ spi_initialize_action (accpath);
+ spi_initialize_collection (accpath);
+ spi_initialize_component (accpath);
+ spi_initialize_document (accpath);
+ spi_initialize_editabletext (accpath);
+ spi_initialize_hyperlink (accpath);
+ spi_initialize_hypertext (accpath);
+ spi_initialize_image (accpath);
+ spi_initialize_selection (accpath);
+ spi_initialize_socket (accpath);
+ spi_initialize_table (accpath);
+ spi_initialize_table_cell (accpath);
+ spi_initialize_text (accpath);
+ spi_initialize_value (accpath);
+
+ droute_context_register (spi_global_app_data->droute,
+ spi_global_app_data->bus);
+
+ /* Register methods to send D-Bus signals on certain ATK events */
+ if (clients)
+ spi_atk_activate ();
+
+ /* Set up filter and match rules to catch signals */
+ dbus_bus_add_match (spi_global_app_data->bus, "type='signal', interface='org.a11y.atspi.Registry', sender='org.a11y.atspi.Registry'", NULL);
+ dbus_bus_add_match (spi_global_app_data->bus, "type='signal', interface='org.a11y.atspi.DeviceEventListener', sender='org.a11y.atspi.Registry'", NULL);
+ dbus_bus_add_match (spi_global_app_data->bus, "type='signal', arg0='org.a11y.atspi.Registry', interface='org.freedesktop.DBus', member='NameOwnerChanged'", NULL);
+ dbus_connection_add_filter (spi_global_app_data->bus, signal_filter, NULL,
+ NULL);
+
+ /* Register this app by sending a signal out to AT-SPI registry daemon */
+ if (!atspi_no_register && (!root || !ATK_IS_PLUG (root)))
+ register_application (spi_global_app_data);
+ else
+ get_registered_event_listeners (spi_global_app_data);
+
+ dbus_error_free (&error);
+ return 0;
+}
+
+void
+atk_bridge_adaptor_cleanup (void)
+{
+ GList *l;
+ GSList *ls;
+
+ if (!inited)
+ return;
+
+ if (!spi_global_app_data)