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;
}