From 642504bc5993a6acd4d9c1d4c1314c6b1cf6e4e1 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 15 May 2023 21:43:16 -0700
Subject: [PATCH] Check to make sure the Windows joystick device has buttons
and axes
This fixes incorrectly detecting the ROG CHAKRAM X mouse as a game controller on Windows 10
---
src/joystick/windows/SDL_dinputjoystick.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/joystick/windows/SDL_dinputjoystick.c b/src/joystick/windows/SDL_dinputjoystick.c
index 3d4ce62344de..7b1f2fb168eb 100644
--- a/src/joystick/windows/SDL_dinputjoystick.c
+++ b/src/joystick/windows/SDL_dinputjoystick.c
@@ -451,6 +451,7 @@ static BOOL CALLBACK EnumJoystickDetectCallback(LPCDIDEVICEINSTANCE pDeviceInsta
char *hidPath = NULL;
char *name = NULL;
LPDIRECTINPUTDEVICE8 device = NULL;
+ DIDEVCAPS caps;
/* We are only supporting HID devices. */
CHECK(pDeviceInstance->dwDevType & DIDEVTYPE_HID);
@@ -460,6 +461,13 @@ static BOOL CALLBACK EnumJoystickDetectCallback(LPCDIDEVICEINSTANCE pDeviceInsta
CHECK(QueryDevicePath(device, &hidPath));
CHECK(QueryDeviceInfo(device, &vendor, &product));
+ /* Check to make sure the device has buttons and axes.
+ * This fixes incorrectly detecting the ROG CHAKRAM X mouse as a game controller on Windows 10
+ */
+ caps.dwSize = sizeof(caps);
+ CHECK(SUCCEEDED(IDirectInputDevice8_GetCapabilities(device, &caps)));
+ CHECK(caps.dwAxes > 0 && caps.dwButtons > 0);
+
CHECK(!SDL_IsXInputDevice(vendor, product, hidPath));
pNewJoystick = *(JoyStick_DeviceData **)pContext;