1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-06 16:59:03 +03:00

localed: handle multiple X11 kbd layouts

https://bugs.freedesktop.org/show_bug.cgi?id=41341
This commit is contained in:
Lennart Poettering 2011-09-29 19:44:32 +02:00
parent f176b5c296
commit a0ccd2acab

View File

@ -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;
if (streq_ptr(x11_model, a[2])) {
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_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++;
}
}
}