[gdm] Add create_new_user function
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm] Add create_new_user function
- Date: Fri, 10 Sep 2010 17:37:02 +0000 (UTC)
commit 10d14fb3d057f5fa3ddecd43aaf68b73d1f68771
Author: Ray Strode <rstrode redhat com>
Date: Fri Sep 10 10:23:53 2010 -0400
Add create_new_user function
This function wraps g_object_new (GDM_TYPE_USER, NULL),
and sets up the signal handler to detect when the user is loaded.
This allows us to handle new users from pwent entries in the same
way we handle new users from object paths, via the
on_new_user_loaded function.
gui/simple-greeter/gdm-user-manager.c | 37 +++++++++++++++++++++++++--------
1 files changed, 28 insertions(+), 9 deletions(-)
---
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index eecf9dc..6964415 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -200,6 +200,10 @@ static void monitor_local_users (GdmUserManager *manager);
static void load_new_session_incrementally (GdmUserManagerNewSession *new_session);
static void set_is_loaded (GdmUserManager *manager, gboolean is_loaded);
+static void on_new_user_loaded (GdmUser *user,
+ GParamSpec *pspec,
+ GdmUserManager *manager);
+
static gpointer user_manager_object = NULL;
G_DEFINE_TYPE (GdmUserManager, gdm_user_manager, G_TYPE_OBJECT)
@@ -684,6 +688,27 @@ set_has_multiple_users (GdmUserManager *manager,
g_object_notify (G_OBJECT (manager), "has-multiple-users");
}
}
+static void
+on_new_user_destroyed (GdmUserManager *manager,
+ GdmUser *user)
+{
+ manager->priv->new_users = g_slist_remove (manager->priv->new_users, user);
+}
+
+static GdmUser *
+create_new_user (GdmUserManager *manager)
+{
+ GdmUser *user;
+
+ user = g_object_new (GDM_TYPE_USER, NULL);
+
+ manager->priv->new_users = g_slist_prepend (manager->priv->new_users, user);
+ g_object_weak_ref (G_OBJECT (user), (GWeakNotify) on_new_user_destroyed, manager);
+
+ g_signal_connect (user, "notify::is-loaded", G_CALLBACK (on_new_user_loaded), manager);
+
+ return user;
+}
static void
add_user (GdmUserManager *manager,
@@ -728,13 +753,9 @@ add_new_user_for_pwent (GdmUserManager *manager,
g_debug ("GdmUserManager: Creating new user from password entry: %s", pwent->pw_name);
- user = g_object_new (GDM_TYPE_USER, NULL);
+ user = create_new_user (manager);
_gdm_user_update_from_pwent (user, pwent);
- /* increases ref count */
- add_user (manager, user);
- g_object_unref (user);
-
return user;
}
@@ -777,6 +798,7 @@ on_new_user_loaded (GdmUser *user,
g_signal_handlers_disconnect_by_func (user, on_new_user_loaded, manager);
manager->priv->new_users = g_slist_remove (manager->priv->new_users,
user);
+ g_object_weak_unref (G_OBJECT (user), (GWeakNotify) on_new_user_destroyed, manager);
username = gdm_user_get_user_name (user);
@@ -830,12 +852,9 @@ add_new_user_for_object_path (const char *object_path,
if (user != NULL) {
return user;
}
- user = g_object_new (GDM_TYPE_USER, NULL);
+ user = create_new_user (manager);
_gdm_user_update_from_object_path (user, object_path);
- manager->priv->new_users = g_slist_prepend (manager->priv->new_users, user);
-
- g_signal_connect (user, "notify::is-loaded", G_CALLBACK (on_new_user_loaded), manager);
return user;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]