+add_application (DBusConnection *bus, SpiRegistry *reg, gchar *app)
+{
+ guint add = REGISTRY_APPLICATION_ADD;
+
+ if (seq_add_string (reg->apps, app))
+ {
+ emit (reg,
+ SPI_DBUS_INTERFACE_REGISTRY,
+ "updateApplications",
+ DBUS_TYPE_INT32,
+ &add,
+ DBUS_TYPE_STRING,
+ &app,
+ DBUS_TYPE_INVALID);
+ }
+}
+
+static void
+remove_application (DBusConnection *bus, SpiRegistry *reg, gchar *app)
+{
+ guint remove = REGISTRY_APPLICATION_REMOVE;
+
+ if (seq_remove_string (reg->apps, app))
+ {
+ /*TODO spi_remove_device_listeners (registry->de_controller, old);*/
+ emit (reg,
+ SPI_DBUS_INTERFACE_REGISTRY,
+ "updateApplications",
+ DBUS_TYPE_INT32,
+ &remove,
+ DBUS_TYPE_STRING,
+ &app,
+ DBUS_TYPE_INVALID);
+ }
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void
+add_bus_name_cb (gpointer item, gpointer data)
+{
+ DBusMessageIter *iter_array = (DBusMessageIter *) data;
+
+ dbus_message_iter_append_basic (iter_array, DBUS_TYPE_STRING, (gchar **) &item);
+}
+
+static DBusMessage *
+impl_getApplications (DBusConnection *bus, DBusMessage *message, void *user_data)
+{
+ DBusMessage *reply;
+ DBusMessageIter iter, iter_array;
+ SpiRegistry *reg = SPI_REGISTRY (user_data);
+
+ reply = dbus_message_new_method_return (message);
+
+ dbus_message_iter_init_append (reply, &iter);
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &iter_array);
+ g_sequence_foreach (reg->apps, add_bus_name_cb, &iter_array);
+ dbus_message_iter_close_container(&iter, &iter_array);
+ return reply;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void
+impl_registerApplication (DBusConnection *bus, DBusMessage *message, void *user_data)