Skip to content

Commit 68c474b

Browse files
committed
platform: filter out right-sided modifiers returned by TKey when normalizing keys
1 parent f07e275 commit 68c474b

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

source/platform/termio.cpp

+9-8
Original file line numberDiff line numberDiff line change
@@ -332,14 +332,15 @@ void TermIO::keyModsOff(ConsoleCtl &con) noexcept
332332

333333
void TermIO::normalizeKey(KeyDownEvent &keyDown) noexcept
334334
{
335-
TKey key(keyDown);
336-
if (key.mods & (kbShift | kbCtrlShift | kbLeftAlt))
335+
TKey tKey(keyDown);
336+
ushort newMods = tKey.mods & (kbShift | kbLeftCtrl | kbLeftAlt);
337+
if (newMods != 0)
337338
{
338339
// Modifier precedece: Shift < Ctrl < Alt.
339-
int largestMod = (key.mods & kbLeftAlt) ? 2
340-
: (key.mods & kbCtrlShift) ? 1
340+
int largestMod = (newMods & kbLeftAlt) ? 2
341+
: (newMods & kbLeftShift) ? 1
341342
: 0;
342-
if (ushort keyCode = moddedKeyCodes[key.code][largestMod])
343+
if (ushort keyCode = moddedKeyCodes[tKey.code][largestMod])
343344
{
344345
keyDown.keyCode = keyCode;
345346
if (keyDown.charScan.charCode < ' ')
@@ -350,9 +351,9 @@ void TermIO::normalizeKey(KeyDownEvent &keyDown) noexcept
350351
// when available.
351352
ushort origMods = keyDown.controlKeyState;
352353
keyDown.controlKeyState =
353-
((origMods | key.mods) & ~(kbCtrlShift | kbAltShift))
354-
| ((origMods & kbCtrlShift ? origMods : key.mods) & kbCtrlShift)
355-
| ((origMods & kbAltShift ? origMods : key.mods) & kbAltShift)
354+
((origMods | newMods) & ~(kbCtrlShift | kbAltShift))
355+
| ((origMods & kbCtrlShift ? origMods : newMods) & kbCtrlShift)
356+
| ((origMods & kbAltShift ? origMods : newMods) & kbAltShift)
356357
;
357358
}
358359

0 commit comments

Comments
 (0)