[PATCH] server: Fix keyboard hardware message regression

Andre Heider a.heider at gmail.com
Sat Nov 10 14:59:07 CST 2018


The same "struct message" cannot be reused easily, revert to old behavior and
allocate a new one.
This fixes keyboard input on e.g. Witcher 3, which would just hang upon
pressing the first key.

Fixes: 383cf211 ("server: Add a helper function to allocate a hardware message.")
Signed-off-by: Andre Heider <a.heider at gmail.com>
---
 server/queue.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/server/queue.c b/server/queue.c
index 9dfbd1e294..545991b99c 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1775,11 +1775,11 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
         break;
     }
 
-    if (!(msg = alloc_hardware_message( input->kbd.info, source, time ))) return 0;
-    msg_data = msg->data;
-
     if ((device = current->process->rawinput_kbd))
     {
+        if (!(msg = alloc_hardware_message( input->kbd.info, source, time ))) return 0;
+        msg_data = msg->data;
+
         msg->win       = device->target;
         msg->msg       = WM_INPUT;
         msg->wparam    = RIM_INPUT;
@@ -1793,6 +1793,9 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
         queue_hardware_message( desktop, msg, 0 );
     }
 
+    if (!(msg = alloc_hardware_message( input->kbd.info, source, time ))) return 0;
+    msg_data = msg->data;
+
     msg->win       = get_user_full_handle( win );
     msg->msg       = message_code;
     msg->lparam    = (input->kbd.scan << 16) | 1u; /* repeat count */
-- 
2.19.1




More information about the wine-devel mailing list