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



Author: halfline
Date: Mon Apr 21 20:47:31 2008
New Revision: 6165
URL: http://svn.gnome.org/viewvc/gdm?rev=6165&view=rev

Log:
2008-04-21  Ray Strode  <rstrode redhat com>

	* gui/simple-greeter/gdm-user-manager.[hc]:
	(reload_users_timeout), (queue_reload_users),
	(gdm_user_manager_class_init): Add two new signals
	"users-loaded" and "loading-users" to signify when
	the user manager is doing its initial run through
	of available users
	* gui/simple-greeter/gdm-user-chooser-widget.c:
	(on_users_loaded), (gdm_user_chooser_widget_init)
	* gui/simple-greeter/gdm-chooser-widget.c:
	(get_first_item), (activate_if_one_item),
	(gdm_chooser_widget_add_item), (gdm_chooser_widget_remove_item),
	(gdm_chooser_widget_get_number_of_items),
	(gdm_chooser_widget_activate_on_one_item):
	Activate the "Other..." user automatically if it's the only
	available user


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

Modified: trunk/gui/simple-greeter/gdm-chooser-widget.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-chooser-widget.c	(original)
+++ trunk/gui/simple-greeter/gdm-chooser-widget.c	Mon Apr 21 20:47:31 2008
@@ -28,6 +28,7 @@
 #include <errno.h>
 #include <dirent.h>
 #include <sys/stat.h>
+#include <syslog.h>
 
 #include <glib.h>
 #include <glib/gi18n.h>
@@ -86,10 +87,12 @@
 
         guint                    update_idle_id;
         guint                    timer_animation_timeout_id;
+        guint                    activate_idle_id;
 
         guint32                  should_hide_inactive_items : 1;
         guint32                  emit_activated_after_resize_animation : 1;
         guint32                  was_fully_grown : 1;
+        guint32                  activate_on_one_item : 1;
 
         GdmChooserWidgetPosition separator_position;
         GdmChooserWidgetState    state;
@@ -539,6 +542,42 @@
                                               on_shrink_animation_complete, widget);
 }
 
+static char *
+get_first_item (GdmChooserWidget *widget)
+{
+        GtkTreeModel *model;
+        GtkTreeIter   iter;
+        char         *id;
+
+        model = GTK_TREE_MODEL (widget->priv->list_store);
+
+        if (!gtk_tree_model_get_iter_first (model, &iter)) {
+                g_assert_not_reached ();
+        }
+
+        gtk_tree_model_get (model, &iter,
+                            CHOOSER_ID_COLUMN, &id, -1);
+        return id;
+}
+
+static gboolean
+activate_if_one_item (GdmChooserWidget *widget)
+{
+        char *id;
+
+        widget->priv->activate_idle_id = 0;
+
+        if (gdm_chooser_widget_get_number_of_items (widget) != 1) {
+                return FALSE;
+        }
+
+        id = get_first_item (widget);
+        gdm_chooser_widget_set_active_item (widget, id);
+        g_free (id);
+
+        return FALSE;
+}
+
 static void
 on_grow_animation_complete (GdmScrollableWidget *scrollable_widget,
                             GdmChooserWidget    *widget)
@@ -1808,6 +1847,10 @@
                                            -1);
 
         move_cursor_to_top (widget);
+
+        if (widget->priv->activate_on_one_item) {
+                activate_if_one_item (widget);
+        }
 }
 
 void
@@ -1856,6 +1899,10 @@
         gtk_list_store_remove (widget->priv->list_store, &iter);
 
         move_cursor_to_top (widget);
+
+        if (widget->priv->activate_on_one_item) {
+                activate_if_one_item (widget);
+        }
 }
 
 gboolean
@@ -2214,3 +2261,21 @@
                 gdm_chooser_widget_grow (widget);
         }
 }
