Added patch to improve handling of hooks for normal (non-injected) hardware messages.

This commit is contained in:
Sebastian Lackner 2017-06-27 02:21:50 +02:00
parent 8fb3cd2056
commit 3dad3ddae9
3 changed files with 93 additions and 0 deletions

View File

@ -333,6 +333,7 @@ patch_enable_all ()
enable_server_Stored_ACLs="$1"
enable_server_Timestamp_Compat="$1"
enable_server_device_manager_destroy="$1"
enable_server_send_hardware_message="$1"
enable_setupapi_DelReg="$1"
enable_setupapi_DiskSpaceList="$1"
enable_setupapi_Display_Device="$1"
@ -1246,6 +1247,9 @@ patch_enable ()
server-device_manager_destroy)
enable_server_device_manager_destroy="$2"
;;
server-send_hardware_message)
enable_server_send_hardware_message="$2"
;;
setupapi-DelReg)
enable_setupapi_DelReg="$2"
;;
@ -7289,6 +7293,21 @@ if test "$enable_server_device_manager_destroy" -eq 1; then
) >> "$patchlist"
fi
# Patchset server-send_hardware_message
# |
# | This patchset fixes the following Wine bugs:
# | * [#43102] Improve handling of hooks for normal (non-injected) hardware messages
# |
# | Modified files:
# | * server/queue.c
# |
if test "$enable_server_send_hardware_message" -eq 1; then
patch_apply server-send_hardware_message/0001-server-Improve-handling-of-hooks-for-normal-non-inje.patch
(
printf '%s\n' '+ { "Michael Müller", "server: Improve handling of hooks for normal (non-injected) hardware messages.", 1 },';
) >> "$patchlist"
fi
# Patchset setupapi-DelReg
# |
# | This patchset fixes the following Wine bugs:

View File

@ -0,0 +1,73 @@
From 02879d85a14dd6fff5c473cf38f92dab1305f573 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Tue, 27 Jun 2017 02:08:50 +0200
Subject: server: Improve handling of hooks for normal (non-injected) hardware
messages.
---
server/queue.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/server/queue.c b/server/queue.c
index 941fcb6a307..ee8e5255848 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1715,7 +1715,7 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
struct hardware_msg_data *msg_data;
struct message *msg;
unsigned int i, time, flags;
- int wait = 0, x, y;
+ int hooked = 0, x, y;
static const unsigned int messages[] =
{
@@ -1821,13 +1821,13 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
/* specify a sender only when sending the last message */
if (!(flags & ((1 << sizeof(messages)/sizeof(messages[0])) - 1)))
{
- if (!(wait = send_hook_ll_message( desktop, msg, input, sender )))
+ if (!(hooked = send_hook_ll_message( desktop, msg, input, sender )))
queue_hardware_message( desktop, msg, 0 );
}
else if (!send_hook_ll_message( desktop, msg, input, NULL ))
queue_hardware_message( desktop, msg, 0 );
}
- return wait;
+ return hooked && sender;
}
/* queue a hardware message for a keyboard event */
@@ -1839,7 +1839,7 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
struct message *msg;
unsigned char vkey = input->kbd.vkey;
unsigned int message_code, time;
- int wait;
+ int hooked;
if (!(time = input->kbd.time)) time = get_tick_count();
@@ -1972,10 +1972,10 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
msg_data->flags |= (flags & (KF_EXTENDED | KF_ALTDOWN | KF_UP)) >> 8;
}
- if (!(wait = send_hook_ll_message( desktop, msg, input, sender )))
+ if (!(hooked = send_hook_ll_message( desktop, msg, input, sender )))
queue_hardware_message( desktop, msg, 1 );
- return wait;
+ return hooked && sender;
}
/* queue a hardware message for a custom type of event */
@@ -2493,7 +2493,7 @@ DECL_HANDLER(send_hardware_message)
{
struct thread *thread = NULL;
struct desktop *desktop;
- struct msg_queue *sender = get_current_queue();
+ struct msg_queue *sender = (req->flags & SEND_HWMSG_INJECTED) ? get_current_queue() : NULL;
data_size_t size = min( 256, get_reply_max_size() );
if (!(desktop = get_thread_desktop( current, 0 ))) return;
--
2.13.1

View File

@ -0,0 +1 @@
Fixes: [43102] Improve handling of hooks for normal (non-injected) hardware messages