Updated fix for Bug #934.
SDL1 and SDL2 have slightly different behavior regarding detection of the NUM LOCK key. Both branches should now interpret keypad input when in text-input mode as only text when NUM LOCK is on.
This commit is contained in:
@@ -361,10 +361,9 @@ is_numpad_char_event (const SDL_Event *Event)
|
|||||||
{
|
{
|
||||||
return in_character_mode &&
|
return in_character_mode &&
|
||||||
(Event->type == SDL_KEYDOWN || Event->type == SDL_KEYUP) &&
|
(Event->type == SDL_KEYDOWN || Event->type == SDL_KEYUP) &&
|
||||||
(Event->key.keysym.mod & KMOD_NUM) && /* NumLock is ON */
|
|
||||||
Event->key.keysym.unicode > 0 && /* Printable char */
|
Event->key.keysym.unicode > 0 && /* Printable char */
|
||||||
Event->key.keysym.sym >= SDLK_KP0 && /* Keypad key */
|
Event->key.keysym.sym >= SDLK_KP0 && /* Keypad key */
|
||||||
Event->key.keysym.sym <= SDLK_KP_PLUS;
|
Event->key.keysym.sym <= SDLK_KP_PERIOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -427,6 +426,17 @@ ProcessInputEvent (const SDL_Event *Event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
static inline int
|
||||||
|
is_numpad_char_event (const SDL_Event *Event)
|
||||||
|
{
|
||||||
|
return in_character_mode &&
|
||||||
|
(Event->type == SDL_KEYDOWN || Event->type == SDL_KEYUP) &&
|
||||||
|
(Event->key.keysym.mod & KMOD_NUM) && /* Numlock on */
|
||||||
|
Event->key.keysym.sym >= SDLK_KP_1 && /* Keypad key */
|
||||||
|
Event->key.keysym.sym <= SDLK_KP_PERIOD;
|
||||||
|
/* Note that in the SDL2 enumeration 0 comes after 9 and before period */
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ProcessInputEvent (const SDL_Event *Event)
|
ProcessInputEvent (const SDL_Event *Event)
|
||||||
{
|
{
|
||||||
@@ -447,8 +457,10 @@ ProcessInputEvent (const SDL_Event *Event)
|
|||||||
SDL_StopTextInput ();
|
SDL_StopTextInput ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Block numpad input when NUM_LOCK is on */
|
if (!is_numpad_char_event(Event))
|
||||||
|
{
|
||||||
VControl_HandleEvent (Event);
|
VControl_HandleEvent (Event);
|
||||||
|
}
|
||||||
|
|
||||||
if (Event->type == SDL_TEXTINPUT)
|
if (Event->type == SDL_TEXTINPUT)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user