Add missing file

This commit is contained in:
Alistair Leslie-Hughes 2019-09-25 19:35:51 +10:00
parent e09468ec17
commit ced72a6a0a

View File

@ -0,0 +1,76 @@
From 899bf2085fbd1e8b3e5ddcea3a9070f2836f3c06 Mon Sep 17 00:00:00 2001
From: Derek Lesho <dereklesho52@Gmail.com>
Date: Wed, 4 Sep 2019 10:07:39 -0500
Subject: [PATCH 11/11] winex11.drv: [HACK] XWayland workaround.
---
dlls/winex11.drv/mouse.c | 36 ++++++++++++++++++++++++++++++++----
1 file changed, 32 insertions(+), 4 deletions(-)
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 4d5b0a45ff..178e717131 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -25,6 +25,7 @@
#include <X11/Xlib.h>
#include <X11/cursorfont.h>
#include <stdarg.h>
+#include <stdlib.h>
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
#include <X11/extensions/XInput2.h>
#endif
@@ -1784,6 +1785,17 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev )
return TRUE;
}
+/* XWayland only reports normalized absolute values and raw relative values,
+ * all under an absolute valuator.
+ */
+static inline int xwayland_workaround(void)
+{
+ static int workaround = -1;
+ if (workaround != -1) return workaround;
+ workaround = !!getenv("WAYLAND_DISPLAY");
+ return workaround;
+}
+
/***********************************************************************
* X11DRV_RawMotion
*/
@@ -1886,13 +1898,29 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
}
if (i == x_abs->number)
{
- raw_input.data.mouse.usFlags = MOUSE_MOVE_ABSOLUTE | MOUSE_VIRTUAL_DESKTOP;
- raw_input.data.mouse.lLastX = raw_x = raw_val * (65536 / (x_abs->max - x_abs->min));
+ if (xwayland_workaround())
+ {
+ raw_input.data.mouse.usFlags = MOUSE_MOVE_RELATIVE;
+ raw_input.data.mouse.lLastX = raw_x = raw_val;
+ }
+ else
+ {
+ raw_input.data.mouse.usFlags = MOUSE_MOVE_ABSOLUTE | MOUSE_VIRTUAL_DESKTOP;
+ raw_input.data.mouse.lLastX = raw_x = raw_val * (65536 / (x_abs->max - x_abs->min));
+ }
}
if (i == y_abs->number)
{
- raw_input.data.mouse.usFlags = MOUSE_MOVE_ABSOLUTE | MOUSE_VIRTUAL_DESKTOP;
- raw_input.data.mouse.lLastY = raw_y = raw_val * (65536 / (y_abs->max - y_abs->min));
+ if (xwayland_workaround())
+ {
+ raw_input.data.mouse.usFlags = MOUSE_MOVE_RELATIVE;
+ raw_input.data.mouse.lLastY = raw_y = raw_val;
+ }
+ else
+ {
+ raw_input.data.mouse.usFlags = MOUSE_MOVE_ABSOLUTE | MOUSE_VIRTUAL_DESKTOP;
+ raw_input.data.mouse.lLastY = raw_y = raw_val * (65536 / (y_abs->max - y_abs->min));
+ }
}
if (i == wheel->number)
{
--
2.23.0