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