[accounts-dialog/gdbus: 4/5] Continue porting to GDBus
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [accounts-dialog/gdbus: 4/5] Continue porting to GDBus
- Date: Fri, 23 Jul 2010 01:05:50 +0000 (UTC)
commit 434db36810fdd13b83c0150a0c0a9a9cdb53473a
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Jul 22 20:58:59 2010 -0400
Continue porting to GDBus
src/um-login-options.c | 4 +-
src/um-user-manager.c | 597 ++++++++++++++++++++++++++----------------------
src/um-user-manager.h | 25 +--
src/um-user-panel.c | 6 +-
4 files changed, 336 insertions(+), 296 deletions(-)
---
diff --git a/src/um-login-options.c b/src/um-login-options.c
index 76db545..7a9b636 100644
--- a/src/um-login-options.c
+++ b/src/um-login-options.c
@@ -111,7 +111,7 @@ user_added (UmUserManager *um, UmUser *user, UmLoginOptions *d)
}
static void
-user_removed (UmUserManager *um, UmUser *user, UmLoginOptions *d)
+user_deleted (UmUserManager *um, UmUser *user, UmLoginOptions *d)
{
GtkComboBox *combo;
GtkTreeModel *model;
@@ -174,7 +174,7 @@ users_loaded (UmUserManager *manager,
g_slist_free (list);
g_signal_connect (manager, "user-added", G_CALLBACK (user_added), d);
- g_signal_connect (manager, "user-removed", G_CALLBACK (user_removed), d);
+ g_signal_connect (manager, "user-deleted", G_CALLBACK (user_deleted), d);
g_signal_connect (manager, "user-changed", G_CALLBACK (user_changed), d);
}
diff --git a/src/um-user-manager.c b/src/um-user-manager.c
index 1e39018..0493b46 100644
--- a/src/um-user-manager.c
+++ b/src/um-user-manager.c
@@ -44,32 +44,269 @@
#include "um-user-manager.h"
+static const gchar introspection_xml[] =
+ "<node>"
+ " <interface name='org.freedesktop.Accounts'>"
+ " <method name='ListCachedUsers'>"
+ " <arg name='users' direction='out' type='ao'/>"
+ " </method>"
+ " <method name='FindUserById'>"
+ " <arg name='id' direction='in' type='x'/>"
+ " <arg name='user' direction='out' type='o'/>"
+ " </method>"
+ " <method name='FindUserByName'>"
+ " <arg name='name' direction='in' type='s'/>"
+ " <arg name='user' direction='out' type='o'/>"
+ " </method>"
+ " <method name='CreateUser'>"
+ " <arg name='name' direction='in' type='s'/>"
+ " <arg name='fullname' direction='in' type='s'/>"
+ " <arg name='accountType' direction='in' type='i'/>"
+ " <arg name='user' direction='out' type='o'/>"
+ " </method>"
+ " <method name='DeleteUser'>"
+ " <arg name='id' direction='in' type='x'/>"
+ " <arg name='removeFiles' direction='in' type='b'/>"
+ " </method>"
+ " <signal name='UserAdded'>"
+ " <arg name='user' type='o'/>"
+ " </signal>"
+ " <signal name='UserDeleted'>"
+ " <arg name='user' type='o'/>"
+ " </signal>"
+ " <property name='DaemonVersion' type='s' access='read'/>"
+ " </interface>"
+ "</node>";
+
+struct _UmUserManager
+{
+ GDBusProxy parent;
+
+ GHashTable *user_by_object_path;
+ GHashTable *user_by_name;
+
+ gboolean no_service;
+};
+
+static GDBusInterfaceInfo *
+um_user_manager_get_interface_info (void)
+{
+ static gsize has_info = 0;
+ static GDBusInterfaceInfo *info = NULL;
+ if (g_once_init_enter (&has_info)) {
+ GDBusNodeInfo *introspection_data;
+ introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
+ info = introspection_data->interfaces[0];
+ g_once_init_leave (&has_info, 1);
+ }
+ return info;
+}
+
+enum {
+ PROP_0,
+ PROP_DAEMON_VERSION
+};
+
enum {
USERS_LOADED,
USER_ADDED,
- USER_REMOVED,
+ USER_DELETED,
USER_CHANGED,
LAST_SIGNAL
};
static guint signals [LAST_SIGNAL] = { 0, };
-static void um_user_manager_class_init (UmUserManagerClass *klass);
-static void um_user_manager_init (UmUserManager *user_manager);
-static void um_user_manager_finalize (GObject *object);
-
static gpointer user_manager_object = NULL;
-G_DEFINE_TYPE (UmUserManager, um_user_manager, G_TYPE_OBJECT)
+G_DEFINE_TYPE (UmUserManager, um_user_manager, G_TYPE_DBUS_PROXY)
+
+static void add_user_to_dupe_ring (UmUserManager *manager, UmUser *user);
+static void remove_user_from_dupe_ring (UmUserManager *manager, UmUser *user);
+static void clear_dup (gpointer key, gpointer value, gpointer data);
+static void load_users (UmUserManager *manager);
+
+static void
+um_user_manager_finalize (GObject *object)
+{
+ UmUserManager *manager;
+
+ manager = UM_USER_MANAGER (object);
+
+ g_hash_table_foreach (manager->user_by_object_path, clear_dup, NULL);
+ g_hash_table_destroy (manager->user_by_object_path);
+ g_hash_table_destroy (manager->user_by_name);
+
+ G_OBJECT_CLASS (um_user_manager_parent_class)->finalize (object);
+}
+
+static void
+um_user_manager_init (UmUserManager *manager)
+{
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (manager),
+ um_user_manager_get_interface_info ());
+
+ manager->user_by_object_path = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_object_unref);
+
+ manager->user_by_name = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_object_unref);
+
+ load_users (manager);
+}
+
+static void
+um_user_manager_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ UmUserManager *um = UM_USER_MANAGER (object);
+
+ switch (prop_id) {
+ case PROP_DAEMON_VERSION:
+ g_value_set_string (value, um_user_manager_get_daemon_version (um));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+const gchar *
+um_user_manager_get_daemon_version (UmUserManager *um)
+{
+ GVariant *value;
+ const gchar *ret;
+
+ g_return_val_if_fail (UM_IS_USER_MANAGER (um), NULL);
+
+ value = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (um), "DaemonVersion");
+ ret = g_variant_get_string (value, NULL);
+ g_variant_unref (value);
+
+ return ret;
+}
+
+static void
+user_changed_handler (UmUser *user,
+ UmUserManager *manager)
+{
+ remove_user_from_dupe_ring (manager, user);
+ add_user_to_dupe_ring (manager, user);
+ g_signal_emit (manager, signals[USER_CHANGED], 0, user);
+}
+
+static void
+user_added_handler (UmUserManager *manager, const gchar *object_path)
+{
+ UmUser *user;
+
+ if (g_hash_table_lookup (manager->user_by_object_path, object_path))
+ return;
+
+ user = um_user_new_from_object_path (object_path);
+ if (!user)
+ return;
+
+ add_user_to_dupe_ring (manager, user);
+
+ g_signal_connect (user, "changed",
+ G_CALLBACK (user_changed_handler), manager);
+
+ g_hash_table_insert (manager->user_by_object_path,
+ g_strdup (object_path),
+ g_object_ref (user));
+ g_hash_table_insert (manager->user_by_name,
+ g_strdup (um_user_get_user_name (user)),
+ g_object_ref (user));
+
+ g_signal_emit (manager, signals[USER_ADDED], 0, user);
+
+ g_object_unref (user);
+}
+
+static void
+user_deleted_handler (UmUserManager *manager, const gchar *object_path)
+{
+ UmUser *user;
+
+ user = g_hash_table_lookup (manager->user_by_object_path, object_path);
+ g_object_ref (user);
+ g_signal_handlers_disconnect_by_func (user, user_changed_handler, manager);
+
+ remove_user_from_dupe_ring (manager, user);
+
+ g_hash_table_remove (manager->user_by_object_path, object_path);
+ g_hash_table_remove (manager->user_by_name, um_user_get_user_name (user));
+
+ g_signal_emit (manager, signals[USER_DELETED], 0, user);
+
+ g_object_unref (user);
+}
+
+static void
+um_user_manager_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ UmUserManager *um = UM_USER_MANAGER (proxy);
+ const gchar *object_path;
+
+ if (g_strcmp0 (signal_name, "UserAdded") == 0) {
+ object_path = g_variant_get_string (parameters, NULL);
+ user_added_handler (um, object_path);
+ }
+ else if (g_strcmp0 (signal_name, "UserDeleted") == 0) {
+ object_path = g_variant_get_string (parameters, NULL);
+ user_deleted_handler (um, object_path);
+ }
+}
+
+static void
+um_user_manager_g_properties_changed (GDBusProxy *proxy,
+ GVariant *changed_properties,
+ const gchar* const *invalidated_properties)
+{
+ UmUserManager *um = UM_USER_MANAGER (proxy);
+ GVariantIter *iter;
+ const gchar *key;
+
+ if (changed_properties != NULL) {
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL)) {
+ if (g_strcmp0 (key, "DaemonVersion") == 0)
+ g_object_notify (G_OBJECT (um), "daemon-version");
+ }
+ g_variant_iter_free (iter);
+ }
+}
static void
um_user_manager_class_init (UmUserManagerClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class;
+ GDBusProxyClass *proxy_class;
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->get_property = um_user_manager_get_property;
object_class->finalize = um_user_manager_finalize;
- signals [USERS_LOADED] =
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = um_user_manager_g_signal;
+ proxy_class->g_properties_changed = um_user_manager_g_properties_changed;
+
+ g_object_class_install_property (object_class, PROP_DAEMON_VERSION,
+ g_param_spec_string ("daemon-version", "Daemon version", "Daemon version",
+ NULL, G_PARAM_READABLE));
+
+ signals [USERS_LOADED] =
g_signal_new ("users-loaded",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
@@ -86,14 +323,16 @@ um_user_manager_class_init (UmUserManagerClass *klass)
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, UM_TYPE_USER);
- signals [USER_REMOVED] =
- g_signal_new ("user-removed",
+
+ signals [USER_DELETED] =
+ g_signal_new ("user-deleted",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (UmUserManagerClass, user_removed),
+ G_STRUCT_OFFSET (UmUserManagerClass, user_deleted),
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, UM_TYPE_USER);
+
signals [USER_CHANGED] =
g_signal_new ("user-changed",
G_TYPE_FROM_CLASS (klass),
@@ -102,6 +341,7 @@ um_user_manager_class_init (UmUserManagerClass *klass)
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, UM_TYPE_USER);
+
}
@@ -183,176 +423,62 @@ add_user_to_dupe_ring (UmUserManager *manager,
}
static void
-user_changed_handler (UmUser *user,
- UmUserManager *manager)
-{
- remove_user_from_dupe_ring (manager, user);
- add_user_to_dupe_ring (manager, user);
- g_signal_emit (manager, signals[USER_CHANGED], 0, user);
-}
-
-static void
-user_added_handler (DBusGProxy *proxy,
- const char *object_path,
- gpointer user_data)
-{
- UmUserManager *manager = UM_USER_MANAGER (user_data);
- UmUser *user;
-
- if (g_hash_table_lookup (manager->user_by_object_path, object_path))
- return;
-
- user = um_user_new_from_object_path (object_path);
- if (!user)
- return;
-
- add_user_to_dupe_ring (manager, user);
-
- g_signal_connect (user, "changed",
- G_CALLBACK (user_changed_handler), manager);
- g_hash_table_insert (manager->user_by_object_path, g_strdup (um_user_get_object_path (user)), g_object_ref (user));
- g_hash_table_insert (manager->user_by_name, g_strdup (um_user_get_user_name (user)), g_object_ref (user));
-
- g_signal_emit (manager, signals[USER_ADDED], 0, user);
- g_object_unref (user);
-}
-
-static void
-user_deleted_handler (DBusGProxy *proxy,
- const char *object_path,
- gpointer user_data)
+clear_dup (gpointer key,
+ gpointer value,
+ gpointer data)
{
- UmUserManager *manager = UM_USER_MANAGER (user_data);
- UmUser *user;
-
- user = g_hash_table_lookup (manager->user_by_object_path, object_path);
- g_object_ref (user);
- g_signal_handlers_disconnect_by_func (user, user_changed_handler, manager);
-
- remove_user_from_dupe_ring (manager, user);
+ GList *dupes;
- g_hash_table_remove (manager->user_by_object_path, um_user_get_object_path (user));
- g_hash_table_remove (manager->user_by_name, um_user_get_user_name (user));
- g_signal_emit (manager, signals[USER_REMOVED], 0, user);
- g_object_unref (user);
-}
+ /* don't bother maintaining the ring, we're destroying the
+ * entire hash table anyway
+ */
+ dupes = g_object_get_data (G_OBJECT (value), "dupes");
-static void
-add_user (const gchar *object_path,
- UmUserManager *manager)
-{
- user_added_handler (NULL, object_path, manager);
+ if (dupes) {
+ g_list_free_1 (dupes);
+ g_object_set_data (G_OBJECT (value), "dupes", NULL);
+ }
}
static void
-got_users (DBusGProxy *proxy,
- DBusGProxyCall *call_id,
- gpointer data)
+load_users_done (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
{
- UmUserManager *manager = data;
+ UmUserManager *manager = user_data;
GError *error = NULL;
- GPtrArray *paths;
+ GVariant *ret;
+ GVariantIter iter;
+ const gchar *object_path;
- if (!dbus_g_proxy_end_call (proxy,
- call_id,
- &error,
- dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &paths,
- G_TYPE_INVALID)) {
+ ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (manager), res, &error);
+ if (ret == NULL) {
manager->no_service = TRUE;
g_error_free (error);
goto done;
}
- g_ptr_array_foreach (paths, (GFunc)add_user, manager);
+ g_variant_iter_init (&iter, ret);
+ while (g_variant_iter_loop (&iter, "ao", &object_path)) {
+ user_added_handler (manager, object_path);
+ }
- g_ptr_array_foreach (paths, (GFunc)g_free, NULL);
- g_ptr_array_free (paths, TRUE);
+ g_variant_unref (ret);
done:
g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
}
static void
-get_users (UmUserManager *manager)
+load_users (UmUserManager *manager)
{
g_debug ("calling 'ListCachedUsers'");
- dbus_g_proxy_begin_call (manager->proxy,
- "ListCachedUsers",
- got_users,
- manager,
- NULL,
- G_TYPE_INVALID);
-}
-
-static void
-um_user_manager_init (UmUserManager *manager)
-{
- GError *error = NULL;
-
- manager->user_by_object_path = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- g_object_unref);
- manager->user_by_name = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- g_object_unref);
-
- manager->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (manager->bus == NULL) {
- g_warning ("Couldn't connect to system bus: %s", error->message);
- g_error_free (error);
- goto error;
- }
-
- manager->proxy = dbus_g_proxy_new_for_name (manager->bus,
- "org.freedesktop.Accounts",
- "/org/freedesktop/Accounts",
- "org.freedesktop.Accounts");
-
- dbus_g_proxy_add_signal (manager->proxy, "UserAdded", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
- dbus_g_proxy_add_signal (manager->proxy, "UserDeleted", DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (manager->proxy, "UserAdded",
- G_CALLBACK (user_added_handler), manager, NULL);
- dbus_g_proxy_connect_signal (manager->proxy, "UserDeleted",
- G_CALLBACK (user_deleted_handler), manager, NULL);
-
- get_users (manager);
-
- error: ;
-}
-
-static void
-clear_dup (gpointer key,
- gpointer value,
- gpointer data)
-{
- GList *dupes;
-
- /* don't bother maintaining the ring, we're destroying the
- * entire hash table anyway
- */
- dupes = g_object_get_data (G_OBJECT (value), "dupes");
-
- if (dupes) {
- g_list_free_1 (dupes);
- g_object_set_data (G_OBJECT (value), "dupes", NULL);
- }
-}
-
-static void
-um_user_manager_finalize (GObject *object)
-{
- UmUserManager *manager;
-
- manager = UM_USER_MANAGER (object);
-
- g_hash_table_foreach (manager->user_by_object_path, clear_dup, NULL);
- g_hash_table_destroy (manager->user_by_object_path);
- g_hash_table_destroy (manager->user_by_name);
-
- G_OBJECT_CLASS (um_user_manager_parent_class)->finalize (object);
+ g_dbus_proxy_call (G_DBUS_PROXY (manager),
+ "ListCachedUsers",
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL,
+ load_users_done, manager);
}
UmUserManager *
@@ -361,7 +487,12 @@ um_user_manager_ref_default (void)
if (user_manager_object != NULL) {
g_object_ref (user_manager_object);
} else {
- user_manager_object = g_object_new (UM_TYPE_USER_MANAGER, NULL);
+ user_manager_object = g_object_new (UM_TYPE_USER_MANAGER,
+ "g-bus-type", G_BUS_TYPE_SYSTEM,
+ "g-name", "org.freedesktop.Accounts",
+ "g-object-path", "/org/freedesktop/Accounts",
+ "g-interface-name", "org.freedesktop.Accounts",
+ NULL);
g_object_add_weak_pointer (user_manager_object,
(gpointer *) &user_manager_object);
}
@@ -383,63 +514,21 @@ async_user_op_data_free (gpointer d)
AsyncUserOpData *data = d;
g_object_unref (data->manager);
-
g_free (data->user_name);
-
if (data->destroy)
data->destroy (data->data);
-
g_free (data);
}
static void
-create_user_done (DBusGProxy *proxy,
- DBusGProxyCall *call_id,
- gpointer user_data)
+async_user_op_done (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
{
AsyncUserOpData *data = user_data;
- gchar *path;
- GError *error;
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (data->manager),
- data->callback,
- data->data,
- um_user_manager_create_user);
- error = NULL;
- if (!dbus_g_proxy_end_call (proxy,
- call_id,
- &error,
- DBUS_TYPE_G_OBJECT_PATH, &path,
- G_TYPE_INVALID)) {
- /* dbus-glib fail:
- * We have to translate the errors manually here, since
- * calling dbus_g_error_has_name on the error returned in
- * um_user_manager_create_user_finish doesn't work.
- */
- if (dbus_g_error_has_name (error, "org.freedesktop.Accounts.Error.PermissionDenied")) {
- g_simple_async_result_set_error (res,
- UM_USER_MANAGER_ERROR,
- UM_USER_MANAGER_ERROR_PERMISSION_DENIED,
- "Not authorized");
- }
- else if (dbus_g_error_has_name (error, "org.freedesktop.Accounts.Error.UserExists")) {
- g_simple_async_result_set_error (res,
- UM_USER_MANAGER_ERROR,
- UM_USER_MANAGER_ERROR_USER_EXISTS,
- _("A user with name '%s' already exists."),
- data->user_name);
- }
- else {
- g_simple_async_result_set_from_error (res, error);
- }
- g_error_free (error);
- }
- else {
- g_simple_async_result_set_op_res_gpointer (res, path, g_free);
- }
- data->callback (G_OBJECT (data->manager), G_ASYNC_RESULT (res), data->data);
+ data->callback (G_OBJECT (data->manager), res, data->data);
+ async_user_op_data_free (data);
}
gboolean
@@ -448,19 +537,18 @@ um_user_manager_create_user_finish (UmUserManager *manager,
UmUser **user,
GError **error)
{
- gchar *path;
- GSimpleAsyncResult *res;
-
- res = G_SIMPLE_ASYNC_RESULT (result);
+ GVariant *ret;
+ const gchar *path;
*user = NULL;
- if (g_simple_async_result_propagate_error (res, error)) {
+ ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (manager), result, error);
+ if (ret == NULL)
return FALSE;
- }
- path = g_simple_async_result_get_op_res_gpointer (res);
+ path = g_variant_get_string (ret, NULL);
*user = g_hash_table_lookup (manager->user_by_object_path, path);
+ g_variant_unref (ret);
return TRUE;
}
@@ -483,54 +571,15 @@ um_user_manager_create_user (UmUserManager *manager,
data->data = done_data;
data->destroy = destroy;
- dbus_g_proxy_begin_call (manager->proxy,
- "CreateUser",
- create_user_done,
- data,
- async_user_op_data_free,
- G_TYPE_STRING, user_name,
- G_TYPE_STRING, real_name,
- G_TYPE_INT, account_type,
- G_TYPE_INVALID);
-}
-
-static void
-delete_user_done (DBusGProxy *proxy,
- DBusGProxyCall *call_id,
- gpointer user_data)
-{
- AsyncUserOpData *data = user_data;
- GError *error;
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (data->manager),
- data->callback,
- data->data,
- um_user_manager_delete_user);
- error = NULL;
- if (!dbus_g_proxy_end_call (proxy,
- call_id,
- &error,
- G_TYPE_INVALID)) {
- if (dbus_g_error_has_name (error, "org.freedesktop.Accounts.Error.PermissionDenied")) {
- g_simple_async_result_set_error (res,
- UM_USER_MANAGER_ERROR,
- UM_USER_MANAGER_ERROR_PERMISSION_DENIED,
- "Not authorized");
- }
- else if (dbus_g_error_has_name (error, "org.freedesktop.Accounts.Error.UserDoesntExists")) {
- g_simple_async_result_set_error (res,
- UM_USER_MANAGER_ERROR,
- UM_USER_MANAGER_ERROR_USER_DOES_NOT_EXIST,
- _("This user does not exist."));
- }
- else {
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
- }
- }
-
- data->callback (G_OBJECT (data->manager), G_ASYNC_RESULT (res), data->data);
+ g_dbus_proxy_call (G_DBUS_PROXY (manager),
+ "CreateUser",
+ g_variant_new ("(ssi)",
+ user_name,
+ real_name,
+ account_type),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL,
+ async_user_op_done, data);
}
gboolean
@@ -538,13 +587,13 @@ um_user_manager_delete_user_finish (UmUserManager *manager,
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *res;
-
- res = G_SIMPLE_ASYNC_RESULT (result);
+ GVariant *ret;
- if (g_simple_async_result_propagate_error (res, error)) {
+ ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (manager), result, error);
+ if (ret == NULL)
return FALSE;
- }
+
+ g_variant_unref (ret);
return TRUE;
}
@@ -565,14 +614,14 @@ um_user_manager_delete_user (UmUserManager *manager,
data->data = done_data;
data->destroy = destroy;
- dbus_g_proxy_begin_call (manager->proxy,
- "DeleteUser",
- delete_user_done,
- data,
- async_user_op_data_free,
- G_TYPE_INT64, um_user_get_uid (user),
- G_TYPE_BOOLEAN, remove_files,
- G_TYPE_INVALID);
+ g_dbus_proxy_call (G_DBUS_PROXY (manager),
+ "DeleteUser",
+ g_variant_new ("(tb)",
+ um_user_get_uid (user),
+ remove_files),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL,
+ async_user_op_done, data);
}
GSList *
diff --git a/src/um-user-manager.h b/src/um-user-manager.h
index b051a88..bc13a12 100644
--- a/src/um-user-manager.h
+++ b/src/um-user-manager.h
@@ -23,7 +23,6 @@
#include <glib-object.h>
#include <gio/gio.h>
-#include <dbus/dbus-glib.h>
#include "um-user.h"
@@ -36,31 +35,21 @@ G_BEGIN_DECLS
#define UM_IS_USER_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), UM_TYPE_USER_MANAGER))
#define UM_USER_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), UM_TYPE_USER_MANAGER, UmUserManagerClass))
-typedef struct
-{
- GObject parent;
+typedef struct _UmUserManager UmUserManager;
+typedef struct _UmUserManagerClass UmUserManagerClass;
- DBusGConnection *bus;
- DBusGProxy *proxy;
- GHashTable *user_by_object_path;
- GHashTable *user_by_name;
-
- gboolean no_service;
-} UmUserManager;
-
-typedef struct
-{
- GObjectClass parent_class;
+struct _UmUserManagerClass {
+ GDBusProxyClass parent_class;
void (* users_loaded) (UmUserManager *user_managaer);
void (* user_added) (UmUserManager *user_manager,
UmUser *user);
- void (* user_removed) (UmUserManager *user_manager,
+ void (* user_deleted) (UmUserManager *user_manager,
UmUser *user);
void (* user_changed) (UmUserManager *user_manager,
UmUser *user);
-} UmUserManagerClass;
+};
typedef enum {
@@ -107,6 +96,8 @@ gboolean um_user_manager_delete_user_finish (UmUserManager *m
GAsyncResult *result,
GError **error);
+const gchar *um_user_manager_get_daemon_version (UmUserManager *manager);
+
G_END_DECLS
#endif /* __UM_USER_MANAGER__ */
diff --git a/src/um-user-panel.c b/src/um-user-panel.c
index 03efb16..024c4df 100644
--- a/src/um-user-panel.c
+++ b/src/um-user-panel.c
@@ -207,7 +207,7 @@ get_next_user_row (GtkTreeModel *model,
}
static void
-user_removed (UmUserManager *um, UmUser *user, UmUserPanelPrivate *d)
+user_deleted (UmUserManager *um, UmUser *user, UmUserPanelPrivate *d)
{
GtkTreeView *tv;
GtkTreeModel *model;
@@ -216,7 +216,7 @@ user_removed (UmUserManager *um, UmUser *user, UmUserPanelPrivate *d)
GtkTreeIter iter, next;
UmUser *u;
- g_debug ("user removed: %s\n", um_user_get_user_name (user));
+ g_debug ("user deleted: %s\n", um_user_get_user_name (user));
tv = (GtkTreeView *)get_widget (d, "list-treeview");
selection = gtk_tree_view_get_selection (tv);
model = gtk_tree_view_get_model (tv);
@@ -832,7 +832,7 @@ users_loaded (UmUserManager *manager,
g_slist_free (list);
g_signal_connect (d->um, "user-added", G_CALLBACK (user_added), d);
- g_signal_connect (d->um, "user-removed", G_CALLBACK (user_removed), d);
+ g_signal_connect (d->um, "user-deleted", G_CALLBACK (user_deleted), d);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]