Browse Source

Fixed XInput correlation for raw input controllers after hotplug events

Sam Lantinga 4 years ago
parent
commit
1f2f536bd2
1 changed files with 11 additions and 0 deletions
  1. 11 0
      src/joystick/windows/SDL_rawinputjoystick.c

+ 11 - 0
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);