From: Rémi Bernon rbernon@codeweavers.com
Appending the entire RAWMOUSE / RAWKEYBOARD / RAWHID + report structs after the hardware message data, instead of using a custom intermediate structure. --- dlls/user32/tests/input.c | 11 +-- dlls/win32u/rawinput.c | 127 +++++---------------------- server/protocol.def | 32 ++----- server/queue.c | 180 +++++++++++++++++++++++++++++++------- tools/make_requests | 2 +- 5 files changed, 175 insertions(+), 177 deletions(-)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 3b2d31c14bd..2f3a7fffe0a 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -1915,7 +1915,6 @@ static LRESULT CALLBACK rawinputbuffer_wndproc(HWND hwnd, UINT msg, WPARAM wpara
size = sizeof(buffer); memset( buffer, 0, sizeof(buffer) ); - todo_wine_if(is_wow64 && iteration == 1) ok_ret( 3, GetRawInputBuffer( rawbuffer, &size, sizeof(RAWINPUTHEADER)) ); ok_eq( sizeof(buffer), size, UINT, "%u" );
@@ -1958,9 +1957,8 @@ static LRESULT CALLBACK rawinputbuffer_wndproc(HWND hwnd, UINT msg, WPARAM wpara * it needs one more byte to return success */ size = sizeof(rawinput) + 1; memset( buffer, 0, sizeof(buffer) ); - todo_wine_if(is_wow64) ok_ret( 1, GetRawInputBuffer( rawbuffer, &size, sizeof(RAWINPUTHEADER) ) ); - if (is_wow64) todo_wine ok_eq( 5, rawbuffer64->data.keyboard.MakeCode, WPARAM, "%Iu" ); + if (is_wow64) ok_eq( 5, rawbuffer64->data.keyboard.MakeCode, WPARAM, "%Iu" ); else ok_eq( 5, rawbuffer->data.keyboard.MakeCode, WPARAM, "%Iu" );
/* peek the messages now, they should still arrive in the correct order */ @@ -1999,7 +1997,6 @@ static LRESULT CALLBACK rawinputbuffer_wndproc(HWND hwnd, UINT msg, WPARAM wpara size = sizeof(rawinput); rawinput_size = sizeof(RAWINPUTHEADER) + sizeof(RAWKEYBOARD); ok_ret( rawinput_size, GetRawInputData( handle, RID_INPUT, &rawinput, &size, sizeof(RAWINPUTHEADER) ) ); - todo_wine_if(is_wow64) ok_eq( 6, rawinput.data.keyboard.MakeCode, UINT, "%u" );
SetLastError( 0xdeadbeef ); @@ -2013,7 +2010,6 @@ static LRESULT CALLBACK rawinputbuffer_wndproc(HWND hwnd, UINT msg, WPARAM wpara { todo_wine ok_ret( rawinput_size, GetRawInputData( handle, RID_INPUT, &rawinput, &size, sizeof(RAWINPUTHEADER64) ) ); - todo_wine ok_eq( 6, rawinput.data.keyboard.MakeCode, UINT, "%u" ); todo_wine ok_ret( 0xdeadbeef, GetLastError() ); @@ -2170,7 +2166,6 @@ static void test_GetRawInputBuffer(void)
size = 0; ok_ret( 0, GetRawInputBuffer( NULL, &size, sizeof(RAWINPUTHEADER) ) ); - todo_wine ok_eq( rawinput_size, size, UINT, "%u" );
size = sizeof(buffer); @@ -2212,9 +2207,7 @@ static void test_GetRawInputBuffer(void) /* rawinput buffer survives registered device changes */
size = rawinput_size + 1; - todo_wine ok_ret( 1, GetRawInputBuffer( rawbuffer, &size, sizeof(RAWINPUTHEADER) ) ); - todo_wine ok_eq( rawinput_size + 1, size, UINT, "%u" );
raw_devices[0].usUsagePage = HID_USAGE_PAGE_GENERIC; @@ -2230,9 +2223,7 @@ static void test_GetRawInputBuffer(void) ok_ret( 1, GetRawInputBuffer( rawbuffer, &size, sizeof(RAWINPUTHEADER) ) ); ok_eq( rawinput_size + 1, size, UINT, "%u" ); size = sizeof(buffer); - todo_wine ok_ret( 0, GetRawInputBuffer( rawbuffer, &size, sizeof(RAWINPUTHEADER) ) ); - todo_wine ok_eq( 0, size, UINT, "%u" );
raw_devices[0].dwFlags = RIDEV_REMOVE; diff --git a/dlls/win32u/rawinput.c b/dlls/win32u/rawinput.c index 3ea29f2da77..524d1b820b2 100644 --- a/dlls/win32u/rawinput.c +++ b/dlls/win32u/rawinput.c @@ -73,125 +73,40 @@ static struct rawinput_thread_data *get_rawinput_thread_data(void) return data; }
-static bool rawinput_from_hardware_message( RAWINPUT *rawinput, const struct hardware_msg_data *msg_data ) +static BOOL rawinput_from_hardware_message( RAWINPUT *rawinput, const struct hardware_msg_data *msg_data ) { - SIZE_T size; + SIZE_T size = msg_data->size - sizeof(*msg_data); + if (sizeof(RAWINPUTHEADER) + size > rawinput->header.dwSize) return FALSE; + + rawinput->header.dwType = msg_data->rawinput.type; + rawinput->header.dwSize = sizeof(RAWINPUTHEADER) + size; + rawinput->header.hDevice = UlongToHandle( msg_data->rawinput.device ); + rawinput->header.wParam = msg_data->rawinput.wparam;
- rawinput->header.dwType = msg_data->rawinput.type; if (msg_data->rawinput.type == RIM_TYPEMOUSE) { - static const unsigned int button_flags[] = - { - 0, /* MOUSEEVENTF_MOVE */ - RI_MOUSE_LEFT_BUTTON_DOWN, /* MOUSEEVENTF_LEFTDOWN */ - RI_MOUSE_LEFT_BUTTON_UP, /* MOUSEEVENTF_LEFTUP */ - RI_MOUSE_RIGHT_BUTTON_DOWN, /* MOUSEEVENTF_RIGHTDOWN */ - RI_MOUSE_RIGHT_BUTTON_UP, /* MOUSEEVENTF_RIGHTUP */ - RI_MOUSE_MIDDLE_BUTTON_DOWN, /* MOUSEEVENTF_MIDDLEDOWN */ - RI_MOUSE_MIDDLE_BUTTON_UP, /* MOUSEEVENTF_MIDDLEUP */ - }; - unsigned int i; - - rawinput->header.dwSize = FIELD_OFFSET(RAWINPUT, data) + sizeof(RAWMOUSE); - rawinput->header.hDevice = WINE_MOUSE_HANDLE; - rawinput->header.wParam = 0; - - rawinput->data.mouse.usFlags = MOUSE_MOVE_RELATIVE; - rawinput->data.mouse.usButtonFlags = 0; - rawinput->data.mouse.usButtonData = 0; - for (i = 1; i < ARRAY_SIZE(button_flags); ++i) - { - if (msg_data->flags & (1 << i)) - rawinput->data.mouse.usButtonFlags |= button_flags[i]; - } - if (msg_data->flags & MOUSEEVENTF_WHEEL) - { - rawinput->data.mouse.usButtonFlags |= RI_MOUSE_WHEEL; - rawinput->data.mouse.usButtonData = msg_data->rawinput.mouse.data; - } - if (msg_data->flags & MOUSEEVENTF_HWHEEL) - { - rawinput->data.mouse.usButtonFlags |= RI_MOUSE_HORIZONTAL_WHEEL; - rawinput->data.mouse.usButtonData = msg_data->rawinput.mouse.data; - } - if (msg_data->flags & MOUSEEVENTF_XDOWN) - { - if (msg_data->rawinput.mouse.data == XBUTTON1) - rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_4_DOWN; - else if (msg_data->rawinput.mouse.data == XBUTTON2) - rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_5_DOWN; - } - if (msg_data->flags & MOUSEEVENTF_XUP) - { - if (msg_data->rawinput.mouse.data == XBUTTON1) - rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_4_UP; - else if (msg_data->rawinput.mouse.data == XBUTTON2) - rawinput->data.mouse.usButtonFlags |= RI_MOUSE_BUTTON_5_UP; - } - - rawinput->data.mouse.ulRawButtons = 0; - rawinput->data.mouse.lLastX = msg_data->rawinput.mouse.x; - rawinput->data.mouse.lLastY = msg_data->rawinput.mouse.y; - rawinput->data.mouse.ulExtraInformation = msg_data->info; + if (size != sizeof(RAWMOUSE)) return FALSE; + rawinput->data.mouse = *(RAWMOUSE *)(msg_data + 1); } else if (msg_data->rawinput.type == RIM_TYPEKEYBOARD) { - rawinput->header.dwSize = FIELD_OFFSET(RAWINPUT, data) + sizeof(RAWKEYBOARD); - rawinput->header.hDevice = WINE_KEYBOARD_HANDLE; - rawinput->header.wParam = 0; - - rawinput->data.keyboard.MakeCode = msg_data->rawinput.kbd.scan; - rawinput->data.keyboard.Flags = (msg_data->flags & KEYEVENTF_KEYUP) ? RI_KEY_BREAK : RI_KEY_MAKE; - if (msg_data->flags & KEYEVENTF_EXTENDEDKEY) - rawinput->data.keyboard.Flags |= RI_KEY_E0; - rawinput->data.keyboard.Reserved = 0; - - switch (msg_data->rawinput.kbd.vkey) - { - case VK_LSHIFT: - case VK_RSHIFT: - rawinput->data.keyboard.VKey = VK_SHIFT; - rawinput->data.keyboard.Flags &= ~RI_KEY_E0; - break; - - case VK_LCONTROL: - case VK_RCONTROL: - rawinput->data.keyboard.VKey = VK_CONTROL; - break; - - case VK_LMENU: - case VK_RMENU: - rawinput->data.keyboard.VKey = VK_MENU; - break; - - default: - rawinput->data.keyboard.VKey = msg_data->rawinput.kbd.vkey; - break; - } - - rawinput->data.keyboard.Message = msg_data->rawinput.kbd.message; - rawinput->data.keyboard.ExtraInformation = msg_data->info; + if (size != sizeof(RAWKEYBOARD)) return FALSE; + rawinput->data.keyboard = *(RAWKEYBOARD *)(msg_data + 1); } else if (msg_data->rawinput.type == RIM_TYPEHID) { - size = msg_data->size - sizeof(*msg_data); - if (size > rawinput->header.dwSize - sizeof(*rawinput)) return false; - - rawinput->header.dwSize = FIELD_OFFSET( RAWINPUT, data.hid.bRawData ) + size; - rawinput->header.hDevice = ULongToHandle( msg_data->rawinput.hid.device ); - rawinput->header.wParam = 0; - - rawinput->data.hid.dwCount = msg_data->rawinput.hid.count; - rawinput->data.hid.dwSizeHid = msg_data->rawinput.hid.length; - memcpy( rawinput->data.hid.bRawData, msg_data + 1, size ); + RAWHID *hid = (RAWHID *)(msg_data + 1); + if (size < offsetof(RAWHID, bRawData[0])) return FALSE; + if (size != offsetof(RAWHID, bRawData[hid->dwCount * hid->dwSizeHid])) return FALSE; + memcpy( &rawinput->data.hid, msg_data + 1, size ); } else { FIXME( "Unhandled rawinput type %#x.\n", msg_data->rawinput.type ); - return false; + return FALSE; }
- return true; + return TRUE; }
struct device @@ -621,10 +536,10 @@ UINT WINAPI NtUserGetRawInputBuffer( RAWINPUT *data, UINT *data_size, UINT heade int i;
if (NtCurrentTeb()->WowTebOffset) - rawinput_size = sizeof(RAWINPUT64); + rawinput_size = sizeof(RAWINPUTHEADER64); else - rawinput_size = sizeof(RAWINPUT); - overhead = rawinput_size - sizeof(RAWINPUT); + rawinput_size = sizeof(RAWINPUTHEADER); + overhead = rawinput_size - sizeof(RAWINPUTHEADER);
if (header_size != sizeof(RAWINPUTHEADER)) { diff --git a/server/protocol.def b/server/protocol.def index 419cf763063..7360bb51fe7 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -279,32 +279,12 @@ struct hw_msg_source unsigned int origin; /* source origin (IMO_* values) */ };
-union rawinput +struct rawinput { - int type; - struct - { - int type; /* RIM_TYPEKEYBOARD */ - unsigned int message; /* message generated by this rawinput event */ - unsigned short vkey; /* virtual key code */ - unsigned short scan; /* scan code */ - } kbd; - struct - { - int type; /* RIM_TYPEMOUSE */ - int x; /* x coordinate */ - int y; /* y coordinate */ - unsigned int data; /* mouse data */ - } mouse; - struct - { - int type; /* RIM_TYPEHID */ - unsigned int device; /* rawinput device index */ - unsigned int wparam; /* rawinput message wparam */ - unsigned int usage; /* HID device usage */ - unsigned int count; /* HID report count */ - unsigned int length; /* HID report length */ - } hid; + int type; /* rawinput data type (RIM_* values) */ + unsigned int device; /* rawinput device pseudo-handle */ + unsigned int wparam; /* wparam of the WM_INPUT* message */ + unsigned int usage; /* HID device usage */ };
struct hardware_msg_data @@ -315,7 +295,7 @@ struct hardware_msg_data unsigned int hw_id; /* unique id */ unsigned int flags; /* hook flags */ struct hw_msg_source source; /* message source */ - union rawinput rawinput; /* rawinput message data */ + struct rawinput rawinput; /* rawinput message data */ };
struct callback_msg_data diff --git a/server/queue.c b/server/queue.c index 07870f98711..e3aa0f685ca 100644 --- a/server/queue.c +++ b/server/queue.c @@ -1782,6 +1782,116 @@ static struct thread *get_foreground_thread( struct desktop *desktop, user_handl return NULL; }
+/* user32 reserves 1 & 2 for winemouse and winekeyboard, + * keep this in sync with user_private.h */ +#define WINE_MOUSE_HANDLE 1 +#define WINE_KEYBOARD_HANDLE 2 + +static void rawmouse_init( struct rawinput *header, RAWMOUSE *rawmouse, int x, int y, unsigned int flags, + unsigned int buttons, lparam_t info ) +{ + static const unsigned int button_flags[] = + { + 0, /* MOUSEEVENTF_MOVE */ + RI_MOUSE_LEFT_BUTTON_DOWN, /* MOUSEEVENTF_LEFTDOWN */ + RI_MOUSE_LEFT_BUTTON_UP, /* MOUSEEVENTF_LEFTUP */ + RI_MOUSE_RIGHT_BUTTON_DOWN, /* MOUSEEVENTF_RIGHTDOWN */ + RI_MOUSE_RIGHT_BUTTON_UP, /* MOUSEEVENTF_RIGHTUP */ + RI_MOUSE_MIDDLE_BUTTON_DOWN, /* MOUSEEVENTF_MIDDLEDOWN */ + RI_MOUSE_MIDDLE_BUTTON_UP, /* MOUSEEVENTF_MIDDLEUP */ + }; + unsigned int i; + + header->type = RIM_TYPEMOUSE; + header->device = WINE_MOUSE_HANDLE; + header->wparam = 0; + header->usage = MAKELONG(HID_USAGE_GENERIC_MOUSE, HID_USAGE_PAGE_GENERIC); + + rawmouse->usFlags = MOUSE_MOVE_RELATIVE; + rawmouse->usButtonFlags = 0; + rawmouse->usButtonData = 0; + for (i = 1; i < ARRAY_SIZE(button_flags); ++i) + { + if (flags & (1 << i)) rawmouse->usButtonFlags |= button_flags[i]; + } + if (flags & MOUSEEVENTF_WHEEL) + { + rawmouse->usButtonFlags |= RI_MOUSE_WHEEL; + rawmouse->usButtonData = buttons; + } + if (flags & MOUSEEVENTF_HWHEEL) + { + rawmouse->usButtonFlags |= RI_MOUSE_HORIZONTAL_WHEEL; + rawmouse->usButtonData = buttons; + } + if (flags & MOUSEEVENTF_XDOWN) + { + if (buttons == XBUTTON1) rawmouse->usButtonFlags |= RI_MOUSE_BUTTON_4_DOWN; + if (buttons == XBUTTON2) rawmouse->usButtonFlags |= RI_MOUSE_BUTTON_5_DOWN; + } + if (flags & MOUSEEVENTF_XUP) + { + if (buttons == XBUTTON1) rawmouse->usButtonFlags |= RI_MOUSE_BUTTON_4_UP; + if (buttons == XBUTTON2) rawmouse->usButtonFlags |= RI_MOUSE_BUTTON_5_UP; + } + + rawmouse->ulRawButtons = 0; + rawmouse->lLastX = x; + rawmouse->lLastY = y; + rawmouse->ulExtraInformation = info; +} + +static void rawkeyboard_init( struct rawinput *rawinput, RAWKEYBOARD *keyboard, unsigned short scan, unsigned short vkey, + unsigned int flags, unsigned int message, lparam_t info ) +{ + rawinput->type = RIM_TYPEKEYBOARD; + rawinput->device = WINE_KEYBOARD_HANDLE; + rawinput->wparam = 0; + rawinput->usage = MAKELONG(HID_USAGE_GENERIC_KEYBOARD, HID_USAGE_PAGE_GENERIC); + + keyboard->MakeCode = scan; + keyboard->Flags = (flags & KEYEVENTF_KEYUP) ? RI_KEY_BREAK : RI_KEY_MAKE; + if (flags & KEYEVENTF_EXTENDEDKEY) keyboard->Flags |= RI_KEY_E0; + keyboard->Reserved = 0; + + switch (vkey) + { + case VK_LSHIFT: + case VK_RSHIFT: + keyboard->VKey = VK_SHIFT; + keyboard->Flags &= ~RI_KEY_E0; + break; + + case VK_LCONTROL: + case VK_RCONTROL: + keyboard->VKey = VK_CONTROL; + break; + + case VK_LMENU: + case VK_RMENU: + keyboard->VKey = VK_MENU; + break; + + default: + keyboard->VKey = vkey; + break; + } + + keyboard->Message = message; + keyboard->ExtraInformation = info; +} + +static void rawhid_init( struct rawinput *rawinput, RAWHID *hid, const hw_input_t *input ) +{ + rawinput->type = RIM_TYPEHID; + rawinput->device = input->hw.hid.device; + rawinput->wparam = input->hw.wparam; + rawinput->usage = input->hw.hid.usage; + + hid->dwCount = input->hw.hid.count; + hid->dwSizeHid = input->hw.hid.length; +} + struct rawinput_message { struct thread *foreground; @@ -1789,30 +1899,48 @@ struct rawinput_message struct hw_msg_source source; unsigned int time; unsigned int message; - lparam_t info; unsigned int flags; - union rawinput rawinput; - const void *hid_report; + struct rawinput rawinput; + union + { + RAWKEYBOARD keyboard; + RAWMOUSE mouse; + RAWHID hid; + } data; + const void *hid_report; };
/* check if process is supposed to receive a WM_INPUT message and eventually queue it */ static int queue_rawinput_message( struct process* process, void *arg ) { - const struct rawinput_message* raw_msg = arg; + const struct rawinput_message *raw_msg = arg; const struct rawinput_device *device = NULL; struct desktop *target_desktop = NULL, *desktop = NULL; struct thread *target_thread = NULL, *foreground = NULL; struct hardware_msg_data *msg_data; struct message *msg; - data_size_t report_size; + data_size_t report_size = 0, data_size = 0; int wparam = RIM_INPUT; + lparam_t info = 0;
if (raw_msg->rawinput.type == RIM_TYPEMOUSE) + { device = process->rawinput_mouse; + data_size = sizeof(raw_msg->data.mouse); + info = raw_msg->data.mouse.ulExtraInformation; + } else if (raw_msg->rawinput.type == RIM_TYPEKEYBOARD) + { device = process->rawinput_kbd; + data_size = sizeof(raw_msg->data.keyboard); + info = raw_msg->data.keyboard.ExtraInformation; + } else - device = find_rawinput_device( process, raw_msg->rawinput.hid.usage ); + { + device = find_rawinput_device( process, raw_msg->rawinput.usage ); + data_size = offsetof(RAWHID, bRawData[0]); + report_size = raw_msg->data.hid.dwCount * raw_msg->data.hid.dwSizeHid; + } if (!device) return 0;
if (raw_msg->message == WM_INPUT_DEVICE_CHANGE && !(device->flags & RIDEV_DEVNOTIFY)) return 0; @@ -1832,10 +1960,7 @@ static int queue_rawinput_message( struct process* process, void *arg ) wparam = RIM_INPUTSINK; }
- if (raw_msg->rawinput.type != RIM_TYPEHID || !raw_msg->hid_report) report_size = 0; - else report_size = raw_msg->rawinput.hid.count * raw_msg->rawinput.hid.length; - - if (!(msg = alloc_hardware_message( raw_msg->info, raw_msg->source, raw_msg->time, report_size ))) goto done; + if (!(msg = alloc_hardware_message( info, raw_msg->source, raw_msg->time, data_size + report_size ))) goto done; msg->win = device->target; msg->msg = raw_msg->message; msg->wparam = wparam; @@ -1844,12 +1969,13 @@ static int queue_rawinput_message( struct process* process, void *arg ) msg_data = msg->data; msg_data->flags = raw_msg->flags; msg_data->rawinput = raw_msg->rawinput; - if (report_size) memcpy( msg_data + 1, raw_msg->hid_report, report_size ); + memcpy( msg_data + 1, &raw_msg->data, data_size ); + if (report_size) memcpy( (char *)(msg_data + 1) + data_size, raw_msg->hid_report, report_size );
if (raw_msg->message == WM_INPUT_DEVICE_CHANGE && raw_msg->rawinput.type == RIM_TYPEHID) { - msg->wparam = raw_msg->rawinput.hid.wparam; - msg->lparam = raw_msg->rawinput.hid.device; + msg->wparam = raw_msg->rawinput.wparam; + msg->lparam = raw_msg->rawinput.device; }
queue_hardware_message( desktop, msg, 1 ); @@ -1927,13 +2053,9 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons raw_msg.source = source; raw_msg.time = time; raw_msg.message = WM_INPUT; - - raw_msg.info = input->mouse.info; - raw_msg.flags = flags; - raw_msg.rawinput.type = RIM_TYPEMOUSE; - raw_msg.rawinput.mouse.x = x - desktop->cursor.x; - raw_msg.rawinput.mouse.y = y - desktop->cursor.y; - raw_msg.rawinput.mouse.data = input->mouse.data; + raw_msg.flags = flags; + rawmouse_init( &raw_msg.rawinput, &raw_msg.data.mouse, x - desktop->cursor.x, y - desktop->cursor.y, + raw_msg.flags, input->mouse.data, input->mouse.info );
enum_processes( queue_rawinput_message, &raw_msg ); release_object( foreground ); @@ -2063,13 +2185,9 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c raw_msg.source = source; raw_msg.time = time; raw_msg.message = WM_INPUT; - - raw_msg.info = input->kbd.info; - raw_msg.flags = input->kbd.flags; - raw_msg.rawinput.type = RIM_TYPEKEYBOARD; - raw_msg.rawinput.kbd.message = message_code; - raw_msg.rawinput.kbd.vkey = vkey; - raw_msg.rawinput.kbd.scan = input->kbd.scan; + raw_msg.flags = input->kbd.flags; + rawkeyboard_init( &raw_msg.rawinput, &raw_msg.data.keyboard, input->kbd.scan, vkey, + raw_msg.flags, message_code, input->kbd.info );
enum_processes( queue_rawinput_message, &raw_msg ); release_object( foreground ); @@ -2134,13 +2252,7 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ set_error( STATUS_INVALID_PARAMETER ); return; } - - raw_msg.rawinput.hid.type = RIM_TYPEHID; - raw_msg.rawinput.hid.device = input->hw.hid.device; - raw_msg.rawinput.hid.wparam = input->hw.wparam; - raw_msg.rawinput.hid.usage = input->hw.hid.usage; - raw_msg.rawinput.hid.count = input->hw.hid.count; - raw_msg.rawinput.hid.length = input->hw.hid.length; + rawhid_init( &raw_msg.rawinput, &raw_msg.data.hid, input );
enum_processes( queue_rawinput_message, &raw_msg ); return; diff --git a/tools/make_requests b/tools/make_requests index 77b5ab331f4..e3eaaf45b6f 100755 --- a/tools/make_requests +++ b/tools/make_requests @@ -57,7 +57,7 @@ my %formats = "context_t" => [ 1720, 8 ], "cursor_pos_t" => [ 24, 8 ], "debug_event_t" => [ 160, 8 ], - "message_data_t" => [ 56, 8 ], + "message_data_t" => [ 48, 8 ], "pe_image_info_t" => [ 88, 8 ], "property_data_t" => [ 16, 8 ], "select_op_t" => [ 264, 8 ],