+
+int
+gdm_chooser_widget_get_number_of_items (GdmChooserWidget *widget)
+{
+        return widget->priv->number_of_normal_rows +
+               widget->priv->number_of_separated_rows;
+}
+
+void
+gdm_chooser_widget_activate_on_one_item (GdmChooserWidget *widget,
+                                         gboolean          should_activate)
+{
+        widget->priv->activate_on_one_item = should_activate;
+
+        if (widget->priv->activate_on_one_item) {
+                activate_if_one_item (widget);
+        }
+}

Modified: trunk/gui/simple-greeter/gdm-chooser-widget.h
==============================================================================
--- trunk/gui/simple-greeter/gdm-chooser-widget.h	(original)
+++ trunk/gui/simple-greeter/gdm-chooser-widget.h	Mon Apr 21 20:47:31 2008
@@ -126,6 +126,10 @@
 
 void                   gdm_chooser_widget_activate_selected_item (GdmChooserWidget *widget);
 
+int                    gdm_chooser_widget_get_number_of_items    (GdmChooserWidget *widget);
+void                   gdm_chooser_widget_activate_on_one_item   (GdmChooserWidget *widget,
+                                                                  gboolean          should_activate);
+
 G_END_DECLS
 
 #endif /* __GDM_CHOOSER_WIDGET_H */

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	Mon Apr 21 20:47:31 2008
@@ -387,6 +387,14 @@
 }
 
 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)
@@ -488,6 +496,10 @@
 
         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);

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	Mon Apr 21 20:47:31 2008
@@ -117,6 +117,8 @@
 };
 
 enum {
+        LOADING_USERS,
+        USERS_LOADED,
         USER_ADDED,
         USER_REMOVED,
         USER_IS_LOGGED_IN_CHANGED,
@@ -1375,6 +1377,8 @@
 {
         reload_users (manager);
         manager->priv->reload_id = 0;
+
+        g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
         return FALSE;
 }
 
@@ -1385,6 +1389,7 @@
                 return;
         }
 
+        g_signal_emit (G_OBJECT (manager), signals[LOADING_USERS], 0);
         manager->priv->reload_id = g_idle_add ((GSourceFunc)reload_users_timeout, manager);
 }
 
@@ -1450,6 +1455,22 @@
 
         object_class->finalize = gdm_user_manager_finalize;
 
+        signals [LOADING_USERS] =
+                g_signal_new ("loading-users",
+                              G_TYPE_FROM_CLASS (klass),
+                              G_SIGNAL_RUN_LAST,
+                              G_STRUCT_OFFSET (GdmUserManagerClass, loading_users),
+                              NULL, NULL,
+                              g_cclosure_marshal_VOID__VOID,
+                              G_TYPE_NONE, 0);
+        signals [USERS_LOADED] =
+                g_signal_new ("users-loaded",
+                              G_TYPE_FROM_CLASS (klass),
+                              G_SIGNAL_RUN_LAST,
+                              G_STRUCT_OFFSET (GdmUserManagerClass, users_loaded),
+                              NULL, NULL,
+                              g_cclosure_marshal_VOID__VOID,
+                              G_TYPE_NONE, 0);
         signals [USER_ADDED] =
                 g_signal_new ("user-added",
                               G_TYPE_FROM_CLASS (klass),

Modified: trunk/gui/simple-greeter/gdm-user-manager.h
==============================================================================
--- trunk/gui/simple-greeter/gdm-user-manager.h	(original)
+++ trunk/gui/simple-greeter/gdm-user-manager.h	Mon Apr 21 20:47:31 2008
@@ -46,6 +46,8 @@
 {
         GObjectClass   parent_class;
 
+        void          (* loading_users)             (GdmUserManager *user_manager);
+        void          (* users_loaded)              (GdmUserManager *user_manager);
         void          (* user_added)                (GdmUserManager *user_manager,
                                                      GdmUser        *user);
         void          (* user_removed)              (GdmUserManager *user_manager,



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