Skip to content

Commit

Permalink
Change order we enumerate Windows joysticks.
Browse files Browse the repository at this point in the history
Make it so XInput devices are listed before DirectInput devices, and that the XInput
 devices are sorted by userid in ascending numeric order (so device 0 comes first).
  • Loading branch information
icculus committed Aug 29, 2013
1 parent ea4350d commit 257cef3
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/joystick/windows/SDL_dxjoystick.c
Expand Up @@ -766,8 +766,10 @@ static void
EnumXInputDevices(JoyStick_DeviceData **pContext)
{
if (s_bXInputEnabled) {
Uint8 userid;
for (userid = 0; userid < SDL_XINPUT_MAX_DEVICES; userid++) {
int iuserid;
/* iterate in reverse, so these are in the final list in ascending numeric order. */
for (iuserid = SDL_XINPUT_MAX_DEVICES-1; iuserid >= 0; iuserid--) {
const Uint8 userid = (Uint8) iuserid;
XINPUT_CAPABILITIES capabilities;
if (XINPUTGETCAPABILITIES(userid, XINPUT_FLAG_GAMEPAD, &capabilities) == ERROR_SUCCESS) {
/* Current version of XInput mistakenly returns 0 as the Type. Ignore it and ensure the subtype is a gamepad. */
Expand Down Expand Up @@ -796,9 +798,6 @@ void SDL_SYS_JoystickDetect()
pCurList = SYS_Joystick;
SYS_Joystick = NULL;

/* Look for XInput devices... */
EnumXInputDevices(&pCurList);

/* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */
IDirectInput8_EnumDevices(dinput,
DI8DEVCLASS_GAMECTRL,
Expand All @@ -809,6 +808,9 @@ void SDL_SYS_JoystickDetect()
SDL_RawDevList = NULL;
SDL_RawDevListCount = 0;

/* Look for XInput devices. Do this last, so they're first in the final list. */
EnumXInputDevices(&pCurList);

SDL_UnlockMutex( s_mutexJoyStickEnum );
}

Expand Down

0 comments on commit 257cef3

Please sign in to comment.