Commit 785618afec8226cfba17288a6c02b728b66259a1

Ryan C. Gordon 2015-04-08T02:14:59

DirectInput: ignore everything but joysticks and gamepads (thanks, Justin!). Fixes Bugzilla #2460.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
diff --git a/src/joystick/windows/SDL_dinputjoystick.c b/src/joystick/windows/SDL_dinputjoystick.c
index 179f992..d5456c7 100644
--- a/src/joystick/windows/SDL_dinputjoystick.c
+++ b/src/joystick/windows/SDL_dinputjoystick.c
@@ -345,6 +345,11 @@ EnumJoysticksCallback(const DIDEVICEINSTANCE * pdidInstance, VOID * pContext)
         return DIENUM_CONTINUE;  /* ignore XInput devices here, keep going. */
     }
 
+    const DWORD devtype = (pdidInstance->dwDevType & 0xFF);
+    if ((devtype != DI8DEVTYPE_JOYSTICK) && (devtype != DI8DEVTYPE_GAMEPAD)) {
+        return DIENUM_CONTINUE;  /* Ignore touchpads, etc. */
+    }
+
     pNewJoystick = *(JoyStick_DeviceData **)pContext;
     while (pNewJoystick) {
         if (!SDL_memcmp(&pNewJoystick->dxdevice.guidInstance, &pdidInstance->guidInstance, sizeof(pNewJoystick->dxdevice.guidInstance))) {