From fe174821aa76332925d93ad5700e907a4803c54a Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 15 Dec 2025 16:58:35 -0800
Subject: [PATCH] Handle Steam handle changing for a gamepad
---
game/controls.cpp | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/game/controls.cpp b/game/controls.cpp
index 1dd2a4d3..a84bd46c 100644
--- a/game/controls.cpp
+++ b/game/controls.cpp
@@ -262,6 +262,17 @@ static void OpenGamepad(SDL_JoystickID id)
gamepads.add(gamepad);
}
+static void UpdateGamepadHandle(SDL_JoystickID id)
+{
+ for (unsigned int i = 0; i < gamepads.length(); ++i) {
+ Gamepad* gamepad = &gamepads[i];
+ if (gamepad->id == id) {
+ gamepad->sessionID = GetRemoteSessionForGamepad(gamepad->gamepad);
+ break;
+ }
+ }
+}
+
static void CloseGamepad(SDL_JoystickID id)
{
for (unsigned int i = 0; i < gamepads.length(); ++i) {
@@ -424,6 +435,21 @@ static void HandleEvent(SDL_Event *event)
}
break;
+ /* -- Handle Steam handle changing for a gamepad */
+ case SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED:
+ player = GetJoystickPlayer(event->gdevice.which);
+ UpdateGamepadHandle(event->gdevice.which);
+ if (player) {
+ // Update the previous player's controls
+ UpdateControl(player);
+ }
+ player = GetJoystickPlayer(event->gdevice.which);
+ if (player) {
+ // Update the new player's controls
+ UpdateControl(player);
+ }
+ break;
+
/* -- Handle key presses/releases */
case SDL_EVENT_KEY_DOWN:
key = event->key.key;