2008-12-17 Mark Doffman <mark.doffman@codethink.co.uk>
[platform/core/uifw/at-spi2-atk.git] / registryd / registry.c
index 2ef53d0..51aaa4d 100644 (file)
@@ -208,44 +208,11 @@ impl_deregisterApplication (DBusConnection *bus, DBusMessage *message, void *use
 
 /*---------------------------------------------------------------------------*/
 
-static DBusHandlerResult
-message_handler (DBusConnection *bus, DBusMessage *message, void *user_data)
-{
-  DBusMessage *reply = NULL;
-  guint res = DBUS_HANDLER_RESULT_HANDLED;
-
-
-  int mtype;
-  const char *itf;
-  const char *name;
-
-  mtype = dbus_message_get_type (message);
-  itf = dbus_message_get_interface (message);
-  name = dbus_message_get_member (message);
-
-  if (dbus_message_is_method_call (message, SPI_DBUS_INTERFACE_REGISTRY, "getApplications"))
-      reply = impl_getApplications (bus, message, user_data);
-  else if (dbus_message_is_method_call (message, SPI_DBUS_INTERFACE_REGISTRY, "registerApplication"))
-      impl_registerApplication (bus, message, user_data);
-  else if (dbus_message_is_method_call (message, SPI_DBUS_INTERFACE_REGISTRY, "deregisterApplication"))
-      impl_deregisterApplication (bus, message, user_data);
-  else
-      res = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
-  if (reply)
-    {
-      dbus_connection_send (bus, reply, NULL);
-      dbus_message_unref (reply);
-    }
-  return res;
-}
-
-/*---------------------------------------------------------------------------*/
-
 static void
-handle_disconnection (DBusConnection *bus, SpiRegistry *reg, DBusMessage *message)
+handle_disconnection (DBusConnection *bus, DBusMessage *message, void *user_data)
 {
   char *name, *old, *new;
+  SpiRegistry *reg = SPI_REGISTRY (user_data);
 
   if (dbus_message_get_args (message, NULL,
                              DBUS_TYPE_STRING, &name,
@@ -260,8 +227,10 @@ handle_disconnection (DBusConnection *bus, SpiRegistry *reg, DBusMessage *messag
     }
 }
 
+/*---------------------------------------------------------------------------*/
+
 static DBusHandlerResult
-signal_handler (DBusConnection *bus, DBusMessage *message, void *user_data)
+signal_filter (DBusConnection *bus, DBusMessage *message, void *user_data)
 {
   SpiRegistry *registry = SPI_REGISTRY (user_data);
   guint res = DBUS_HANDLER_RESULT_HANDLED;
@@ -269,7 +238,7 @@ signal_handler (DBusConnection *bus, DBusMessage *message, void *user_data)
   const char *member = dbus_message_get_member (message);
 
   if (!g_strcmp0(iface, DBUS_INTERFACE_DBUS) && !g_strcmp0(member, "NameOwnerChanged"))
-      handle_disconnection (bus, registry, message);
+      handle_disconnection (bus, message, user_data);
   else
       res = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 
@@ -278,31 +247,38 @@ signal_handler (DBusConnection *bus, DBusMessage *message, void *user_data)
 
 /*---------------------------------------------------------------------------*/
 
-static gchar *app_reg_sig_match = "type='signal', interface='org.freedesktop.atspi.Tree', member='registerApplication'";
-static gchar *app_dereg_sig_match = "type='signal', interface='org.freedesktop.atspi.Tree', member='deregisterApplication'";
-
-static gchar *app_sig_match_blank = "";
+static gchar *app_sig_match_name_owner =
+       "type='signal', interface='org.freedesktop.DBus', member='NameOwnerChanged'";
 
-static DBusObjectPathVTable reg_vtable =
+static DRouteMethod dev_methods[] =
 {
-  NULL,
-  &message_handler,
-  NULL, NULL, NULL, NULL
+  { impl_getApplications, "getApplications" },
+  { impl_registerApplication, "registerApplication" },
+  { impl_deregisterApplication, "deregisterApplication" },
+  { NULL, NULL }
 };
 
 SpiRegistry *
-spi_registry_new (DBusConnection *bus)
+spi_registry_new (DBusConnection *bus, DRouteContext *droute)
 {
   SpiRegistry *reg = g_object_new (SPI_REGISTRY_TYPE, NULL);
+  DRoutePath *path;
 
   reg->bus = bus;
 
-  dbus_connection_register_object_path(bus, SPI_DBUS_PATH_REGISTRY, &reg_vtable, reg);
+  dbus_bus_add_match (bus, app_sig_match_name_owner, NULL);
+  dbus_connection_add_filter (bus, signal_filter, reg, NULL);
 
-  //dbus_bus_add_match (bus, app_reg_sig_match, NULL);
-  //dbus_bus_add_match (bus, app_dereg_sig_match, NULL);
-  dbus_bus_add_match (bus, app_sig_match_blank, NULL);
-  dbus_connection_add_filter (bus, signal_handler, reg, NULL);
+  path = droute_add_one (droute,
+                         SPI_DBUS_PATH_REGISTRY,
+                         reg);
+
+  droute_path_add_interface (path,
+                             SPI_DBUS_INTERFACE_DEC,
+                             dev_methods,
+                             NULL);
 
   return reg;
 }
+
+/*END------------------------------------------------------------------------*/