summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-03-03 16:57:05 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2008-03-03 16:57:05 +0000
commit92de87e5606e45a5e642696a973694c3211d450c (patch)
tree7ca2c8f93f5c80165e92e95b381bc04069785a82
parentca81e740d38d6f695ba8ce52588e19c1472902c8 (diff)
downloadgdm-92de87e5606e45a5e642696a973694c3211d450c.tar.gz
Order the users in the applet the same way we do for the greeter: in order
2008-03-03 William Jon McCann <jmccann@redhat.com> * gui/simple-greeter/gdm-user.c: (gdm_user_collate): * gui/user-switch-applet/applet.c: (sort_menu_comparedatafunc), (sort_menu), (menu_style_set_cb), (fill_applet): Order the users in the applet the same way we do for the greeter: in order of login frequency. svn path=/trunk/; revision=5915
-rw-r--r--ChangeLog8
-rw-r--r--gui/simple-greeter/gdm-user.c47
-rw-r--r--gui/user-switch-applet/applet.c41
3 files changed, 65 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index 62ff6807..f35de5f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2008-03-03 William Jon McCann <jmccann@redhat.com>
+ * gui/simple-greeter/gdm-user.c: (gdm_user_collate):
+ * gui/user-switch-applet/applet.c: (sort_menu_comparedatafunc),
+ (sort_menu), (menu_style_set_cb), (fill_applet):
+ Order the users in the applet the same way we do for the greeter:
+ in order of login frequency.
+
+2008-03-03 William Jon McCann <jmccann@redhat.com>
+
* gui/user-switch-applet/gdm-user-menu-item.c: (reset_icon),
(reset_sensitivity), (on_user_notify), (on_user_icon_changed),
(on_user_sessions_changed), (_gdm_user_menu_item_set_user):
diff --git a/gui/simple-greeter/gdm-user.c b/gui/simple-greeter/gdm-user.c
index 59a003c4..ea7e1bfb 100644
--- a/gui/simple-greeter/gdm-user.c
+++ b/gui/simple-greeter/gdm-user.c
@@ -545,42 +545,53 @@ gdm_user_get_login_frequency (GdmUser *user)
return user->login_frequency;
}
-gint
+int
gdm_user_collate (GdmUser *user1,
GdmUser *user2)
{
- const gchar *str1, *str2;
+ const char *str1;
+ const char *str2;
+ gulong num1;
+ gulong num2;
g_return_val_if_fail (user1 == NULL || GDM_IS_USER (user1), 0);
g_return_val_if_fail (user2 == NULL || GDM_IS_USER (user2), 0);
- if (!user1 && user2)
- return -1;
-
- if (user1 && !user2)
- return 1;
-
- if (!user1 && !user2)
- return 0;
-
- if (user1->real_name)
+ if (user1->real_name != NULL) {
str1 = user1->real_name;
- else
+ } else {
str1 = user1->user_name;
+ }
- if (user2->real_name)
+ if (user2->real_name != NULL) {
str2 = user2->real_name;
- else
+ } else {
str2 = user2->user_name;
+ }
- if (!str1 && str2)
+ num1 = user1->login_frequency;
+ num2 = user2->login_frequency;
+ g_debug ("Login freq 1=%u 2=%u", (guint)num1, (guint)num2);
+ if (num1 > num2) {
return -1;
+ }
- if (str1 && !str2)
+ if (num1 < num2) {
return 1;
+ }
+
+ /* if login frequency is equal try names */
+ if (str1 == NULL && str2 != NULL) {
+ return -1;
+ }
- if (!str1 && !str2)
+ if (str1 != NULL && str2 == NULL) {
+ return 1;
+ }
+
+ if (str1 == NULL && str2 == NULL) {
return 0;
+ }
return g_utf8_collate (str1, str2);
}
diff --git a/gui/user-switch-applet/applet.c b/gui/user-switch-applet/applet.c
index dc916444..734abbd3 100644
--- a/gui/user-switch-applet/applet.c
+++ b/gui/user-switch-applet/applet.c
@@ -575,28 +575,35 @@ sort_menu_comparedatafunc (gconstpointer a,
a_is_user = GDM_IS_USER_MENU_ITEM (a);
b_is_user = GDM_IS_USER_MENU_ITEM (b);
- if (a_is_user && !b_is_user)
+ if (a_is_user && !b_is_user) {
return -1;
+ }
- if (b_is_user && !a_is_user)
+ if (b_is_user && !a_is_user) {
return 1;
+ }
- if (a_is_user && b_is_user)
+ if (a_is_user && b_is_user) {
return gdm_user_collate (gdm_user_menu_item_get_user ((GdmUserMenuItem *) a),
gdm_user_menu_item_get_user ((GdmUserMenuItem *) b));
+ }
adata = data;
- if (a == adata->separator_item)
+ if (a == adata->separator_item) {
return -1;
+ }
- if (b == adata->separator_item)
+ if (b == adata->separator_item) {
return 1;
+ }
- if (a == adata->login_screen_item)
+ if (a == adata->login_screen_item) {
return -1;
+ }
- if (b == adata->login_screen_item)
+ if (b == adata->login_screen_item) {
return 1;
+ }
return 0;
}
@@ -605,15 +612,21 @@ static void
sort_menu (GdmAppletData *adata)
{
GSList *items;
- guint n_items, n_rows, n_cols, row, column, count;
- gint screen_height;
+ guint n_items;
+ guint n_rows;
+ guint n_cols;
+ guint row;
+ guint column;
+ guint count;
+ int screen_height;
if (!gtk_widget_has_screen (adata->menu)) {
return;
}
adata->items = g_slist_sort_with_data (adata->items,
- sort_menu_comparedatafunc, adata);
+ sort_menu_comparedatafunc,
+ adata);
screen_height = gdk_screen_get_height (gtk_widget_get_screen (adata->menu));
@@ -680,10 +693,11 @@ menu_style_set_cb (GtkWidget *menu,
}
if (!gtk_icon_size_lookup_for_settings (settings, adata->icon_size,
- &width, &height))
+ &width, &height)) {
adata->pixel_size = -1;
- else
+ } else {
adata->pixel_size = MAX (width, height);
+ }
sort_menu (adata);
}
@@ -1202,7 +1216,8 @@ fill_applet (PanelApplet *applet)
NULL);
adata->items = g_slist_sort_with_data (adata->items,
- sort_menu_comparedatafunc, adata);
+ sort_menu_comparedatafunc,
+ adata);
if (gconf_client_get_bool (adata->client, LOCKDOWN_KEY, NULL)) {
gtk_widget_hide (GTK_WIDGET (applet));