sdl2-compat: JoystickID to index: some fix. refresh list after the joystick is removed.

From bde2a7dd226608ee59cece7b98b6a7b6eee1bdca Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Tue, 7 Feb 2023 11:21:26 +0100
Subject: [PATCH] JoystickID to index: some fix. refresh list after the
 joystick is removed.

---
 src/sdl2_compat.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index 3e7d101..23963d4 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -1356,22 +1356,27 @@ EventFilter3to2(void *userdata, SDL_Event *event3)
         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 SDL3 InstanceID to index */
+            SDL_NumJoysticks(); /* Refresh */
             event3->jaxis.which = GetIndexFromJoystickInstance(event3->jaxis.which);
             break;
 
+        case SDL_EVENT_GAMEPAD_REMOVED:
+        case SDL_EVENT_JOYSTICK_REMOVED:
+            event3->jaxis.which = GetIndexFromJoystickInstance(event3->jaxis.which);
+            SDL_NumJoysticks(); /* Refresh after */
+            break;
+
         /* display events moved to the top level in SDL3. */
         case SDL_EVENT_DISPLAY_ORIENTATION:
         case SDL_EVENT_DISPLAY_CONNECTED:
@@ -4235,10 +4240,6 @@ SDL_NumJoysticks(void)
 static int
 GetIndexFromJoystickInstance(SDL_JoystickID jid) {
     int i;
-
-    /* Refresh */
-    SDL_NumJoysticks();
-
     for (i = 0; i < num_joysticks; i++) {
         if (joystick_list[i] == jid) {
             return i;
@@ -4391,6 +4392,7 @@ DECLSPEC int SDLCALL
 SDL_JoystickAttachVirtual(SDL_JoystickType type, int naxes, int nbuttons, int nhats)
 {
     SDL_JoystickID jid = SDL3_AttachVirtualJoystick(type, naxes, nbuttons, nhats);
+    SDL_NumJoysticks(); /* Refresh */
     return GetIndexFromJoystickInstance(jid);
 }
 
@@ -4398,6 +4400,7 @@ DECLSPEC int SDLCALL
 SDL_JoystickAttachVirtualEx(const SDL_VirtualJoystickDesc *desc)
 {
     SDL_JoystickID jid = SDL3_AttachVirtualJoystickEx(desc);
+    SDL_NumJoysticks(); /* Refresh */
     return GetIndexFromJoystickInstance(jid);
 }