To support keymaps with only upper (or lower) case keysyms we now
use Xlib to convert an unmatched keysym to upper and lower case and use whichever, if any, is not the same as the original keysym. This supports case conversion in any language that Xlib supports it in.
This commit is contained in:
parent
dedb48d244
commit
116005d64f
|
@ -28,7 +28,6 @@
|
|||
# include <X11/Xutil.h>
|
||||
# define XK_MISCELLANY
|
||||
# define XK_XKB_KEYS
|
||||
# define XK_LATIN1
|
||||
# include <X11/keysymdef.h>
|
||||
# if defined(HAVE_X11_EXTENSIONS_XTEST_H)
|
||||
# include <X11/extensions/XTest.h>
|
||||
|
@ -1269,14 +1268,15 @@ CXWindowsSecondaryScreen::findKey(KeyID id, KeyModifierMask& mask) const
|
|||
|
||||
// find the keycodes that generate the keysym
|
||||
KeyCodeIndex index = m_keycodeMap.find(keysym);
|
||||
if (index == noKey() && keysym >= XK_a && keysym <= XK_z) {
|
||||
// for an unfound lower case alpha, try the equivalent upper
|
||||
// case (as some keymaps only include the upper case, notably
|
||||
// Sun Solaris).
|
||||
// Note that this depends on the keysyms for 'a' through 'z'
|
||||
// and 'A' through 'Z' being contiguous. This is currently
|
||||
// the case and extremely unlikely to change.
|
||||
index = m_keycodeMap.find(keysym + XK_A - XK_a);
|
||||
if (index == noKey()) {
|
||||
// try upper/lower case (as some keymaps only include the
|
||||
// upper case, notably Sun Solaris).
|
||||
KeySym lower, upper;
|
||||
XConvertCase(keysym, &lower, &upper);
|
||||
if (lower != keysym)
|
||||
index = m_keycodeMap.find(lower);
|
||||
else if (upper != keysym)
|
||||
index = m_keycodeMap.find(upper);
|
||||
}
|
||||
if (index == noKey()) {
|
||||
// try backup keysym for certain keys (particularly the numpad
|
||||
|
|
Loading…
Reference in New Issue