Commit f8a04c7f authored by Andrew Eikum's avatar Andrew Eikum Committed by Alexandre Julliard

winebus.sys: Close SDL handles when a device is removed.

This fixes opening SDL haptic handles after a device is removed and re-added. Signed-off-by: 's avatarAndrew Eikum <aeikum@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 690838a0
......@@ -75,6 +75,7 @@ static void *sdl_handle = NULL;
#define MAKE_FUNCPTR(f) static typeof(f) * p##f = NULL
MAKE_FUNCPTR(SDL_GetError);
MAKE_FUNCPTR(SDL_Init);
MAKE_FUNCPTR(SDL_JoystickClose);
MAKE_FUNCPTR(SDL_JoystickEventState);
MAKE_FUNCPTR(SDL_JoystickGetGUID);
MAKE_FUNCPTR(SDL_JoystickGetGUIDString);
......@@ -89,6 +90,7 @@ MAKE_FUNCPTR(SDL_JoystickNumHats);
MAKE_FUNCPTR(SDL_JoystickGetAxis);
MAKE_FUNCPTR(SDL_JoystickGetHat);
MAKE_FUNCPTR(SDL_IsGameController);
MAKE_FUNCPTR(SDL_GameControllerClose);
MAKE_FUNCPTR(SDL_GameControllerGetAxis);
MAKE_FUNCPTR(SDL_GameControllerGetButton);
MAKE_FUNCPTR(SDL_GameControllerName);
......@@ -879,13 +881,28 @@ static BOOL set_mapped_report_from_event(SDL_Event *event)
static void try_remove_device(SDL_JoystickID index)
{
DEVICE_OBJECT *device = NULL;
struct platform_private *private;
SDL_Joystick *sdl_joystick;
SDL_GameController *sdl_controller;
SDL_Haptic *sdl_haptic;
device = bus_find_hid_device(&sdl_vtbl, ULongToPtr(index));
if (!device) return;
private = impl_from_DEVICE_OBJECT(device);
sdl_joystick = private->sdl_joystick;
sdl_controller = private->sdl_controller;
sdl_haptic = private->sdl_haptic;
IoInvalidateDeviceRelations(device, RemovalRelations);
bus_remove_hid_device(device);
pSDL_JoystickClose(sdl_joystick);
if (sdl_controller)
pSDL_GameControllerClose(sdl_controller);
if (sdl_haptic)
pSDL_HapticClose(sdl_haptic);
}
static void try_add_device(SDL_JoystickID index)
......@@ -1085,6 +1102,7 @@ NTSTATUS sdl_driver_init(void)
#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(sdl_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;}
LOAD_FUNCPTR(SDL_GetError);
LOAD_FUNCPTR(SDL_Init);
LOAD_FUNCPTR(SDL_JoystickClose);
LOAD_FUNCPTR(SDL_JoystickEventState);
LOAD_FUNCPTR(SDL_JoystickGetGUID);
LOAD_FUNCPTR(SDL_JoystickGetGUIDString);
......@@ -1099,6 +1117,7 @@ NTSTATUS sdl_driver_init(void)
LOAD_FUNCPTR(SDL_JoystickGetAxis);
LOAD_FUNCPTR(SDL_JoystickGetHat);
LOAD_FUNCPTR(SDL_IsGameController);
LOAD_FUNCPTR(SDL_GameControllerClose);
LOAD_FUNCPTR(SDL_GameControllerGetAxis);
LOAD_FUNCPTR(SDL_GameControllerGetButton);
LOAD_FUNCPTR(SDL_GameControllerName);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment