fixed handling of shift+tab on a system that can map ISO_Left_Tab.

now tries to map ISO_Left_Tab without shift first then falls back
to Tab (note that if ISO_Left_Tab can be mapped but requires a
modifier then the modifier will be added).  also changed attempt
to map ISO_Left_Tab as a backup to Tab to request the shift
modifier whether or not the primary screen requested it.
This commit is contained in:
crs 2002-05-03 12:23:48 +00:00
parent afa14b67c2
commit b19fdd86cf
1 changed files with 11 additions and 1 deletions

View File

@ -615,6 +615,15 @@ bool CXWindowsSecondaryScreen::findKeyCode(
KeyID id, KeyID id,
unsigned int maskIn) const unsigned int maskIn) const
{ {
// if XK_Tab is requested with shift active then try XK_ISO_Left_Tab
// instead. if that doesn't work, we'll fall back to XK_Tab with
// shift active. this is to handle primary screens that don't map
// XK_ISO_Left_Tab sending events to secondary screens that do.
if (id == XK_Tab && (maskIn & ShiftMask) != 0) {
id = XK_ISO_Left_Tab;
maskIn &= ~ShiftMask;
}
// find a keycode to generate id. XKeysymToKeycode() almost does // find a keycode to generate id. XKeysymToKeycode() almost does
// what we need but won't tell us which index to use with the // what we need but won't tell us which index to use with the
// keycode. return false if there's no keycode to generate id. // keycode. return false if there's no keycode to generate id.
@ -666,7 +675,8 @@ bool CXWindowsSecondaryScreen::findKeyCode(
break; break;
case XK_ISO_Left_Tab: case XK_ISO_Left_Tab:
id = XK_Tab; id = XK_Tab;
maskIn |= ShiftMask;
break; break;
default: default: