Commit 1f2f536bd25e6ceccf792c9b6ab1eb67386f1463

Sam Lantinga 2020-11-27T18:57:40

Fixed XInput correlation for raw input controllers after hotplug events

diff --git a/src/joystick/windows/SDL_rawinputjoystick.c b/src/joystick/windows/SDL_rawinputjoystick.c
index b85c9ca..b504171 100644
--- a/src/joystick/windows/SDL_rawinputjoystick.c
+++ b/src/joystick/windows/SDL_rawinputjoystick.c
@@ -635,6 +635,17 @@ RAWINPUT_AcquireDevice(SDL_RAWINPUT_Device *device)
 static void
 RAWINPUT_ReleaseDevice(SDL_RAWINPUT_Device *device)
 {
+#ifdef SDL_JOYSTICK_RAWINPUT_XINPUT
+    if (device->joystick) {
+        RAWINPUT_DeviceContext *ctx = device->joystick->hwdata;
+
+        if (ctx->xinput_enabled && ctx->xinput_correlated) {
+            RAWINPUT_MarkXInputSlotFree(ctx->xinput_slot);
+            ctx->xinput_correlated = SDL_FALSE;
+        }
+    }
+#endif /* SDL_JOYSTICK_RAWINPUT_XINPUT */
+
     if (SDL_AtomicDecRef(&device->refcount)) {
         if (device->preparsed_data) {
             SDL_HidD_FreePreparsedData(device->preparsed_data);