[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH v2 5/6] server: Don't emulate rawinput mouse events if native exist.
From:       Derek Lesho <dereklesho52 () gmail ! com>
Date:       2019-06-30 2:26:28
Message-ID: 20190630022629.12152-5-dereklesho52 () Gmail ! com
[Download RAW message or body]

Signed-off-by: Derek Lesho <dereklesho52@Gmail.com>
---
 server/protocol.def |  2 +
 server/queue.c      | 99 ++++++++++++++++++++++++++-------------------
 2 files changed, 59 insertions(+), 42 deletions(-)

diff --git a/server/protocol.def b/server/protocol.def
index 3a6a202f49..9703b49154 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -358,6 +358,8 @@ typedef union
     } hw;
 } hw_input_t;
 
+#define RIM_ENABLE_NATIVE_MOUSE_MOVE   0x0800
+#define RIM_ENABLE_NATIVE_MOUSE_PRESS  0x1000
 typedef union
 {
     int type;
diff --git a/server/queue.c b/server/queue.c
index 35cfcecff5..41c26d8fa0 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1599,6 +1599,9 @@ static int send_hook_ll_message( struct desktop *desktop, \
struct message *hardwa  return 1;
 }
 
+int emulate_raw_mouse_move = 1;
+int emulate_raw_mouse_press = 1;
+
 /* 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 )
@@ -1666,53 +1669,59 @@ static int queue_mouse_message( struct desktop *desktop, \
user_handle_t win, cons  
     if ((device = current->process->rawinput_mouse))
     {
-        if (!(msg = alloc_hardware_message( input->mouse.info, source, time ))) \
                return 0;
-        msg_data = msg->data;
+        if ( (emulate_raw_mouse_press && flags & ~MOUSEEVENTF_MOVE) || \
(emulate_raw_mouse_move && flags & MOUSEEVENTF_MOVE) ) +        {
+            if (!(msg = alloc_hardware_message( input->mouse.info, source, time ))) \
return 0; +            msg_data = msg->data;
 
-        msg->win       = device->target;
-        msg->msg       = WM_INPUT;
-        msg->wparam    = RIM_INPUT;
-        msg->lparam    = 0;
+            msg->win       = device->target;
+            msg->msg       = WM_INPUT;
+            msg->wparam    = RIM_INPUT;
+            msg->lparam    = 0;
 
-        msg_data->flags               = 0;
-        msg_data->rawinput.type       = RIM_TYPEMOUSE;
-        msg_data->rawinput.mouse.x    = x - desktop->cursor.x;
-        msg_data->rawinput.mouse.y    = y - desktop->cursor.y;
-        msg_data->rawinput.mouse.button_flags = 0;
-        msg_data->rawinput.mouse.button_data = 0;
+            msg_data->flags               = 0;
+            msg_data->rawinput.type       = RIM_TYPEMOUSE;
+            msg_data->rawinput.mouse.x    = emulate_raw_mouse_move ? x - \
desktop->cursor.x : 0; +            msg_data->rawinput.mouse.y    = \
emulate_raw_mouse_move ? y - desktop->cursor.y : 0; +            \
msg_data->rawinput.mouse.button_flags = 0; +            \
msg_data->rawinput.mouse.button_data = 0;  
-        for (i = 1; i < ARRAY_SIZE(raw_button_flags); ++i)
-        {
-            if (flags & (1 << i))
-                msg_data->rawinput.mouse.button_flags |= raw_button_flags[i];
-        }
+            if (emulate_raw_mouse_press)
+            {
+                for (i = 1; i < ARRAY_SIZE(raw_button_flags); ++i)
+                {
+                    if (flags & (1 << i))
+                        msg_data->rawinput.mouse.button_flags |= \
raw_button_flags[i]; +                }
 
-        if (flags & MOUSEEVENTF_WHEEL)
-        {
-            msg_data->rawinput.mouse.button_flags |= RI_MOUSE_WHEEL;
-            msg_data->rawinput.mouse.button_data   = input->mouse.data;
-        }
-        if (flags & MOUSEEVENTF_HWHEEL)
-        {
-            msg_data->rawinput.mouse.button_flags |= RI_MOUSE_HORIZONTAL_WHEEL;
-            msg_data->rawinput.mouse.button_data   = input->mouse.data;
-        }
-        if (flags & MOUSEEVENTF_XDOWN)
-        {
-            if (input->mouse.data == XBUTTON1)
-                msg_data->rawinput.mouse.button_flags |= RI_MOUSE_BUTTON_4_DOWN;
-            else if (input->mouse.data == XBUTTON2)
-                msg_data->rawinput.mouse.button_flags |= RI_MOUSE_BUTTON_5_DOWN;
-        }
-        if (flags & MOUSEEVENTF_XUP)
-        {
-            if (input->mouse.data == XBUTTON1)
-                msg_data->rawinput.mouse.button_flags |= RI_MOUSE_BUTTON_4_UP;
-            else if (input->mouse.data == XBUTTON2)
-                msg_data->rawinput.mouse.button_flags |= RI_MOUSE_BUTTON_5_UP;
-        }
+                if (flags & MOUSEEVENTF_WHEEL)
+                {
+                    msg_data->rawinput.mouse.button_flags |= RI_MOUSE_WHEEL;
+                    msg_data->rawinput.mouse.button_data   = input->mouse.data;
+                }
+                if (flags & MOUSEEVENTF_HWHEEL)
+                {
+                    msg_data->rawinput.mouse.button_flags |= \
RI_MOUSE_HORIZONTAL_WHEEL; +                    msg_data->rawinput.mouse.button_data  \
= input->mouse.data; +                }
+                if (flags & MOUSEEVENTF_XDOWN)
+                {
+                    if (input->mouse.data == XBUTTON1)
+                        msg_data->rawinput.mouse.button_flags |= \
RI_MOUSE_BUTTON_4_DOWN; +                    else if (input->mouse.data == XBUTTON2)
+                        msg_data->rawinput.mouse.button_flags |= \
RI_MOUSE_BUTTON_5_DOWN; +                }
+                if (flags & MOUSEEVENTF_XUP)
+                {
+                    if (input->mouse.data == XBUTTON1)
+                        msg_data->rawinput.mouse.button_flags |= \
RI_MOUSE_BUTTON_4_UP; +                    else if (input->mouse.data == XBUTTON2)
+                        msg_data->rawinput.mouse.button_flags |= \
RI_MOUSE_BUTTON_5_UP; +                }
+            }
 
-        queue_hardware_message( desktop, msg, 0 );
+            queue_hardware_message( desktop, msg, 0 );
+        }
 
         if (device->flags & RIDEV_NOLEGACY)
             return FALSE;
@@ -2455,6 +2464,12 @@ DECL_HANDLER(send_rawinput_message)
             queue_hardware_message( desktop, msg, 0 );
         }
         break;
+    case RIM_ENABLE_NATIVE_MOUSE_MOVE:
+        emulate_raw_mouse_move = 0;
+        break;
+    case RIM_ENABLE_NATIVE_MOUSE_PRESS:
+        emulate_raw_mouse_press = 0;
+        break;
     default:
         set_error( STATUS_INVALID_PARAMETER );
     }
-- 
2.21.0


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic