Rebase against 900dfca3899d52f3085c713e26af06aa5aea37a4.

This commit is contained in:
Alistair Leslie-Hughes 2023-07-18 11:18:33 +10:00
parent 4482bd3493
commit 6b7e43830c
6 changed files with 105 additions and 126 deletions

View File

@ -1,4 +1,4 @@
From 4935d5a693f839352e94094c2bbfeb361baff009 Mon Sep 17 00:00:00 2001
From 3986e2d381e2b78d0bc572b7014f2445aa4bc6fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 4 Oct 2014 02:53:22 +0200
Subject: [PATCH] ntdll: Setup a temporary signal handler during process
@ -45,10 +45,10 @@ index 28cb2222809..b3b55a11e4f 100644
/***********************************************************************
* call_init_thunk
diff --git a/dlls/ntdll/unix/signal_arm64.c b/dlls/ntdll/unix/signal_arm64.c
index f553aac1993..192baf23251 100644
index d98268bcd54..2b92bbd7ed3 100644
--- a/dlls/ntdll/unix/signal_arm64.c
+++ b/dlls/ntdll/unix/signal_arm64.c
@@ -1576,6 +1576,12 @@ void signal_init_process(void)
@@ -1594,6 +1594,12 @@ void signal_init_process(void)
exit(1);
}
@ -60,7 +60,7 @@ index f553aac1993..192baf23251 100644
+}
/***********************************************************************
* call_init_thunk
* syscall_dispatcher_return_slowpath
diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c
index 11bdd9c1ea6..f688795ab91 100644
--- a/dlls/ntdll/unix/signal_i386.c
@ -132,10 +132,10 @@ index 11bdd9c1ea6..f688795ab91 100644
/***********************************************************************
* call_init_thunk
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
index 8302976706c..a1d118b61da 100644
index 0204139631f..f8831b80a2b 100644
--- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -2640,6 +2640,12 @@ void signal_init_process(void)
@@ -2455,6 +2455,12 @@ void signal_init_process(void)
exit(1);
}
@ -149,7 +149,7 @@ index 8302976706c..a1d118b61da 100644
/***********************************************************************
* call_init_thunk
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index 16bf5cc2c78..c03d8675244 100644
index e1cace7ba78..0ea15f48787 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -268,6 +268,7 @@ extern void signal_init_threading(void) DECLSPEC_HIDDEN;
@ -161,7 +161,7 @@ index 16bf5cc2c78..c03d8675244 100644
BOOL suspend, TEB *teb ) DECLSPEC_HIDDEN;
extern void DECLSPEC_NORETURN signal_exit_thread( int status, void (*func)(int), TEB *teb ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index a06f675af7c..a7705e78fb4 100644
index b5fdeb5707b..03ce50d0677 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -3703,7 +3703,7 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack )

View File

@ -1,17 +1,17 @@
From 8d0252f43188cbc9b50dbc8280ae60de04f41a71 Mon Sep 17 00:00:00 2001
From eef4aa97b1271118a95419cbca2870c0bfa6fbcd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Thu, 28 Oct 2021 09:18:37 +0200
Subject: [PATCH] winex11.drv: Add support for absolute RawMotion events.
---
dlls/winex11.drv/mouse.c | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
dlls/winex11.drv/mouse.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 179032d5c83..445d0a78c6a 100644
index ec12c8b1917..f10745a1ad0 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -339,12 +339,18 @@ static void update_relative_valuators( XIAnyClassInfo **classes, int num_classes
@@ -315,12 +315,18 @@ static void update_relative_valuators( XIAnyClassInfo **classes, int num_classes
{
valuator = (XIValuatorClassInfo *)classes[num_classes];
if (classes[num_classes]->type != XIValuatorClass) continue;
@ -32,24 +32,24 @@ index 179032d5c83..445d0a78c6a 100644
thread_data->x_valuator.value = 0;
thread_data->y_valuator.value = 0;
@@ -1951,7 +1957,15 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -1778,7 +1784,15 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
if (thread_data->xi2_state != xi_enabled) return FALSE;
if (event->deviceid != thread_data->xi2_core_pointer) return FALSE;
- virtual_rect = NtUserGetVirtualScreenRect();
+ if (x->mode == XIModeRelative && y->mode == XIModeRelative)
+ input->u.mi.dwFlags &= ~(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK);
+ input->mi.dwFlags &= ~(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK);
+ else if (x->mode == XIModeAbsolute && y->mode == XIModeAbsolute)
+ input->u.mi.dwFlags |= MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK;
+ input->mi.dwFlags |= MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK;
+ else
+ FIXME( "Unsupported relative/absolute X/Y axis mismatch\n." );
+
+ if (input->u.mi.dwFlags & MOUSEEVENTF_VIRTUALDESK) SetRect( &virtual_rect, 0, 0, 65535, 65535 );
+ if (input->mi.dwFlags & MOUSEEVENTF_VIRTUALDESK) SetRect( &virtual_rect, 0, 0, 65535, 65535 );
+ else virtual_rect = NtUserGetVirtualScreenRect();
if (x->max <= x->min) x_scale = 1;
else x_scale = (virtual_rect.right - virtual_rect.left) / (x->max - x->min);
@@ -1964,12 +1978,14 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -1791,12 +1805,14 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
if (i == x->number)
{
x_value = *values;
@ -66,15 +66,6 @@ index 179032d5c83..445d0a78c6a 100644
}
values++;
}
@@ -1982,7 +1998,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
x->value -= input->u.mi.dx;
y->value -= input->u.mi.dy;
- if (!input->u.mi.dx && !input->u.mi.dy)
+ if (!(input->u.mi.dwFlags & MOUSEEVENTF_ABSOLUTE) && !input->u.mi.dx && !input->u.mi.dy)
{
TRACE( "accumulating motion\n" );
return FALSE;
--
2.35.1
2.40.1

View File

@ -1,4 +1,4 @@
From 7e0df0539b242a4a87b8189232eefb3164fe4617 Mon Sep 17 00:00:00 2001
From d45e910803dd78f892ddece1743849943d7c67f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Mon, 25 Oct 2021 11:48:00 +0200
Subject: [PATCH] winex11.drv: Send relative RawMotion events unprocessed.
@ -9,14 +9,14 @@ virtual desktop space, and cursor speed is meaningless in this case.
This does not support mixed relative/absolute X/Y axis.
---
dlls/winex11.drv/mouse.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
dlls/winex11.drv/mouse.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index e691f75465d..d6890a384e3 100644
index 4a42b3c85b6..e58ee125c95 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -1972,12 +1972,12 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev )
@@ -1770,12 +1770,12 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev )
return TRUE;
}
@ -32,7 +32,7 @@ index e691f75465d..d6890a384e3 100644
RECT virtual_rect;
int i;
@@ -2006,34 +2006,36 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -1804,22 +1804,30 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
if (!XIMaskIsSet( event->valuators.mask, i )) continue;
if (i == x->number)
{
@ -52,47 +52,35 @@ index e691f75465d..d6890a384e3 100644
values++;
}
input->u.mi.dx = round( x->value );
input->u.mi.dy = round( y->value );
input->mi.dx = round( x->value );
input->mi.dy = round( y->value );
+ if (x->mode != XIModeAbsolute) rawinput->data.mouse.lLastX = x_raw;
+ else rawinput->data.mouse.lLastX = input->u.mi.dx;
+ else rawinput->data.mouse.lLastX = input->mi.dx;
+ if (y->mode != XIModeAbsolute) rawinput->data.mouse.lLastY = y_raw;
+ else rawinput->data.mouse.lLastY = input->u.mi.dy;
+ else rawinput->data.mouse.lLastY = input->mi.dy;
+
TRACE( "event %f,%f value %f,%f input %d,%d\n", x_value, y_value, x->value, y->value,
(int)input->u.mi.dx, (int)input->u.mi.dy );
(int)input->mi.dx, (int)input->mi.dy );
x->value -= input->u.mi.dx;
y->value -= input->u.mi.dy;
- if (!(input->u.mi.dwFlags & MOUSEEVENTF_ABSOLUTE) && !input->u.mi.dx && !input->u.mi.dy)
- {
- TRACE( "accumulating motion\n" );
- return FALSE;
- }
-
return TRUE;
}
@@ -2060,7 +2062,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.u.mi.dwExtraInfo = 0;
input.u.mi.dx = 0;
input.u.mi.dy = 0;
@@ -1858,7 +1866,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.mi.dwExtraInfo = 0;
input.mi.dx = 0;
input.mi.dy = 0;
- if (!map_raw_event_coords( event, &input )) return FALSE;
+ if (!map_raw_event_coords( event, &input, &rawinput )) return FALSE;
if (!thread_data->xi2_rawinput_only)
__wine_send_input( 0, &input, NULL );
@@ -2074,8 +2076,6 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
@@ -1872,8 +1880,6 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
rawinput.data.mouse.ulRawButtons = 0;
rawinput.data.mouse.u.usButtonData = 0;
rawinput.data.mouse.u.usButtonFlags = 0;
- rawinput.data.mouse.lLastX = input.u.mi.dx;
- rawinput.data.mouse.lLastY = input.u.mi.dy;
rawinput.data.mouse.usButtonData = 0;
rawinput.data.mouse.usButtonFlags = 0;
- rawinput.data.mouse.lLastX = input.mi.dx;
- rawinput.data.mouse.lLastY = input.mi.dy;
rawinput.data.mouse.ulExtraInformation = 0;
input.type = INPUT_HARDWARE;
--
2.38.1
2.40.1

View File

@ -1,4 +1,4 @@
From 89e3ab4eceaa473697590e2264b0a1d7ccd149f4 Mon Sep 17 00:00:00 2001
From 563e36d041a509b71fb7f889dee52dee151a7442 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Wed, 24 Mar 2021 23:29:28 +0100
Subject: [PATCH] user32: Set SEND_HWMSG_RAWINPUT flags only when RAWINPUT is
@ -19,7 +19,7 @@ __wine_send_input with INPUT_HARDWARE input type and a rawinput.
8 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index 5d78b35dd60..cbdd4b195d3 100644
index 7eb8e59a5fb..53fec064842 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -655,6 +655,7 @@ UINT WINAPI NtUserSendInput( UINT count, INPUT *inputs, int size )
@ -40,10 +40,10 @@ index 5d78b35dd60..cbdd4b195d3 100644
case INPUT_HARDWARE:
RtlSetLastWin32Error( ERROR_CALL_NOT_IMPLEMENTED );
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index f47154d701a..00ed06abbdf 100644
index 179b801a9f8..3fb36f4762c 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -2632,7 +2632,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
@@ -2669,7 +2669,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
req->input.mouse.flags = input->mi.dwFlags;
req->input.mouse.time = input->mi.time;
req->input.mouse.info = input->mi.dwExtraInfo;
@ -52,7 +52,7 @@ index f47154d701a..00ed06abbdf 100644
affects_key_state = !!(input->mi.dwFlags & (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP |
MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP |
MOUSEEVENTF_MIDDLEDOWN | MOUSEEVENTF_MIDDLEUP |
@@ -2644,7 +2644,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
@@ -2681,7 +2681,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r
req->input.kbd.flags = input->ki.dwFlags;
req->input.kbd.time = input->ki.time;
req->input.kbd.info = input->ki.dwExtraInfo;
@ -62,20 +62,20 @@ index f47154d701a..00ed06abbdf 100644
break;
case INPUT_HARDWARE:
diff --git a/dlls/wineandroid.drv/keyboard.c b/dlls/wineandroid.drv/keyboard.c
index 7c55c481353..9a20daf8809 100644
index 9f369094949..1606afb3f86 100644
--- a/dlls/wineandroid.drv/keyboard.c
+++ b/dlls/wineandroid.drv/keyboard.c
@@ -674,6 +674,7 @@ static BOOL get_async_key_state( BYTE state[256] )
@@ -671,6 +671,7 @@ static BOOL get_async_key_state( BYTE state[256] )
static void send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, DWORD flags )
{
+ RAWINPUT rawinput;
INPUT input;
input.type = INPUT_KEYBOARD;
@@ -683,7 +684,7 @@ static void send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, DWORD flags )
input.u.ki.time = 0;
input.u.ki.dwExtraInfo = 0;
input.type = INPUT_KEYBOARD;
@@ -680,7 +681,7 @@ static void send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, DWORD flags )
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
- __wine_send_input( hwnd, &input, NULL );
+ __wine_send_input( hwnd, &input, &rawinput );
@ -83,10 +83,10 @@ index 7c55c481353..9a20daf8809 100644
/***********************************************************************
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c
index 3a61a2d44d9..a94183f46bf 100644
index d62a2c53909..47a424b40b8 100644
--- a/dlls/wineandroid.drv/window.c
+++ b/dlls/wineandroid.drv/window.c
@@ -424,6 +424,7 @@ static int process_events( DWORD mask )
@@ -421,6 +421,7 @@ static int process_events( DWORD mask )
DPI_AWARENESS_CONTEXT context;
struct java_event *event, *next, *previous;
unsigned int count = 0;
@ -94,7 +94,7 @@ index 3a61a2d44d9..a94183f46bf 100644
assert( GetCurrentThreadId() == desktop_tid );
@@ -517,7 +518,7 @@ static int process_events( DWORD mask )
@@ -514,7 +515,7 @@ static int process_events( DWORD mask )
}
SERVER_END_REQ;
}
@ -103,10 +103,10 @@ index 3a61a2d44d9..a94183f46bf 100644
}
break;
@@ -531,7 +532,7 @@ static int process_events( DWORD mask )
event->data.kbd.input.u.ki.wVk, event->data.kbd.input.u.ki.wVk,
event->data.kbd.input.u.ki.wScan );
update_keyboard_lock_state( event->data.kbd.input.u.ki.wVk, event->data.kbd.lock_state );
@@ -528,7 +529,7 @@ static int process_events( DWORD mask )
event->data.kbd.input.ki.wVk, event->data.kbd.input.ki.wVk,
event->data.kbd.input.ki.wScan );
update_keyboard_lock_state( event->data.kbd.input.ki.wVk, event->data.kbd.lock_state );
- __wine_send_input( 0, &event->data.kbd.input, NULL );
+ __wine_send_input( 0, &event->data.kbd.input, &rawinput );
break;
@ -155,10 +155,10 @@ index 5c04c71e1dc..260831c44dc 100644
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index 83169a9bb4d..ecd513ee2a4 100644
index b54ca795954..231af33fd48 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1123,6 +1123,7 @@ static WORD EVENT_event_to_vkey( XIC xic, XKeyEvent *e)
@@ -1121,6 +1121,7 @@ static WORD EVENT_event_to_vkey( XIC xic, XKeyEvent *e)
*/
static void X11DRV_send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, UINT flags, UINT time )
{
@ -166,9 +166,9 @@ index 83169a9bb4d..ecd513ee2a4 100644
INPUT input;
TRACE_(key)( "hwnd %p vkey=%04x scan=%04x flags=%04x\n", hwnd, vkey, scan, flags );
@@ -1134,7 +1135,7 @@ static void X11DRV_send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, UINT fl
input.u.ki.time = time;
input.u.ki.dwExtraInfo = 0;
@@ -1132,7 +1133,7 @@ static void X11DRV_send_keyboard_input( HWND hwnd, WORD vkey, WORD scan, UINT fl
input.ki.time = time;
input.ki.dwExtraInfo = 0;
- __wine_send_input( hwnd, &input, NULL );
+ __wine_send_input( hwnd, &input, &rawinput );
@ -176,10 +176,10 @@ index 83169a9bb4d..ecd513ee2a4 100644
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 20d57aa76f3..7925a2f4070 100644
index d8e9b8155fb..61b1870ba5a 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -626,6 +626,7 @@ static void map_event_coords( HWND hwnd, Window window, Window event_root, int x
@@ -625,6 +625,7 @@ static void map_event_coords( HWND hwnd, Window window, Window event_root, int x
static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPUT *input )
{
struct x11drv_win_data *data;
@ -187,7 +187,7 @@ index 20d57aa76f3..7925a2f4070 100644
input->type = INPUT_MOUSE;
@@ -633,7 +634,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -632,7 +633,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
{
struct x11drv_thread_data *thread_data = x11drv_thread_data();
if (!thread_data->clipping_cursor || thread_data->clip_window != window) return;
@ -196,7 +196,7 @@ index 20d57aa76f3..7925a2f4070 100644
return;
}
@@ -660,7 +661,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -659,7 +660,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
SERVER_END_REQ;
}
@ -205,7 +205,7 @@ index 20d57aa76f3..7925a2f4070 100644
}
#ifdef SONAME_LIBXCURSOR
@@ -1588,6 +1589,7 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1587,6 +1588,7 @@ void move_resize_window( HWND hwnd, int dir )
{
MSG msg;
INPUT input;
@ -213,16 +213,16 @@ index 20d57aa76f3..7925a2f4070 100644
int x, y, rootX, rootY;
if (!XQueryPointer( display, root_window, &root, &child, &rootX, &rootY, &x, &y, &xstate )) break;
@@ -1603,7 +1605,7 @@ void move_resize_window( HWND hwnd, int dir )
input.u.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.u.mi.time = NtGetTickCount();
input.u.mi.dwExtraInfo = 0;
@@ -1602,7 +1604,7 @@ void move_resize_window( HWND hwnd, int dir )
input.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.mi.time = NtGetTickCount();
input.mi.dwExtraInfo = 0;
- __wine_send_input( hwnd, &input, NULL );
+ __wine_send_input( hwnd, &input, &rawinput );
}
while (NtUserPeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
@@ -1816,6 +1818,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -1815,6 +1817,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
{
XIRawEvent *event = xev->data;
@ -230,8 +230,8 @@ index 20d57aa76f3..7925a2f4070 100644
INPUT input;
if (broken_rawevents && is_old_motion_event( xev->serial ))
@@ -1833,7 +1836,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.u.mi.dy = 0;
@@ -1832,7 +1835,7 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.mi.dy = 0;
if (!map_raw_event_coords( event, &input )) return FALSE;
- __wine_send_input( 0, &input, NULL );

View File

@ -1,4 +1,4 @@
From 8cfe8a261f9138c6227610fd0c9bc222bc0b1871 Mon Sep 17 00:00:00 2001
From cf4f812de02820e94c30758a9267872bd5429ac0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Mon, 25 Oct 2021 11:45:47 +0200
Subject: [PATCH] winex11.drv: Listen to RawMotion and RawButton* events in the
@ -54,10 +54,10 @@ index e5021eb38ff..9cf7969dce2 100644
#endif
}
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 7925a2f4070..fce58d2b48a 100644
index 61b1870ba5a..27916622ed8 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -389,7 +389,18 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask )
@@ -388,7 +388,18 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask )
memset( mask_bits, 0, sizeof(mask_bits) );
XISetMask( mask_bits, XI_DeviceChanged );
XISetMask( mask_bits, XI_RawMotion );
@ -77,7 +77,7 @@ index 7925a2f4070..fce58d2b48a 100644
pXISelectEvents( display, DefaultRootWindow( display ), &mask, 1 );
@@ -626,7 +637,6 @@ static void map_event_coords( HWND hwnd, Window window, Window event_root, int x
@@ -625,7 +636,6 @@ static void map_event_coords( HWND hwnd, Window window, Window event_root, int x
static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPUT *input )
{
struct x11drv_win_data *data;
@ -85,7 +85,7 @@ index 7925a2f4070..fce58d2b48a 100644
input->type = INPUT_MOUSE;
@@ -634,7 +644,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -633,7 +643,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
{
struct x11drv_thread_data *thread_data = x11drv_thread_data();
if (!thread_data->clipping_cursor || thread_data->clip_window != window) return;
@ -94,7 +94,7 @@ index 7925a2f4070..fce58d2b48a 100644
return;
}
@@ -661,7 +671,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -660,7 +670,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
SERVER_END_REQ;
}
@ -103,7 +103,7 @@ index 7925a2f4070..fce58d2b48a 100644
}
#ifdef SONAME_LIBXCURSOR
@@ -1589,7 +1599,6 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1588,7 +1598,6 @@ void move_resize_window( HWND hwnd, int dir )
{
MSG msg;
INPUT input;
@ -111,16 +111,16 @@ index 7925a2f4070..fce58d2b48a 100644
int x, y, rootX, rootY;
if (!XQueryPointer( display, root_window, &root, &child, &rootX, &rootY, &x, &y, &xstate )) break;
@@ -1605,7 +1614,7 @@ void move_resize_window( HWND hwnd, int dir )
input.u.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.u.mi.time = NtGetTickCount();
input.u.mi.dwExtraInfo = 0;
@@ -1604,7 +1613,7 @@ void move_resize_window( HWND hwnd, int dir )
input.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.mi.time = NtGetTickCount();
input.mi.dwExtraInfo = 0;
- __wine_send_input( hwnd, &input, &rawinput );
+ __wine_send_input( hwnd, &input, NULL );
}
while (NtUserPeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
@@ -1817,6 +1826,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -1816,6 +1825,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
*/
static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
{
@ -128,8 +128,8 @@ index 7925a2f4070..fce58d2b48a 100644
XIRawEvent *event = xev->data;
RAWINPUT rawinput;
INPUT input;
@@ -1836,7 +1846,85 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.u.mi.dy = 0;
@@ -1835,7 +1845,85 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.mi.dy = 0;
if (!map_raw_event_coords( event, &input )) return FALSE;
- __wine_send_input( 0, &input, &rawinput );
@ -141,18 +141,18 @@ index 7925a2f4070..fce58d2b48a 100644
+ rawinput.header.dwSize = offsetof(RAWINPUT, data) + sizeof(RAWMOUSE);
+ rawinput.header.hDevice = ULongToHandle(1); /* WINE_MOUSE_HANDLE */
+ rawinput.header.wParam = RIM_INPUT;
+ rawinput.data.mouse.usFlags = input.u.mi.dwFlags;
+ rawinput.data.mouse.usFlags = input.mi.dwFlags;
+ rawinput.data.mouse.ulRawButtons = 0;
+ rawinput.data.mouse.u.usButtonData = 0;
+ rawinput.data.mouse.u.usButtonFlags = 0;
+ rawinput.data.mouse.lLastX = input.u.mi.dx;
+ rawinput.data.mouse.lLastY = input.u.mi.dy;
+ rawinput.data.mouse.usButtonData = 0;
+ rawinput.data.mouse.usButtonFlags = 0;
+ rawinput.data.mouse.lLastX = input.mi.dx;
+ rawinput.data.mouse.lLastY = input.mi.dy;
+ rawinput.data.mouse.ulExtraInformation = 0;
+
+ input.type = INPUT_HARDWARE;
+ input.u.hi.uMsg = WM_INPUT;
+ input.u.hi.wParamH = 0;
+ input.u.hi.wParamL = 0;
+ input.hi.uMsg = WM_INPUT;
+ input.hi.wParamH = 0;
+ input.hi.wParamL = 0;
+ if (rawinput.data.mouse.lLastX || rawinput.data.mouse.lLastY)
+ __wine_send_input( 0, &input, &rawinput );
+ }
@ -200,22 +200,22 @@ index 7925a2f4070..fce58d2b48a 100644
+ rawinput.data.mouse.usFlags = button_down_flags[button];
+ rawinput.data.mouse.ulRawButtons = button_down_data[button];
+ }
+ rawinput.data.mouse.u.usButtonData = 0;
+ rawinput.data.mouse.u.usButtonFlags = 0;
+ rawinput.data.mouse.usButtonData = 0;
+ rawinput.data.mouse.usButtonFlags = 0;
+ rawinput.data.mouse.lLastX = 0;
+ rawinput.data.mouse.lLastY = 0;
+ rawinput.data.mouse.ulExtraInformation = 0;
+
+ input.type = INPUT_HARDWARE;
+ input.u.hi.uMsg = WM_INPUT;
+ input.u.hi.wParamH = 0;
+ input.u.hi.wParamL = 0;
+ input.hi.uMsg = WM_INPUT;
+ input.hi.wParamH = 0;
+ input.hi.wParamL = 0;
+ if (rawinput.data.mouse.usFlags || rawinput.data.mouse.ulRawButtons)
+ __wine_send_input( 0, &input, &rawinput );
return TRUE;
}
@@ -1912,6 +2000,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
@@ -1911,6 +1999,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
case XI_RawMotion:
ret = X11DRV_RawMotion( event );
break;
@ -227,7 +227,7 @@ index 7925a2f4070..fce58d2b48a 100644
default:
TRACE( "Unhandled event %#x\n", event->evtype );
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index d147add9d68..30486210df5 100644
index 5778a7eceb4..36ed7810700 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -408,6 +408,7 @@ struct x11drv_thread_data

View File

@ -1 +1 @@
2238658e2f87506c9ccb67de0376f3e3920550db
900dfca3899d52f3085c713e26af06aa5aea37a4