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) {