haptics: Enumerate XInput/DInput joysticks after haptic init

Since the haptic subsystem is usually initialized after the joystick subsystem,
the initial calls to HapticMaybeAddDevice() from inside SDL_JoystickInit() will
arrive too early to be handled by the haptic subsystem. We need to add those
haptic devices for those already present joysticks ourselves.
main
Cameron Gutman 2021-11-09 23:45:32 -06:00
parent 6f9909b609
commit 6b64c47b69
1 changed files with 16 additions and 0 deletions

View File

@ -52,12 +52,28 @@ static int numhaptics = 0;
int int
SDL_SYS_HapticInit(void) SDL_SYS_HapticInit(void)
{ {
JoyStick_DeviceData* device;
if (SDL_DINPUT_HapticInit() < 0) { if (SDL_DINPUT_HapticInit() < 0) {
return -1; return -1;
} }
if (SDL_XINPUT_HapticInit() < 0) { if (SDL_XINPUT_HapticInit() < 0) {
return -1; return -1;
} }
/* The joystick subsystem will usually be initialized before haptics,
* so the initial HapticMaybeAddDevice() calls from the joystick
* subsystem will arrive too early to create haptic devices. We will
* invoke those callbacks again here to pick up any joysticks that
* were added prior to haptics initialization. */
for (device = SYS_Joystick; device; device = device->pNext) {
if (device->bXInputDevice) {
SDL_XINPUT_HapticMaybeAddDevice(device->XInputUserId);
} else {
SDL_DINPUT_HapticMaybeAddDevice(&device->dxdevice);
}
}
return numhaptics; return numhaptics;
} }