Rémi Bernon : win32u: Enumerate mouse and keyboard devices first and skip duplicates.
Alexandre Julliard
julliard at winehq.org
Wed Jul 27 16:17:08 CDT 2022
Module: wine
Branch: master
Commit: 689826a02c7d1711858d5f15588e4f04f230d1ff
URL: https://gitlab.winehq.org/wine/wine/-/commit/689826a02c7d1711858d5f15588e4f04f230d1ff
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Tue Jul 26 07:25:57 2022 +0200
win32u: Enumerate mouse and keyboard devices first and skip duplicates.
---
dlls/win32u/rawinput.c | 28 ++++++++++++----------------
1 file changed, 12 insertions(+), 16 deletions(-)
diff --git a/dlls/win32u/rawinput.c b/dlls/win32u/rawinput.c
index 81403771c4a..6a018e15bb7 100644
--- a/dlls/win32u/rawinput.c
+++ b/dlls/win32u/rawinput.c
@@ -244,9 +244,9 @@ static struct device *add_device( HKEY key, DWORD type )
static const RID_DEVICE_INFO_MOUSE mouse_info = {1, 5, 0, FALSE};
struct hid_preparsed_data *preparsed = NULL;
HID_COLLECTION_INFORMATION hid_info;
- struct device *device = NULL;
OBJECT_ATTRIBUTES attr;
UNICODE_STRING string;
+ struct device *device;
RID_DEVICE_INFO info;
IO_STATUS_BLOCK io;
WCHAR *path, *pos;
@@ -292,6 +292,15 @@ static struct device *add_device( HKEY key, DWORD type )
goto fail;
}
+ for (i = 0; i < rawinput_devices_count; ++i)
+ {
+ if (rawinput_devices[i].handle == UlongToHandle(handle))
+ {
+ TRACE( "Ignoring already added device %#x / %s.\n", handle, debugstr_w(path) );
+ goto fail;
+ }
+ }
+
memset( &info, 0, sizeof(info) );
info.cbSize = sizeof(info);
info.dwType = type;
@@ -340,20 +349,7 @@ static struct device *add_device( HKEY key, DWORD type )
break;
}
- for (i = 0; i < rawinput_devices_count && !device; ++i)
- {
- if (rawinput_devices[i].handle == UlongToHandle(handle))
- device = rawinput_devices + i;
- }
-
- if (device)
- {
- TRACE( "Updating device %#x / %s.\n", handle, debugstr_w(path) );
- free( device->data );
- NtClose( device->file );
- free( device->path );
- }
- else if (array_reserve( (void **)&rawinput_devices, &rawinput_devices_max,
+ if (array_reserve( (void **)&rawinput_devices, &rawinput_devices_max,
rawinput_devices_count + 1, sizeof(*rawinput_devices) ))
{
device = &rawinput_devices[rawinput_devices_count++];
@@ -461,9 +457,9 @@ static void rawinput_update_device_list(void)
}
rawinput_devices_count = 0;
- enumerate_devices( RIM_TYPEHID, guid_devinterface_hidW );
enumerate_devices( RIM_TYPEMOUSE, guid_devinterface_mouseW );
enumerate_devices( RIM_TYPEKEYBOARD, guid_devinterface_keyboardW );
+ enumerate_devices( RIM_TYPEHID, guid_devinterface_hidW );
pthread_mutex_unlock( &rawinput_devices_mutex );
}
More information about the wine-cvs
mailing list