diff options
author | Ray Strode <rstrode@redhat.com> | 2008-04-21 20:47:31 +0000 |
---|---|---|
committer | Ray Strode <halfline@src.gnome.org> | 2008-04-21 20:47:31 +0000 |
commit | 126ba7d455a30f28451987db70565da3d1dab8ce (patch) | |
tree | 2532359ac6f1e86bd9c7b5338816d4e5423395c1 | |
parent | 5962ebfd8f36fafbedcbaef074cce59aa82e78db (diff) | |
download | gdm-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-- | ChangeLog | 20 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-chooser-widget.c | 65 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-chooser-widget.h | 4 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-user-chooser-widget.c | 12 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-user-manager.c | 21 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-user-manager.h | 2 |
6 files changed, 123 insertions, 1 deletions
@@ -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, |