From 77744169bedd4638f812e52aaac0097c64005eaa Mon Sep 17 00:00:00 2001 From: Dentomologist Date: Fri, 2 May 2025 17:17:39 -0700 Subject: [PATCH] SDL: Check if touchpad exists before getting input Verify a touchpad is present before polling it for input. Without this check the Debug log is spammed with the message "error: Parameter 'touchpad' is invalid" if you have a controller without a touchpad. One would think every touchpad supports at least 1 finger, but in case there's some weird edge case check the finger count to be sure. --- .../ControllerInterface/SDL/SDLGamepad.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Source/Core/InputCommon/ControllerInterface/SDL/SDLGamepad.h b/Source/Core/InputCommon/ControllerInterface/SDL/SDLGamepad.h index e71e3f4e52..4f03ea7d4a 100644 --- a/Source/Core/InputCommon/ControllerInterface/SDL/SDLGamepad.h +++ b/Source/Core/InputCommon/ControllerInterface/SDL/SDLGamepad.h @@ -362,11 +362,15 @@ public: const int touchpad_index = 0; const int finger_index = 0; - Uint8 state = 0; - SDL_GameControllerGetTouchpadFinger(m_gamecontroller, touchpad_index, finger_index, &state, - &m_touchpad_x, &m_touchpad_y, &m_touchpad_pressure); - m_touchpad_x = m_touchpad_x * 2 - 1; - m_touchpad_y = m_touchpad_y * 2 - 1; + if (SDL_GameControllerGetNumTouchpads(m_gamecontroller) > touchpad_index && + SDL_GameControllerGetNumTouchpadFingers(m_gamecontroller, touchpad_index) > finger_index) + { + Uint8 state = 0; + SDL_GameControllerGetTouchpadFinger(m_gamecontroller, touchpad_index, finger_index, &state, + &m_touchpad_x, &m_touchpad_y, &m_touchpad_pressure); + m_touchpad_x = m_touchpad_x * 2 - 1; + m_touchpad_y = m_touchpad_y * 2 - 1; + } return Core::DeviceRemoval::Keep; }