diff --git a/Source/controls/devices/game_controller.cpp b/Source/controls/devices/game_controller.cpp index b7e15bcad..3b8e3540d 100644 --- a/Source/controls/devices/game_controller.cpp +++ b/Source/controls/devices/game_controller.cpp @@ -286,40 +286,42 @@ GamepadLayout GameController::getLayout(const SDL_Event &event) } #else #if SDL_VERSION_ATLEAST(2, 0, 12) - const int index = event.cdevice.which; - const SDL_GameControllerType gamepadType = SDL_GameControllerTypeForIndex(index); - switch (gamepadType) { - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO: + GameController *controller = Get(event); + if (controller != nullptr) { + const SDL_GameControllerType gamepadType = SDL_GameControllerGetType(controller->sdl_game_controller_); + switch (gamepadType) { + case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO: #if SDL_VERSION_ATLEAST(2, 24, 0) - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: + case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: + case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: + case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: #endif - return GamepadLayout::Nintendo; - case SDL_CONTROLLER_TYPE_PS3: - case SDL_CONTROLLER_TYPE_PS4: + return GamepadLayout::Nintendo; + case SDL_CONTROLLER_TYPE_PS3: + case SDL_CONTROLLER_TYPE_PS4: #if SDL_VERSION_ATLEAST(2, 0, 14) - case SDL_CONTROLLER_TYPE_PS5: + case SDL_CONTROLLER_TYPE_PS5: #endif - return GamepadLayout::PlayStation; - case SDL_CONTROLLER_TYPE_XBOXONE: - case SDL_CONTROLLER_TYPE_XBOX360: + return GamepadLayout::PlayStation; + case SDL_CONTROLLER_TYPE_XBOXONE: + case SDL_CONTROLLER_TYPE_XBOX360: #if SDL_VERSION_ATLEAST(2, 0, 16) - case SDL_CONTROLLER_TYPE_GOOGLE_STADIA: - case SDL_CONTROLLER_TYPE_AMAZON_LUNA: + case SDL_CONTROLLER_TYPE_GOOGLE_STADIA: + case SDL_CONTROLLER_TYPE_AMAZON_LUNA: #if SDL_VERSION_ATLEAST(2, 24, 0) - case SDL_CONTROLLER_TYPE_NVIDIA_SHIELD: + case SDL_CONTROLLER_TYPE_NVIDIA_SHIELD: #endif #endif - return GamepadLayout::Xbox; + return GamepadLayout::Xbox; #if SDL_VERSION_ATLEAST(2, 0, 14) - case SDL_CONTROLLER_TYPE_VIRTUAL: + case SDL_CONTROLLER_TYPE_VIRTUAL: #endif - case SDL_CONTROLLER_TYPE_UNKNOWN: + case SDL_CONTROLLER_TYPE_UNKNOWN: #if SDL_VERSION_ATLEAST(2, 30, 0) - case SDL_CONTROLLER_TYPE_MAX: + case SDL_CONTROLLER_TYPE_MAX: #endif - break; + break; + } } #endif return GamepadLayout::Generic;