From 8f46cb771c7c5e8aa4193b01f14f63e3ab7b4d8f Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 6 Sep 2024 11:19:19 -0700 Subject: [PATCH] SDL_XINPUT_Enabled() returns false until XInput DLL is successfully loaded We make sure we initialize XInput first, so that anything checking whether it's enabled gets a valid result based on whether we were able to load it or not. --- src/joystick/SDL_joystick.c | 2 +- src/joystick/windows/SDL_windowsjoystick.c | 7 +++---- src/joystick/windows/SDL_xinputjoystick.c | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index 1e37ea4c84..d7b20b2d80 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -61,7 +61,7 @@ static SDL_JoystickDriver *SDL_joystick_drivers[] = { #if defined(SDL_JOYSTICK_DINPUT) || defined(SDL_JOYSTICK_XINPUT) &SDL_WINDOWS_JoystickDriver, #endif -#ifdef SDL_JOYSTICK_WGI +#ifdef SDL_JOYSTICK_WGI // Lower priority than other Windows drivers &SDL_WGI_JoystickDriver, #endif #ifdef SDL_JOYSTICK_WINMM diff --git a/src/joystick/windows/SDL_windowsjoystick.c b/src/joystick/windows/SDL_windowsjoystick.c index 1d724618b5..b01d7a038b 100644 --- a/src/joystick/windows/SDL_windowsjoystick.c +++ b/src/joystick/windows/SDL_windowsjoystick.c @@ -241,7 +241,7 @@ static int SDLCALL SDL_JoystickThread(void *_data) #ifdef SDL_JOYSTICK_XINPUT // WM_DEVICECHANGE not working, poll for new XINPUT controllers SDL_WaitConditionTimeout(s_condJoystickThread, s_mutexJoyStickEnum, 1000); - if (SDL_XINPUT_Enabled() && XINPUTGETCAPABILITIES) { + if (SDL_XINPUT_Enabled()) { // scan for any change in XInput devices Uint8 userId; for (userId = 0; userId < XUSER_MAX_COUNT; userId++) { @@ -329,15 +329,14 @@ void WINDOWS_AddJoystickDevice(JoyStick_DeviceData *device) void WINDOWS_JoystickDetect(void); void WINDOWS_JoystickQuit(void); -// Function to scan the system for joysticks. static bool WINDOWS_JoystickInit(void) { - if (!SDL_DINPUT_JoystickInit()) { + if (!SDL_XINPUT_JoystickInit()) { WINDOWS_JoystickQuit(); return false; } - if (!SDL_XINPUT_JoystickInit()) { + if (!SDL_DINPUT_JoystickInit()) { WINDOWS_JoystickQuit(); return false; } diff --git a/src/joystick/windows/SDL_xinputjoystick.c b/src/joystick/windows/SDL_xinputjoystick.c index 7486a135ec..6e2f475f29 100644 --- a/src/joystick/windows/SDL_xinputjoystick.c +++ b/src/joystick/windows/SDL_xinputjoystick.c @@ -37,7 +37,7 @@ extern "C" { /* * Internal stuff. */ -static bool s_bXInputEnabled = true; +static bool s_bXInputEnabled = false; bool SDL_XINPUT_Enabled(void) {