Rémi Bernon : server: Add rawinput union to hw_input_t / INPUT_HARDWARE.

Alexandre Julliard julliard at winehq.org
Mon May 10 15:44:06 CDT 2021


Module: wine
Branch: master
Commit: 6d167b91ad0a62c2f0f2aa377b0a321414158463
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=6d167b91ad0a62c2f0f2aa377b0a321414158463

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Thu May  6 12:57:31 2021 +0200

server: Add rawinput union to hw_input_t / INPUT_HARDWARE.

When msg is WM_INPUT_DEVICE_CHANGE.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 include/wine/server_protocol.h | 41 ++++++++++++++++++++++-------------------
 server/protocol.def            | 39 +++++++++++++++++++++------------------
 server/trace.c                 | 23 +++++++++++++++++++++++
 3 files changed, 66 insertions(+), 37 deletions(-)

diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index f326d78bc3c..139aebc722a 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -262,30 +262,32 @@ struct hw_msg_source
     unsigned int    origin;
 };
 
+union rawinput
+{
+    int type;
+    struct
+    {
+        int            type;
+        unsigned int   message;
+        unsigned short vkey;
+        unsigned short scan;
+    } kbd;
+    struct
+    {
+        int            type;
+        int            x;
+        int            y;
+        unsigned int   data;
+    } mouse;
+};
+
 struct hardware_msg_data
 {
     lparam_t             info;
     unsigned int         hw_id;
     unsigned int         flags;
     struct hw_msg_source source;
-    union
-    {
-        int type;
-        struct
-        {
-            int            type;
-            unsigned int   message;
-            unsigned short vkey;
-            unsigned short scan;
-        } kbd;
-        struct
-        {
-            int            type;
-            int            x;
-            int            y;
-            unsigned int   data;
-        } mouse;
-    } rawinput;
+    union rawinput       rawinput;
 };
 
 struct callback_msg_data
@@ -330,6 +332,7 @@ typedef union
         int            type;
         unsigned int   msg;
         lparam_t       lparam;
+        union rawinput rawinput;
     } hw;
 } hw_input_t;
 
@@ -6233,7 +6236,7 @@ union generic_reply
 
 /* ### protocol_version begin ### */
 
-#define SERVER_PROTOCOL_VERSION 698
+#define SERVER_PROTOCOL_VERSION 699
 
 /* ### protocol_version end ### */
 
diff --git a/server/protocol.def b/server/protocol.def
index abfd6d70240..10c5943a189 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -278,30 +278,32 @@ struct hw_msg_source
     unsigned int    origin;        /* source origin (IMO_* values) */
 };
 
+union rawinput
+{
+    int type;
+    struct
+    {
+        int            type;    /* RIM_TYPEKEYBOARD */
+        unsigned int   message; /* message generated by this rawinput event */
+        unsigned short vkey;    /* virtual key code */
+        unsigned short scan;    /* scan code */
+    } kbd;
+    struct
+    {
+        int            type;    /* RIM_TYPEMOUSE */
+        int            x;       /* x coordinate */
+        int            y;       /* y coordinate */
+        unsigned int   data;    /* mouse data */
+    } mouse;
+};
+
 struct hardware_msg_data
 {
     lparam_t             info;      /* extra info */
     unsigned int         hw_id;     /* unique id */
     unsigned int         flags;     /* hook flags */
     struct hw_msg_source source;    /* message source */
-    union
-    {
-        int type;
-        struct
-        {
-            int            type;    /* RIM_TYPEKEYBOARD */
-            unsigned int   message; /* message generated by this rawinput event */
-            unsigned short vkey;    /* virtual key code */
-            unsigned short scan;    /* scan code */
-        } kbd;
-        struct
-        {
-            int            type;    /* RIM_TYPEMOUSE */
-            int            x;       /* x coordinate */
-            int            y;       /* y coordinate */
-            unsigned int   data;    /* mouse data */
-        } mouse;
-    } rawinput;
+    union rawinput       rawinput;  /* rawinput message data */
 };
 
 struct callback_msg_data
@@ -346,6 +348,7 @@ typedef union
         int            type;    /* INPUT_HARDWARE */
         unsigned int   msg;     /* message code */
         lparam_t       lparam;  /* message param */
+        union rawinput rawinput;/* rawinput message data */
     } hw;
 } hw_input_t;
 
diff --git a/server/trace.c b/server/trace.c
index 6b8c1ad3342..3cbdaf78185 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -395,6 +395,24 @@ static void dump_irp_params( const char *prefix, const irp_params_t *data )
     }
 }
 
+static void dump_rawinput( const char *prefix, const union rawinput *rawinput )
+{
+    switch (rawinput->type)
+    {
+    case RIM_TYPEMOUSE:
+        fprintf( stderr, "%s{type=MOUSE,x=%d,y=%d,data=%08x}", prefix, rawinput->mouse.x,
+                 rawinput->mouse.y, rawinput->mouse.data );
+        break;
+    case RIM_TYPEKEYBOARD:
+        fprintf( stderr, "%s{type=KEYBOARD,message=%04x,vkey=%04hx,scan=%04hx}", prefix,
+                 rawinput->kbd.message, rawinput->kbd.vkey, rawinput->kbd.scan );
+        break;
+    default:
+        fprintf( stderr, "%s{type=%04x}", prefix, rawinput->type );
+        break;
+    }
+}
+
 static void dump_hw_input( const char *prefix, const hw_input_t *input )
 {
     switch (input->type)
@@ -415,6 +433,11 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input )
     case INPUT_HARDWARE:
         fprintf( stderr, "%s{type=HARDWARE,msg=%04x", prefix, input->hw.msg );
         dump_uint64( ",lparam=", &input->hw.lparam );
+        switch (input->hw.msg)
+        {
+        case WM_INPUT_DEVICE_CHANGE:
+            dump_rawinput( ",rawinput=", &input->hw.rawinput );
+        }
         fputc( '}', stderr );
         break;
     default:




More information about the wine-cvs mailing list