+ /* We depend on GDK as well as XLib for device event processing */
+ gdk_init(&argc, &argv);
+
+ /*Parse command options*/
+ opt = g_option_context_new(NULL);
+ g_option_context_add_main_entries(opt, optentries, NULL);
+
+ if (!g_option_context_parse(opt, &argc, &argv, &err))
+ g_error("Option parsing failed: %s\n", err->message);
+
+ if (dbus_name == NULL)
+ dbus_name = SPI_DBUS_NAME_REGISTRY;
+
+ dbus_error_init (&error);
+ bus = dbus_bus_get(DBUS_BUS_SESSION, &error);
+ droute.bus = bus;
+ if (!bus)
+ {
+ g_warning("Couldn't connect to dbus: %s\n", error.message);
+ }
+
+ mainloop = g_main_loop_new (NULL, FALSE);
+ dbus_connection_setup_with_g_main(bus, g_main_context_default());
+
+ ret = dbus_bus_request_name(bus, dbus_name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &error);
+ if (ret == DBUS_REQUEST_NAME_REPLY_EXISTS)
+ {
+ g_error("Could not obtain D-Bus name - %s\n", dbus_name);
+ }
+ else
+ {
+ g_print ("SpiRegistry daemon is running with well-known name - %s\n", dbus_name);
+ }
+
+ /* Set up D-Route for use by the dec */
+ if (!dbus_connection_register_object_path (droute.bus,
+ "/org/freedesktop/atspi/registry/deviceeventcontroller",
+ &droute_vtable,
+ &droute))
+ {
+ g_error("AT-SPI Registry daemon: Couldn't register droute.\n");
+ return 0;
+ }
+
+ registry = spi_registry_new (bus);
+ dec = spi_registry_dec_new (registry, &droute);
+ droute.user_data = dec;
+
+ g_main_loop_run (mainloop);
+ return 0;
+}