Fix INTERNATIONAL keys wouldn't work properly

since those keys aren't exist in US keyboard, we shouldn't treat (and convert) as a US keyboard keycodes (on Sunshine).
This commit is contained in:
rinsuki 2025-02-11 16:47:17 +09:00 committed by Cameron Gutman
parent 9491884cb4
commit fabb4fdadc

View File

@ -148,6 +148,7 @@ void SdlInputHandler::handleKeyEvent(SDL_KeyboardEvent* event)
{
short keyCode;
char modifiers;
bool shouldNotConvertToScanCodeOnServer = false;
if (event->repeat) {
// Ignore repeat key down events
@ -402,8 +403,9 @@ void SdlInputHandler::handleKeyEvent(SDL_KeyboardEvent* event)
case SDL_SCANCODE_LEFTBRACKET:
keyCode = 0xDB;
break;
case SDL_SCANCODE_BACKSLASH:
case SDL_SCANCODE_INTERNATIONAL3:
shouldNotConvertToScanCodeOnServer = true;
case SDL_SCANCODE_BACKSLASH:
keyCode = 0xDC;
break;
case SDL_SCANCODE_RIGHTBRACKET:
@ -412,8 +414,9 @@ void SdlInputHandler::handleKeyEvent(SDL_KeyboardEvent* event)
case SDL_SCANCODE_APOSTROPHE:
keyCode = 0xDE;
break;
case SDL_SCANCODE_NONUSBACKSLASH:
case SDL_SCANCODE_INTERNATIONAL1:
shouldNotConvertToScanCodeOnServer = true;
case SDL_SCANCODE_NONUSBACKSLASH:
keyCode = 0xE2;
break;
case SDL_SCANCODE_LANG1:
@ -438,8 +441,9 @@ void SdlInputHandler::handleKeyEvent(SDL_KeyboardEvent* event)
m_KeysDown.remove(keyCode);
}
LiSendKeyboardEvent(0x8000 | keyCode,
LiSendKeyboardEvent2(0x8000 | keyCode,
event->state == SDL_PRESSED ?
KEY_ACTION_DOWN : KEY_ACTION_UP,
modifiers);
modifiers,
shouldNotConvertToScanCodeOnServer ? SS_KBE_FLAG_NON_NORMALIZED : 0);
}