]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
find_legacy_keymap: fix empty variant matching
authorAdam Williamson <awilliam@redhat.com>
Fri, 15 Sep 2023 22:35:36 +0000 (15:35 -0700)
committerAdam Williamson <awilliam@redhat.com>
Tue, 19 Sep 2023 00:06:02 +0000 (17:06 -0700)
We should give a match bonus if the X context variant is empty
and the xvariant column in kbd-model-map is "-" (which means
none). Currently, we don't, which means that if you call this
on a context with layouts bg,us and no variant, you get the
console layout bg_pho-utf8 instead of bg_bds-utf8 (because both
score the same, and the bg_pho-utf8 row comes first). You should
get bg_bds-utf8 in this case.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
src/locale/localed-util.c
src/locale/test-localed-util.c

index 02fac9786b27f5140805e34f19b142a6dfc1524c..6a05b50a315798a1d895f05ba97670e85aa9483d 100644 (file)
@@ -825,7 +825,7 @@ int find_legacy_keymap(const X11Context *xc, char **ret) {
                         if (isempty(xc->model) || streq_ptr(xc->model, a[2])) {
                                 matching++;
 
-                                if (streq_ptr(xc->variant, a[3])) {
+                                if (streq_ptr(xc->variant, a[3]) || (isempty(xc->variant) && streq(a[3], "-"))) {
                                         matching++;
 
                                         if (streq_ptr(xc->options, a[4]))
index cb66dffd4888c128f1d9c7ae5db4bcc105a20449..a19d80a96724fa4ef3c24c2802b78cf0f886c558 100644 (file)
@@ -173,6 +173,18 @@ TEST(x11_convert_to_vconsole) {
         assert_se(streq(vc.keymap, "es-dvorak"));
         vc_context_clear(&vc);
 
+        /* es no-variant test is not very good as the desired match
+        comes first in the list so will win if both candidates score
+        the same. in this case the desired match comes second so will
+        not win unless we correctly give the no-variant match a bonus
+        */
+        log_info("/* test without variant, desired match second (bg,us:) */");
+        assert_se(free_and_strdup(&xc.layout, "bg,us") >= 0);
+        assert_se(free_and_strdup(&xc.variant, NULL) >= 0);
+        assert_se(x11_convert_to_vconsole(&xc, &vc) >= 0);
+        assert_se(streq(vc.keymap, "bg_bds-utf8"));
+        vc_context_clear(&vc);
+
         log_info("/* test with old mapping (fr:latin9) */");
         assert_se(free_and_strdup(&xc.layout, "fr") >= 0);
         assert_se(free_and_strdup(&xc.variant, "latin9") >= 0);