Skip to content

Commit

Permalink
find_legacy_keymap: fix empty variant matching
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
AdamWill committed Sep 19, 2023
1 parent 5a77fbb commit bf09ab0
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/locale/localed-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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]))
Expand Down
12 changes: 12 additions & 0 deletions src/locale/test-localed-util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit bf09ab0

Please sign in to comment.