Selaa lähdekoodia

Fixed double SDL_EVENT_GAMEPAD_ADDED for controllers with automatic gamepad mappings

(cherry picked from commit 6babade7586416680b460a4a2b3ae03a6afcb9df)
Sam Lantinga 1 kuukausi sitten
vanhempi
commit
b78c61d67a
2 muutettua tiedostoa jossa 6 lisäystä ja 2 poistoa
  1. 1 1
      src/joystick/SDL_gamepad.c
  2. 5 1
      src/joystick/SDL_joystick.c

+ 1 - 1
src/joystick/SDL_gamepad.c

@@ -311,7 +311,7 @@ void SDL_PrivateGamepadAdded(SDL_JoystickID instance_id)
 {
     SDL_Event event;
 
-    if (!SDL_gamepads_initialized) {
+    if (!SDL_gamepads_initialized || SDL_IsJoystickBeingAdded()) {
         return;
     }
 

+ 5 - 1
src/joystick/SDL_joystick.c

@@ -2143,6 +2143,7 @@ void SDL_PrivateJoystickAdded(SDL_JoystickID instance_id)
     SDL_JoystickDriver *driver;
     int device_index;
     int player_index = -1;
+    bool is_gamepad;
 
     SDL_AssertJoysticksLocked();
 
@@ -2177,9 +2178,12 @@ void SDL_PrivateJoystickAdded(SDL_JoystickID instance_id)
         }
     }
 
+    // This might create an automatic gamepad mapping, so wait to send the event
+    is_gamepad = SDL_IsGamepad(instance_id);
+
     SDL_joystick_being_added = false;
 
-    if (SDL_IsGamepad(instance_id)) {
+    if (is_gamepad) {
         SDL_PrivateGamepadAdded(instance_id);
     }
 }