From f92c293f7b133c78be4c47e6d8c30351540a4868 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Thu, 22 Sep 2022 09:18:22 -0500 Subject: [PATCH] Add keys for SDL 2.0.14's new gamepad buttons This fixes the additional buttons triggering binds for ioq3 left and right joystick direction keys. --- code/client/cl_keys.c | 7 +++++++ code/client/keycodes.h | 7 +++++++ code/sdl/sdl_input.c | 9 ++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/code/client/cl_keys.c b/code/client/cl_keys.c index c786f526..ef134fc7 100644 --- a/code/client/cl_keys.c +++ b/code/client/cl_keys.c @@ -316,6 +316,13 @@ keyname_t keynames[] = {"PAD0_LEFTTRIGGER", K_PAD0_LEFTTRIGGER }, {"PAD0_RIGHTTRIGGER", K_PAD0_RIGHTTRIGGER }, + {"PAD0_MISC1", K_PAD0_MISC1 }, + {"PAD0_PADDLE1", K_PAD0_PADDLE1 }, + {"PAD0_PADDLE2", K_PAD0_PADDLE2 }, + {"PAD0_PADDLE3", K_PAD0_PADDLE3 }, + {"PAD0_PADDLE4", K_PAD0_PADDLE4 }, + {"PAD0_TOUCHPAD", K_PAD0_TOUCHPAD }, + {NULL,0} }; diff --git a/code/client/keycodes.h b/code/client/keycodes.h index e813368c..c460ef50 100644 --- a/code/client/keycodes.h +++ b/code/client/keycodes.h @@ -290,6 +290,13 @@ typedef enum { K_PAD0_LEFTTRIGGER, K_PAD0_RIGHTTRIGGER, + K_PAD0_MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */ + K_PAD0_PADDLE1, /* Xbox Elite paddle P1 */ + K_PAD0_PADDLE2, /* Xbox Elite paddle P3 */ + K_PAD0_PADDLE3, /* Xbox Elite paddle P2 */ + K_PAD0_PADDLE4, /* Xbox Elite paddle P4 */ + K_PAD0_TOUCHPAD, /* PS4/PS5 touchpad button */ + // Pseudo-key that brings the console down K_CONSOLE, diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 63274c61..6726b99a 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -657,7 +657,14 @@ static void IN_GamepadMove( void ) qboolean pressed = SDL_GameControllerGetButton(gamepad, SDL_CONTROLLER_BUTTON_A + i); if (pressed != stick_state.buttons[i]) { - Com_QueueEvent(in_eventTime, SE_KEY, K_PAD0_A + i, pressed, 0, NULL); +#if SDL_VERSION_ATLEAST( 2, 0, 14 ) + if ( i >= SDL_CONTROLLER_BUTTON_MISC1 ) { + Com_QueueEvent(in_eventTime, SE_KEY, K_PAD0_MISC1 + i - SDL_CONTROLLER_BUTTON_MISC1, pressed, 0, NULL); + } else +#endif + { + Com_QueueEvent(in_eventTime, SE_KEY, K_PAD0_A + i, pressed, 0, NULL); + } stick_state.buttons[i] = pressed; } }