diff --git a/src/keysym.c b/src/keysym.c index 873a7ca99..e012cb6d6 100644 --- a/src/keysym.c +++ b/src/keysym.c @@ -801,8 +801,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; } @@ -821,6 +821,16 @@ 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_ssharp) + *upper = XKB_KEYSYM_UNICODE_OFFSET + 0x1e9e; + 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)