summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Le Folgoc <mrpouit@ubuntu.com>2012-07-31 00:17:04 +0200
committerLionel Le Folgoc <mrpouit@ubuntu.com>2012-07-31 00:17:04 +0200
commit0b21174008d1902b4f71ae752da221a83f1137ff (patch)
tree8aeaed30b8b260944ed0f13b35488ec7452c5513
parent721d8cec45c895eb8cf374ac3cf5ec5abfd10a93 (diff)
downloadlightdm-gtk-greeter-0b21174008d1902b4f71ae752da221a83f1137ff.tar.gz
remember the last session used
-rw-r--r--src/lightdm-gtk-greeter.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c
index ef04efe..d59fd5e 100644
--- a/src/lightdm-gtk-greeter.c
+++ b/src/lightdm-gtk-greeter.c
@@ -52,6 +52,7 @@ set_session (const gchar *session)
GtkTreeModel *model = gtk_combo_box_get_model (session_combo);
GtkTreeIter iter;
const gchar *default_session;
+ gchar *last_session;
if (session && gtk_tree_model_get_iter_first (model, &iter))
{
@@ -70,7 +71,15 @@ set_session (const gchar *session)
} while (gtk_tree_model_iter_next (model, &iter));
}
- /* If failed to find this session, then try the default */
+ /* If failed to find this session, then try the previous, then the default */
+ last_session = g_key_file_get_value (state, "greeter", "last-session", NULL);
+ if (last_session && g_strcmp0 (session, last_session) != 0)
+ {
+ set_session (last_session);
+ g_free (last_session);
+ return;
+ }
+ g_free (last_session);
default_session = lightdm_greeter_get_default_session_hint (greeter);
if (default_session && g_strcmp0 (session, default_session) != 0)
{
@@ -213,6 +222,9 @@ start_session (void)
{
gchar *language;
gchar *session;
+ gchar *data;
+ gsize data_length;
+ GError *error = NULL;
language = get_language ();
if (language)
@@ -220,6 +232,23 @@ start_session (void)
g_free (language);
session = get_session ();
+
+ /* Remember last choice */
+ g_key_file_set_value (state, "greeter", "last-session", session);
+
+ data = g_key_file_to_data (state, &data_length, &error);
+ if (error)
+ g_warning ("Failed to save state file: %s", error->message);
+ g_clear_error (&error);
+ if (data)
+ {
+ g_file_set_contents (state_filename, data, data_length, &error);
+ if (error)
+ g_warning ("Failed to save state file: %s", error->message);
+ g_clear_error (&error);
+ }
+ g_free (data);
+
if (!lightdm_greeter_start_session_sync (greeter, session, NULL))
{
set_message_label (_("Failed to start session"));