user32: Update rawinput devices on WM_INPUT_DEVICE_CHANGE reception.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51282 Signed-off-by: Rémi Bernon <rbernon@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1e1e946311
commit
6a30f12eef
|
@ -2290,7 +2290,9 @@ static BOOL process_rawinput_message( MSG *msg, UINT hw_id, const struct hardwar
|
||||||
{
|
{
|
||||||
struct rawinput_thread_data *thread_data = rawinput_thread_data();
|
struct rawinput_thread_data *thread_data = rawinput_thread_data();
|
||||||
|
|
||||||
if (msg->message == WM_INPUT)
|
if (msg->message == WM_INPUT_DEVICE_CHANGE)
|
||||||
|
rawinput_update_device_list();
|
||||||
|
else
|
||||||
{
|
{
|
||||||
thread_data->buffer->header.dwSize = RAWINPUT_BUFFER_SIZE;
|
thread_data->buffer->header.dwSize = RAWINPUT_BUFFER_SIZE;
|
||||||
if (!rawinput_from_hardware_message( thread_data->buffer, msg_data )) return FALSE;
|
if (!rawinput_from_hardware_message( thread_data->buffer, msg_data )) return FALSE;
|
||||||
|
|
|
@ -168,7 +168,7 @@ static struct device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface)
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void find_devices(void)
|
void rawinput_update_device_list(void)
|
||||||
{
|
{
|
||||||
SP_DEVICE_INTERFACE_DATA iface = { sizeof(iface) };
|
SP_DEVICE_INTERFACE_DATA iface = { sizeof(iface) };
|
||||||
struct device *device;
|
struct device *device;
|
||||||
|
@ -178,6 +178,8 @@ static void find_devices(void)
|
||||||
HDEVINFO set;
|
HDEVINFO set;
|
||||||
DWORD idx;
|
DWORD idx;
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
HidD_GetHidGuid(&hid_guid);
|
HidD_GetHidGuid(&hid_guid);
|
||||||
|
|
||||||
EnterCriticalSection(&rawinput_devices_cs);
|
EnterCriticalSection(&rawinput_devices_cs);
|
||||||
|
@ -259,7 +261,7 @@ static struct device *find_device_from_handle(HANDLE handle)
|
||||||
for (i = 0; i < rawinput_devices_count; ++i)
|
for (i = 0; i < rawinput_devices_count; ++i)
|
||||||
if (rawinput_devices[i].handle == handle)
|
if (rawinput_devices[i].handle == handle)
|
||||||
return rawinput_devices + i;
|
return rawinput_devices + i;
|
||||||
find_devices();
|
rawinput_update_device_list();
|
||||||
for (i = 0; i < rawinput_devices_count; ++i)
|
for (i = 0; i < rawinput_devices_count; ++i)
|
||||||
if (rawinput_devices[i].handle == handle)
|
if (rawinput_devices[i].handle == handle)
|
||||||
return rawinput_devices + i;
|
return rawinput_devices + i;
|
||||||
|
@ -432,7 +434,7 @@ UINT WINAPI GetRawInputDeviceList(RAWINPUTDEVICELIST *devices, UINT *device_coun
|
||||||
return ~0U;
|
return ~0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
find_devices();
|
rawinput_update_device_list();
|
||||||
|
|
||||||
if (!devices)
|
if (!devices)
|
||||||
{
|
{
|
||||||
|
|
|
@ -160,6 +160,7 @@ struct hardware_msg_data;
|
||||||
extern BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_msg_data *msg_data);
|
extern BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_msg_data *msg_data);
|
||||||
extern BOOL rawinput_device_get_usages(HANDLE handle, USAGE *usage_page, USAGE *usage);
|
extern BOOL rawinput_device_get_usages(HANDLE handle, USAGE *usage_page, USAGE *usage);
|
||||||
extern struct rawinput_thread_data *rawinput_thread_data(void);
|
extern struct rawinput_thread_data *rawinput_thread_data(void);
|
||||||
|
extern void rawinput_update_device_list(void);
|
||||||
|
|
||||||
extern void create_offscreen_window_surface( const RECT *visible_rect, struct window_surface **surface ) DECLSPEC_HIDDEN;
|
extern void create_offscreen_window_surface( const RECT *visible_rect, struct window_surface **surface ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue