From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/message.c | 12 +++++------- server/protocol.def | 11 +++++++++-- server/queue.c | 19 ++++++++++--------- server/trace.c | 32 ++++++++------------------------ 4 files changed, 32 insertions(+), 42 deletions(-)
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index 0cd20684b4e..08222fd460f 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -3549,16 +3549,14 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r { case WM_INPUT: case WM_INPUT_DEVICE_CHANGE: - req->input.hw.rawinput.type = rawinput->header.dwType; switch (rawinput->header.dwType) { case RIM_TYPEHID: - req->input.hw.rawinput.hid.device = HandleToUlong( rawinput->header.hDevice ); - req->input.hw.rawinput.hid.param = rawinput->header.wParam; - req->input.hw.rawinput.hid.usage_page = hid_usage_page; - req->input.hw.rawinput.hid.usage = hid_usage; - req->input.hw.rawinput.hid.count = rawinput->data.hid.dwCount; - req->input.hw.rawinput.hid.length = rawinput->data.hid.dwSizeHid; + req->input.hw.wparam = rawinput->header.wParam; + req->input.hw.hid.device = HandleToUlong( rawinput->header.hDevice ); + req->input.hw.hid.usage = MAKELONG(hid_usage, hid_usage_page); + req->input.hw.hid.count = rawinput->data.hid.dwCount; + req->input.hw.hid.length = rawinput->data.hid.dwSizeHid; wine_server_add_data( req, rawinput->data.hid.bRawData, rawinput->data.hid.dwCount * rawinput->data.hid.dwSizeHid ); break; diff --git a/server/protocol.def b/server/protocol.def index 5d60e7fcda3..29461c80af2 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -360,8 +360,15 @@ typedef union { int type; /* INPUT_HARDWARE */ unsigned int msg; /* message code */ - lparam_t lparam; /* message param */ - union rawinput rawinput;/* rawinput message data */ + lparam_t wparam; /* parameters */ + lparam_t lparam; /* parameters */ + struct + { + unsigned int device; /* rawinput device index */ + unsigned int usage; /* HID device usage */ + unsigned int count; /* HID report count */ + unsigned int length; /* HID report length */ + } hid; } hw; } hw_input_t;
diff --git a/server/queue.c b/server/queue.c index cd913ae03e5..cc4472ba2a5 100644 --- a/server/queue.c +++ b/server/queue.c @@ -2129,13 +2129,8 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ raw_msg.source = source; raw_msg.time = get_tick_count(); raw_msg.message = input->hw.msg; - - if (input->hw.rawinput.type == RIM_TYPEHID) - { - raw_msg.hid_report = get_req_data(); - report_size = input->hw.rawinput.hid.length * input->hw.rawinput.hid.count; - } - + raw_msg.hid_report = get_req_data(); + report_size = input->hw.hid.length * input->hw.hid.count; if (report_size != get_req_data_size()) { set_error( STATUS_INVALID_PARAMETER ); @@ -2143,8 +2138,14 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ }
msg_data = &raw_msg.data; - msg_data->size = sizeof(*msg_data) + report_size; - msg_data->rawinput = input->hw.rawinput; + msg_data->size = sizeof(*msg_data) + report_size; + 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.count = input->hw.hid.count; + msg_data->rawinput.hid.length = input->hw.hid.length;
enum_processes( queue_rawinput_message, &raw_msg ); return; diff --git a/server/trace.c b/server/trace.c index 1b65d2b977e..3bcfc700519 100644 --- a/server/trace.c +++ b/server/trace.c @@ -421,29 +421,6 @@ static void dump_irp_params( const char *prefix, const irp_params_t *data ) } }
-static void dump_rawinput( const char *prefix, const union rawinput *rawinput ) -{ - switch (rawinput->type) - { - case RIM_TYPEMOUSE: - fprintf( stderr, "%s{type=MOUSE,x=%d,y=%d,data=%08x}", prefix, rawinput->mouse.x, - rawinput->mouse.y, rawinput->mouse.data ); - break; - case RIM_TYPEKEYBOARD: - fprintf( stderr, "%s{type=KEYBOARD,message=%04x,vkey=%04hx,scan=%04hx}", prefix, - rawinput->kbd.message, rawinput->kbd.vkey, rawinput->kbd.scan ); - break; - case RIM_TYPEHID: - fprintf( stderr, "%s{type=HID,device=%04x,param=%04x,page=%04hx,usage=%04hx,count=%u,length=%u}", - prefix, rawinput->hid.device, rawinput->hid.param, rawinput->hid.usage_page, - rawinput->hid.usage, rawinput->hid.count, rawinput->hid.length ); - break; - default: - fprintf( stderr, "%s{type=%04x}", prefix, rawinput->type ); - break; - } -} - static void dump_hw_input( const char *prefix, const hw_input_t *input ) { switch (input->type) @@ -463,12 +440,19 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) break; case INPUT_HARDWARE: fprintf( stderr, "%s{type=HARDWARE,msg=%04x", prefix, input->hw.msg ); + dump_uint64( ",wparam=", &input->hw.wparam ); dump_uint64( ",lparam=", &input->hw.lparam ); switch (input->hw.msg) { case WM_INPUT: + fprintf( stderr, "%s{type=HID,device=%04x,usage=%04x,count=%u,length=%u}", + prefix, input->hw.hid.device, input->hw.hid.usage, + input->hw.hid.count, input->hw.hid.length ); + break; case WM_INPUT_DEVICE_CHANGE: - dump_rawinput( ",rawinput=", &input->hw.rawinput ); + fprintf( stderr, "%s{type=HID,device=%04x,usage=%04x}", + prefix, input->hw.hid.device, input->hw.hid.usage ); + break; } fputc( '}', stderr ); break;