[RFC PATCH 6/6] server: Replace send_hardware_message SEND_HWMSG_INJECTED flag.

Rémi Bernon rbernon at codeweavers.com
Mon Nov 11 14:23:03 CST 2019


Replace it with hw_input_t HW_INPUT_SRC_INJECTED src bit to indicate
the injected nature of an input message.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/user32/message.c           |  1 -
 dlls/wineandroid.drv/keyboard.c |  1 -
 dlls/wineandroid.drv/window.c   |  2 --
 dlls/winemac.drv/ime.c          |  1 -
 dlls/winemac.drv/keyboard.c     |  1 -
 dlls/winemac.drv/mouse.c        |  1 -
 dlls/winex11.drv/keyboard.c     |  1 -
 dlls/winex11.drv/mouse.c        |  1 -
 server/protocol.def             |  3 +--
 server/queue.c                  | 16 +++++++++-------
 server/trace.c                  |  5 ++++-
 11 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index 8613fa5f971..eaca6808597 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -3339,7 +3339,6 @@ NTSTATUS inject_hardware_message( HWND hwnd, const INPUT *input )
     SERVER_START_REQ( send_hardware_message )
     {
         req->win        = wine_server_user_handle( hwnd );
-        req->flags      = SEND_HWMSG_INJECTED;
         req->input.type = input->type;
         switch (input->type)
         {
diff --git a/dlls/wineandroid.drv/keyboard.c b/dlls/wineandroid.drv/keyboard.c
index a714b38f5e4..c96c3db4bda 100644
--- a/dlls/wineandroid.drv/keyboard.c
+++ b/dlls/wineandroid.drv/keyboard.c
@@ -674,7 +674,6 @@ static void send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, DWORD flags )
     SERVER_START_REQ( send_hardware_message )
     {
         req->win             = wine_server_user_handle( hwnd );
-        req->flags           = 0;
         req->input.type      = INPUT_KEYBOARD;
         req->input.kbd.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
         req->input.kbd.vkey  = vkey;
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c
index 2d88c1f9816..cebfd62719c 100644
--- a/dlls/wineandroid.drv/window.c
+++ b/dlls/wineandroid.drv/window.c
@@ -525,7 +525,6 @@ static int process_events( DWORD mask )
                 SERVER_START_REQ( send_hardware_message )
                 {
                     req->win               = wine_server_user_handle( capture ? capture : event->data.motion.hwnd );
-                    req->flags             = 0;
                     req->input.type        = INPUT_MOUSE;
                     req->input.mouse.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
                     req->input.mouse.x     = event->data.motion.input.u.mi.dx;
@@ -554,7 +553,6 @@ static int process_events( DWORD mask )
             SERVER_START_REQ( send_hardware_message )
             {
                 req->win             = wine_server_user_handle( 0 );
-                req->flags           = 0;
                 req->input.type      = INPUT_KEYBOARD;
                 req->input.kbd.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
                 req->input.kbd.vkey  = event->data.kbd.input.u.ki.wVk;
diff --git a/dlls/winemac.drv/ime.c b/dlls/winemac.drv/ime.c
index ebbb1e8ccb4..00dcb192804 100644
--- a/dlls/winemac.drv/ime.c
+++ b/dlls/winemac.drv/ime.c
@@ -1389,7 +1389,6 @@ static void send_keyboard_char(HWND hwnd, int scan, int flags)
     SERVER_START_REQ(send_hardware_message)
     {
         req->win             = wine_server_user_handle(hwnd);
-        req->flags           = 0;
         req->input.type      = INPUT_KEYBOARD;
         req->input.kbd.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
         req->input.kbd.vkey  = 0;
diff --git a/dlls/winemac.drv/keyboard.c b/dlls/winemac.drv/keyboard.c
index bb09d1de1e0..4fd7bf71aca 100644
--- a/dlls/winemac.drv/keyboard.c
+++ b/dlls/winemac.drv/keyboard.c
@@ -923,7 +923,6 @@ static void macdrv_send_keyboard_input(HWND hwnd, WORD vkey, WORD scan, DWORD fl
     SERVER_START_REQ(send_hardware_message)
     {
         req->win             = wine_server_user_handle(hwnd);
-        req->flags           = 0;
         req->input.type      = INPUT_KEYBOARD;
         req->input.kbd.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
         req->input.kbd.vkey  = vkey;
diff --git a/dlls/winemac.drv/mouse.c b/dlls/winemac.drv/mouse.c
index 388b5d8e460..57950217902 100644
--- a/dlls/winemac.drv/mouse.c
+++ b/dlls/winemac.drv/mouse.c
@@ -160,7 +160,6 @@ static void send_mouse_input(HWND hwnd, macdrv_window cocoa_window, UINT flags,
     SERVER_START_REQ(send_hardware_message)
     {
         req->win               = wine_server_user_handle(top_level_hwnd);
-        req->flags             = 0;
         req->input.type        = INPUT_MOUSE;
         req->input.mouse.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
         req->input.mouse.x     = x;
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index 2725266f4b3..1663b3d99ad 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1142,7 +1142,6 @@ static void X11DRV_send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, DWORD f
     SERVER_START_REQ( send_hardware_message )
     {
         req->win             = wine_server_user_handle( hwnd );
-        req->flags           = 0;
         req->input.type      = INPUT_KEYBOARD;
         req->input.kbd.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
         req->input.kbd.vkey  = vkey;
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index f98e6804dea..346ae93b7b7 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -598,7 +598,6 @@ static void send_mouse_input( HWND hwnd, LONG dx, LONG dy, DWORD data, DWORD fla
     SERVER_START_REQ( send_hardware_message )
     {
         req->win               = wine_server_user_handle( hwnd );
-        req->flags             = 0;
         req->input.type        = INPUT_MOUSE;
         req->input.mouse.src   = HW_INPUT_SRC_WINDOW|HW_INPUT_SRC_RAWINPUT;
         req->input.mouse.x     = dx;
diff --git a/server/protocol.def b/server/protocol.def
index 0e302235ca1..cbc0e9ceaad 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -361,6 +361,7 @@ typedef union
 } hw_input_t;
 #define HW_INPUT_SRC_WINDOW   1
 #define HW_INPUT_SRC_RAWINPUT 2
+#define HW_INPUT_SRC_INJECTED 4
 
 typedef union
 {
@@ -2310,7 +2311,6 @@ enum message_type
 @REQ(send_hardware_message)
     user_handle_t   win;       /* window handle */
     hw_input_t      input;     /* input data */
-    unsigned int    flags;     /* flags (see below) */
 @REPLY
     int             wait;      /* do we need to wait for a reply? */
     int             prev_x;    /* previous cursor position */
@@ -2319,7 +2319,6 @@ enum message_type
     int             new_y;
     VARARG(keystate,bytes);    /* global state array for all the keys */
 @END
-#define SEND_HWMSG_INJECTED    0x01
 
 
 /* Get a message from the current queue */
diff --git a/server/queue.c b/server/queue.c
index 19da1f34c74..95ffc8db7c3 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1598,8 +1598,9 @@ static int send_hook_ll_message( struct desktop *desktop, struct message *hardwa
 
 /* 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 )
+                                struct msg_queue *sender )
 {
+    unsigned int origin = (input->mouse.src & HW_INPUT_SRC_INJECTED ? IMO_INJECTED : IMO_HARDWARE);
     const struct rawinput_device *device;
     struct hardware_msg_data *msg_data;
     struct message *msg;
@@ -1705,8 +1706,9 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
 
 /* 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 )
+                                   struct msg_queue *sender )
 {
+    unsigned int origin = (input->kbd.src & HW_INPUT_SRC_INJECTED ? IMO_INJECTED : IMO_HARDWARE);
     struct hw_msg_source source = { IMDT_KEYBOARD, origin };
     const struct rawinput_device *device;
     struct hardware_msg_data *msg_data;
@@ -1836,8 +1838,9 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
 
 /* queue a hardware message for a custom type of event */
 static void queue_custom_hardware_message( struct desktop *desktop, user_handle_t win,
-                                           unsigned int origin, const hw_input_t *input )
+                                           const hw_input_t *input )
 {
+    unsigned int origin = (input->hw.src & HW_INPUT_SRC_INJECTED ? IMO_INJECTED : IMO_HARDWARE);
     struct hw_msg_source source = { IMDT_UNAVAILABLE, origin };
     struct message *msg;
 
@@ -2336,7 +2339,6 @@ DECL_HANDLER(send_hardware_message)
 {
     struct thread *thread = NULL;
     struct desktop *desktop;
-    unsigned int origin = (req->flags & SEND_HWMSG_INJECTED ? IMO_INJECTED : IMO_HARDWARE);
     struct msg_queue *sender = get_current_queue();
     data_size_t size = min( 256, get_reply_max_size() );
 
@@ -2359,13 +2361,13 @@ DECL_HANDLER(send_hardware_message)
     switch (req->input.type)
     {
     case INPUT_MOUSE:
-        reply->wait = queue_mouse_message( desktop, req->win, &req->input, origin, sender );
+        reply->wait = queue_mouse_message( desktop, req->win, &req->input, sender );
         break;
     case INPUT_KEYBOARD:
-        reply->wait = queue_keyboard_message( desktop, req->win, &req->input, origin, sender );
+        reply->wait = queue_keyboard_message( desktop, req->win, &req->input, sender );
         break;
     case INPUT_HARDWARE:
-        queue_custom_hardware_message( desktop, req->win, origin, &req->input );
+        queue_custom_hardware_message( desktop, req->win, &req->input );
         break;
     default:
         set_error( STATUS_INVALID_PARAMETER );
diff --git a/server/trace.c b/server/trace.c
index 6674505bc1c..61894e8af19 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -379,12 +379,13 @@ static void dump_irp_params( const char *prefix, const irp_params_t *data )
 
 static void dump_hw_input( const char *prefix, const hw_input_t *input )
 {
-    char src[] = "--";
+    char src[] = "---";
     switch (input->type)
     {
     case INPUT_MOUSE:
         if (input->mouse.src & HW_INPUT_SRC_WINDOW) src[0] = 'w';
         if (input->mouse.src & HW_INPUT_SRC_RAWINPUT) src[1] = 'r';
+        if (input->mouse.src & HW_INPUT_SRC_INJECTED) src[2] = 'i';
         fprintf( stderr, "%s{type=MOUSE,src=%s,x=%d,y=%d,data=%08x,flags=%08x,time=%u",
                  prefix, src, input->mouse.x, input->mouse.y, input->mouse.data, input->mouse.flags,
                  input->mouse.time );
@@ -394,6 +395,7 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input )
     case INPUT_KEYBOARD:
         if (input->kbd.src & HW_INPUT_SRC_WINDOW) src[0] = 'w';
         if (input->kbd.src & HW_INPUT_SRC_RAWINPUT) src[1] = 'r';
+        if (input->kbd.src & HW_INPUT_SRC_INJECTED) src[2] = 'i';
         fprintf( stderr, "%s{type=KEYBOARD,src=%s,vkey=%04hx,scan=%04hx,flags=%08x,time=%u",
                  prefix, src, input->kbd.vkey, input->kbd.scan, input->kbd.flags, input->kbd.time );
         dump_uint64( ",info=", &input->kbd.info );
@@ -402,6 +404,7 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input )
     case INPUT_HARDWARE:
         if (input->hw.src & HW_INPUT_SRC_WINDOW) src[0] = 'w';
         if (input->hw.src & HW_INPUT_SRC_RAWINPUT) src[1] = 'r';
+        if (input->hw.src & HW_INPUT_SRC_INJECTED) src[2] = 'i';
         fprintf( stderr, "%s{type=HARDWARE,src=%s,msg=%04x", prefix, src, input->hw.msg );
         dump_uint64( ",lparam=", &input->hw.lparam );
         fputc( '}', stderr );
-- 
2.24.0.rc2




More information about the wine-devel mailing list