From 4e08eddcbd4ce67fc3879ac9ed67a9c75ef99780 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 11 Dec 2019 14:12:27 +1000 Subject: [PATCH libX11] Handle ssharp in XConvertCase() lowercase: LATIN SMALL LETTER SHARP S (U+00DF) uppercase: LATIN CAPITAL LETTER SHARP S (U+1E9E) The uppercase sharp s (XK_ssharp) is a relatively recent addition to unicode but was added to the relevant keyboard layouts in xkeyboard-config-2.25 (d1411e5e95c) https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/issues/144 Alas, the CapsLock behavior was broken on the finnish layout (maybe others). This was due to xkbcomp using XConvertCase() to determine whether a key requires the type FOUR_LEVEL_ALPHABETIC or FOUR_LEVEL_SEMIALPHABETIC. Let's make this function return the right lower/upper symbols for the sharp s and hope that the world won't get any worse because of it. https://gitlab.freedesktop.org/xorg/lib/libx11/issues/110 Signed-off-by: Peter Hutterer --- src/KeyBind.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/KeyBind.c b/src/KeyBind.c index d7c78b37..225581ca 100644 --- a/src/KeyBind.c +++ b/src/KeyBind.c @@ -466,6 +466,8 @@ UCSConvertCase( register unsigned code, *upper = 0x0178; else if (code == 0x00b5) /* micro sign */ *upper = 0x039c; + else if (code == 0x00df) /* ssharp */ + *upper = 0x1e9e; return; } @@ -595,6 +597,8 @@ UCSConvertCase( register unsigned code, } else if (code == 0x1e9b) *upper = 0x1e60; + else if (code == 0x1e9e) + *lower = XK_ssharp; } /* Greek Extended, U+1F00 to U+1FFF */ -- 2.23.0