[PATCH 5/7] server: Don't emulate rawinput mouse events if native exist.
Derek Lesho
dereklesho52 at gmail.com
Tue Jun 25 22:32:07 CDT 2019
Signed-off-by: Derek Lesho <dereklesho52 at 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 26a2282809..1fc5a23f06 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1596,6 +1596,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 )
@@ -1663,53 +1666,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;
@@ -2452,6 +2461,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
More information about the wine-devel
mailing list