From 5c7c79970a2800b6248e829464676e1f09c5f43d Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Thu, 14 Dec 2023 15:18:24 +0100 Subject: [PATCH] keysyms: Fix case mapping for 3 Latin 1 keysyms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed the upper case mappings for: - XKB_KEY_ydiaeresis - XKB_KEY_mu - XKB_KEY_ssharp Note: In Unicode, the upper case of “ß” (U+00DF) is *not* “ẞ” (U+1E9E) but “SS”. “ẞ” is reserved for text in capitals. --- src/keysym.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/keysym.c b/src/keysym.c index 4e19c4a..6816224 100644 --- a/src/keysym.c +++ b/src/keysym.c @@ -618,8 +618,6 @@ UCSConvertCase(uint32_t code, xkb_keysym_t *lower, xkb_keysym_t *upper) *upper = 0x0178; else if (code == 0x00b5) /* micro sign */ *upper = 0x039c; - else if (code == 0x00df) /* ssharp */ - *upper = 0x1e9e; return; } @@ -796,8 +794,8 @@ UCSConvertCase(uint32_t code, xkb_keysym_t *lower, xkb_keysym_t *upper) static void XConvertCase(xkb_keysym_t sym, xkb_keysym_t *lower, xkb_keysym_t *upper) { - /* Latin 1 keysym */ - if (sym < 0x100) { + /* Latin 1 keysym (first part: fast path) */ + if (sym < 0xb5) { UCSConvertCase(sym, lower, upper); return; } @@ -816,6 +814,14 @@ XConvertCase(xkb_keysym_t sym, xkb_keysym_t *lower, xkb_keysym_t *upper) *upper = sym; switch(sym >> 8) { + case 0: /* Latin 1 (second part) */ + if (sym == XKB_KEY_mu) + *upper = XKB_KEY_Greek_MU; + else if (sym == XKB_KEY_ydiaeresis) + *upper = XKB_KEY_Ydiaeresis; + else + UCSConvertCase(sym, lower, upper); + break; case 1: /* Latin 2 */ /* Assume the KeySym is a legal value (ignore discontinuities) */ if (sym == XKB_KEY_Aogonek)