gdm r6305 - in trunk: . gui/simple-greeter



Author: mccann
Date: Sun Jul 20 18:04:22 2008
New Revision: 6305
URL: http://svn.gnome.org/viewvc/gdm?rev=6305&view=rev

Log:
2008-07-20  William Jon McCann  <jmccann redhat com>

	* gui/simple-greeter/gdm-user-chooser-widget.c (add_user),
	(on_users_loaded), (on_user_added), (on_user_removed),
	(gdm_user_chooser_widget_init):
	* gui/simple-greeter/gdm-user-manager.c (ck_history_watch),
	(reload_users_timeout):
	* gui/simple-greeter/test-user-manager.c (on_users_loaded), (main):
	Set the initial user selection correctly.  Also avoid
	some flicker while reordering.



Modified:
   trunk/ChangeLog
   trunk/gui/simple-greeter/gdm-user-chooser-widget.c
   trunk/gui/simple-greeter/gdm-user-manager.c
   trunk/gui/simple-greeter/test-user-manager.c

Modified: trunk/gui/simple-greeter/gdm-user-chooser-widget.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-user-chooser-widget.c	(original)
+++ trunk/gui/simple-greeter/gdm-user-chooser-widget.c	Sun Jul 20 18:04:22 2008
@@ -61,10 +61,11 @@
         GdkPixbuf      *logged_in_pixbuf;
         GdkPixbuf      *stock_person_pixbuf;
 
+        guint           loaded : 1;
         guint           show_other_user : 1;
         guint           show_guest_user : 1;
         guint           show_auto_user : 1;
-	guint		show_normal_users : 1;
+        guint           show_normal_users : 1;
 };
 
 enum {
@@ -237,7 +238,7 @@
         }
 }
 
-static gboolean 
+static gboolean
 is_user_list_disabled (GdmUserChooserWidget *widget)
 {
         GConfClient *client;
@@ -272,7 +273,7 @@
         gdm_user_chooser_widget_set_show_auto_user (user_chooser_widget, FALSE);
         gdm_user_chooser_widget_set_show_other_user (user_chooser_widget, TRUE);
 
-	user_chooser_widget->priv->show_normal_users = !is_user_list_disabled (user_chooser_widget);
+        user_chooser_widget->priv->show_normal_users = !is_user_list_disabled (user_chooser_widget);
 
         return G_OBJECT (user_chooser_widget);
 }
@@ -414,24 +415,16 @@
 }
 
 static void
-on_users_loaded (GdmUserManager       *manager,
-                 GdmUserChooserWidget *widget)
-{
-        gdm_chooser_widget_activate_on_one_item (GDM_CHOOSER_WIDGET (widget),
-                                                 TRUE);
-}
-
-static void
-on_user_added (GdmUserManager       *manager,
-               GdmUser              *user,
-               GdmUserChooserWidget *widget)
+add_user (GdmUserChooserWidget *widget,
+          GdmUser              *user)
 {
         GdkPixbuf    *pixbuf;
         char         *tooltip;
         gboolean      is_logged_in;
 
-	if (!widget->priv->show_normal_users)
-		return;
+        if (!widget->priv->show_normal_users) {
+                return;
+        }
 
         pixbuf = gdm_user_render_icon (user, ICON_SIZE);
         if (pixbuf == NULL && widget->priv->stock_person_pixbuf != NULL) {
@@ -464,6 +457,38 @@
 }
 
 static void
+on_users_loaded (GdmUserManager       *manager,
+                 GdmUserChooserWidget *widget)
+{
+        GSList *users;
+
+        widget->priv->loaded = TRUE;
+
+        g_debug ("GdmUserChooserWidget: Users loaded");
+
+        users = gdm_user_manager_list_users (manager);
+        while (users != NULL) {
+                add_user (widget, users->data);
+                users = g_slist_delete_link (users, users);
+        }
+
+        gdm_chooser_widget_activate_on_one_item (GDM_CHOOSER_WIDGET (widget),
+                                                 TRUE);
+}
+
+static void
+on_user_added (GdmUserManager       *manager,
+               GdmUser              *user,
+               GdmUserChooserWidget *widget)
+{
+        /* wait for all users to be loaded */
+        if (! widget->priv->loaded) {
+                return;
+        }
+        add_user (widget, user);
+}
+
+static void
 on_user_removed (GdmUserManager       *manager,
                  GdmUser              *user,
                  GdmUserChooserWidget *widget)
@@ -471,6 +496,10 @@
         const char *user_name;
 
         g_debug ("GdmUserChooserWidget: User removed: %s", gdm_user_get_user_name (user));
+        /* wait for all users to be loaded */
+        if (! widget->priv->loaded) {
+                return;
+        }
 
         user_name = gdm_user_get_user_name (user);
 
@@ -526,10 +555,6 @@
 
         widget->priv->manager = gdm_user_manager_ref_default ();
         g_signal_connect (widget->priv->manager,
-                          "users-loaded",
-                          G_CALLBACK (on_users_loaded),
-                          widget);
-        g_signal_connect (widget->priv->manager,
                           "user-added",
                           G_CALLBACK (on_user_added),
                           widget);
@@ -538,6 +563,10 @@
                           G_CALLBACK (on_user_removed),
                           widget);
         g_signal_connect (widget->priv->manager,
+                          "users-loaded",
+                          G_CALLBACK (on_users_loaded),
+                          widget);
+        g_signal_connect (widget->priv->manager,
                           "user-is-logged-in-changed",
                           G_CALLBACK (on_user_is_logged_in_changed),
                           widget);

Modified: trunk/gui/simple-greeter/gdm-user-manager.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-user-manager.c	(original)
+++ trunk/gui/simple-greeter/gdm-user-manager.c	Sun Jul 20 18:04:22 2008
@@ -1188,6 +1188,8 @@
         }
 
         if (done) {
+                g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
+
                 manager->priv->ck_history_id = 0;
                 return FALSE;
         }
@@ -1378,7 +1380,6 @@
         reload_users (manager);
         manager->priv->reload_id = 0;
 
-        g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
         return FALSE;
 }
 

Modified: trunk/gui/simple-greeter/test-user-manager.c
==============================================================================
--- trunk/gui/simple-greeter/test-user-manager.c	(original)
+++ trunk/gui/simple-greeter/test-user-manager.c	Sun Jul 20 18:04:22 2008
@@ -35,6 +35,22 @@
 static GdmUserManager *manager = NULL;
 
 static void
+on_users_loaded (GdmUserManager *manager,
+                 gpointer        data)
+{
+        GSList *users;
+
+        g_debug ("Users loaded");
+
+        users = gdm_user_manager_list_users (manager);
+        while (users != NULL) {
+                g_print ("User: %s\n", gdm_user_get_user_name (users->data));
+                users = g_slist_delete_link (users, users);
+        }
+
+}
+
+static void
 on_user_added (GdmUserManager *manager,
                GdmUser        *user,
                gpointer        data)
@@ -64,6 +80,10 @@
 
         manager = gdm_user_manager_ref_default ();
         g_signal_connect (manager,
+                          "users-loaded",
+                          G_CALLBACK (on_users_loaded),
+                          NULL);
+        g_signal_connect (manager,
                           "user-added",
                           G_CALLBACK (on_user_added),
                           NULL);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]