mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
139 lines
5.5 KiB
Diff
139 lines
5.5 KiB
Diff
From c9e0eb6e9625d7d8dc31a208c5bbff25e5eff4d5 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
|
Date: Tue, 23 Mar 2021 10:11:07 +0100
|
|
Subject: [PATCH] server: Add extra data bytes to be added after
|
|
hardware_msg_data.
|
|
|
|
The RIM_TYPEHID messages will have to carry the variable length HID
|
|
report.
|
|
|
|
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506
|
|
---
|
|
server/queue.c | 27 ++++++++++++++++++---------
|
|
1 file changed, 18 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/server/queue.c b/server/queue.c
|
|
index 5d65e030112..c43386ee317 100644
|
|
--- a/server/queue.c
|
|
+++ b/server/queue.c
|
|
@@ -348,13 +348,13 @@ static int assign_thread_input( struct thread *thread, struct thread_input *new_
|
|
|
|
/* allocate a hardware message and its data */
|
|
static struct message *alloc_hardware_message( lparam_t info, struct hw_msg_source source,
|
|
- unsigned int time )
|
|
+ unsigned int time, data_size_t extra_len )
|
|
{
|
|
struct hardware_msg_data *msg_data;
|
|
struct message *msg;
|
|
|
|
if (!(msg = mem_alloc( sizeof(*msg) ))) return NULL;
|
|
- if (!(msg_data = mem_alloc( sizeof(*msg_data) )))
|
|
+ if (!(msg_data = mem_alloc( sizeof(*msg_data) + extra_len )))
|
|
{
|
|
free( msg );
|
|
return NULL;
|
|
@@ -363,9 +363,9 @@ static struct message *alloc_hardware_message( lparam_t info, struct hw_msg_sour
|
|
msg->type = MSG_HARDWARE;
|
|
msg->time = time;
|
|
msg->data = msg_data;
|
|
- msg->data_size = sizeof(*msg_data);
|
|
+ msg->data_size = sizeof(*msg_data) + extra_len;
|
|
|
|
- memset( msg_data, 0, sizeof(*msg_data) );
|
|
+ memset( msg_data, 0, sizeof(*msg_data) + extra_len );
|
|
msg_data->info = info;
|
|
msg_data->source = source;
|
|
return msg;
|
|
@@ -398,7 +398,7 @@ static void set_cursor_pos( struct desktop *desktop, int x, int y )
|
|
return;
|
|
}
|
|
|
|
- if (!(msg = alloc_hardware_message( 0, source, get_tick_count() ))) return;
|
|
+ if (!(msg = alloc_hardware_message( 0, source, get_tick_count(), 0 ))) return;
|
|
|
|
msg->msg = WM_MOUSEMOVE;
|
|
msg->x = x;
|
|
@@ -1664,6 +1664,8 @@ struct rawinput_message
|
|
unsigned int time;
|
|
unsigned int message;
|
|
struct hardware_msg_data data;
|
|
+ const void *extra;
|
|
+ data_size_t extra_len;
|
|
};
|
|
|
|
/* check if process is supposed to receive a WM_INPUT message and eventually queue it */
|
|
@@ -1702,7 +1704,7 @@ static int queue_rawinput_message( struct process* process, void *arg )
|
|
wparam = RIM_INPUTSINK;
|
|
}
|
|
|
|
- if (!(msg = alloc_hardware_message( raw_msg->data.info, raw_msg->source, raw_msg->time )))
|
|
+ if (!(msg = alloc_hardware_message( raw_msg->data.info, raw_msg->source, raw_msg->time, raw_msg->extra_len )))
|
|
goto done;
|
|
|
|
msg->win = device->target;
|
|
@@ -1710,6 +1712,7 @@ static int queue_rawinput_message( struct process* process, void *arg )
|
|
msg->wparam = wparam;
|
|
msg->lparam = 0;
|
|
memcpy( msg->data, &raw_msg->data, sizeof(raw_msg->data) );
|
|
+ if (raw_msg->extra) memcpy( (struct hardware_msg_data *)msg->data + 1, raw_msg->extra, raw_msg->extra_len );
|
|
|
|
if (raw_msg->message == WM_INPUT_DEVICE_CHANGE && raw_msg->data.rawinput.type == RIM_TYPEHID)
|
|
{
|
|
@@ -1791,6 +1794,8 @@ 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.extra = NULL;
|
|
+ raw_msg.extra_len = 0;
|
|
|
|
msg_data = &raw_msg.data;
|
|
msg_data->info = input->mouse.info;
|
|
@@ -1816,7 +1821,7 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
|
if (!(flags & (1 << i))) continue;
|
|
flags &= ~(1 << i);
|
|
|
|
- if (!(msg = alloc_hardware_message( input->mouse.info, source, time ))) return 0;
|
|
+ if (!(msg = alloc_hardware_message( input->mouse.info, source, time, 0 ))) return 0;
|
|
msg_data = msg->data;
|
|
|
|
msg->win = get_user_full_handle( win );
|
|
@@ -1926,6 +1931,8 @@ 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.extra = NULL;
|
|
+ raw_msg.extra_len = 0;
|
|
|
|
msg_data = &raw_msg.data;
|
|
msg_data->info = input->kbd.info;
|
|
@@ -1945,7 +1952,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
|
|
return 0;
|
|
}
|
|
|
|
- if (!(msg = alloc_hardware_message( input->kbd.info, source, time ))) return 0;
|
|
+ if (!(msg = alloc_hardware_message( input->kbd.info, source, time, 0 ))) return 0;
|
|
msg_data = msg->data;
|
|
|
|
msg->win = get_user_full_handle( win );
|
|
@@ -1993,6 +2000,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;
|
|
+ raw_msg.extra = NULL;
|
|
+ raw_msg.extra_len = 0;
|
|
|
|
msg_data = &raw_msg.data;
|
|
msg_data->info = 0;
|
|
@@ -2005,7 +2014,7 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_
|
|
return;
|
|
}
|
|
|
|
- if (!(msg = alloc_hardware_message( 0, source, get_tick_count() ))) return;
|
|
+ if (!(msg = alloc_hardware_message( 0, source, get_tick_count(), 0 ))) return;
|
|
|
|
msg->win = get_user_full_handle( win );
|
|
msg->msg = input->hw.msg;
|
|
--
|
|
2.30.2
|
|
|