summaryrefslogtreecommitdiff
path: root/daemon/gdm-session-direct.c
diff options
context:
space:
mode:
authorFrederic Crozat <fcrozat@mandriva.com>2010-05-03 14:19:55 +0200
committerFrederic Crozat <fcrozat@mandriva.com>2010-05-03 18:38:01 +0200
commit84eed8bb4394c1408f5673775d798ab2858cd2d9 (patch)
treeed29f6bc89545c5d1e4153a5ebf9c6b0d0cbfa7e /daemon/gdm-session-direct.c
parent43da20ee360d1dcda5300f6c2347962fc1706ce5 (diff)
downloadgdm-84eed8bb4394c1408f5673775d798ab2858cd2d9.tar.gz
Sort session using file basename
Ensure behaviour in default / fallback session is consistent with gdm <= 2.20. Fixes Mandriva bug 58501 / GNOME bug 617516.
Diffstat (limited to 'daemon/gdm-session-direct.c')
-rw-r--r--daemon/gdm-session-direct.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index 031ae338..9aa47fcd 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -650,12 +650,16 @@ get_fallback_session_name (void)
const char **search_dirs;
int i;
char *name;
+ GSequence *sessions;
+ GSequenceIter *session;
name = g_strdup ("gnome");
if (get_session_command_for_name (name, NULL)) {
return name;
}
+ sessions = g_sequence_new (g_free);
+
search_dirs = get_system_session_dirs ();
for (i = 0; search_dirs[i] != NULL; i++) {
GDir *dir;
@@ -679,18 +683,32 @@ get_fallback_session_name (void)
}
if (get_session_command_for_file (base_name, NULL)) {
- g_free (name);
- name = g_strndup (base_name,
- strlen (base_name) -
- strlen (".desktop"));
- break;
+ g_sequence_insert_sorted (sessions, g_strdup (base_name), (GCompareDataFunc) g_strcmp0, NULL);
}
} while (base_name != NULL);
g_dir_close (dir);
}
+ session = g_sequence_get_begin_iter (sessions);
+ do {
+ if (g_sequence_get (session)) {
+ char *base_name;
+
+ g_free (name);
+ base_name = g_sequence_get (session);
+ name = g_strndup (base_name,
+ strlen (base_name) -
+ strlen (".desktop"));
+
+ break;
+ }
+ session = g_sequence_iter_next (session);
+ } while (!g_sequence_iter_is_end (session));
+
+ g_sequence_free (sessions);
+
return name;
}