[systemd-commits] src/localed.c
Lennart Poettering
lennart at kemper.freedesktop.org
Thu Sep 29 10:45:00 PDT 2011
src/localed.c | 44 ++++++++++++++++++++++++++++++++++++--------
1 file changed, 36 insertions(+), 8 deletions(-)
New commits:
commit a0ccd2acab443f5fa33e464a7e2f756dff2a5e35
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Sep 29 19:44:32 2011 +0200
localed: handle multiple X11 kbd layouts
https://bugs.freedesktop.org/show_bug.cgi?id=41341
diff --git a/src/localed.c b/src/localed.c
index 16557b6..e627c3a 100644
--- a/src/localed.c
+++ b/src/localed.c
@@ -860,18 +860,46 @@ static int convert_x11_to_vconsole(DBusConnection *connection) {
break;
/* Determine how well matching this entry is */
- if (streq_ptr(x11_layout, a[1])) {
- matching ++;
+ if (streq_ptr(x11_layout, a[1]))
+ /* If we got an exact match, this is best */
+ matching = 10;
+ else {
+ size_t x;
+
+ x = strcspn(x11_layout, ",");
+
+ /* We have multiple X layouts, look
+ * for an entry that matches our key
+ * with the everything but the first
+ * layout stripped off. */
+ if (x > 0 &&
+ strlen(a[1]) == x &&
+ strncmp(x11_layout, a[1], x) == 0)
+ matching = 5;
+ else {
+ size_t w;
+
+ /* If that didn't work, strip
+ * off the other layouts from
+ * the entry, too */
+
+ w = strcspn(a[1], ",");
+
+ if (x > 0 && x == w &&
+ memcmp(x11_layout, a[1], x) == 0)
+ matching = 1;
+ }
+ }
+
+ if (matching > 0 &&
+ streq_ptr(x11_model, a[2])) {
+ matching++;
- if (streq_ptr(x11_model, a[2])) {
+ if (streq_ptr(x11_variant, a[3])) {
matching++;
- if (streq_ptr(x11_variant, a[3])) {
+ if (streq_ptr(x11_options, a[4]))
matching++;
-
- if (streq_ptr(x11_options, a[4]))
- matching++;
- }
}
}
More information about the systemd-commits
mailing list