This commit is contained in:
Jaime Ita Passos 2020-11-25 23:15:52 -03:00
parent bd3e1d37e6
commit 82bd4a1967
2 changed files with 75 additions and 55 deletions

View file

@ -3110,8 +3110,13 @@ static boolean M_ChangeStringCvar(INT32 choice)
char buf[MAXSTRINGLENGTH];
size_t len;
if (shiftdown && choice >= 32 && choice <= 127)
choice = shiftxform[choice];
#ifdef TEXTINPUTEVENTS
if (!cv_keyboardlocale.value)
#endif
{
if (shiftdown && choice >= 32 && choice <= 127)
choice = shiftxform[choice];
}
switch (choice)
{
@ -3194,10 +3199,29 @@ static void Command_Manual_f(void)
boolean M_TextInput(void)
{
// Of course return false if the menus are down...
menuitem_t *item = &(currentMenu->menuitems[itemOn]);
// Return false if the menus are not active.
if (!menuactive)
return false;
return ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_KEYHANDLER);
if (item->itemaction)
{
if ((item->status & IT_TYPE) == IT_KEYHANDLER)
{
void (*action)(INT32 choice) = item->itemaction;
if (action == M_HandleAddons)
return true;
else if (action == M_HandleSetupMultiPlayer)
return (itemOn == 0);
else if (action == M_HandleConnectIP)
return true;
}
else if ((item->status & IT_TYPE) == IT_CVAR)
return ((item->status & IT_CVARTYPE) == IT_CV_STRING);
}
return false;
}
//
@ -3427,8 +3451,14 @@ boolean M_Responder(event_t *ev)
// Handle menuitems which need a specific key handling
if (routine && (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_KEYHANDLER)
{
if (shiftdown && ch >= 32 && ch <= 127)
ch = shiftxform[ch];
#ifdef TEXTINPUTEVENTS
if (!(cv_keyboardlocale.value && M_TextInput()))
#endif
{
if (shiftdown && ch >= 32 && ch <= 127)
ch = shiftxform[ch];
}
routine(ch);
return true;
}
@ -6608,8 +6638,13 @@ static void M_AddonExec(INT32 ch)
#define len menusearch[0]
static boolean M_ChangeStringAddons(INT32 choice)
{
if (shiftdown && choice >= 32 && choice <= 127)
choice = shiftxform[choice];
#ifdef TEXTINPUTEVENTS
if (!cv_keyboardlocale.value)
#endif
{
if (shiftdown && choice >= 32 && choice <= 127)
choice = shiftxform[choice];
}
switch (choice)
{

View file

@ -277,19 +277,17 @@ static INT32 Impl_SDL_Scancode_To_Keycode(SDL_Keysym keysym, Uint32 type)
SDL_Scancode scancode = keysym.scancode;
SDL_Keycode keycode = keysym.sym;
boolean useqwerty = true;
boolean uselocale = (!!cv_usekeycodes.value);
boolean intextfield = (CON_AcceptInput() || M_TextInput() || HU_ChatActive());
boolean usekeycodes = (!!cv_usekeycodes.value);
boolean forceqwerty = (!!cv_forceqwerty.value);
#ifdef TEXTINPUTEVENTS
if (cv_keyboardlocale.value)
uselocale = true;
#else
if (cv_usekeycodes.value == 2
&& !(CON_AcceptInput() || M_TextInput() || HU_ChatActive()))
uselocale = false;
#endif
// Only use keycodes in text fields
if (cv_usekeycodes.value == 2 && !intextfield)
{
usekeycodes = false;
}
if (uselocale)
if (usekeycodes)
{
// Lactozilla: Use keycodes instead of scancodes, so that non-US keyboards can work.
switch (keycode)
@ -335,29 +333,14 @@ static INT32 Impl_SDL_Scancode_To_Keycode(SDL_Keysym keysym, Uint32 type)
return KEY_F1 + (keycode - SDLK_F1);
}
// Send key up events to avoid stuck movement keys
if (type != SDL_KEYUP && (!ctrldown))
{
#ifdef TEXTINPUTEVENTS
if (cv_keyboardlocale.value)
{
// console input
if (CON_AcceptInput())
return 0;
// menu text input
if (M_TextInput())
return 0;
// chat input
if (HU_ChatActive())
return 0;
}
#else
if (CON_AcceptInput() // console input
|| M_TextInput() // menu text input
|| HU_ChatActive()) // chat input
useqwerty = (cv_forceqwerty.value);
#endif
// Don't send key events if a text field is active.
// Send key up events to avoid stuck movement keys.
if (type != SDL_KEYUP && (!ctrldown) && cv_keyboardlocale.value && intextfield)
{
return 0;
}
#endif
switch (keycode)
{
@ -411,23 +394,35 @@ static INT32 Impl_SDL_Scancode_To_Keycode(SDL_Keysym keysym, Uint32 type)
default: break;
}
if (useqwerty)
if (forceqwerty)
{
if (scancode >= SDL_SCANCODE_A && scancode <= SDL_SCANCODE_Z)
{
return scancode - SDL_SCANCODE_A + 'a';
}
else if (scancode >= SDL_SCANCODE_1 && scancode <= SDL_SCANCODE_9)
{
return scancode - SDL_SCANCODE_1 + '1';
}
else if (scancode == SDL_SCANCODE_0)
{
return '0';
}
}
else
{
if (keycode >= SDLK_a && keycode <= SDLK_z)
{
return keycode - SDLK_a + 'a';
}
else if (keycode >= SDLK_1 && keycode <= SDLK_9)
{
return keycode - SDLK_1 + '1';
}
else if (keycode == SDLK_0)
{
return '0';
}
}
}
else
@ -477,21 +472,11 @@ static INT32 Impl_SDL_Scancode_To_Keycode(SDL_Keysym keysym, Uint32 type)
}
#ifdef TEXTINPUTEVENTS
// Send key up events to avoid stuck movement keys
if (type != SDL_KEYUP && (!ctrldown))
// Don't send key events if a text field is active.
// Send key up events to avoid stuck movement keys.
if (type != SDL_KEYUP && (!ctrldown) && cv_keyboardlocale.value && intextfield)
{
if (cv_keyboardlocale.value)
{
// console input
if (CON_AcceptInput())
return 0;
// menu text input
if (M_TextInput())
return 0;
// chat input
if (HU_ChatActive())
return 0;
}
return 0;
}
#endif