gamepad: don't panic when unknown button is encountered

This should only happen if SDL adds support for new buttons in the
future.
This commit is contained in:
Andrei Alexeyev 2022-01-08 18:28:21 +02:00
parent 4661c9609c
commit a1142b1ffd
No known key found for this signature in database
GPG key ID: 72D26128040B9690

View file

@ -573,7 +573,8 @@ static GamepadButtonState* gamepad_button_state(GamepadButton button) {
}
}
log_fatal("Button id %i is invalid", button);
log_warn("Unknown button id %i ignored", button);
return NULL;
}
static const char* gamepad_button_name_internal(GamepadButton btn);
@ -613,6 +614,10 @@ static void gamepad_button(GamepadButton button, int state, bool is_repeat) {
void *indev = (void*)(intptr_t)INDEV_GAMEPAD;
GamepadButtonState *btnstate = gamepad_button_state(button);
if(UNLIKELY(btnstate == NULL)) {
return;
}
if(state == SDL_PRESSED) {
if(is_repeat) {
btnstate->repeat_time = time_get() + gamepad_repeat_interval(CONFIG_GAMEPAD_BTNREPEAT_INTERVAL);
@ -676,6 +681,10 @@ static void gamepad_button(GamepadButton button, int state, bool is_repeat) {
static void gamepad_handle_button_repeat(GamepadButton btn, hrtime_t time) {
GamepadButtonState *state = gamepad_button_state(btn);
if(UNLIKELY(state == NULL)) {
return;
}
if(state->held && time >= state->repeat_time) {
gamepad_button(btn, SDL_PRESSED, true);
}