From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/rawinput.c | 3 +-- server/protocol.def | 6 ++---- server/queue.c | 14 +++++++------- server/trace.c | 4 ++-- 4 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/dlls/win32u/rawinput.c b/dlls/win32u/rawinput.c index e6c442c6ba6..3ea29f2da77 100644 --- a/dlls/win32u/rawinput.c +++ b/dlls/win32u/rawinput.c @@ -899,8 +899,7 @@ BOOL WINAPI NtUserRegisterRawInputDevices( const RAWINPUTDEVICE *devices, UINT d
for (i = 0; i < device_count; ++i) { - server_devices[i].usage_page = registered_devices[i].usUsagePage; - server_devices[i].usage = registered_devices[i].usUsage; + server_devices[i].usage = MAKELONG(registered_devices[i].usUsage, registered_devices[i].usUsagePage); server_devices[i].flags = registered_devices[i].dwFlags; server_devices[i].target = wine_server_user_handle( registered_devices[i].hwndTarget ); } diff --git a/server/protocol.def b/server/protocol.def index 29461c80af2..97713e0ac91 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -301,8 +301,7 @@ union rawinput int type; /* RIM_TYPEHID */ unsigned int device; /* rawinput device index */ unsigned int param; /* rawinput message param */ - unsigned short usage_page;/* HID usage page */ - unsigned short usage; /* HID usage */ + unsigned int usage; /* HID device usage */ unsigned int count; /* HID report count */ unsigned int length; /* HID report length */ } hid; @@ -885,8 +884,7 @@ typedef struct
struct rawinput_device { - unsigned short usage_page; - unsigned short usage; + unsigned int usage; unsigned int flags; user_handle_t target; }; diff --git a/server/queue.c b/server/queue.c index cc4472ba2a5..dad51e06ceb 100644 --- a/server/queue.c +++ b/server/queue.c @@ -35,6 +35,7 @@ #include "winuser.h" #include "winternl.h" #include "ntuser.h" +#include "hidusage.h"
#include "handle.h" #include "file.h" @@ -1637,13 +1638,13 @@ static user_handle_t find_hardware_message_window( struct desktop *desktop, stru return win; }
-static struct rawinput_device *find_rawinput_device( struct process *process, unsigned short usage_page, unsigned short usage ) +static struct rawinput_device *find_rawinput_device( struct process *process, unsigned int usage ) { struct rawinput_device *device, *end;
for (device = process->rawinput_devices, end = device + process->rawinput_device_count; device != end; device++) { - if (device->usage_page != usage_page || device->usage != usage) continue; + if (device->usage != usage) continue; return device; }
@@ -1808,7 +1809,7 @@ static int queue_rawinput_message( struct process* process, void *arg ) else if (raw_msg->data.rawinput.type == RIM_TYPEKEYBOARD) device = process->rawinput_kbd; else - device = find_rawinput_device( process, raw_msg->data.rawinput.hid.usage_page, raw_msg->data.rawinput.hid.usage ); + device = find_rawinput_device( process, raw_msg->data.rawinput.hid.usage ); if (!device) return 0;
if (raw_msg->message == WM_INPUT_DEVICE_CHANGE && !(device->flags & RIDEV_DEVNOTIFY)) return 0; @@ -2142,8 +2143,7 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ msg_data->rawinput.hid.type = RIM_TYPEHID; msg_data->rawinput.hid.device = input->hw.hid.device; msg_data->rawinput.hid.param = input->hw.wparam; - msg_data->rawinput.hid.usage_page = HIWORD(input->hw.hid.usage); - msg_data->rawinput.hid.usage = LOWORD(input->hw.hid.usage); + msg_data->rawinput.hid.usage = input->hw.hid.usage; msg_data->rawinput.hid.count = input->hw.hid.count; msg_data->rawinput.hid.length = input->hw.hid.length;
@@ -3506,6 +3506,6 @@ DECL_HANDLER(update_rawinput_devices) process->rawinput_device_count = device_count; memcpy( process->rawinput_devices, devices, size );
- process->rawinput_mouse = find_rawinput_device( process, 1, 2 ); - process->rawinput_kbd = find_rawinput_device( process, 1, 6 ); + process->rawinput_mouse = find_rawinput_device( process, MAKELONG(HID_USAGE_GENERIC_MOUSE, HID_USAGE_PAGE_GENERIC) ); + process->rawinput_kbd = find_rawinput_device( process, MAKELONG(HID_USAGE_GENERIC_KEYBOARD, HID_USAGE_PAGE_GENERIC) ); } diff --git a/server/trace.c b/server/trace.c index 3bcfc700519..8ad6ffe57fc 100644 --- a/server/trace.c +++ b/server/trace.c @@ -1341,8 +1341,8 @@ static void dump_varargs_rawinput_devices(const char *prefix, data_size_t size ) while (size >= sizeof(*device)) { device = cur_data; - fprintf( stderr, "{usage_page=%04x,usage=%04x,flags=%08x,target=%08x}", - device->usage_page, device->usage, device->flags, device->target ); + fprintf( stderr, "{usage=%04x,flags=%08x,target=%08x}", + device->usage, device->flags, device->target ); size -= sizeof(*device); remove_data( sizeof(*device) ); if (size) fputc( ',', stderr );