diff --git a/lib/platform/CXWindowsSecondaryScreen.cpp b/lib/platform/CXWindowsSecondaryScreen.cpp index 80a74d43..1bacd828 100644 --- a/lib/platform/CXWindowsSecondaryScreen.cpp +++ b/lib/platform/CXWindowsSecondaryScreen.cpp @@ -28,6 +28,7 @@ # include # define XK_MISCELLANY # define XK_XKB_KEYS +# define XK_LATIN1 # include # if defined(HAVE_X11_EXTENSIONS_XTEST_H) # include @@ -1268,6 +1269,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 backup keysym for certain keys (particularly the numpad // keys since most laptops don't have a separate numpad and the