gdm r6165 - in trunk: . gui/simple-greeter
- From: halfline svn gnome org
- To: svn-commits-list gnome org
- Subject: gdm r6165 - in trunk: . gui/simple-greeter
- Date: Mon, 21 Apr 2008 21:47:31 +0100 (BST)
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]