From b78c61d67a74cc1ee2bc71a6841a236b59f73c22 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 (cherry picked from commit 6babade7586416680b460a4a2b3ae03a6afcb9df) --- 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 7b76c57266..5bb2808d89 100644 --- a/src/joystick/SDL_gamepad.c +++ b/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; } diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index 921576854e..3ad49bbb3e 100644 --- a/src/joystick/SDL_joystick.c +++ b/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); } }