Rebase against 7eb72b7bb3d3ea771efddcb5273e8a69456548ff.

This commit is contained in:
Alistair Leslie-Hughes
2024-06-08 08:26:32 +10:00
parent 88e86a23c0
commit 87a5dcecb7
6 changed files with 130 additions and 88 deletions

View File

@@ -1,4 +1,4 @@
From 84025e765979320128422a50d5f892e8f501b2df Mon Sep 17 00:00:00 2001
From e51d13c759303fd7a903d784ebf8e9a42e2955b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Mon, 26 Aug 2019 14:37:20 +0200
Subject: [PATCH] server: Add send_hardware_message flags for rawinput
@@ -7,14 +7,14 @@ Subject: [PATCH] server: Add send_hardware_message flags for rawinput
---
include/ntuser.h | 4 ++++
server/protocol.def | 3 +--
server/queue.c | 16 ++++++++++------
3 files changed, 15 insertions(+), 8 deletions(-)
server/queue.c | 20 ++++++++++++--------
3 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/include/ntuser.h b/include/ntuser.h
index ff45ffa2bc8..bc51f04af6e 100644
index 507ed2e47ec..33e99f1084e 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -1440,6 +1440,10 @@ struct hid_packet
@@ -1478,6 +1478,10 @@ struct hid_packet
C_ASSERT(sizeof(struct hid_packet) == offsetof(struct hid_packet, data[0]));
@@ -26,7 +26,7 @@ index ff45ffa2bc8..bc51f04af6e 100644
{
UINT flags;
diff --git a/server/protocol.def b/server/protocol.def
index 1fdedd161ff..4d199a6407c 100644
index c3fab5e65ba..fc686f1254e 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2164,7 +2164,7 @@ enum message_type
@@ -47,18 +47,18 @@ index 1fdedd161ff..4d199a6407c 100644
/* Get a message from the current queue */
diff --git a/server/queue.c b/server/queue.c
index ac863fd439b..c38d91ba28c 100644
index 7a721877a6f..a220baa1f92 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -2019,7 +2019,7 @@ static void dispatch_rawinput_message( struct desktop *desktop, struct rawinput_
@@ -2020,7 +2020,7 @@ static void dispatch_rawinput_message( struct desktop *desktop, struct rawinput_
/* queue a hardware message for a mouse event */
static int queue_mouse_message( struct desktop *desktop, user_handle_t win, const hw_input_t *input,
- unsigned int origin, struct msg_queue *sender )
+ unsigned int origin, struct msg_queue *sender, unsigned int send_flags )
{
const struct rawinput_device *device;
struct hardware_msg_data *msg_data;
struct rawinput_message raw_msg;
@@ -2075,7 +2075,7 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
y = desktop->cursor.y;
}
@@ -68,8 +68,8 @@ index ac863fd439b..c38d91ba28c 100644
{
memset( &raw_msg, 0, sizeof(raw_msg) );
raw_msg.foreground = foreground;
@@ -2097,6 +2097,8 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
return 0;
@@ -2090,6 +2090,8 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
release_object( foreground );
}
+ if (send_flags & SEND_HWMSG_NO_MSG) return 0;
@@ -77,17 +77,34 @@ index ac863fd439b..c38d91ba28c 100644
for (i = 0; i < ARRAY_SIZE( messages ); i++)
{
if (!messages[i]) continue;
@@ -2128,7 +2130,7 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
@@ -2120,14 +2122,14 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
}
static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, const hw_input_t *input,
- unsigned int origin, struct msg_queue *sender, int repeat );
+ unsigned int origin, struct msg_queue *sender, int repeat, unsigned int send_flags);
static void key_repeat_timeout( void *private )
{
struct desktop *desktop = private;
desktop->key_repeat.timeout = NULL;
- queue_keyboard_message( desktop, desktop->key_repeat.win, &desktop->key_repeat.input, IMO_HARDWARE, NULL, 1 );
+ queue_keyboard_message( desktop, desktop->key_repeat.win, &desktop->key_repeat.input, IMO_HARDWARE, NULL, 1, 0 );
}
static void stop_key_repeat( struct desktop *desktop )
@@ -2140,7 +2142,7 @@ static void stop_key_repeat( struct desktop *desktop )
/* queue a hardware message for a keyboard event */
static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, const hw_input_t *input,
- unsigned int origin, struct msg_queue *sender )
+ unsigned int origin, struct msg_queue *sender, unsigned int send_flags )
- unsigned int origin, struct msg_queue *sender, int repeat )
+ unsigned int origin, struct msg_queue *sender, int repeat, unsigned int send_flags )
{
struct hw_msg_source source = { IMDT_KEYBOARD, origin };
const struct rawinput_device *device;
@@ -2232,7 +2234,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
}
struct hardware_msg_data *msg_data;
@@ -2263,7 +2265,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
}
}
- if (!unicode && (foreground = get_foreground_thread( desktop, win )))
@@ -95,8 +112,8 @@ index ac863fd439b..c38d91ba28c 100644
{
struct rawinput_message raw_msg = {0};
raw_msg.foreground = foreground;
@@ -2253,6 +2255,8 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
return 0;
@@ -2278,6 +2280,8 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
release_object( foreground );
}
+ if (send_flags & SEND_HWMSG_NO_MSG) return 0;
@@ -104,7 +121,7 @@ index ac863fd439b..c38d91ba28c 100644
if (!(msg = alloc_hardware_message( input->kbd.info, source, time, 0 ))) return 0;
msg_data = msg->data;
@@ -3004,10 +3008,10 @@ DECL_HANDLER(send_hardware_message)
@@ -3029,10 +3033,10 @@ DECL_HANDLER(send_hardware_message)
switch (req->input.type)
{
case INPUT_MOUSE:
@@ -112,8 +129,8 @@ index ac863fd439b..c38d91ba28c 100644
+ wait = queue_mouse_message( desktop, req->win, &req->input, origin, sender, req->flags );
break;
case INPUT_KEYBOARD:
- wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender );
+ wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender, req->flags );
- wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender, 0 );
+ wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender, 0, req->flags );
break;
case INPUT_HARDWARE:
queue_custom_hardware_message( desktop, req->win, origin, &req->input );