summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-04-21 20:47:31 +0000
committerRay Strode <halfline@src.gnome.org>2008-04-21 20:47:31 +0000
commit126ba7d455a30f28451987db70565da3d1dab8ce (patch)
tree2532359ac6f1e86bd9c7b5338816d4e5423395c1
parent5962ebfd8f36fafbedcbaef074cce59aa82e78db (diff)
downloadgdm-126ba7d455a30f28451987db70565da3d1dab8ce.tar.gz
Add two new signals "users-loaded" and "loading-users" to signify when the
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 svn path=/trunk/; revision=6165
-rw-r--r--ChangeLog20
-rw-r--r--gui/simple-greeter/gdm-chooser-widget.c65
-rw-r--r--gui/simple-greeter/gdm-chooser-widget.h4
-rw-r--r--gui/simple-greeter/gdm-user-chooser-widget.c12
-rw-r--r--gui/simple-greeter/gdm-user-manager.c21
-rw-r--r--gui/simple-greeter/gdm-user-manager.h2
6 files changed, 123 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 490d7402..dfd713eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,22 @@
-2008-04-18 Ray Strode <rstrode@@redhat.com>
+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
+
+2008-04-18 Ray Strode <rstrode@redhat.com>
* gui/simple-greeter/gdm-languages.c:
(add_locale):
diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c
index 6d961d3f..c28d4b38 100644
--- a/gui/simple-greeter/gdm-chooser-widget.c
+++ b/gui/simple-greeter/gdm-chooser-widget.c
@@ -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 @@ struct GdmChooserWidgetPrivate
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 @@ start_shrink_animation (GdmChooserWidget *widget)
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 @@ gdm_chooser_widget_add_item (GdmChooserWidget *widget,
-1);
move_cursor_to_top (widget);
+
+ if (widget->priv->activate_on_one_item) {
+ activate_if_one_item (widget);
+ }
}
void
@@ -1856,6 +1899,10 @@ gdm_chooser_widget_remove_item (GdmChooserWidget *widget,
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_set_hide_inactive_items (GdmChooserWidget *widget,
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);
+ }
+}
diff --git a/gui/simple-greeter/gdm-chooser-widget.h b/gui/simple-greeter/gdm-chooser-widget.h
index 25f1248a..301355d5 100644
--- a/gui/simple-greeter/gdm-chooser-widget.h
+++ b/gui/simple-greeter/gdm-chooser-widget.h
@@ -126,6 +126,10 @@ void gdm_chooser_widget_set_hide_inactive_items (GdmChooserWid
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 */
diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c
index f534c73c..e152ebb0 100644
--- a/gui/simple-greeter/gdm-user-chooser-widget.c
+++ b/gui/simple-greeter/gdm-user-chooser-widget.c
@@ -387,6 +387,14 @@ setup_icons (GdmUserChooserWidget *widget)
}
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 @@ gdm_user_chooser_widget_init (GdmUserChooserWidget *widget)
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);
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index 2afb5367..6863b7a5 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -117,6 +117,8 @@ struct GdmUserManagerPrivate
};
enum {
+ LOADING_USERS,
+ USERS_LOADED,
USER_ADDED,
USER_REMOVED,
USER_IS_LOGGED_IN_CHANGED,
@@ -1375,6 +1377,8 @@ reload_users_timeout (GdmUserManager *manager)
{
reload_users (manager);
manager->priv->reload_id = 0;
+
+ g_signal_emit (G_OBJECT (manager), signals[USERS_LOADED], 0);
return FALSE;
}
@@ -1385,6 +1389,7 @@ queue_reload_users (GdmUserManager *manager)
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 @@ gdm_user_manager_class_init (GdmUserManagerClass *klass)
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),
diff --git a/gui/simple-greeter/gdm-user-manager.h b/gui/simple-greeter/gdm-user-manager.h
index c7ef769e..6c696e58 100644
--- a/gui/simple-greeter/gdm-user-manager.h
+++ b/gui/simple-greeter/gdm-user-manager.h
@@ -46,6 +46,8 @@ typedef struct
{
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,