From 6babade7586416680b460a4a2b3ae03a6afcb9df Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 24 Jul 2025 10:34:44 -0700 Subject: [PATCH] Fixed double SDL_EVENT_GAMEPAD_ADDED for controllers with automatic gamepad mappings --- src/joystick/SDL_gamepad.c | 2 +- src/joystick/SDL_joystick.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/joystick/SDL_gamepad.c b/src/joystick/SDL_gamepad.c index 36ea97e004..a7b885ad81 100644 --- a/src/joystick/SDL_gamepad.c +++ b/src/joystick/SDL_gamepad.c @@ -312,7 +312,7 @@ void SDL_PrivateGamepadAdded(SDL_JoystickID instance_id) { SDL_Event event; - if (!SDL_gamepads_initialized) { + if (!SDL_gamepads_initialized || SDL_IsJoystickBeingAdded()) { return; } diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index 70c952b78a..0aa742da85 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -2316,6 +2316,7 @@ void SDL_PrivateJoystickAdded(SDL_JoystickID instance_id) SDL_JoystickDriver *driver; int device_index; int player_index = -1; + bool is_gamepad; SDL_AssertJoysticksLocked(); @@ -2350,9 +2351,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); } }