sdl2-compat: Joysticks: change instance id to index in events

From 34afbff2c5b4076d3b32652e07c11938c921a5c0 Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Fri, 3 Feb 2023 21:01:20 +0100
Subject: [PATCH] Joysticks: change instance id to index in events

---
 src/sdl2_compat.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index 8303941..912651f 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -1322,6 +1322,7 @@ SDL_PushEvent(SDL2_Event *event2)
 }
 
 static int Display_IDToIndex(SDL_DisplayID displayID);
+static int GetIndexFromJoystickInstance(SDL_JoystickID jid);
 
 static int SDLCALL
 EventFilter3to2(void *userdata, SDL_Event *event3)
@@ -1347,6 +1348,27 @@ EventFilter3to2(void *userdata, SDL_Event *event3)
     /* push new events when we need to convert something, like toplevel SDL3 events generating the SDL2 SDL_WINDOWEVENT. */
 
     switch (event3->type) {
+        case SDL_EVENT_JOYSTICK_AXIS_MOTION:
+        case SDL_EVENT_JOYSTICK_HAT_MOTION:
+        case SDL_EVENT_JOYSTICK_BUTTON_DOWN:
+        case SDL_EVENT_JOYSTICK_BUTTON_UP:
+        case SDL_EVENT_JOYSTICK_ADDED:
+        case SDL_EVENT_JOYSTICK_REMOVED:
+        case SDL_EVENT_JOYSTICK_BATTERY_UPDATED:
+        case SDL_EVENT_GAMEPAD_AXIS_MOTION:
+        case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
+        case SDL_EVENT_GAMEPAD_BUTTON_UP:
+        case SDL_EVENT_GAMEPAD_ADDED:
+        case SDL_EVENT_GAMEPAD_REMOVED:
+        case SDL_EVENT_GAMEPAD_REMAPPED:
+        case SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN:
+        case SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION:
+        case SDL_EVENT_GAMEPAD_TOUCHPAD_UP:
+        case SDL_EVENT_GAMEPAD_SENSOR_UPDATE:
+            /* Change SD3 InstanceID to index */
+            event3->jaxis.which = GetIndexFromJoystickInstance(event3->jaxis.which);
+            break;
+
         /* display events moved to the top level in SDL3. */
         case SDL_EVENT_DISPLAY_ORIENTATION:
         case SDL_EVENT_DISPLAY_CONNECTED:
@@ -1400,8 +1422,6 @@ EventFilter3to2(void *userdata, SDL_Event *event3)
         default: break;
     }
 
-    /* !!! FIXME: Deal with device add events using instance ids instead of indices in SDL3. */
-
     return 1;
 }