From fe3566ca46868974f343c06877be7d87416655dd Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 14 Nov 2024 11:20:25 -0800
Subject: [PATCH] Ignore Steam Controllers in the Linux driver if HIDAPI is
handling them
---
src/joystick/linux/SDL_sysjoystick.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c
index d4a1cedd6cd2d..d6b0e1e37b494 100644
--- a/src/joystick/linux/SDL_sysjoystick.c
+++ b/src/joystick/linux/SDL_sysjoystick.c
@@ -216,6 +216,11 @@ static bool IsVirtualJoystick(Uint16 vendor, Uint16 product, Uint16 version, con
}
return false;
}
+#else
+static bool IsVirtualJoystick(Uint16 vendor, Uint16 product, Uint16 version, const char *name)
+{
+ return false;
+}
#endif // SDL_JOYSTICK_HIDAPI
static bool GetSteamVirtualGamepadSlot(int fd, int *slot)
@@ -661,9 +666,13 @@ static void HandlePendingRemovals(void)
static bool SteamControllerConnectedCallback(const char *name, SDL_GUID guid, SDL_JoystickID *device_instance)
{
- SDL_joylist_item *item;
+ Uint16 vendor, product, version;
+ SDL_GetJoystickGUIDInfo(guid, &vendor, &product, &version, NULL);
+ if (SDL_JoystickHandledByAnotherDriver(&SDL_LINUX_JoystickDriver, vendor, product, version, name)) {
+ return false;
+ }
- item = (SDL_joylist_item *)SDL_calloc(1, sizeof(SDL_joylist_item));
+ SDL_joylist_item *item = (SDL_joylist_item *)SDL_calloc(1, sizeof(SDL_joylist_item));
if (!item) {
return false;
}