82bbd34
--- gdm-2.24.0/daemon/gdm-session-direct.c	2008-08-21 00:31:47.000000000 -0400
82bbd34
+++ hacked/daemon/gdm-session-direct.c	2008-10-20 00:20:05.000000000 -0400
82bbd34
@@ -595,14 +595,41 @@
82bbd34
     return setlocale (LC_MESSAGES, NULL);
82bbd34
 }
82bbd34
 
82bbd34
+static char *
82bbd34
+get_system_default_layout (void)
82bbd34
+{
82bbd34
+    gchar *text, *p, *q;
82bbd34
+    gsize *length;
82bbd34
+    char *result;
82bbd34
+
82bbd34
+    result = NULL;
82bbd34
+    if (g_file_get_contents ("/etc/sysconfig/keyboard", &text, &length, NULL)) {
82bbd34
+        p = strstr (text, "KEYTABLE=\"");
82bbd34
+        if (p) {
82bbd34
+            p += strlen ("KEYTABLE=\"");
82bbd34
+            q = strchr (p, '"');
82bbd34
+            if (q) {
82bbd34
+                result = g_strndup (p, q - p);
82bbd34
+            }
82bbd34
+        }
82bbd34
+        g_free (text);
82bbd34
+    }
82bbd34
+
82bbd34
+    if (!result) {
82bbd34
+        result = g_strdup ("us");
82bbd34
+    }
82bbd34
+
82bbd34
+    return result;
82bbd34
+}
82bbd34
+
82bbd34
 static const char *
82bbd34
 get_default_layout_name (GdmSessionDirect *session)
82bbd34
 {
82bbd34
-    if (session->priv->saved_layout != NULL) {
82bbd34
-                return session->priv->saved_layout;
82bbd34
+    if (!session->priv->saved_layout) {
82bbd34
+        session->priv->saved_layout = get_system_default_layout ();
82bbd34
     }
82bbd34
 
82bbd34
-    return "us";
82bbd34
+    return session->priv->saved_layout;
82bbd34
 }
82bbd34
 
82bbd34
 static char *
82bbd34
@@ -1971,9 +1998,10 @@
82bbd34
                                                      "GDM_LANG",
82bbd34
                                                      get_language_name (session));
82bbd34
 
82bbd34
-        gdm_session_direct_set_environment_variable (session,
82bbd34
-                                                     "GDM_KEYBOARD_LAYOUT",
82bbd34
-                                                     get_layout_name (session));
82bbd34
+	if (g_strcmp0 (get_layout_name (session), get_system_default_layout ()) != 0)
82bbd34
+        	gdm_session_direct_set_environment_variable (session,
82bbd34
+                                                     	     "GDM_KEYBOARD_LAYOUT",
82bbd34
+                                                             get_layout_name (session));
82bbd34
 
82bbd34
         gdm_session_direct_set_environment_variable (session,
82bbd34
                                                      "DISPLAY",
82bbd34
--- gdm-2.24.0/daemon/gdm-session-settings.c	2008-07-10 11:07:42.000000000 -0400
82bbd34
+++ hacked/daemon/gdm-session-settings.c	2008-10-19 23:55:02.000000000 -0400
82bbd34
@@ -149,8 +149,7 @@
82bbd34
 {
82bbd34
         g_return_if_fail (GDM_IS_SESSION_SETTINGS (settings));
82bbd34
 
82bbd34
-        if (settings->priv->layout_name == NULL ||
82bbd34
-            strcmp (settings->priv->layout_name, layout_name) != 0) {
82bbd34
+        if (g_strcmp0 (settings->priv->layout_name, layout_name) != 0) {
82bbd34
                 settings->priv->layout_name = g_strdup (layout_name);
82bbd34
                 g_object_notify (G_OBJECT (settings), "layout-name");
82bbd34
         }