patches/gdm-13-last.diff
author yippi
Mon, 27 Sep 2010 21:07:51 +0000
changeset 20108 51df67ca9307
parent 18225 b45d97b2f2c6
permissions -rw-r--r--
I had these modules listed as being owned by me, but they are really owned by wangke, correcting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17932
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     1
commit 53ec60d6ae72a13432be8a041e658db907af29e5
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     2
Author: Halton Huo <[email protected]>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     3
Date:   Fri Nov 20 11:40:45 2009 +0800
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     4
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     5
    gdm-17-last.diff
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     6
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     7
diff --git a/common/gdm-common.h b/common/gdm-common.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     8
index 95c8b91..389c8c8 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
     9
--- a/common/gdm-common.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    10
+++ b/common/gdm-common.h
18225
b45d97b2f2c6 2010-07-13 Brian Cameron <[email protected]>
yippi
parents: 18212
diff changeset
    11
@@ -32,6 +32,10 @@
b45d97b2f2c6 2010-07-13 Brian Cameron <[email protected]>
yippi
parents: 18212
diff changeset
    12
 
b45d97b2f2c6 2010-07-13 Brian Cameron <[email protected]>
yippi
parents: 18212
diff changeset
    13
 #define GDM_CUSTOM_SESSION  "custom"
17932
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    14
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    15
+#define GDM_LAST_LANGUAGE "GDM_LAST_LANGUAGE"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    16
+#define GDM_LAST_LAYOUT   "GDM_LAST_LAYOUT"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    17
+#define GDM_LAST_SESSION  "GDM_LAST_SESSION"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    18
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    19
 G_BEGIN_DECLS
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    20
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    21
 gboolean       gdm_is_version_unstable            (void);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    22
diff --git a/common/gdm-settings-keys.h b/common/gdm-settings-keys.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    23
index 293ecb8..1b1dbeb 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    24
--- a/common/gdm-settings-keys.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    25
+++ b/common/gdm-settings-keys.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    26
@@ -38,6 +38,7 @@ G_BEGIN_DECLS
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    27
 #define GDM_KEY_INCLUDE "greeter/Include"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    28
 #define GDM_KEY_EXCLUDE "greeter/Exclude"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    29
 #define GDM_KEY_INCLUDE_ALL "greeter/IncludeAll"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    30
+#define GDM_KEY_SHOW_LAST "greeter/ShowLast"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    31
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    32
 #define GDM_KEY_XDMCP_ENABLE "xdmcp/Enable"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    33
 #define GDM_KEY_MAX_PENDING "xdmcp/MaxPending"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    34
diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    35
index e53d701..801c6f7 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    36
--- a/daemon/gdm-session-direct.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    37
+++ b/daemon/gdm-session-direct.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    38
@@ -1181,8 +1182,20 @@ gdm_session_direct_handle_saved_language
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    39
         dbus_connection_send (connection, reply, NULL);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    40
         dbus_message_unref (reply);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    41
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    42
-        if (strcmp (language_name,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    43
-                    get_default_language_name (session)) != 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    44
+        if (strcmp (language_name, GDM_LAST_LANGUAGE) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    45
+                /*
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    46
+                 * If the user picked "Last" in the language selector, then
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    47
+                 * process the change, but do not update the saved default
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    48
+                 * language, since it is not a real language.
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    49
+                 */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    50
+                _gdm_session_default_language_name_changed (GDM_SESSION (session),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    51
+                                                            language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    52
+        } else if (strcmp (language_name,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    53
+                           get_default_language_name (session)) != 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    54
+                /*
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    55
+                 * Update the saved default language, so that subsequent
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    56
+                 * requests for it will reflect the user's choice.
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    57
+                 */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    58
                 g_free (session->priv->saved_language);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    59
                 session->priv->saved_language = g_strdup (language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    60
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    61
@@ -1190,7 +1203,6 @@ gdm_session_direct_handle_saved_language
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    62
                                                             language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    63
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    64
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    65
-
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    66
         return DBUS_HANDLER_RESULT_HANDLED;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    67
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    68
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    69
@@ -1214,8 +1226,20 @@ gdm_session_direct_handle_saved_layout_n
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    70
         dbus_connection_send (connection, reply, NULL);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    71
         dbus_message_unref (reply);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    72
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    73
-        if (strcmp (layout_name,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    74
-                    get_default_layout_name (session)) != 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    75
+        if (strcmp (layout_name, GDM_LAST_LAYOUT) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    76
+                /*
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    77
+                 * If the user picked "Last" in the layout selector, then
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    78
+                 * process the change, but do not update the saved default
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    79
+                 * layout, since it is not a real layout.
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    80
+                 */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    81
+                _gdm_session_default_layout_name_changed (GDM_SESSION (session),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    82
+                                                          layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    83
+        } else if (strcmp (layout_name,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    84
+                           get_default_layout_name (session)) != 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    85
+                /*
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    86
+                 * Update the saved default layout, so that subsequent requests
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    87
+                 * for it will reflect the user's choice.
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    88
+                 */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    89
                 g_free (session->priv->saved_layout);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    90
                 session->priv->saved_layout = g_strdup (layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    91
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    92
@@ -1223,7 +1247,6 @@ gdm_session_direct_handle_saved_layout_n
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    93
                                                           layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    94
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    95
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    96
-
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    97
         return DBUS_HANDLER_RESULT_HANDLED;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    98
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
    99
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   100
@@ -1247,23 +1270,32 @@ gdm_session_direct_handle_saved_session_
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   101
         dbus_connection_send (connection, reply, NULL);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   102
         dbus_message_unref (reply);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   103
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   104
-        if (! get_session_command_for_name (session_name, NULL)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   105
+        if (strcmp (session_name, GDM_LAST_SESSION) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   106
+                /*
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   107
+                 * If the user picked "Last" in the session selector, then
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   108
+                 * process the change, but do not update the saved default
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   109
+                 * session, since it is not a real session.
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   110
+                 */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   111
+                _gdm_session_default_session_name_changed (GDM_SESSION (session),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   112
+                                                           session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   113
+        } else if (! get_session_command_for_name (session_name, NULL)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   114
                 /* ignore sessions that don't exist */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   115
                 g_debug ("GdmSessionDirect: not using invalid .dmrc session: %s", session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   116
                 g_free (session->priv->saved_session);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   117
                 session->priv->saved_session = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   118
-                goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   119
-        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   120
-
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   121
-        if (strcmp (session_name,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   122
-                    get_default_session_name (session)) != 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   123
+        } else if (strcmp (session_name,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   124
+                           get_default_session_name (session)) != 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   125
+                /*
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   126
+                 * Update the saved default session, so that subsequent
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   127
+                 * requests for it will reflect the user's choice.
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   128
+                 */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   129
                 g_free (session->priv->saved_session);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   130
                 session->priv->saved_session = g_strdup (session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   131
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   132
                 _gdm_session_default_session_name_changed (GDM_SESSION (session),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   133
                                                            session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   134
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   135
- out:
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   136
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   137
         return DBUS_HANDLER_RESULT_HANDLED;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   138
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   139
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   140
diff --git a/daemon/gdm-session-settings.c b/daemon/gdm-session-settings.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   141
index 421d87a..856e5a3 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   142
--- a/daemon/gdm-session-settings.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   143
+++ b/daemon/gdm-session-settings.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   144
@@ -21,6 +21,7 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   145
  */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   146
 #include "config.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   147
 #include "gdm-session-settings.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   148
+#include "gdm-common.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   149
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   150
 #include <errno.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   151
 #include <pwd.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   152
@@ -268,19 +269,62 @@ gdm_session_settings_is_loaded (GdmSessionSettings  *settings)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   153
 gboolean
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   154
 gdm_session_settings_load (GdmSessionSettings  *settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   155
                            const char          *username,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   156
+                           gboolean             handle_last,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   157
                            GError             **error)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   158
 {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   159
         GKeyFile *key_file;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   160
         GError   *load_error;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   161
         gboolean  is_loaded;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   162
+        gboolean  skip_session;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   163
+        gboolean  skip_language;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   164
+        gboolean  skip_layout;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   165
         char     *session_name;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   166
         char     *language_name;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   167
         char     *layout_name;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   168
         char     *filename;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   169
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   170
+        skip_session = FALSE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   171
+        skip_language = FALSE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   172
+        skip_layout = FALSE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   173
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   174
         g_return_val_if_fail (settings != NULL, FALSE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   175
         g_return_val_if_fail (username != NULL, FALSE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   176
-        g_return_val_if_fail (!gdm_session_settings_is_loaded (settings), FALSE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   177
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   178
+        if (!handle_last) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   179
+                g_return_val_if_fail (!gdm_session_settings_is_loaded (settings), FALSE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   180
+        } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   181
+                if (settings->priv->session_name != NULL && 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   182
+                    strcmp (settings->priv->session_name, GDM_LAST_SESSION) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   183
+                        g_debug ("Session value is last, loading user value");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   184
+                        g_free (settings->priv->session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   185
+                        settings->priv->session_name = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   186
+                } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   187
+                        skip_session = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   188
+                }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   189
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   190
+                if (settings->priv->language_name != NULL && 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   191
+                    strcmp (settings->priv->language_name, GDM_LAST_LANGUAGE) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   192
+                        g_debug ("Language value is last, loading user value");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   193
+                        g_free (settings->priv->language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   194
+                        settings->priv->language_name = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   195
+                } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   196
+                        skip_language = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   197
+                }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   198
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   199
+                if (settings->priv->layout_name != NULL && 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   200
+                    strcmp (settings->priv->layout_name, GDM_LAST_LAYOUT) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   201
+                        g_debug ("Layout value is last, loading user value");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   202
+                        g_free (settings->priv->layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   203
+                        settings->priv->layout_name = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   204
+                } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   205
+                        skip_layout = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   206
+                }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   207
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   208
+                if (skip_session && skip_language && skip_layout) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   209
+                        is_loaded = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   210
+                        goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   211
+                }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   212
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   213
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   214
         filename = g_build_filename (GDM_CACHE_DIR, username, "dmrc", NULL);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   215
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   216
@@ -294,46 +340,52 @@ gdm_session_settings_load (GdmSessionSettings  *settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   217
                 goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   218
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   219
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   220
-        session_name = g_key_file_get_string (key_file, "Desktop", "Session",
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   221
-                                              &load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   222
-
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   223
-        if (session_name != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   224
-                gdm_session_settings_set_session_name (settings, session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   225
-                g_free (session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   226
-        } else if (g_error_matches (load_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   227
-                g_error_free (load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   228
-                load_error = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   229
-        } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   230
-                g_propagate_error (error, load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   231
-                goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   232
+        if (!skip_session) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   233
+                session_name = g_key_file_get_string (key_file, "Desktop",
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   234
+                        "Session", &load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   235
+                if (session_name != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   236
+                        g_debug ("Setting value to %s", session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   237
+                        gdm_session_settings_set_session_name (settings, session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   238
+                        g_free (session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   239
+                } else if (g_error_matches (load_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   240
+                        g_error_free (load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   241
+                        load_error = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   242
+                } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   243
+                        g_propagate_error (error, load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   244
+                        goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   245
+                }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   246
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   247
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   248
-        language_name = g_key_file_get_string (key_file, "Desktop", "Language",
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   249
-                                               &load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   250
-
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   251
-        if (language_name != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   252
-                gdm_session_settings_set_language_name (settings, language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   253
-                g_free (language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   254
-        } else if (g_error_matches (load_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   255
-                g_error_free (load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   256
-                load_error = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   257
-        } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   258
-                g_propagate_error (error, load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   259
-                goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   260
+        if (!skip_language) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   261
+                language_name = g_key_file_get_string (key_file, "Desktop", "Language",
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   262
+                                                       &load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   263
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   264
+                if (language_name != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   265
+                        gdm_session_settings_set_language_name (settings, language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   266
+                        g_free (language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   267
+                } else if (g_error_matches (load_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   268
+                        g_error_free (load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   269
+                        load_error = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   270
+                } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   271
+                        g_propagate_error (error, load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   272
+                        goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   273
+                }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   274
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   275
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   276
-        layout_name = g_key_file_get_string (key_file, "Desktop", "Layout",
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   277
-                                             &load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   278
-
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   279
-        if (layout_name != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   280
-                gdm_session_settings_set_layout_name (settings, layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   281
-                g_free (layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   282
-        } else if (g_error_matches (load_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   283
-                g_error_free (load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   284
-                load_error = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   285
-        } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   286
-                g_propagate_error (error, load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   287
-                goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   288
+        if (!skip_layout) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   289
+                layout_name = g_key_file_get_string (key_file, "Desktop", "Layout",
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   290
+                                                     &load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   291
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   292
+                if (layout_name != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   293
+                        gdm_session_settings_set_layout_name (settings, layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   294
+                        g_free (layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   295
+                } else if (g_error_matches (load_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   296
+                        g_error_free (load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   297
+                        load_error = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   298
+                } else {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   299
+                        g_propagate_error (error, load_error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   300
+                        goto out;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   301
+                }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   302
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   303
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   304
         is_loaded = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   305
diff --git a/daemon/gdm-session-settings.h b/daemon/gdm-session-settings.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   306
index d579d4a..fb02dd1 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   307
--- a/daemon/gdm-session-settings.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   308
+++ b/daemon/gdm-session-settings.h
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   309
@@ -55,6 +55,7 @@ GdmSessionSettings *gdm_session_settings_new                (void);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   310
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   311
 gboolean            gdm_session_settings_load               (GdmSessionSettings  *settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   312
                                                              const char          *username,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   313
+                                                             gboolean             handle_last,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   314
                                                              GError             **error);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   315
 gboolean            gdm_session_settings_save               (GdmSessionSettings  *settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   316
                                                              const char          *home_directory,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   317
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   318
index 6e42f7d..1b71eb8 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   319
--- a/daemon/gdm-session-worker.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   320
+++ b/daemon/gdm-session-worker.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   321
@@ -72,6 +72,8 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   322
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   323
 #include "gdm-session-settings.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   324
 #include "gdm-common.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   325
+#include "gdm-settings-direct.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   326
+#include "gdm-settings-keys.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   327
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   328
 #define GDM_SESSION_WORKER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SESSION_WORKER, GdmSessionWorkerPrivate))
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   329
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   330
@@ -723,10 +725,26 @@ gdm_session_worker_get_username (GdmSess
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   331
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   332
 static void
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   333
 attempt_to_load_user_settings (GdmSessionWorker *worker,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   334
-                               const char       *username)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   335
+                               const char       *username,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   336
+                               gboolean          handle_last)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   337
 {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   338
+        gboolean show_last;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   339
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   340
+        gdm_settings_direct_get_boolean (GDM_KEY_SHOW_LAST, &show_last);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   341
+        if (show_last && !handle_last) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   342
+                g_debug ("Setting selection options to Last");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   343
+                gdm_session_settings_set_session_name (worker->priv->user_settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   344
+                        GDM_LAST_SESSION);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   345
+                gdm_session_settings_set_language_name (worker->priv->user_settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   346
+                        GDM_LAST_LANGUAGE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   347
+                gdm_session_settings_set_layout_name (worker->priv->user_settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   348
+                        GDM_LAST_LAYOUT);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   349
+                return;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   350
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   351
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   352
         gdm_session_settings_load (worker->priv->user_settings,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   353
                                    username,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   354
+                                   handle_last,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   355
                                    NULL);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   356
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   357
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   358
@@ -768,7 +786,9 @@ gdm_session_worker_update_username (GdmS
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   359
                  */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   360
                 if (worker->priv->username != NULL &&
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   361
                     !gdm_session_settings_is_loaded (worker->priv->user_settings)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   362
-                        attempt_to_load_user_settings (worker, worker->priv->username);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   363
+                        attempt_to_load_user_settings (worker,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   364
+                               worker->priv->username,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   365
+                               FALSE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   366
                 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   367
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   368
 
18189
a68cc0bd4f83 2010-06-30 Brian Cameron <[email protected]>
yippi
parents: 17932
diff changeset
   369
@@ -1805,12 +1825,16 @@ gdm_session_worker_accredit_user (GdmSes
17932
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   370
 {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   371
         gboolean ret;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   372
         gboolean res;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   373
+        gboolean has_last;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   374
         uid_t    uid;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   375
         gid_t    gid;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   376
         char    *shell;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   377
         char    *home;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   378
         char    *path_str;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   379
         int      error_code;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   380
+        char    *session_name;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   381
+        char    *language_name;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   382
+        char    *layout_name;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   383
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   384
         ret = FALSE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   385
 
18189
a68cc0bd4f83 2010-06-30 Brian Cameron <[email protected]>
yippi
parents: 17932
diff changeset
   386
@@ -1884,6 +1908,46 @@ gdm_session_worker_accredit_user (GdmSes
17932
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   387
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   388
         ret = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   389
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   390
+        /*
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   391
+         * If the user is using the "Last" session, get the defaults
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   392
+         * now, after pam_setcred is complete.
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   393
+         */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   394
+        session_name  = gdm_session_settings_get_session_name (
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   395
+                worker->priv->user_settings);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   396
+        language_name = gdm_session_settings_get_language_name (
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   397
+                worker->priv->user_settings);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   398
+        layout_name   = gdm_session_settings_get_layout_name (
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   399
+                worker->priv->user_settings);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   400
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   401
+        has_last = FALSE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   402
+        if (session_name != NULL &&
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   403
+            strcmp (session_name, GDM_LAST_SESSION) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   404
+                g_debug ("Session setting is Last");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   405
+                has_last = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   406
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   407
+        if (language_name != NULL &&
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   408
+            strcmp (language_name, GDM_LAST_LANGUAGE) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   409
+                g_debug ("Language setting is Last");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   410
+                has_last = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   411
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   412
+        if (layout_name != NULL &&
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   413
+            strcmp (layout_name, GDM_LAST_LAYOUT) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   414
+                g_debug ("Layout setting is Last");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   415
+                has_last = TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   416
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   417
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   418
+        if (has_last) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   419
+                g_debug ("Now loading users default settings.");
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   420
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   421
+                /* Now copy user settings to cache and load */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   422
+                gdm_session_worker_cache_userfiles (worker);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   423
+                attempt_to_load_user_settings (worker, worker->priv->username,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   424
+                        TRUE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   425
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   426
+        g_free (session_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   427
+        g_free (language_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   428
+        g_free (layout_name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   429
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   430
  out:
18189
a68cc0bd4f83 2010-06-30 Brian Cameron <[email protected]>
yippi
parents: 17932
diff changeset
   431
         g_free (home);
a68cc0bd4f83 2010-06-30 Brian Cameron <[email protected]>
yippi
parents: 17932
diff changeset
   432
         g_free (shell);
a68cc0bd4f83 2010-06-30 Brian Cameron <[email protected]>
yippi
parents: 17932
diff changeset
   433
@@ -2535,7 +2599,8 @@ do_setup (GdmSessionWorker *worker)
17932
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   434
          */
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   435
         if (worker->priv->username != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   436
                 attempt_to_load_user_settings (worker,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   437
-                                               worker->priv->username);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   438
+                                               worker->priv->username,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   439
+                                               FALSE);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   440
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   441
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   442
         error = NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   443
diff --git a/data/gdm.schemas.in.in b/data/gdm.schemas.in.in
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   444
index 5774b65..ff088d3 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   445
--- a/data/gdm.schemas.in.in
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   446
+++ b/data/gdm.schemas.in.in
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   447
@@ -69,6 +69,11 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   448
       <signature>b</signature>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   449
       <default>false</default>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   450
     </schema>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   451
+    <schema>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   452
+      <key>greeter/ShowLast</key>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   453
+      <signature>b</signature>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   454
+      <default>false</default>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   455
+    </schema>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   456
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   457
     <schema>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   458
       <key>xdmcp/Enable</key>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   459
diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   460
index 1fa87cf..b872e2b 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   461
--- a/gui/simple-greeter/Makefile.am
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   462
+++ b/gui/simple-greeter/Makefile.am
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   463
@@ -187,6 +187,8 @@ test_language_chooser_SOURCES = 	\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   464
 test_language_chooser_LDADD =	\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   465
 	$(GTK_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   466
 	$(GCONF_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   467
+	$(top_builddir)/common/libgdmcommon.la \
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   468
+	$(COMMON_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   469
 	$(NULL)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   470
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   471
 test_layout_chooser_SOURCES = 	\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   472
@@ -211,6 +213,7 @@ test_layout_chooser_LDADD =		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   473
 	$(GTK_LIBS)			\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   474
 	$(GCONF_LIBS)			\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   475
 	$(LIBXKLAVIER_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   476
+	$(top_builddir)/common/libgdmcommon.la \
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   477
 	$(NULL)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   478
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   479
 test_languages_SOURCES = 		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   480
@@ -222,6 +225,8 @@ test_languages_SOURCES = 		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   481
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   482
 test_languages_LDADD =		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   483
 	$(GTK_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   484
+	$(top_builddir)/common/libgdmcommon.la \
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   485
+	$(COMMON_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   486
 	$(NULL)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   487
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   488
 test_sessions_SOURCES = 		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   489
@@ -232,6 +237,8 @@ test_sessions_SOURCES = 		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   490
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   491
 test_sessions_LDADD =		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   492
 	$(GTK_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   493
+	$(top_builddir)/common/libgdmcommon.la \
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   494
+	$(COMMON_LIBS)		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   495
 	$(NULL)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   496
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   497
 test_user_chooser_SOURCES = 		\
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   498
diff --git a/gui/simple-greeter/gdm-language-option-widget.c b/gui/simple-greeter/gdm-language-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   499
index bb14b68..52d4afb 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   500
--- a/gui/simple-greeter/gdm-language-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   501
+++ b/gui/simple-greeter/gdm-language-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   502
@@ -35,6 +35,8 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   503
 #include <glib/gstdio.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   504
 #include <gtk/gtk.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   505
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   506
+#include "gdm-common.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   507
+#include "gdm-settings-keys.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   508
 #include "gdm-profile.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   509
 #include "gdm-languages.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   510
 #include "gdm-language-option-widget.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   511
@@ -184,6 +186,10 @@ gdm_language_option_widget_lookup_item (
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   512
         char *lang_tag;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   513
         char *normalized_locale;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   514
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   515
+        if (strcmp (locale, GDM_LAST_LANGUAGE) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   516
+                return NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   517
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   518
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   519
         normalized_locale = gdm_normalize_language_name (locale);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   520
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   521
         language = gdm_get_language_from_name (locale, normalized_locale);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   522
@@ -208,6 +214,7 @@ static void
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   523
 gdm_language_option_widget_init (GdmLanguageOptionWidget *widget)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   524
 {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   525
         GError *error;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   526
+        gboolean show_last;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   527
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   528
         widget->priv = GDM_LANGUAGE_OPTION_WIDGET_GET_PRIVATE (widget);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   529
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   530
@@ -232,6 +239,16 @@ gdm_language_option_widget_init (GdmLang
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   531
                                     _("Choose a language from the "
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   532
                                       "full list of available languages."),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   533
                                     GDM_OPTION_WIDGET_POSITION_BOTTOM);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   534
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   535
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   536
+        gdm_settings_client_get_boolean (GDM_KEY_SHOW_LAST, &show_last);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   537
+        if (show_last) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   538
+                gdm_option_widget_add_item (GDM_OPTION_WIDGET (widget),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   539
+                                            GDM_LAST_LANGUAGE,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   540
+                                            C_("lastlanguage", "Last"),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   541
+                                            _("Last language"),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   542
+                                            GDM_OPTION_WIDGET_POSITION_TOP);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   543
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   544
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   545
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   546
 static void
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   547
diff --git a/gui/simple-greeter/gdm-languages.c b/gui/simple-greeter/gdm-languages.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   548
index f19c055..3ad321c 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   549
--- a/gui/simple-greeter/gdm-languages.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   550
+++ b/gui/simple-greeter/gdm-languages.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   551
@@ -37,6 +37,7 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   552
 #include <glib/gi18n.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   553
 #include <glib/gstdio.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   554
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   555
+#include "gdm-common.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   556
 #include "gdm-languages.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   557
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   558
 #include <langinfo.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   559
@@ -246,6 +247,11 @@ gdm_normalize_language_name (const char *name)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   560
                 return NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   561
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   562
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   563
+        if (strcmp (name, GDM_LAST_LANGUAGE) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   564
+                normalized_name = g_strdup (name);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   565
+                return normalized_name;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   566
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   567
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   568
         gdm_parse_language_name (name,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   569
                                  &language_code,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   570
                                  &territory_code,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   571
diff --git a/gui/simple-greeter/gdm-layout-option-widget.c b/gui/simple-greeter/gdm-layout-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   572
index a6eb1b9..e13b085 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   573
--- a/gui/simple-greeter/gdm-layout-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   574
+++ b/gui/simple-greeter/gdm-layout-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   575
@@ -35,6 +35,9 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   576
 #include <glib/gstdio.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   577
 #include <gtk/gtk.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   578
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   579
+#include "gdm-common.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   580
+#include "gdm-settings-client.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   581
+#include "gdm-settings-keys.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   582
 #include "gdm-profile.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   583
 #include "gdm-layouts.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   584
 #include "gdm-layout-option-widget.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   585
@@ -184,6 +187,10 @@ gdm_layout_option_widget_lookup_item (GdmRecentOptionWidget *widget,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   586
 {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   587
         char *layout;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   588
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   589
+        if (strcmp (key, GDM_LAST_LAYOUT) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   590
+                return NULL;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   591
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   592
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   593
         layout = gdm_get_layout_from_name (key);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   594
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   595
         if (layout == NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   596
@@ -200,6 +207,7 @@ static void
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   597
 gdm_layout_option_widget_init (GdmLayoutOptionWidget *widget)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   598
 {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   599
         GError *error;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   600
+        gboolean show_last;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   601
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   602
         widget->priv = GDM_LAYOUT_OPTION_WIDGET_GET_PRIVATE (widget);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   603
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   604
@@ -224,6 +232,15 @@ gdm_layout_option_widget_init (GdmLayoutOptionWidget *widget)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   605
                                     _("Choose a keyboard layout from the "
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   606
                                       "full list of available layouts."),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   607
                                     GDM_OPTION_WIDGET_POSITION_BOTTOM);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   608
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   609
+        gdm_settings_client_get_boolean (GDM_KEY_SHOW_LAST, &show_last);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   610
+        if (show_last) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   611
+                gdm_option_widget_add_item (GDM_OPTION_WIDGET (widget),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   612
+                                            GDM_LAST_LAYOUT,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   613
+                                            C_("lastlayout", "Last"),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   614
+                                            _("Last layout"),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   615
+                                            GDM_OPTION_WIDGET_POSITION_TOP);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   616
+       }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   617
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   618
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   619
 static void
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   620
@@ -288,7 +305,10 @@ gdm_layout_option_widget_set_current_layout_name (GdmLayoutOptionWidget *widget,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   621
                                             id, NULL, NULL, NULL)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   622
                 gdm_recent_option_widget_add_item (GDM_RECENT_OPTION_WIDGET (widget),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   623
                                                    id);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   624
+        } else if (strcmp (id, GDM_LAST_LAYOUT) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   625
+                gdm_option_widget_set_active_item (GDM_OPTION_WIDGET (widget), id);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   626
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   627
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   628
         g_debug ("GdmLayoutOptionWidget: Setting active item: '%s'", id);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   629
         gdm_option_widget_set_active_item (GDM_OPTION_WIDGET (widget), id);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   630
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   631
diff --git a/gui/simple-greeter/gdm-session-option-widget.c b/gui/simple-greeter/gdm-session-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   632
index 961ac94..046b5bf 100644
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   633
--- a/gui/simple-greeter/gdm-session-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   634
+++ b/gui/simple-greeter/gdm-session-option-widget.c
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   635
@@ -36,8 +36,10 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   636
 #include <glib/gstdio.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   637
 #include <gtk/gtk.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   638
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   639
+#include "gdm-common.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   640
 #include "gdm-session-option-widget.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   641
 #include "gdm-sessions.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   642
+#include "gdm-settings-keys.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   643
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   644
 #define GDM_SESSION_OPTION_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SESSION_OPTION_WIDGET, GdmSessionOptionWidgetPrivate))
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   645
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   646
@@ -133,8 +135,19 @@ add_available_sessions (GdmSessionOptionWidget *widget)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   647
 static void
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   648
 gdm_session_option_widget_init (GdmSessionOptionWidget *widget)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   649
 {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   650
+        gboolean show_last;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   651
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   652
         widget->priv = GDM_SESSION_OPTION_WIDGET_GET_PRIVATE (widget);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   653
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   654
+        gdm_settings_client_get_boolean (GDM_KEY_SHOW_LAST, &show_last);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   655
+        if (show_last) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   656
+                gdm_option_widget_add_item (GDM_OPTION_WIDGET (widget),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   657
+                                            GDM_LAST_SESSION,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   658
+                                            C_("lastsession", "Last"),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   659
+                                            _("Last session"),
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   660
+                                            GDM_OPTION_WIDGET_POSITION_TOP);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   661
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   662
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   663
         add_available_sessions (widget);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   664
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   665
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   666
@@ -189,5 +202,7 @@ gdm_session_option_widget_set_current_session (GdmSessionOptionWidget *widget,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   667
         } else if (gdm_option_widget_lookup_item (GDM_OPTION_WIDGET (widget), session,
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   668
                                             NULL, NULL, NULL)) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   669
                 gdm_option_widget_set_active_item (GDM_OPTION_WIDGET (widget), session);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   670
+        } else if (strcmp (session, GDM_LAST_SESSION) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   671
+                gdm_option_widget_set_active_item (GDM_OPTION_WIDGET (widget), session);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   672
         }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   673
 }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   674
--- gdm-2.29.1/gui/simple-greeter/gdm-layouts.c-orig	2009-12-21 11:54:58.946444139 -0600
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   675
+++ gdm-2.29.1/gui/simple-greeter/gdm-layouts.c	2009-12-21 11:56:06.467766896 -0600
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   676
@@ -34,6 +34,7 @@
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   677
 #include <gconf/gconf-client.h>
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   678
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   679
 #include "gdm-layouts.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   680
+#include "gdm-common.h"
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   681
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   682
 typedef struct {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   683
         GSList *list;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   684
@@ -197,6 +198,10 @@ gdm_layout_is_valid (const char *layout_
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   685
         char          *variant;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   686
         gboolean       retval;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   687
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   688
+        if (layout_variant != NULL && strcmp (layout_variant, GDM_LAST_LAYOUT) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   689
+                return TRUE;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   690
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   691
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   692
         layout = g_strdup (layout_variant);
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   693
         variant = strchr (layout, '\t');
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   694
         if (variant != NULL) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   695
@@ -245,6 +250,10 @@ gdm_layout_activate (const char *layout)
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   696
         XklConfigRec *config;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   697
         char         *p;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   698
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   699
+        if (layout != NULL && strcmp (layout, GDM_LAST_LAYOUT) == 0) {
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   700
+                return;
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   701
+        }
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   702
+
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   703
         init_xkl ();
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   704
 
cf7ff15510de 2010-04-26 Brian Cameron <[email protected]>
yippi
parents:
diff changeset
   705
         config = xkl_config_rec_new ();