Hello community,
here is the log from the commit of package gdm for openSUSE:Factory
checked in at Fri Jun 12 18:29:24 CEST 2009.
--------
--- GNOME/gdm/gdm.changes 2009-05-15 11:10:45.000000000 +0200
+++ gdm/gdm.changes 2009-06-09 23:57:02.000000000 +0200
@@ -1,0 +2,11 @@
+Tue Jun 9 23:54:48 CEST 2009 - vuntz@novell.com
+
+- Update gdm-keyboard-from-sysconfig.patch: we correctly interpret
+ the keyboard layout specified in sysconfig thanks to a map file
+ from sax that we use to convert the layout name to a X layout.
+- Add gdm-keyboard-invalid-user-data.patch: the old gdm was not
+ setting a valid keyboard layout in some cases, and this invalid
+ layout ended up in ~/.dmrc. This patch makes gdm detect this and
+ revert the user data to the default layout.
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
New:
----
gdm-keyboard-invalid-user-data.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gdm.spec ++++++
--- /var/tmp/diff_new_pack.r31661/_old 2009-06-12 18:27:36.000000000 +0200
+++ /var/tmp/diff_new_pack.r31661/_new 2009-06-12 18:27:36.000000000 +0200
@@ -42,7 +42,7 @@
License: GPL v2 or later
Group: System/GUI/GNOME
Version: 2.26.1
-Release: 2
+Release: 3
Summary: The GNOME 2.x Display Manager
Source: %{name}-%{version}.tar.bz2
Source1: gdm.pamd
@@ -84,10 +84,12 @@
Patch30: gdm-dbus-allow-introspection.patch
# PATCH-FIX-OPENSUSE gdm-gconf-path.patch vuntz@novell.com -- Fix gconf paths to be consistent with the ones used in openSUSE
Patch31: gdm-gconf-path.patch
-# PATCH-FIX-OPENSUSE gdm-keyboard-from-hal.patch bnc492284 bnc478083 vuntz@novell.com -- Read the keyboard layout from hal
+# PATCH-FIX-UPSTREAM gdm-keyboard-from-hal.patch bnc492284 bnc478083 vuntz@novell.com -- Read the keyboard layout from hal
Patch32: gdm-keyboard-from-hal.patch
-# PATCH-FIX-UPSTREAM gdm-keyboard-from-sysconfig.patch bnc432360 bnc478083 hpj@novell.com -- Read keyboard options from sysconfig (for openSUSE <= 11.1, since keyboard layout wasn't in hal)
+# PATCH-FIX-OPENSUSE gdm-keyboard-from-sysconfig.patch bnc432360 bnc478083 hpj@novell.com -- Read keyboard options from sysconfig (for openSUSE <= 11.1, since keyboard layout wasn't in hal)
Patch33: gdm-keyboard-from-sysconfig.patch
+# PATCH-FIX-UPSTREAM gdm-keyboard-invalid-user-data.patch bgo585263 vuntz@novell.com -- Ignore invalid keyboard layout from ~/.dmrc
+Patch34: gdm-keyboard-invalid-user-data.patch
# PATCH-FIX-OPENSUSE gdm-selinux.patch -- Small changes to make it compile fine with SELinux
Patch60: gdm-selinux.patch
Url: http://www.gnome.org/
@@ -176,6 +178,7 @@
%else
%patch33 -p1
%endif
+%patch34 -p1
%patch60
gnome-patch-translation-update
@@ -284,6 +287,14 @@
%files lang -f %{name}.lang
%changelog
+* Tue Jun 09 2009 vuntz@novell.com
+- Update gdm-keyboard-from-sysconfig.patch: we correctly interpret
+ the keyboard layout specified in sysconfig thanks to a map file
+ from sax that we use to convert the layout name to a X layout.
+- Add gdm-keyboard-invalid-user-data.patch: the old gdm was not
+ setting a valid keyboard layout in some cases, and this invalid
+ layout ended up in ~/.dmrc. This patch makes gdm detect this and
+ revert the user data to the default layout.
* Fri May 15 2009 vuntz@novell.com
- Add gdm-keyboard-from-hal.patch to read the default keyboard
layout from hal on 11.2, should fix bnc#478083 and bnc#492284.
++++++ gdm-keyboard-from-sysconfig.patch ++++++
--- /var/tmp/diff_new_pack.r31661/_old 2009-06-12 18:27:37.000000000 +0200
+++ /var/tmp/diff_new_pack.r31661/_new 2009-06-12 18:27:37.000000000 +0200
@@ -1,7 +1,7 @@
-diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
-index 75a1cec..15ea4e3 100644
---- a/daemon/gdm-session-direct.c
-+++ b/daemon/gdm-session-direct.c
+Index: gdm-2.26.1/daemon/gdm-session-direct.c
+===================================================================
+--- gdm-2.26.1.orig/daemon/gdm-session-direct.c
++++ gdm-2.26.1/daemon/gdm-session-direct.c
@@ -45,6 +45,8 @@
#include
#include
@@ -11,106 +11,94 @@
#include "gdm-session-direct.h"
#include "gdm-session.h"
#include "gdm-session-private.h"
-@@ -600,8 +602,21 @@ get_default_language_name (GdmSessionDirect *session)
- 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 = gdm_sysconfig_load_value ("/etc/sysconfig/keyboard", "KEYTABLE");
-+
-+ if (session->priv->saved_layout) {
-+ if (g_str_has_suffix (session->priv->saved_layout, ".gz"))
-+ *(session->priv->saved_layout + strlen (session->priv->saved_layout) - strlen (".gz")) = '\0';
-+ if (g_str_has_suffix (session->priv->saved_layout, ".map"))
-+ *(session->priv->saved_layout + strlen (session->priv->saved_layout) - strlen (".map")) = '\0';
-+
-+ /* Lame attempt to make it map correctly from some console keymaps, e.g.
-+ * fr-latin1, no-latin1 -> fr, no */
-+ if (strchr (session->priv->saved_layout, '-'))
-+ *(strchr (session->priv->saved_layout, '-')) = '\0';
-+
-+ return session->priv->saved_layout;
- }
-
- return "us";
-diff --git a/gui/simple-greeter/gdm-layouts.c b/gui/simple-greeter/gdm-layouts.c
-index 479d5ea..fba3147 100644
---- a/gui/simple-greeter/gdm-layouts.c
-+++ b/gui/simple-greeter/gdm-layouts.c
-@@ -70,14 +70,35 @@ xci_desc_to_utf8 (XklConfigItem * ci)
- g_locale_to_utf8 (sd, -1, NULL, NULL, NULL);
+@@ -598,12 +600,88 @@ get_default_language_name (GdmSessionDir
+ return setlocale (LC_MESSAGES, NULL);
}
-+static gchar *
-+canonicalize_layout_name (const gchar *name)
++static char *
++_get_layout_name_from_sax_map (const char *layout)
+{
-+ gchar *canon_name;
++ char *map_file;
++ char **lines;
++ char **fields;
++ int i;
++ char *retval;
+
-+ if (!name)
++ if (!layout)
+ return NULL;
+
-+ canon_name = g_strdup (name);
++ if (!g_file_get_contents ("/usr/share/sax/sysp/maps/Keyboard.map",
++ &map_file, NULL, NULL))
++ return NULL;
++
++ lines = g_strsplit (map_file, "\n", 0);
++ g_free (map_file);
++
++ retval = NULL;
++ for (i = 0; lines[i] != NULL; i++) {
++ if (lines[i][0] == '\n' || lines[i][0] == '#')
++ continue;
+
-+ if (g_str_has_suffix (canon_name, ".gz"))
-+ *(canon_name + strlen (canon_name) - strlen (".gz")) = '\0';
-+ if (g_str_has_suffix (canon_name, ".map"))
-+ *(canon_name + strlen (canon_name) - strlen (".map")) = '\0';
++ fields = g_strsplit (lines[i], ":", 0);
+
-+ return canon_name;
++ g_strstrip (fields[0]);
++ if (fields[0] && fields[1] && fields[2] &&
++ strcmp (fields[0], layout) == 0) {
++ char *add_layouts;
++
++ g_strstrip (fields[2]);
++
++ add_layouts = strchr (fields[2], ',');
++ if (add_layouts)
++ add_layouts[0] = '\0';
++
++ retval = g_strdup (fields[2]);
++ g_strfreev (fields);
++ break;
++ }
++
++ g_strfreev (fields);
++ }
++
++ g_strfreev (lines);
++
++ return retval;
+}
+
- static void
- add_variant (XklConfigRegistry *config,
- const XklConfigItem *item,
- gpointer data)
- {
- LayoutData *ldata = data;
-+ gchar *name;
-
-- ldata->list = g_slist_prepend (ldata->list, g_strdup_printf ("%s\t%s", ldata->layout, item->name));
-+ name = canonicalize_layout_name (item->name);
-+ ldata->list = g_slist_prepend (ldata->list, g_strdup_printf ("%s\t%s", ldata->layout, name));
-+ g_free (name);
- }
-
- static void
-@@ -86,11 +107,16 @@ add_layout (XklConfigRegistry *config,
- gpointer data)
++static char *
++_get_default_layout_name_from_sysconfig (void)
++{
++ char *sysconfig_layout;
++ char *layout;
++
++ sysconfig_layout = gdm_sysconfig_load_value ("/etc/sysconfig/keyboard", "KEYTABLE");
++ if (!sysconfig_layout)
++ return NULL;
++
++ if (g_str_has_suffix (sysconfig_layout, ".gz"))
++ *(sysconfig_layout + strlen (sysconfig_layout) - strlen (".gz")) = '\0';
++ if (g_str_has_suffix (sysconfig_layout, ".map"))
++ *(sysconfig_layout + strlen (sysconfig_layout) - strlen (".map")) = '\0';
++
++ layout = _get_layout_name_from_sax_map (sysconfig_layout);
++
++ if (layout) {
++ g_free (sysconfig_layout);
++ return layout;
++ } else
++ return sysconfig_layout;
++}
++
+ static const char *
+ get_default_layout_name (GdmSessionDirect *session)
{
- LayoutData *ldata = data;
-+ gchar *name;
-
-- ldata->layout = item->name;
-- ldata->list = g_slist_prepend (ldata->list, g_strdup (item->name));
-- xkl_config_registry_foreach_layout_variant (config, item->name, add_variant, data);
-+ name = canonicalize_layout_name (item->name);
-+
-+ ldata->layout = name;
-+ ldata->list = g_slist_prepend (ldata->list, g_strdup (name));
-+ xkl_config_registry_foreach_layout_variant (config, name, add_variant, data);
- ldata->layout = NULL;
+- if (session->priv->saved_layout != NULL) {
++ if (!session->priv->saved_layout)
++ session->priv->saved_layout = _get_default_layout_name_from_sysconfig ();
+
-+ g_free (name);
- }
- #endif
-
-@@ -108,7 +134,7 @@ gdm_get_layout_from_name (const char *name)
-
- init_xkl ();
++ if (session->priv->saved_layout)
+ return session->priv->saved_layout;
+- }
-- id1 = g_strdup (name);
-+ id1 = canonicalize_layout_name (name);
- p = strchr (id1, '\t');
-
- if (p != NULL) {
-@@ -207,7 +233,7 @@ gdm_layout_activate (const char *layout)
- config->options = g_strdupv (initial_config->options);
- } else {
- config->layouts = g_new0 (char *, 2);
-- config->layouts[0] = g_strdup (layout);
-+ config->layouts[0] = canonicalize_layout_name (layout);
-
- p = strchr (config->layouts[0], '\t');
- if (p != NULL) {
+ return "us";
+ }
++++++ gdm-keyboard-invalid-user-data.patch ++++++
diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c
index 6aded10..a5bf2c8 100644
--- a/gui/simple-greeter/gdm-greeter-panel.c
+++ b/gui/simple-greeter/gdm-greeter-panel.c
@@ -724,6 +724,20 @@ gdm_greeter_panel_set_default_layout_name (GdmGreeterPanel *panel,
g_return_if_fail (GDM_IS_GREETER_PANEL (panel));
if (layout_name != NULL &&
+ !gdm_layout_is_valid (layout_name)) {
+ const char *init_layout;
+
+ init_layout = gdm_layout_get_init_layout ();
+
+ g_debug ("GdmGreeterPanel: default layout %s is invalid, resetting to: %s",
+ layout_name, init_layout ? init_layout : "null");
+
+ g_signal_emit (panel, signals[LAYOUT_SELECTED], 0, init_layout);
+
+ layout_name = init_layout;
+ }
+
+ if (layout_name != NULL &&
!gdm_option_widget_lookup_item (GDM_OPTION_WIDGET (panel->priv->layout_option_widget),
layout_name, NULL, NULL, NULL)) {
gdm_recent_option_widget_add_item (GDM_RECENT_OPTION_WIDGET (panel->priv->layout_option_widget),
diff --git a/gui/simple-greeter/gdm-layouts.c b/gui/simple-greeter/gdm-layouts.c
index dc35094..59f6706 100644
--- a/gui/simple-greeter/gdm-layouts.c
+++ b/gui/simple-greeter/gdm-layouts.c
@@ -189,6 +189,41 @@ gdm_get_all_layout_names (void)
#endif
}
+gboolean
+gdm_layout_is_valid (const char *layout)
+{
+#ifdef HAVE_LIBXKLAVIER
+ XklConfigItem *item;
+ gboolean retval;
+
+ item = xkl_config_item_new ();
+ g_snprintf (item->name, XKL_MAX_CI_NAME_LENGTH, "%s", layout);
+
+ retval = xkl_config_registry_find_layout (config_registry, item);
+
+ g_object_unref (item);
+
+ return retval;
+#else
+ return TRUE;
+#endif
+}
+
+const char *
+gdm_layout_get_init_layout (void)
+{
+#ifdef HAVE_LIBXKLAVIER
+ init_xkl ();
+
+ if (initial_config->layouts)
+ return initial_config->layouts[0];
+ else
+ return NULL;
+#else
+ return NULL;
+#endif
+}
+
void
gdm_layout_activate (const char *layout)
{
diff --git a/gui/simple-greeter/gdm-layouts.h b/gui/simple-greeter/gdm-layouts.h
index a87b620..bf1afba 100644
--- a/gui/simple-greeter/gdm-layouts.h
+++ b/gui/simple-greeter/gdm-layouts.h
@@ -24,9 +24,11 @@
G_BEGIN_DECLS
-char * gdm_get_layout_from_name (const char *name);
-char ** gdm_get_all_layout_names (void);
-void gdm_layout_activate (const char *layout);
+char * gdm_get_layout_from_name (const char *name);
+char ** gdm_get_all_layout_names (void);
+gboolean gdm_layout_is_valid (const char *layout);
+const char * gdm_layout_get_init_layout (void);
+void gdm_layout_activate (const char *layout);
G_END_DECLS
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org