2019-09-19 15:59:46 -07:00
|
|
|
From 06678989a4cdc051fc86cfc93ca9f91f26ea8d3e Mon Sep 17 00:00:00 2001
|
2019-08-21 21:33:10 -07:00
|
|
|
From: Derek Lesho <dereklesho52@Gmail.com>
|
|
|
|
Date: Tue, 25 Jun 2019 20:47:20 -0400
|
|
|
|
Subject: [PATCH 02/10] server: Move mouse raw-input message faking from user32
|
|
|
|
to wineserver.
|
|
|
|
|
|
|
|
Signed-off-by: Derek Lesho <dereklesho52@Gmail.com>
|
|
|
|
---
|
|
|
|
dlls/user32/message.c | 46 +++----------------------------------------
|
|
|
|
server/protocol.def | 9 +++++----
|
|
|
|
server/queue.c | 46 +++++++++++++++++++++++++++++++++++++++++--
|
|
|
|
3 files changed, 52 insertions(+), 49 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
|
2019-09-19 15:59:46 -07:00
|
|
|
index cc25d2f6c2f..f2442670f44 100644
|
2019-08-21 21:33:10 -07:00
|
|
|
--- a/dlls/user32/message.c
|
|
|
|
+++ b/dlls/user32/message.c
|
|
|
|
@@ -2295,54 +2295,14 @@ static BOOL process_rawinput_message( MSG *msg, const struct hardware_msg_data *
|
|
|
|
rawinput->header.dwType = msg_data->rawinput.type;
|
|
|
|
if (msg_data->rawinput.type == RIM_TYPEMOUSE)
|
|
|
|
{
|
|
|
|
- static const unsigned int button_flags[] =
|
|
|
|
- {
|
|
|
|
- 0, /* MOUSEEVENTF_MOVE */
|
|
|
|
- RI_MOUSE_LEFT_BUTTON_DOWN, /* MOUSEEVENTF_LEFTDOWN */
|
|
|
|
- RI_MOUSE_LEFT_BUTTON_UP, /* MOUSEEVENTF_LEFTUP */
|
|
|
|
- RI_MOUSE_RIGHT_BUTTON_DOWN, /* MOUSEEVENTF_RIGHTDOWN */
|
|
|
|
- RI_MOUSE_RIGHT_BUTTON_UP, /* MOUSEEVENTF_RIGHTUP */
|
|
|
|
- RI_MOUSE_MIDDLE_BUTTON_DOWN, /* MOUSEEVENTF_MIDDLEDOWN */
|
|
|
|
- RI_MOUSE_MIDDLE_BUTTON_UP, /* MOUSEEVENTF_MIDDLEUP */
|
|
|
|
- };
|
|
|
|
- unsigned int i;
|
|
|
|
-
|
|
|
|
rawinput->header.dwSize = FIELD_OFFSET(RAWINPUT, data) + sizeof(RAWMOUSE);
|
|
|
|
rawinput->header.hDevice = WINE_MOUSE_HANDLE;
|
|
|
|
rawinput->header.wParam = 0;
|
|
|
|
|
|
|
|
rawinput->data.mouse.usFlags = MOUSE_MOVE_RELATIVE;
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags = 0;
|
|
|
|
- rawinput->data.mouse.u.s.usButtonData = 0;
|
|
|
|
- for (i = 1; i < ARRAY_SIZE(button_flags); ++i)
|
|
|
|
- {
|
|
|
|
- if (msg_data->flags & (1 << i))
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags |= button_flags[i];
|
|
|
|
- }
|
|
|
|
- if (msg_data->flags & MOUSEEVENTF_WHEEL)
|
|
|
|
- {
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags |= RI_MOUSE_WHEEL;
|
|
|
|
- rawinput->data.mouse.u.s.usButtonData = msg_data->rawinput.mouse.data;
|
|
|
|
- }
|
|
|
|
- if (msg_data->flags & MOUSEEVENTF_HWHEEL)
|
|
|
|
- {
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags |= RI_MOUSE_HORIZONTAL_WHEEL;
|
|
|
|
- rawinput->data.mouse.u.s.usButtonData = msg_data->rawinput.mouse.data;
|
|
|
|
- }
|
|
|
|
- if (msg_data->flags & MOUSEEVENTF_XDOWN)
|
|
|
|
- {
|
|
|
|
- if (msg_data->rawinput.mouse.data == XBUTTON1)
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags |= RI_MOUSE_BUTTON_4_DOWN;
|
|
|
|
- else if (msg_data->rawinput.mouse.data == XBUTTON2)
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags |= RI_MOUSE_BUTTON_5_DOWN;
|
|
|
|
- }
|
|
|
|
- if (msg_data->flags & MOUSEEVENTF_XUP)
|
|
|
|
- {
|
|
|
|
- if (msg_data->rawinput.mouse.data == XBUTTON1)
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags |= RI_MOUSE_BUTTON_4_UP;
|
|
|
|
- else if (msg_data->rawinput.mouse.data == XBUTTON2)
|
|
|
|
- rawinput->data.mouse.u.s.usButtonFlags |= RI_MOUSE_BUTTON_5_UP;
|
|
|
|
- }
|
|
|
|
+
|
|
|
|
+ rawinput->data.mouse.u.s.usButtonFlags = msg_data->rawinput.mouse.button_flags;
|
|
|
|
+ rawinput->data.mouse.u.s.usButtonData = msg_data->rawinput.mouse.button_data;
|
|
|
|
|
|
|
|
rawinput->data.mouse.ulRawButtons = 0;
|
|
|
|
rawinput->data.mouse.lLastX = msg_data->rawinput.mouse.x;
|
|
|
|
diff --git a/server/protocol.def b/server/protocol.def
|
2019-09-19 15:59:46 -07:00
|
|
|
index fab68f9d8fe..e7e6b817172 100644
|
2019-08-21 21:33:10 -07:00
|
|
|
--- a/server/protocol.def
|
|
|
|
+++ b/server/protocol.def
|
2019-09-19 15:59:46 -07:00
|
|
|
@@ -316,10 +316,11 @@ struct hardware_msg_data
|
2019-08-21 21:33:10 -07:00
|
|
|
} kbd;
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
- int type; /* RIM_TYPEMOUSE */
|
|
|
|
- int x; /* x coordinate */
|
|
|
|
- int y; /* y coordinate */
|
|
|
|
- unsigned int data; /* mouse data */
|
|
|
|
+ int type; /* RIM_TYPEMOUSE */
|
|
|
|
+ int x; /* x coordinate */
|
|
|
|
+ int y; /* y coordinate */
|
|
|
|
+ unsigned short button_flags; /* mouse button */
|
|
|
|
+ unsigned short button_data; /* event details */
|
|
|
|
} mouse;
|
|
|
|
} rawinput;
|
|
|
|
};
|
|
|
|
diff --git a/server/queue.c b/server/queue.c
|
2019-09-19 15:59:46 -07:00
|
|
|
index 94c612efb03..7eecd286fab 100644
|
2019-08-21 21:33:10 -07:00
|
|
|
--- a/server/queue.c
|
|
|
|
+++ b/server/queue.c
|
2019-09-19 15:59:46 -07:00
|
|
|
@@ -1765,6 +1765,16 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
2019-08-21 21:33:10 -07:00
|
|
|
WM_MOUSEHWHEEL /* 0x1000 = MOUSEEVENTF_HWHEEL */
|
|
|
|
};
|
|
|
|
|
|
|
|
+ static const unsigned int raw_button_flags[] = {
|
|
|
|
+ 0, /* 0x0001 = MOUSEEVENTF_MOVE */
|
|
|
|
+ RI_MOUSE_LEFT_BUTTON_DOWN, /* 0x0002 = MOUSEEVENTF_LEFTDOWN */
|
|
|
|
+ RI_MOUSE_LEFT_BUTTON_UP, /* 0x0004 = MOUSEEVENTF_LEFTUP */
|
|
|
|
+ RI_MOUSE_RIGHT_BUTTON_DOWN, /* 0x0008 = MOUSEEVENTF_RIGHTDOWN */
|
|
|
|
+ RI_MOUSE_RIGHT_BUTTON_UP, /* 0x0010 = MOUSEEVENTF_RIGHTUP */
|
|
|
|
+ RI_MOUSE_MIDDLE_BUTTON_DOWN, /* 0x0020 = MOUSEEVENTF_MIDDLEDOWN */
|
|
|
|
+ RI_MOUSE_MIDDLE_BUTTON_UP, /* 0x0040 = MOUSEEVENTF_MIDDLEUP */
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
desktop->cursor.last_change = get_tick_count();
|
|
|
|
flags = input->mouse.flags;
|
|
|
|
time = input->mouse.time;
|
2019-09-19 15:59:46 -07:00
|
|
|
@@ -1802,11 +1812,43 @@ static int queue_mouse_message( struct desktop *desktop, user_handle_t win, cons
|
2019-08-21 21:33:10 -07:00
|
|
|
msg->wparam = RIM_INPUT;
|
|
|
|
msg->lparam = 0;
|
|
|
|
|
|
|
|
- msg_data->flags = flags;
|
|
|
|
+ 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.data = input->mouse.data;
|
|
|
|
+ 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 (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 );
|
|
|
|
}
|
|
|
|
--
|
2019-09-19 15:59:46 -07:00
|
|
|
2.17.1
|
2019-08-21 21:33:10 -07:00
|
|
|
|