summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface
diff options
context:
space:
mode:
authorDentomologist <dentomologist@gmail.com>2025-05-02 17:17:39 -0700
committerDentomologist <dentomologist@gmail.com>2025-05-02 17:21:42 -0700
commit77744169bedd4638f812e52aaac0097c64005eaa (patch)
treed894aeb09656bc9bdd86ccbcb82a4193d9d0eab2 /Source/Core/InputCommon/ControllerInterface
parent63572f15fc92363307914614ec5ad409570f8f50 (diff)
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.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/SDL/SDLGamepad.h14
1 files 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;
}