diff --git a/CHANGES b/CHANGES index 4cd35bd65..8ff4ab5ce 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,7 @@ Bugfixes: - GBA BIOS: Fix RegisterRamReset setting DISPCNT to the wrong value - OpenGL: Correct boolean vector strcmp strings for uniforms - Wii: Fix tilting direction + - SDL: Fix joystick initialization on BS Misc: - GBA: Slightly optimize GBAProcessEvents - Qt: Add preset for DualShock 4 diff --git a/src/platform/sdl/sdl-events.c b/src/platform/sdl/sdl-events.c index 1d65857ab..ed958eebc 100644 --- a/src/platform/sdl/sdl-events.c +++ b/src/platform/sdl/sdl-events.c @@ -62,6 +62,19 @@ bool mSDLInitEvents(struct mSDLEvents* context) { SDL_JoystickListInit(&context->joysticks, nJoysticks); if (nJoysticks > 0) { mSDLUpdateJoysticks(context); + // Some OSes don't do hotplug detection + if (!SDL_JoystickListSize(&context->joysticks)) { + int i; + for (i = 0; i < nJoysticks; ++i) { + struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&context->joysticks); + joystick->joystick = SDL_JoystickOpen(i); + joystick->id = SDL_JoystickInstanceID(joystick->joystick); + joystick->index = SDL_JoystickListSize(&context->joysticks) - 1; +#if SDL_VERSION_ATLEAST(2, 0, 0) + joystick->haptic = SDL_HapticOpenFromJoystick(joystick->joystick); +#endif + } + } } context->playersAttached = 0;