diff options
Diffstat (limited to 'src/users-service-dbus.c')
-rw-r--r-- | src/users-service-dbus.c | 87 |
1 files changed, 18 insertions, 69 deletions
diff --git a/src/users-service-dbus.c b/src/users-service-dbus.c index e05eaf5..4aefdff 100644 --- a/src/users-service-dbus.c +++ b/src/users-service-dbus.c @@ -1,3 +1,4 @@ +/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */ /* * Copyright 2009 Canonical Ltd. * @@ -33,6 +34,7 @@ #include "users-service-dbus.h" #include "users-service-client.h" #include "users-service-marshal.h" +#include "consolekit-manager-client.h" static void users_service_dbus_class_init (UsersServiceDbusClass *klass); static void users_service_dbus_init (UsersServiceDbus *self); @@ -183,7 +185,8 @@ users_service_dbus_init (UsersServiceDbus *self) create_ck_proxy (self); create_seat_proxy (self); - users_loaded (priv->gdm_proxy, self); + if (priv->gdm_proxy) + users_loaded (priv->gdm_proxy, self); } static void @@ -214,7 +217,7 @@ create_gdm_proxy (UsersServiceDbus *self) { if (error != NULL) { - g_error ("Unable to get DisplayManager proxy on system bus: %s", error->message); + g_warning ("Unable to get DisplayManager proxy on system bus: %s", error->message); g_error_free (error); } @@ -443,37 +446,6 @@ get_unix_user (UsersServiceDbus *service, return TRUE; } -static gchar * -get_session_for_user (UsersServiceDbus *service, - UserData *user) -{ - GList *l; - - if (!users_service_dbus_can_activate_session (service)) - { - return NULL; - } - - if (!user->sessions || g_list_length (user->sessions) == 0) - { - return NULL; - } - - for (l = user->sessions; l != NULL; l = l->next) - { - const char *ssid; - - ssid = l->data; - - if (ssid) - { - return g_strdup (ssid); - } - } - - return NULL; -} - static gboolean do_add_session (UsersServiceDbus *service, UserData *user, @@ -538,14 +510,7 @@ add_sessions_for_user (UsersServiceDbus *self, int i; error = NULL; - if (!dbus_g_proxy_call (priv->ck_proxy, - "GetSessionsForUnixUser", - &error, - G_TYPE_UINT, user->uid, - G_TYPE_INVALID, - dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), - &sessions, - G_TYPE_INVALID)) + if (!org_freedesktop_ConsoleKit_Manager_get_sessions_for_unix_user(priv->ck_proxy, user->uid, &sessions, &error)) { g_debug ("Failed to call GetSessionsForUnixUser: %s", error->message); g_error_free (error); @@ -691,6 +656,7 @@ sync_users (UsersServiceDbus *self) user->shell = g_strdup (g_value_get_string (g_value_array_get_nth (values, 3))); user->login_count = g_value_get_int (g_value_array_get_nth (values, 4)); user->icon_url = g_strdup (g_value_get_string (g_value_array_get_nth (values, 5))); + user->real_name_conflict = FALSE; g_hash_table_insert (priv->users, g_strdup (user->user_name), @@ -710,6 +676,8 @@ users_loaded (DBusGProxy *proxy, GError *error = NULL; gint count; + g_return_if_fail (proxy != NULL); + service = (UsersServiceDbus *)user_data; priv = USERS_SERVICE_DBUS_GET_PRIVATE (service); @@ -890,6 +858,8 @@ gboolean start_new_user_session (UsersServiceDbus *self, UserData *user) { + g_return_val_if_fail (IS_USERS_SERVICE_DBUS (self), FALSE); + UsersServiceDbusPrivate *priv = USERS_SERVICE_DBUS_GET_PRIVATE (self); GError *error = NULL; char *ssid; @@ -1035,17 +1005,6 @@ users_service_dbus_get_user_list (UsersServiceDbus *self) return g_hash_table_get_values (priv->users); } -/* - * XXX - TODO: Right now we switch to a session that another user - * already has open, but if there are no open sessions - * for this user we go to the login screen and the - * user at the seat must select a user and enter a - * password. This kind of defeats the purpose of - * actually selecting a username, since selecting any - * user will do the same thing here. We need to change - * it so you only need to enter a password for the - * specified user. - */ gboolean users_service_dbus_activate_user_session (UsersServiceDbus *self, UserData *user) @@ -1054,32 +1013,20 @@ users_service_dbus_activate_user_session (UsersServiceDbus *self, DBusMessage *message = NULL; DBusMessage *reply = NULL; DBusError error; - gchar *ssid; dbus_error_init (&error); - if (!priv->seat) - priv->seat = get_seat (self); - - ssid = get_session_for_user (self, user); - - if (!ssid) - { - return start_new_user_session (self, user); - } - - if (!(message = dbus_message_new_method_call ("org.freedesktop.ConsoleKit", - priv->seat, - "org.freedesktop.ConsoleKit.Seat", - "ActivateSession"))) + if (!(message = dbus_message_new_method_call ("org.gnome.DisplayManager", + "/org/gnome/DisplayManager/LocalDisplayFactory", + "org.gnome.DisplayManager.LocalDisplayFactory", + "SwitchToUser"))) { g_warning ("failed to create new message"); return FALSE; } if (!dbus_message_append_args (message, - DBUS_TYPE_OBJECT_PATH, - &ssid, + DBUS_TYPE_STRING, &user->user_name, DBUS_TYPE_INVALID)) { g_warning ("failed to append args"); @@ -1110,6 +1057,8 @@ users_service_dbus_activate_user_session (UsersServiceDbus *self, dbus_message_unref (reply); } + dbus_error_free (&error); + return TRUE; } |