From 47926d7bd0220b1fa9501de71454e96d4ef29228 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 26 Aug 2024 20:11:09 -0700 Subject: [PATCH] Added a cleanup function for virtual joysticks --- include/SDL3/SDL_joystick.h | 1 + src/joystick/virtual/SDL_virtualjoystick.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/SDL3/SDL_joystick.h b/include/SDL3/SDL_joystick.h index 62de3f22c6..2e39b509c9 100644 --- a/include/SDL3/SDL_joystick.h +++ b/include/SDL3/SDL_joystick.h @@ -451,6 +451,7 @@ typedef struct SDL_VirtualJoystickDesc SDL_bool (SDLCALL *SetLED)(void *userdata, Uint8 red, Uint8 green, Uint8 blue); /**< Implements SDL_SetJoystickLED() */ SDL_bool (SDLCALL *SendEffect)(void *userdata, const void *data, int size); /**< Implements SDL_SendJoystickEffect() */ SDL_bool (SDLCALL *SetSensorsEnabled)(void *userdata, SDL_bool enabled); /**< Implements SDL_SetGamepadSensorEnabled() */ + void (SDLCALL *Cleanup)(void *userdata); /**< Cleans up the userdata when the joystick is detached */ } SDL_VirtualJoystickDesc; /** diff --git a/src/joystick/virtual/SDL_virtualjoystick.c b/src/joystick/virtual/SDL_virtualjoystick.c index 294773e9d2..0bbb0b51f6 100644 --- a/src/joystick/virtual/SDL_virtualjoystick.c +++ b/src/joystick/virtual/SDL_virtualjoystick.c @@ -70,6 +70,10 @@ static void VIRTUAL_FreeHWData(joystick_hwdata *hwdata) return; } + if (hwdata->desc.Cleanup) { + hwdata->desc.Cleanup(hwdata->desc.userdata); + } + // Remove hwdata from SDL-global list for (cur = g_VJoys; cur; prev = cur, cur = cur->next) { if (hwdata == cur) {