diff --git a/src/d_event.h b/src/d_event.h index 8b85eed6e..67bbc34fd 100644 --- a/src/d_event.h +++ b/src/d_event.h @@ -38,7 +38,7 @@ struct event_t { evtype_t type; INT32 data1; // keys / mouse/joystick buttons - INT32 data2; // mouse/joystick x move + INT32 data2; // mouse/joystick x move; key repeat INT32 data3; // mouse/joystick y move INT32 device; // which device ID it belongs to (controller ID) }; diff --git a/src/g_input.c b/src/g_input.c index ecda7b3db..0ea851dec 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -456,6 +456,11 @@ void G_MapEventsToControls(event_t *ev) case ev_keydown: if (ev->data1 < NUMINPUTS) { + if (ev->data2) // OS repeat? We handle that ourselves + { + break; + } + DeviceGameKeyDownArray[ev->data1] = JOYAXISRANGE; if (AutomaticControllerReassignmentIsAllowed(ev->device)) diff --git a/src/sdl/i_video.cpp b/src/sdl/i_video.cpp index 73c51315d..7fa82e058 100644 --- a/src/sdl/i_video.cpp +++ b/src/sdl/i_video.cpp @@ -571,6 +571,7 @@ static void Impl_HandleKeyboardEvent(SDL_KeyboardEvent evt, Uint32 type) return; } event.data1 = Impl_SDL_Scancode_To_Keycode(evt.keysym.scancode); + event.data2 = evt.repeat; if (event.data1) D_PostEvent(&event); }