report ctrl/alt/super + printable key as keydown, not textinput

This commit is contained in:
Tim Felgentreff 2020-11-29 14:02:22 +01:00
parent dd6e830473
commit afafb9354d
2 changed files with 10 additions and 7 deletions
src
guichan/sdl
video

View file

@ -133,7 +133,7 @@ namespace gcn
case SDL_TEXTINPUT:
{
char* text = event.text.text;
if ((uint8_t)text[0] < 128) {
if ((uint8_t)text[0] >= 32 || (uint8_t)text[0] < 128) {
mLastKey = text[0];
mIsRepeating = true;
keyInput.setKey(mLastKey);
@ -152,7 +152,7 @@ namespace gcn
}
case SDL_KEYDOWN:
if (event.key.keysym.sym < 32 || event.key.keysym.sym > 128) {
if (event.key.keysym.sym < 32 || event.key.keysym.sym >= 128) {
mLastKey = convertKeyCharacter(event.key.keysym);
mIsRepeating = true;
keyInput.setKey(mLastKey);
@ -162,7 +162,7 @@ namespace gcn
break;
case SDL_KEYUP:
if (event.key.keysym.sym < 32 || event.key.keysym.sym > 128) {
if (event.key.keysym.sym < 32 || event.key.keysym.sym >= 128) {
mIsRepeating = false;
keyInput.setKey(convertKeyCharacter(event.key.keysym));
keyInput.setType(KeyInput::RELEASE);

View file

@ -492,7 +492,10 @@ void Invalidate()
}
// Switch to the shader currently stored in Video.ShaderIndex without changing it
void SwitchToShader() {
void SwitchToShader() {}
static bool isTextInput(int key) {
return key >= 32 && key <= 128 && !(KeyModifiers & (ModifierAlt | ModifierControl | ModifierSuper));
}
/**
@ -560,7 +563,7 @@ static void SdlDoEvent(const EventCallback &callbacks, SDL_Event &event)
case SDL_TEXTINPUT:
{
char* text = event.text.text;
if ((uint8_t)text[0] < 128) {
if (isTextInput((uint8_t)text[0])) {
// we only accept US-ascii chars for now
char lastKey = text[0];
InputKeyButtonPress(callbacks, SDL_GetTicks(), lastKey, lastKey);
@ -585,7 +588,7 @@ static void SdlDoEvent(const EventCallback &callbacks, SDL_Event &event)
case SDL_KEYDOWN:
keysym = event.key.keysym.sym;
if (keysym < 32 || keysym > 128) {
if (!isTextInput(keysym)) {
// only report non-printing keys here, the characters will be reported with the textinput event
InputKeyButtonPress(callbacks, SDL_GetTicks(), keysym, keysym < 128 ? keysym : 0);
}
@ -593,7 +596,7 @@ static void SdlDoEvent(const EventCallback &callbacks, SDL_Event &event)
case SDL_KEYUP:
keysym = event.key.keysym.sym;
if (keysym < 32 || keysym > 128) {
if (!isTextInput(keysym)) {
// only report non-printing keys here, the characters will be reported with the textinput event
InputKeyButtonRelease(callbacks, SDL_GetTicks(), keysym, keysym < 128 ? keysym : 0);
}