X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=registryd%2Fregistry-main.c;h=ba613c9e25a87be40286ae6db83128a79d52cd94;hb=1acf082d6062c7d9042ded6ba0b7c957341913f5;hp=d4c280e2c2e5538dfdbe61b70e165816b0de6e8b;hpb=0724cea984b691fdc60a020b237828e9ef018cd7;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/registryd/registry-main.c b/registryd/registry-main.c index d4c280e..ba613c9 100644 --- a/registryd/registry-main.c +++ b/registryd/registry-main.c @@ -21,82 +21,98 @@ * Boston, MA 02111-1307, USA. */ -#ifdef AT_SPI_DEBUG #include -#endif - #include #include -#include #include #include +#include #include "registry.h" +#include "deviceeventcontroller.h" -#define spi_get_display() GDK_DISPLAY() +static gchar *dbus_name = NULL; -static void registry_set_ior (SpiRegistry *registry); +static GOptionEntry optentries[] = +{ + {"dbus-name", 0, 0, G_OPTION_ARG_STRING, &dbus_name, "Well-known name to register with D-Bus", NULL}, + {NULL} +}; + +static DBusObjectPathVTable droute_vtable = +{ + NULL, + &droute_message, + NULL, NULL, NULL, NULL +}; int main (int argc, char **argv) { - int ret; - char *obj_id; - const char *display_name; - char *cp, *dp; SpiRegistry *registry; - DBusError error; + SpiDEController *dec; + DRouteData droute; + GMainLoop *mainloop; + DBusConnection *bus; + + GOptionContext *opt; + + GError *err = NULL; + DBusError error; + int ret; g_type_init(); - obj_id = "OAFIID:Accessibility_Registry:1.0"; + /* 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); - registry = spi_registry_new (); + if (!g_option_context_parse(opt, &argc, &argv, &err)) + g_error("Option parsing failed: %s\n", err->message); - display_name = g_getenv ("AT_SPI_DISPLAY"); - if (!display_name) + 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) { - display_name = g_getenv ("DISPLAY"); - cp = strrchr (display_name, '.'); - dp = strrchr (display_name, ':'); - if (cp && dp && (cp > dp)) *cp = '\0'; + g_warning("Couldn't connect to dbus: %s\n", error.message); } - dbus_error_init (&error); mainloop = g_main_loop_new (NULL, FALSE); - ret= dbus_bus_request_name(registry->droute.bus, SPI_DBUS_NAME_REGISTRY, DBUS_NAME_FLAG_DO_NOT_QUEUE, &error); + 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) { -#ifdef AT_SPI_DEBUG - fprintf (stderr, "SpiRegistry Message: SpiRegistry daemon was already running.\n"); -#endif + g_error("Could not obtain D-Bus name - %s\n", dbus_name); } else { -#ifdef AT_SPI_DEBUG - fprintf (stderr, "SpiRegistry Message: SpiRegistry daemon is running.\n"); -#endif - registry_set_ior (registry); - g_main_loop_run (mainloop); + g_print ("SpiRegistry daemon is running with well-known name - %s\n", dbus_name); } - return 0; -} - -static void -registry_set_ior (SpiRegistry *registry){ - Atom AT_SPI_IOR = XInternAtom (spi_get_display (), "AT_SPI_IOR", FALSE); - char *iorstring = NULL; + /* 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; + } - iorstring = SPI_DBUS_NAME_REGISTRY; + registry = spi_registry_new (bus); + dec = spi_registry_dec_new (registry, &droute); + droute.user_data = dec; - XChangeProperty (spi_get_display(), - XDefaultRootWindow (spi_get_display ()), - AT_SPI_IOR, (Atom) 31, 8, - PropModeReplace, - (unsigned char *) iorstring, - iorstring ? strlen (iorstring) : 0); + g_main_loop_run (mainloop); + return 0; }