From 10439fdeb4f499c2cbad87221610c77d3ba0985c Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Mon, 23 Jun 2008 16:25:38 +0200 Subject: [PATCH] Make GetRegisteredApps return a string array. Now it works fine. --- src/mm-dbus-manager-info.xml | 7 ++-- src/mm-dbus-manager-main.c | 14 +++---- src/mm-dbus-manager.c | 92 +++++++++++++++++--------------------------- src/mm-dbus-manager.h | 6 ++- 4 files changed, 49 insertions(+), 70 deletions(-) diff --git a/src/mm-dbus-manager-info.xml b/src/mm-dbus-manager-info.xml index 6f4f83f..425e611 100644 --- a/src/mm-dbus-manager-info.xml +++ b/src/mm-dbus-manager-info.xml @@ -1,12 +1,11 @@ - + - - + - + diff --git a/src/mm-dbus-manager-main.c b/src/mm-dbus-manager-main.c index 38bb013..378e191 100644 --- a/src/mm-dbus-manager-main.c +++ b/src/mm-dbus-manager-main.c @@ -42,7 +42,7 @@ get_session_bus (void) connection = dbus_g_connection_get_connection (bus); dbus_connection_set_exit_on_disconnect (connection, FALSE); - + out: return bus; } @@ -50,13 +50,13 @@ out: static DBusGProxy * get_bus_proxy (DBusGConnection *connection) { - DBusGProxy *bus_proxy; + DBusGProxy *bus_proxy; - bus_proxy = dbus_g_proxy_new_for_name (connection, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - return bus_proxy; + bus_proxy = dbus_g_proxy_new_for_name (connection, + DBUS_SERVICE_DBUS, + DBUS_PATH_DBUS, + DBUS_INTERFACE_DBUS); + return bus_proxy; } static gboolean diff --git a/src/mm-dbus-manager.c b/src/mm-dbus-manager.c index 928375d..a4657b8 100644 --- a/src/mm-dbus-manager.c +++ b/src/mm-dbus-manager.c @@ -18,6 +18,7 @@ * Boston, MA 02111-1307, USA. */ +#include #include #include #include @@ -25,7 +26,7 @@ #include "mm-dbus-manager.h" gboolean mm_dbus_manager_register_app (MMDBusManager *manager, char *path, GError **error); -gboolean mm_dbus_manager_get_registered_apps (MMDBusManager *manager, GPtrArray **app_paths, +gboolean mm_dbus_manager_get_registered_apps (MMDBusManager *manager, char ***app_paths, GError **error); #include "mm-dbus-manager-server-bindings.h" @@ -34,8 +35,9 @@ gboolean mm_dbus_manager_get_registered_apps (MMDBusManager *manager, GPtrArray (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_TYPE_DBUS_MANAGER, MMDBusManagerDetails)) struct _MMDBusManagerDetails { - GPtrArray *application_paths; - DBusGProxy *bus_proxy; + GPtrArray *application_paths; + DBusGProxy *bus_proxy; + DBusGConnection *connection; }; G_DEFINE_TYPE (MMDBusManager, mm_dbus_manager, G_TYPE_OBJECT); @@ -57,58 +59,38 @@ static void mm_dbus_manager_class_init (MMDBusManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - GError *error = NULL; object_class->finalize = mm_dbus_manager_finalize; - /* get a connection to the session bus */ - klass->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - if (!klass->connection) { - g_warning ("Unable to connect to the session bus: %s", error->message); - g_error_free (error); - } else { - dbus_g_object_type_install_info (MM_TYPE_DBUS_MANAGER, - &dbus_glib_mm_dbus_manager_object_info); - } + dbus_g_object_type_install_info (MM_TYPE_DBUS_MANAGER, + &dbus_glib_mm_dbus_manager_object_info); + //dbus_g_error_domain_register (MM_DBUS_ERROR_QUARK, NULL, MM_DBUS_MANAGER_TYPE_ERROR); g_type_class_add_private (klass, sizeof (MMDBusManagerDetails)); } static void -bus_name_owner_changed (DBusGProxy *bus_proxy, - const char *service_name, - const char *old_service_name, - const char *new_service_name, - MMDBusManager *manager) -{ - g_debug ("bus name owner changed: serv name %s, old serv name %s, new serv name %s", - service_name, old_service_name, new_service_name); -} - -static void register_on_the_bus (MMDBusManager *manager) { - MMDBusManagerClass *klass = MM_DBUS_MANAGER_GET_CLASS (manager); - manager->details->bus_proxy = dbus_g_proxy_new_for_name (klass->connection, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - - dbus_g_proxy_add_signal (manager->details->bus_proxy, - "NameOwnerChanged", - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_INVALID); - dbus_g_proxy_connect_signal (manager->details->bus_proxy, - "NameOwnerChanged", - G_CALLBACK (bus_name_owner_changed), - manager, - NULL); + GError *error = NULL; + MMDBusManagerDetails *details = manager->details; + + details->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); + if (!details->connection) { + g_critical ("Error getting a connection to the session bus: %s", + error->message); + g_error_free (error); + exit (1); + } + + details->bus_proxy = dbus_g_proxy_new_for_name (details->connection, + DBUS_SERVICE_DBUS, + DBUS_PATH_DBUS, + DBUS_INTERFACE_DBUS); /* register the object */ - dbus_g_connection_register_g_object (klass->connection, - "/org/gnome/MediaManager/Manager", + dbus_g_connection_register_g_object (details->connection, + MM_DBUS_MANAGER_PATH, G_OBJECT (manager)); } @@ -128,7 +110,6 @@ mm_dbus_manager_register_app (MMDBusManager *manager, char *path, GError **error { g_return_val_if_fail (MM_IS_DBUS_MANAGER (manager), FALSE); - g_debug ("registrering app %s", path); if (path == NULL) { /* set the error, the path can't be NULL */ g_set_error (error, MM_DBUS_ERROR_QUARK, @@ -142,29 +123,26 @@ mm_dbus_manager_register_app (MMDBusManager *manager, char *path, GError **error return TRUE; } -static void -copy_to_new_array (char * path, - GPtrArray *new_array) -{ - g_print ("appending %s\n", path); - g_ptr_array_add (new_array, g_strdup (path)); -} - gboolean mm_dbus_manager_get_registered_apps (MMDBusManager *manager, - GPtrArray **app_paths, + char ***app_paths, GError **error) { + int index; + int size = manager->details->application_paths->len; g_return_val_if_fail (MM_IS_DBUS_MANAGER (manager), FALSE); if (app_paths == NULL) { - return FALSE; + return FALSE; } - *app_paths = g_ptr_array_new (); + *app_paths = g_new (gchar *, size + 1); + (*app_paths) [size] = NULL; - g_ptr_array_foreach (manager->details->application_paths, - (GFunc) copy_to_new_array, *app_paths); + for (index = 0; index < size; index++) { + (*app_paths) [index] = + g_strdup (g_ptr_array_index (manager->details->application_paths, index)); + } return TRUE; } diff --git a/src/mm-dbus-manager.h b/src/mm-dbus-manager.h index bf83f9e..247eab6 100644 --- a/src/mm-dbus-manager.h +++ b/src/mm-dbus-manager.h @@ -83,8 +83,11 @@ typedef struct _MMDBusManager MMDBusManager; typedef struct _MMDBusManagerClass MMDBusManagerClass; typedef struct _MMDBusManagerDetails MMDBusManagerDetails; -/* error handling */ +/* paths */ +#define MM_DBUS_PATH "/org/gnome/MediaManager" +#define MM_DBUS_MANAGER_PATH MM_DBUS_PATH "/Manager" +/* error handling */ #define MM_DBUS_ERROR_QUARK g_quark_from_static_string ("MMDBusManager") typedef enum { @@ -99,7 +102,6 @@ struct _MMDBusManager { struct _MMDBusManagerClass { GObjectClass parent_class; - DBusGConnection *connection; }; /* public methods */ -- 2.11.4.GIT