From 7f18df46333b5686f2e3622ebc474530e15c6888 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Tue, 11 May 2021 01:01:15 -0500 Subject: [PATCH] Rebase against 44cb53bb37d3c40ea90aec6e35a9c08326b6e848. --- patches/patchinstall.sh | 120 +---------------- ...-__wine_send_input-to-send-device-no.patch | 120 ----------------- ...put-union-to-hw_input_t-INPUT_HARDWA.patch | 123 ------------------ ...YPEHID-type-hid-member-to-rawinput-u.patch | 96 -------------- ...NPUT_DEVICE_CHANGE-RAWINPUT-to-the-s.patch | 47 ------- ...wn-HID-rawinput-devices-on-addition-.patch | 16 +-- ...-WM_INPUT_DEVICE_CHANGE-message-disp.patch | 28 ++-- ...-WM_INPUT-RIM_TYPEHID-message-dispat.patch | 58 ++++----- patches/user32-rawinput-hid/definition | 2 + .../definition | 2 + ...ending-RIM_TYPEMOUSE-through-__wine_.patch | 28 ++-- patches/user32-rawinput-mouse/definition | 2 + patches/wpcap-Dynamic_Linking/definition | 3 + staging/upstream-commit | 2 +- 14 files changed, 69 insertions(+), 578 deletions(-) delete mode 100644 patches/user32-rawinput-hid/0005-hidclass.sys-Use-__wine_send_input-to-send-device-no.patch delete mode 100644 patches/user32-rawinput-hid/0007-server-Add-rawinput-union-to-hw_input_t-INPUT_HARDWA.patch delete mode 100644 patches/user32-rawinput-hid/0008-server-Add-RIM_TYPEHID-type-hid-member-to-rawinput-u.patch delete mode 100644 patches/user32-rawinput-hid/0009-user32-Send-WM_INPUT_DEVICE_CHANGE-RAWINPUT-to-the-s.patch diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index da2bef2c..5ba90edf 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "99e47361a37a4bf16de131401a0c231f86214a43" + echo "44cb53bb37d3c40ea90aec6e35a9c08326b6e848" } # Show version information @@ -233,9 +233,6 @@ patch_enable_all () enable_user32_ScrollWindowEx="$1" enable_user32_message_order="$1" enable_user32_msgbox_Support_WM_COPY_mesg="$1" - enable_user32_rawinput_hid="$1" - enable_user32_rawinput_mouse="$1" - enable_user32_rawinput_mouse_experimental="$1" enable_user32_recursive_activation="$1" enable_uxtheme_CloseThemeClass="$1" enable_version_VerQueryValue="$1" @@ -282,7 +279,6 @@ patch_enable_all () enable_winmm_mciSendCommandA="$1" enable_wintab32_improvements="$1" enable_wintrust_WTHelperGetProvCertFromChain="$1" - enable_wpcap_Dynamic_Linking="$1" enable_ws2_32_APC_Performance="$1" enable_ws2_32_Connect_Time="$1" enable_ws2_32_getsockopt="$1" @@ -749,15 +745,6 @@ patch_enable () user32-msgbox-Support-WM_COPY-mesg) enable_user32_msgbox_Support_WM_COPY_mesg="$2" ;; - user32-rawinput-hid) - enable_user32_rawinput_hid="$2" - ;; - user32-rawinput-mouse) - enable_user32_rawinput_mouse="$2" - ;; - user32-rawinput-mouse-experimental) - enable_user32_rawinput_mouse_experimental="$2" - ;; user32-recursive-activation) enable_user32_recursive_activation="$2" ;; @@ -896,9 +883,6 @@ patch_enable () wintrust-WTHelperGetProvCertFromChain) enable_wintrust_WTHelperGetProvCertFromChain="$2" ;; - wpcap-Dynamic_Linking) - enable_wpcap_Dynamic_Linking="$2" - ;; ws2_32-APC_Performance) enable_ws2_32_APC_Performance="$2" ;; @@ -1288,27 +1272,6 @@ if test "$enable_wined3d_Indexed_Vertex_Blending" -eq 1; then enable_wined3d_SWVP_shaders=1 fi -if test "$enable_user32_rawinput_mouse_experimental" -eq 1; then - if test "$enable_user32_rawinput_mouse" -gt 1; then - abort "Patchset user32-rawinput-mouse disabled, but user32-rawinput-mouse-experimental depends on that." - fi - enable_user32_rawinput_mouse=1 -fi - -if test "$enable_user32_rawinput_mouse" -eq 1; then - if test "$enable_user32_rawinput_hid" -gt 1; then - abort "Patchset user32-rawinput-hid disabled, but user32-rawinput-mouse depends on that." - fi - enable_user32_rawinput_hid=1 -fi - -if test "$enable_user32_rawinput_hid" -eq 1; then - if test "$enable_loader_KeyboardLayouts" -gt 1; then - abort "Patchset loader-KeyboardLayouts disabled, but user32-rawinput-hid depends on that." - fi - enable_loader_KeyboardLayouts=1 -fi - if test "$enable_stdole32_tlb_SLTG_Typelib" -eq 1; then if test "$enable_widl_SLTG_Typelib_Support" -gt 1; then abort "Patchset widl-SLTG_Typelib_Support disabled, but stdole32.tlb-SLTG_Typelib depends on that." @@ -3683,78 +3646,6 @@ if test "$enable_user32_msgbox_Support_WM_COPY_mesg" -eq 1; then patch_apply user32-msgbox-Support-WM_COPY-mesg/0002-user32-msgbox-Use-a-windows-hook-to-trap-Ctrl-C.patch fi -# Patchset user32-rawinput-hid -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * loader-KeyboardLayouts -# | -# | This patchset fixes the following Wine bugs: -# | * [#50506] WM_INPUT messages are not received for HID devices registered with RegisterRawInputDevices -# | -# | Modified files: -# | * dlls/hidclass.sys/Makefile.in, dlls/hidclass.sys/device.c, dlls/hidclass.sys/pnp.c, dlls/user32/message.c, -# | dlls/user32/rawinput.c, server/protocol.def, server/queue.c, server/trace.c -# | -if test "$enable_user32_rawinput_hid" -eq 1; then - patch_apply user32-rawinput-hid/0005-hidclass.sys-Use-__wine_send_input-to-send-device-no.patch - patch_apply user32-rawinput-hid/0006-server-Implement-desktop-broadcast-in-queue_rawinput.patch - patch_apply user32-rawinput-hid/0007-server-Add-rawinput-union-to-hw_input_t-INPUT_HARDWA.patch - patch_apply user32-rawinput-hid/0008-server-Add-RIM_TYPEHID-type-hid-member-to-rawinput-u.patch - patch_apply user32-rawinput-hid/0009-user32-Send-WM_INPUT_DEVICE_CHANGE-RAWINPUT-to-the-s.patch - patch_apply user32-rawinput-hid/0010-server-Track-known-HID-rawinput-devices-on-addition-.patch - patch_apply user32-rawinput-hid/0011-server-Add-process-argument-to-find_rawinput_device.patch - patch_apply user32-rawinput-hid/0012-server-Implement-WM_INPUT_DEVICE_CHANGE-message-disp.patch - patch_apply user32-rawinput-hid/0013-hidclass.sys-Send-rawinput-messages-with-HID-report.patch - patch_apply user32-rawinput-hid/0014-server-Add-extra-data-to-hardware_msg_data.patch - patch_apply user32-rawinput-hid/0015-server-Implement-WM_INPUT-RIM_TYPEHID-message-dispat.patch - patch_apply user32-rawinput-hid/0018-user32-Enumerate-mouse-rawinput-device-before-HID-de.patch -fi - -# Patchset user32-rawinput-mouse -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * loader-KeyboardLayouts, user32-rawinput-hid -# | -# | This patchset fixes the following Wine bugs: -# | * [#42631] Mouse drift, jump or don't react to small slow movements in Unity-engine games and Fallout 4 (partly fixed in -# | Unity games, have walkaround in Fallout4 ) -# | * [#42675] Overwatch: Phantom mouse input / view pulled up to ceiling -# | -# | Modified files: -# | * dlls/user32/input.c, dlls/user32/message.c, dlls/wineandroid.drv/keyboard.c, dlls/wineandroid.drv/window.c, -# | dlls/winemac.drv/ime.c, dlls/winemac.drv/keyboard.c, dlls/winemac.drv/mouse.c, dlls/winex11.drv/desktop.c, -# | dlls/winex11.drv/event.c, dlls/winex11.drv/keyboard.c, dlls/winex11.drv/mouse.c, dlls/winex11.drv/window.c, -# | dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c, server/protocol.def, server/queue.c -# | -if test "$enable_user32_rawinput_mouse" -eq 1; then - patch_apply user32-rawinput-mouse/0001-winex11.drv-Split-XInput2-thread-initialization.patch - patch_apply user32-rawinput-mouse/0002-winex11.drv-Support-XInput2-events-for-individual-wi.patch - patch_apply user32-rawinput-mouse/0003-winex11.drv-Advertise-XInput2-version-2.1-support.patch - patch_apply user32-rawinput-mouse/0004-winex11.drv-Keep-track-of-pointer-and-device-button-.patch - patch_apply user32-rawinput-mouse/0005-server-Add-send_hardware_message-flags-for-rawinput-.patch - patch_apply user32-rawinput-mouse/0006-user32-Set-SEND_HWMSG_RAWINPUT-flags-only-when-RAWIN.patch - patch_apply user32-rawinput-mouse/0007-user32-Support-sending-RIM_TYPEMOUSE-through-__wine_.patch - patch_apply user32-rawinput-mouse/0008-winex11.drv-Listen-to-RawMotion-and-RawButton-events.patch -fi - -# Patchset user32-rawinput-mouse-experimental -# | -# | This patchset has the following (direct or indirect) dependencies: -# | * loader-KeyboardLayouts, user32-rawinput-hid, user32-rawinput-mouse -# | -# | This patchset fixes the following Wine bugs: -# | * [#45882] - Raw Input should use untransformed mouse values (affects Overwatch, several Source games). -# | -# | Modified files: -# | * dlls/user32/rawinput.c, dlls/winex11.drv/mouse.c, dlls/winex11.drv/window.c, dlls/winex11.drv/x11drv.h, -# | dlls/winex11.drv/x11drv_main.c, server/queue.c -# | -if test "$enable_user32_rawinput_mouse_experimental" -eq 1; then - patch_apply user32-rawinput-mouse-experimental/0001-winex11.drv-Add-support-for-absolute-RawMotion-event.patch - patch_apply user32-rawinput-mouse-experimental/0002-winex11.drv-Send-relative-RawMotion-events-unprocess.patch - patch_apply user32-rawinput-mouse-experimental/0003-winex11.drv-Accumulate-mouse-movement-to-avoid-round.patch -fi - # Patchset user32-recursive-activation # | # | This patchset fixes the following Wine bugs: @@ -4299,15 +4190,6 @@ if test "$enable_wintrust_WTHelperGetProvCertFromChain" -eq 1; then patch_apply wintrust-WTHelperGetProvCertFromChain/0001-wintrust-Add-parameter-check-in-WTHelperGetProvCertF.patch fi -# Patchset wpcap-Dynamic_Linking -# | -# | Modified files: -# | * configure.ac, dlls/wpcap/Makefile.in, dlls/wpcap/wpcap.c -# | -if test "$enable_wpcap_Dynamic_Linking" -eq 1; then - patch_apply wpcap-Dynamic_Linking/0001-wpcap-Load-libpcap-dynamically.patch -fi - # Patchset ws2_32-APC_Performance # | # | Modified files: diff --git a/patches/user32-rawinput-hid/0005-hidclass.sys-Use-__wine_send_input-to-send-device-no.patch b/patches/user32-rawinput-hid/0005-hidclass.sys-Use-__wine_send_input-to-send-device-no.patch deleted file mode 100644 index 4d4b1631..00000000 --- a/patches/user32-rawinput-hid/0005-hidclass.sys-Use-__wine_send_input-to-send-device-no.patch +++ /dev/null @@ -1,120 +0,0 @@ -From db0ad0a517ca74f0b166d515eb9fdb15d06d695a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Fri, 19 Mar 2021 14:16:16 +0100 -Subject: [PATCH] hidclass.sys: Use __wine_send_input to send device - notifications. - -This currently does nothing, because winedevice.exe isn't associated -with any desktop, and the INPUT_HARDWARE messages are dropped. - -In this specific case, when INPUT type is INPUT_HARDWARE and hi.uMsg is -WM_INPUT_DEVICE_CHANGE, the RAWINPUT structure usage is a non-standard -extension for Wine internal usage: - -* header.wParam contains the message GIDC_ARRIVAL / GIDC_REMOVAL wparam, - -* hid.bRawData contains two bytes, which are the HID device UsagePage - and Usage bytes, instead of a real HID report. - -This will let us use the same entry point and structures to send device -notifications as for the HID reports in the future (which will be sent -with INPUT_HARDWARE type / WM_INPUT uMsg instead). - -Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506 ---- - dlls/hidclass.sys/Makefile.in | 2 +- - dlls/hidclass.sys/pnp.c | 38 +++++++++++++++++++++++++++++++++++ - 2 files changed, 39 insertions(+), 1 deletion(-) - -diff --git a/dlls/hidclass.sys/Makefile.in b/dlls/hidclass.sys/Makefile.in -index 4b1e9338eb4..09281c118b4 100644 ---- a/dlls/hidclass.sys/Makefile.in -+++ b/dlls/hidclass.sys/Makefile.in -@@ -1,6 +1,6 @@ - MODULE = hidclass.sys - IMPORTLIB = hidclass --IMPORTS = hal ntoskrnl -+IMPORTS = hal ntoskrnl user32 - - EXTRADLLFLAGS = -mno-cygwin - -diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c -index de6f409a16b..9a1dcee192b 100644 ---- a/dlls/hidclass.sys/pnp.c -+++ b/dlls/hidclass.sys/pnp.c -@@ -26,6 +26,7 @@ - #include "ddk/hidtypes.h" - #include "ddk/wdm.h" - #include "regstr.h" -+#include "winuser.h" - #include "wine/debug.h" - #include "wine/asm.h" - #include "wine/list.h" -@@ -97,6 +98,9 @@ static UINT32 alloc_rawinput_handle(void) - return InterlockedIncrement(&counter); - } - -+/* make sure bRawData can hold two bytes without requiring additional allocation */ -+C_ASSERT(offsetof(RAWINPUT, data.hid.bRawData[2]) < sizeof(RAWINPUT)); -+ - static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *bus_pdo) - { - WCHAR device_id[MAX_DEVICE_ID_LEN], instance_id[MAX_DEVICE_ID_LEN]; -@@ -159,6 +163,8 @@ static void create_child(minidriver *minidriver, DEVICE_OBJECT *fdo) - WCHAR pdo_name[255]; - USAGE page, usage; - NTSTATUS status; -+ RAWINPUT rawinput; -+ INPUT input; - INT i; - - status = call_minidriver(IOCTL_HID_GET_DEVICE_ATTRIBUTES, fdo, NULL, 0, &attr, sizeof(attr)); -@@ -247,6 +253,23 @@ static void create_child(minidriver *minidriver, DEVICE_OBJECT *fdo) - sizeof(HID_XFER_PACKET) + pdo_ext->u.pdo.preparsed_data->caps.InputReportByteLength); - - HID_StartDeviceThread(child_pdo); -+ -+ rawinput.header.dwType = RIM_TYPEHID; -+ rawinput.header.dwSize = offsetof(RAWINPUT, data.hid.bRawData[2]); -+ rawinput.header.hDevice = ULongToHandle(pdo_ext->u.pdo.rawinput_handle); -+ rawinput.header.wParam = GIDC_ARRIVAL; -+ rawinput.data.hid.dwCount = 1; -+ rawinput.data.hid.dwSizeHid = 2; -+ rawinput.data.hid.bRawData[0] = pdo_ext->u.pdo.preparsed_data->caps.UsagePage; -+ rawinput.data.hid.bRawData[1] = pdo_ext->u.pdo.preparsed_data->caps.Usage; -+ -+ input.type = INPUT_HARDWARE; -+ input.u.hi.uMsg = WM_INPUT_DEVICE_CHANGE; -+ input.u.hi.wParamH = (WORD)(rawinput.header.dwSize >> 16); -+ input.u.hi.wParamL = (WORD)(rawinput.header.dwSize >> 0); -+ __wine_send_input(0, &input, &rawinput); -+ -+ fdo->Flags &= ~DO_DEVICE_INITIALIZING; - } - - static NTSTATUS fdo_pnp(DEVICE_OBJECT *device, IRP *irp) -@@ -409,6 +432,21 @@ static NTSTATUS pdo_pnp(DEVICE_OBJECT *device, IRP *irp) - case IRP_MN_REMOVE_DEVICE: - { - IRP *queued_irp; -+ RAWINPUT rawinput; -+ INPUT input; -+ -+ rawinput.header.dwType = RIM_TYPEHID; -+ rawinput.header.dwSize = offsetof(RAWINPUT, data.hid.bRawData[0]); -+ rawinput.header.hDevice = ULongToHandle(ext->u.pdo.rawinput_handle); -+ rawinput.header.wParam = GIDC_REMOVAL; -+ rawinput.data.hid.dwCount = 0; -+ rawinput.data.hid.dwSizeHid = 0; -+ -+ input.type = INPUT_HARDWARE; -+ input.u.hi.uMsg = WM_INPUT_DEVICE_CHANGE; -+ input.u.hi.wParamH = (WORD)(rawinput.header.dwSize >> 16); -+ input.u.hi.wParamL = (WORD)(rawinput.header.dwSize >> 0); -+ __wine_send_input(0, &input, &rawinput); - - IoSetDeviceInterfaceState(&ext->u.pdo.link_name, FALSE); - if (ext->u.pdo.is_mouse) --- -2.30.2 - diff --git a/patches/user32-rawinput-hid/0007-server-Add-rawinput-union-to-hw_input_t-INPUT_HARDWA.patch b/patches/user32-rawinput-hid/0007-server-Add-rawinput-union-to-hw_input_t-INPUT_HARDWA.patch deleted file mode 100644 index 0cb9ec66..00000000 --- a/patches/user32-rawinput-hid/0007-server-Add-rawinput-union-to-hw_input_t-INPUT_HARDWA.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 281b7628ea550071eab3b0c933b02ff67a3b215d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Mon, 22 Mar 2021 17:55:50 +0100 -Subject: [PATCH] server: Add rawinput union to hw_input_t / INPUT_HARDWARE. - -When msg is WM_INPUT_DEVICE_CHANGE. - -Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506 ---- - server/protocol.def | 42 ++++++++++++++++++++++++------------------ - server/trace.c | 23 +++++++++++++++++++++++ - 2 files changed, 47 insertions(+), 18 deletions(-) - -diff --git a/server/protocol.def b/server/protocol.def -index 617818f622d..9539169f1ff 100644 ---- a/server/protocol.def -+++ b/server/protocol.def -@@ -289,30 +289,32 @@ struct hw_msg_source - unsigned int origin; /* source origin (IMO_* values) */ - }; - -+union rawinput -+{ -+ int type; -+ struct -+ { -+ int type; /* RIM_TYPEKEYBOARD */ -+ unsigned int message; /* message generated by this rawinput event */ -+ unsigned short vkey; /* virtual key code */ -+ unsigned short scan; /* scan code */ -+ } kbd; -+ struct -+ { -+ int type; /* RIM_TYPEMOUSE */ -+ int x; /* x coordinate */ -+ int y; /* y coordinate */ -+ unsigned int data; /* mouse data */ -+ } mouse; -+}; -+ - struct hardware_msg_data - { - lparam_t info; /* extra info */ - unsigned int hw_id; /* unique id */ - unsigned int flags; /* hook flags */ - struct hw_msg_source source; /* message source */ -- union -- { -- int type; -- struct -- { -- int type; /* RIM_TYPEKEYBOARD */ -- unsigned int message; /* message generated by this rawinput event */ -- unsigned short vkey; /* virtual key code */ -- unsigned short scan; /* scan code */ -- } kbd; -- struct -- { -- int type; /* RIM_TYPEMOUSE */ -- int x; /* x coordinate */ -- int y; /* y coordinate */ -- unsigned int data; /* mouse data */ -- } mouse; -- } rawinput; -+ union rawinput rawinput; /* rawinput message data */ - }; - - struct callback_msg_data -@@ -357,6 +359,10 @@ typedef union - int type; /* INPUT_HARDWARE */ - unsigned int msg; /* message code */ - lparam_t lparam; /* message param */ -+ union -+ { -+ union rawinput rawinput; /* WM_INPUT_DEVICE_CHANGE msg */ -+ } data; - } hw; - } hw_input_t; - -diff --git a/server/trace.c b/server/trace.c -index 44bc8d8ee6f..ce21ae4fe4f 100644 ---- a/server/trace.c -+++ b/server/trace.c -@@ -409,6 +409,24 @@ static void dump_irp_params( const char *prefix, const irp_params_t *data ) - } - } - -+static void dump_rawinput( const char *prefix, const union rawinput *rawinput ) -+{ -+ switch (rawinput->type) -+ { -+ case RIM_TYPEMOUSE: -+ fprintf( stderr, "%s{type=MOUSE,x=%d,y=%d,data=%08x}", prefix, rawinput->mouse.x, -+ rawinput->mouse.y, rawinput->mouse.data ); -+ break; -+ case RIM_TYPEKEYBOARD: -+ fprintf( stderr, "%s{type=KEYBOARD,message=%04x,vkey=%04hx,scan=%04hx}", prefix, -+ rawinput->kbd.message, rawinput->kbd.vkey, rawinput->kbd.scan ); -+ break; -+ default: -+ fprintf( stderr, "%s{type=%04x}", prefix, rawinput->type ); -+ break; -+ } -+} -+ - static void dump_hw_input( const char *prefix, const hw_input_t *input ) - { - switch (input->type) -@@ -429,6 +447,11 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) - case INPUT_HARDWARE: - fprintf( stderr, "%s{type=HARDWARE,msg=%04x", prefix, input->hw.msg ); - dump_uint64( ",lparam=", &input->hw.lparam ); -+ switch (input->hw.msg) -+ { -+ case WM_INPUT_DEVICE_CHANGE: -+ dump_rawinput( ",rawinput=", &input->hw.data.rawinput ); -+ } - fputc( '}', stderr ); - break; - default: --- -2.30.2 - diff --git a/patches/user32-rawinput-hid/0008-server-Add-RIM_TYPEHID-type-hid-member-to-rawinput-u.patch b/patches/user32-rawinput-hid/0008-server-Add-RIM_TYPEHID-type-hid-member-to-rawinput-u.patch deleted file mode 100644 index 369d07f6..00000000 --- a/patches/user32-rawinput-hid/0008-server-Add-RIM_TYPEHID-type-hid-member-to-rawinput-u.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 6b794622488eb83f6ede9d62a14f413660a2623a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Mon, 22 Mar 2021 18:28:38 +0100 -Subject: [PATCH] server: Add RIM_TYPEHID type / hid member to rawinput union. - -Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506 ---- - server/protocol.def | 8 ++++++++ - server/trace.c | 38 ++++++++++++++++++++++---------------- - 2 files changed, 30 insertions(+), 16 deletions(-) - -diff --git a/server/protocol.def b/server/protocol.def -index 9539169f1ff..f97b966719c 100644 ---- a/server/protocol.def -+++ b/server/protocol.def -@@ -306,6 +306,14 @@ union rawinput - int y; /* y coordinate */ - unsigned int data; /* mouse data */ - } mouse; -+ struct -+ { -+ int type; /* RIM_TYPEHID */ -+ unsigned int device; /* rawinput device index */ -+ unsigned int param; /* rawinput message param */ -+ unsigned int length; /* HID report length */ -+ /* followed by length bytes of HID report data */ -+ } hid; - }; - - struct hardware_msg_data -diff --git a/server/trace.c b/server/trace.c -index ce21ae4fe4f..3d24cec0133 100644 ---- a/server/trace.c -+++ b/server/trace.c -@@ -409,6 +409,22 @@ static void dump_irp_params( const char *prefix, const irp_params_t *data ) - } - } - -+static void dump_varargs_bytes( const char *prefix, data_size_t size ) -+{ -+ const unsigned char *data = cur_data; -+ data_size_t len = min( 1024, size ); -+ -+ fprintf( stderr, "%s{", prefix ); -+ while (len > 0) -+ { -+ fprintf( stderr, "%02x", *data++ ); -+ if (--len) fputc( ',', stderr ); -+ } -+ if (size > 1024) fprintf( stderr, "...(total %u)", size ); -+ fputc( '}', stderr ); -+ remove_data( size ); -+} -+ - static void dump_rawinput( const char *prefix, const union rawinput *rawinput ) - { - switch (rawinput->type) -@@ -421,6 +437,12 @@ static void dump_rawinput( const char *prefix, const union rawinput *rawinput ) - fprintf( stderr, "%s{type=KEYBOARD,message=%04x,vkey=%04hx,scan=%04hx}", prefix, - rawinput->kbd.message, rawinput->kbd.vkey, rawinput->kbd.scan ); - break; -+ case RIM_TYPEHID: -+ fprintf( stderr, "%s{type=HID,device=%04x,param=%04x,length=%u", prefix, -+ rawinput->hid.device, rawinput->hid.param, rawinput->hid.length ); -+ dump_varargs_bytes( ",report=", rawinput->hid.length ); -+ fputc( '}', stderr ); -+ break; - default: - fprintf( stderr, "%s{type=%04x}", prefix, rawinput->type ); - break; -@@ -580,22 +602,6 @@ static void dump_varargs_user_handles( const char *prefix, data_size_t size ) - remove_data( size ); - } - --static void dump_varargs_bytes( const char *prefix, data_size_t size ) --{ -- const unsigned char *data = cur_data; -- data_size_t len = min( 1024, size ); -- -- fprintf( stderr,"%s{", prefix ); -- while (len > 0) -- { -- fprintf( stderr, "%02x", *data++ ); -- if (--len) fputc( ',', stderr ); -- } -- if (size > 1024) fprintf( stderr, "...(total %u)", size ); -- fputc( '}', stderr ); -- remove_data( size ); --} -- - static void dump_varargs_string( const char *prefix, data_size_t size ) - { - fprintf( stderr, "%s\"%.*s\"", prefix, (int)size, (const char *)cur_data ); --- -2.30.2 - diff --git a/patches/user32-rawinput-hid/0009-user32-Send-WM_INPUT_DEVICE_CHANGE-RAWINPUT-to-the-s.patch b/patches/user32-rawinput-hid/0009-user32-Send-WM_INPUT_DEVICE_CHANGE-RAWINPUT-to-the-s.patch deleted file mode 100644 index 040fb3a5..00000000 --- a/patches/user32-rawinput-hid/0009-user32-Send-WM_INPUT_DEVICE_CHANGE-RAWINPUT-to-the-s.patch +++ /dev/null @@ -1,47 +0,0 @@ -From dcd1d9ab1462b49093465e3e4117419b63778799 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?R=C3=A9mi=20Bernon?= -Date: Mon, 22 Mar 2021 18:11:27 +0100 -Subject: [PATCH] user32: Send WM_INPUT_DEVICE_CHANGE / RAWINPUT to the server. - -Expect INPUT/INPUT_HARDWARE to be followed with RAWINPUT, when uMsg is -WM_INPUT_DEVICE_CHANGE. This is for internal __wine_send_input calls -only, as we ignore INPUT_HARDWARE in SendInput. - -Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506 ---- - dlls/user32/message.c | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index f87ef9fb3af..f11aaa4144d 100644 ---- a/dlls/user32/message.c -+++ b/dlls/user32/message.c -@@ -3267,6 +3267,25 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r - case INPUT_HARDWARE: - req->input.hw.msg = input->u.hi.uMsg; - req->input.hw.lparam = MAKELONG( input->u.hi.wParamL, input->u.hi.wParamH ); -+ switch (input->u.hi.uMsg) -+ { -+ case WM_INPUT_DEVICE_CHANGE: -+ req->input.hw.data.rawinput.type = rawinput->header.dwType; -+ switch (rawinput->header.dwType) -+ { -+ case RIM_TYPEHID: -+ assert( rawinput->data.hid.dwCount <= 1 ); -+ req->input.hw.data.rawinput.hid.device = HandleToUlong( rawinput->header.hDevice ); -+ req->input.hw.data.rawinput.hid.param = rawinput->header.wParam; -+ req->input.hw.data.rawinput.hid.length = rawinput->data.hid.dwSizeHid; -+ if (rawinput->data.hid.dwSizeHid) -+ wine_server_add_data( req, rawinput->data.hid.bRawData, rawinput->data.hid.dwSizeHid ); -+ break; -+ default: -+ assert( 0 ); -+ break; -+ } -+ } - break; - } - if (key_state_info) wine_server_set_reply( req, key_state_info->state, --- -2.30.2 - diff --git a/patches/user32-rawinput-hid/0010-server-Track-known-HID-rawinput-devices-on-addition-.patch b/patches/user32-rawinput-hid/0010-server-Track-known-HID-rawinput-devices-on-addition-.patch index be826173..e75f8a45 100644 --- a/patches/user32-rawinput-hid/0010-server-Track-known-HID-rawinput-devices-on-addition-.patch +++ b/patches/user32-rawinput-hid/0010-server-Track-known-HID-rawinput-devices-on-addition-.patch @@ -1,4 +1,4 @@ -From cb2f3ed7057e769dda746b65464b364edb447c32 Mon Sep 17 00:00:00 2001 +From df872d2e07d188439a3fbe938a2d9c53c6e3d3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Wed, 7 Apr 2021 12:17:09 +0200 Subject: [PATCH] server: Track known HID rawinput devices on addition and @@ -12,7 +12,7 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506 1 file changed, 49 insertions(+) diff --git a/server/queue.c b/server/queue.c -index ca2f898492b..033e4e30b66 100644 +index ca2f898492b..becfb8b94c6 100644 --- a/server/queue.c +++ b/server/queue.c @@ -1656,6 +1656,42 @@ static struct thread *get_foreground_thread( struct desktop *desktop, user_handl @@ -65,13 +65,13 @@ index ca2f898492b..033e4e30b66 100644 + switch (input->hw.msg) + { + case WM_INPUT_DEVICE_CHANGE: -+ if (input->hw.data.rawinput.type == RIM_TYPEHID && -+ input->hw.data.rawinput.hid.param == GIDC_ARRIVAL) -+ insert_hid_rawinput_device( input->hw.data.rawinput.hid.device, get_req_data(), get_req_data_size() ); ++ if (input->hw.rawinput.type == RIM_TYPEHID && ++ input->hw.rawinput.hid.param == GIDC_ARRIVAL) ++ insert_hid_rawinput_device( input->hw.rawinput.hid.device, get_req_data(), get_req_data_size() ); + -+ if (input->hw.data.rawinput.type == RIM_TYPEHID && -+ input->hw.data.rawinput.hid.param == GIDC_REMOVAL) -+ remove_hid_rawinput_device( input->hw.data.rawinput.hid.device ); ++ if (input->hw.rawinput.type == RIM_TYPEHID && ++ input->hw.rawinput.hid.param == GIDC_REMOVAL) ++ remove_hid_rawinput_device( input->hw.rawinput.hid.device ); + return; + } + diff --git a/patches/user32-rawinput-hid/0012-server-Implement-WM_INPUT_DEVICE_CHANGE-message-disp.patch b/patches/user32-rawinput-hid/0012-server-Implement-WM_INPUT_DEVICE_CHANGE-message-disp.patch index bb709889..423a5e19 100644 --- a/patches/user32-rawinput-hid/0012-server-Implement-WM_INPUT_DEVICE_CHANGE-message-disp.patch +++ b/patches/user32-rawinput-hid/0012-server-Implement-WM_INPUT_DEVICE_CHANGE-message-disp.patch @@ -1,4 +1,4 @@ -From aec62828c1b4daee79e452e749eb215deb40425a Mon Sep 17 00:00:00 2001 +From 3f576ac591f515a621da1d706c85030c94fc39b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Wed, 7 Apr 2021 12:17:40 +0200 Subject: [PATCH] server: Implement WM_INPUT_DEVICE_CHANGE message dispatch. @@ -11,10 +11,10 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index f11aaa4144d..54fcdc4588c 100644 +index 148b35f8caf..9af33c3291e 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c -@@ -2288,11 +2288,14 @@ static void accept_hardware_message( UINT hw_id ) +@@ -2289,11 +2289,14 @@ static void accept_hardware_message( UINT hw_id ) static BOOL process_rawinput_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ) { struct rawinput_thread_data *thread_data = rawinput_thread_data(); @@ -33,7 +33,7 @@ index f11aaa4144d..54fcdc4588c 100644 msg->pt = point_phys_to_win_dpi( msg->hwnd, msg->pt ); return TRUE; } -@@ -2612,7 +2615,7 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar +@@ -2613,7 +2616,7 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar /* hardware messages are always in physical coords */ context = SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ); @@ -43,10 +43,10 @@ index f11aaa4144d..54fcdc4588c 100644 else if (is_keyboard_message( msg->message )) ret = process_keyboard_message( msg, hw_id, hwnd_filter, first, last, remove ); diff --git a/dlls/user32/rawinput.c b/dlls/user32/rawinput.c -index ba11a121bc5..99481ffae3d 100644 +index f2d64ccc23b..d95d29d7656 100644 --- a/dlls/user32/rawinput.c +++ b/dlls/user32/rawinput.c -@@ -428,7 +428,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH RegisterRawInputDevices(RAWINPUTDEVICE *devices, U +@@ -468,7 +468,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH RegisterRawInputDevices(RAWINPUTDEVICE *devices, U TRACE("device %u: page %#x, usage %#x, flags %#x, target %p.\n", i, devices[i].usUsagePage, devices[i].usUsage, devices[i].dwFlags, devices[i].hwndTarget); @@ -56,7 +56,7 @@ index ba11a121bc5..99481ffae3d 100644 d[i].usage_page = devices[i].usUsagePage; diff --git a/server/queue.c b/server/queue.c -index e71d9207e1a..9fe009b5cfe 100644 +index 3712f79df3e..3f48e0aabdc 100644 --- a/server/queue.c +++ b/server/queue.c @@ -1464,7 +1464,7 @@ static user_handle_t find_hardware_message_window( struct desktop *desktop, stru @@ -195,17 +195,17 @@ index e71d9207e1a..9fe009b5cfe 100644 + msg_data = &raw_msg.data; + msg_data->info = 0; + msg_data->flags = 0; -+ msg_data->rawinput = input->hw.data.rawinput; ++ msg_data->rawinput = input->hw.rawinput; + - if (input->hw.data.rawinput.type == RIM_TYPEHID && - input->hw.data.rawinput.hid.param == GIDC_ARRIVAL) - insert_hid_rawinput_device( input->hw.data.rawinput.hid.device, get_req_data(), get_req_data_size() ); + if (input->hw.rawinput.type == RIM_TYPEHID && + input->hw.rawinput.hid.param == GIDC_ARRIVAL) + insert_hid_rawinput_device( input->hw.rawinput.hid.device, get_req_data(), get_req_data_size() ); + enum_processes( queue_rawinput_message, &raw_msg ); + - if (input->hw.data.rawinput.type == RIM_TYPEHID && - input->hw.data.rawinput.hid.param == GIDC_REMOVAL) - remove_hid_rawinput_device( input->hw.data.rawinput.hid.device ); + if (input->hw.rawinput.type == RIM_TYPEHID && + input->hw.rawinput.hid.param == GIDC_REMOVAL) + remove_hid_rawinput_device( input->hw.rawinput.hid.device ); + + if (raw_msg.foreground) release_object( raw_msg.foreground ); return; diff --git a/patches/user32-rawinput-hid/0015-server-Implement-WM_INPUT-RIM_TYPEHID-message-dispat.patch b/patches/user32-rawinput-hid/0015-server-Implement-WM_INPUT-RIM_TYPEHID-message-dispat.patch index 3f073830..0bc1f5cd 100644 --- a/patches/user32-rawinput-hid/0015-server-Implement-WM_INPUT-RIM_TYPEHID-message-dispat.patch +++ b/patches/user32-rawinput-hid/0015-server-Implement-WM_INPUT-RIM_TYPEHID-message-dispat.patch @@ -1,4 +1,4 @@ -From 9c6c0fb4a36ccf59313dbf0eff887c41c1749eb5 Mon Sep 17 00:00:00 2001 +From 018a5cdacc44e5ff883a1d4f62705bf466d8d62c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Tue, 23 Mar 2021 10:42:07 +0100 Subject: [PATCH] server: Implement WM_INPUT / RIM_TYPEHID message dispatch. @@ -10,28 +10,27 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50506 --- dlls/user32/message.c | 1 + dlls/user32/rawinput.c | 22 ++++++++++++++++++++-- - server/protocol.def | 2 +- server/queue.c | 25 ++++++++++++++++++------- server/trace.c | 1 + - 5 files changed, 41 insertions(+), 10 deletions(-) + 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index 54fcdc4588c..f986b71953a 100644 +index 9af33c3291e..e21ebf9d4d8 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c -@@ -3272,6 +3272,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r +@@ -3283,6 +3283,7 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r req->input.hw.lparam = MAKELONG( input->u.hi.wParamL, input->u.hi.wParamH ); switch (input->u.hi.uMsg) { + case WM_INPUT: case WM_INPUT_DEVICE_CHANGE: - req->input.hw.data.rawinput.type = rawinput->header.dwType; + req->input.hw.rawinput.type = rawinput->header.dwType; switch (rawinput->header.dwType) diff --git a/dlls/user32/rawinput.c b/dlls/user32/rawinput.c -index a43021ceac9..c40b685be50 100644 +index d95d29d7656..f28bde339eb 100644 --- a/dlls/user32/rawinput.c +++ b/dlls/user32/rawinput.c -@@ -373,6 +373,22 @@ BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_ms +@@ -371,6 +371,22 @@ BOOL rawinput_from_hardware_message(RAWINPUT *rawinput, const struct hardware_ms rawinput->data.keyboard.Message = msg_data->rawinput.kbd.message; rawinput->data.keyboard.ExtraInformation = msg_data->info; } @@ -54,7 +53,7 @@ index a43021ceac9..c40b685be50 100644 else { FIXME("Unhandled rawinput type %#x.\n", msg_data->rawinput.type); -@@ -566,7 +582,7 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, +@@ -564,7 +580,7 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, struct hardware_msg_data *msg_data; struct rawinput_thread_data *thread_data; RAWINPUT *rawinput; @@ -63,7 +62,7 @@ index a43021ceac9..c40b685be50 100644 BOOL is_wow64; int i; -@@ -626,7 +642,9 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, +@@ -624,7 +640,9 @@ UINT WINAPI DECLSPEC_HOTPATCH GetRawInputBuffer(RAWINPUT *data, UINT *data_size, data->header.dwSize - sizeof(RAWINPUTHEADER)); data->header.dwSize += overhead; data = NEXTRAWINPUTBLOCK(data); @@ -74,21 +73,8 @@ index a43021ceac9..c40b685be50 100644 } if (count == 0 && next_size == 0) *data_size = 0; -diff --git a/server/protocol.def b/server/protocol.def -index c9a0b53dfea..ce137caaea8 100644 ---- a/server/protocol.def -+++ b/server/protocol.def -@@ -358,7 +358,7 @@ typedef union - lparam_t lparam; /* message param */ - union - { -- union rawinput rawinput; /* WM_INPUT_DEVICE_CHANGE msg */ -+ union rawinput rawinput; /* WM_INPUT and WM_INPUT_DEVICE_CHANGE msg */ - } data; - } hw; - } hw_input_t; diff --git a/server/queue.c b/server/queue.c -index 248157ca7da..a411d0af8d2 100644 +index 55bcded3aff..52627015584 100644 --- a/server/queue.c +++ b/server/queue.c @@ -2044,6 +2044,7 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ @@ -112,21 +98,21 @@ index 248157ca7da..a411d0af8d2 100644 msg_data = &raw_msg.data; msg_data->info = 0; msg_data->flags = 0; - msg_data->rawinput = input->hw.data.rawinput; + msg_data->rawinput = input->hw.rawinput; -- if (input->hw.data.rawinput.type == RIM_TYPEHID && +- if (input->hw.rawinput.type == RIM_TYPEHID && + if (input->hw.msg == WM_INPUT_DEVICE_CHANGE && -+ input->hw.data.rawinput.type == RIM_TYPEHID && - input->hw.data.rawinput.hid.param == GIDC_ARRIVAL) - insert_hid_rawinput_device( input->hw.data.rawinput.hid.device, get_req_data(), get_req_data_size() ); ++ input->hw.rawinput.type == RIM_TYPEHID && + input->hw.rawinput.hid.param == GIDC_ARRIVAL) + insert_hid_rawinput_device( input->hw.rawinput.hid.device, get_req_data(), get_req_data_size() ); enum_processes( queue_rawinput_message, &raw_msg ); -- if (input->hw.data.rawinput.type == RIM_TYPEHID && +- if (input->hw.rawinput.type == RIM_TYPEHID && + if (input->hw.msg == WM_INPUT_DEVICE_CHANGE && -+ input->hw.data.rawinput.type == RIM_TYPEHID && - input->hw.data.rawinput.hid.param == GIDC_REMOVAL) - remove_hid_rawinput_device( input->hw.data.rawinput.hid.device ); ++ input->hw.rawinput.type == RIM_TYPEHID && + input->hw.rawinput.hid.param == GIDC_REMOVAL) + remove_hid_rawinput_device( input->hw.rawinput.hid.device ); @@ -3371,16 +3380,18 @@ DECL_HANDLER(get_rawinput_buffer) { @@ -161,16 +147,16 @@ index 248157ca7da..a411d0af8d2 100644 free_message( msg ); diff --git a/server/trace.c b/server/trace.c -index c6bdbb1139c..30aa979a20e 100644 +index e40f0769a35..1fd32c8ab5f 100644 --- a/server/trace.c +++ b/server/trace.c -@@ -456,6 +456,7 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) +@@ -440,6 +440,7 @@ static void dump_hw_input( const char *prefix, const hw_input_t *input ) dump_uint64( ",lparam=", &input->hw.lparam ); switch (input->hw.msg) { + case WM_INPUT: case WM_INPUT_DEVICE_CHANGE: - dump_rawinput( ",rawinput=", &input->hw.data.rawinput ); + dump_rawinput( ",rawinput=", &input->hw.rawinput ); } -- 2.30.2 diff --git a/patches/user32-rawinput-hid/definition b/patches/user32-rawinput-hid/definition index d39ee187..2918141f 100644 --- a/patches/user32-rawinput-hid/definition +++ b/patches/user32-rawinput-hid/definition @@ -1,2 +1,4 @@ Fixes: [50506] WM_INPUT messages are not received for HID devices registered with RegisterRawInputDevices Depends: loader-KeyboardLayouts +# In the process of upstreaming. +Disabled: true diff --git a/patches/user32-rawinput-mouse-experimental/definition b/patches/user32-rawinput-mouse-experimental/definition index fe2d8d5e..b54762bf 100644 --- a/patches/user32-rawinput-mouse-experimental/definition +++ b/patches/user32-rawinput-mouse-experimental/definition @@ -1,2 +1,4 @@ Fixes: [45882] - Raw Input should use untransformed mouse values (affects Overwatch, several Source games). Depends: user32-rawinput-mouse +# In the process of upstreaming. +Disabled: true diff --git a/patches/user32-rawinput-mouse/0007-user32-Support-sending-RIM_TYPEMOUSE-through-__wine_.patch b/patches/user32-rawinput-mouse/0007-user32-Support-sending-RIM_TYPEMOUSE-through-__wine_.patch index af8168d5..70af33d2 100644 --- a/patches/user32-rawinput-mouse/0007-user32-Support-sending-RIM_TYPEMOUSE-through-__wine_.patch +++ b/patches/user32-rawinput-mouse/0007-user32-Support-sending-RIM_TYPEMOUSE-through-__wine_.patch @@ -1,4 +1,4 @@ -From ba34a1671d177a18391e3bf8619cea68eead6e34 Mon Sep 17 00:00:00 2001 +From 1ab8aaf4c6d73f8414f5c77db096655a5e08f310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 25 Mar 2021 14:26:35 +0100 Subject: [PATCH] user32: Support sending RIM_TYPEMOUSE through @@ -10,24 +10,24 @@ Subject: [PATCH] user32: Support sending RIM_TYPEMOUSE through 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c -index 43c6adad033..d62da5de16f 100644 +index 0f724a0acc3..3fe2fc3ce6a 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c -@@ -3279,6 +3279,12 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r - req->input.hw.data.rawinput.type = rawinput->header.dwType; +@@ -3290,6 +3290,12 @@ NTSTATUS send_hardware_message( HWND hwnd, const INPUT *input, const RAWINPUT *r + req->input.hw.rawinput.type = rawinput->header.dwType; switch (rawinput->header.dwType) { + case RIM_TYPEMOUSE: -+ req->input.hw.data.rawinput.mouse.x = rawinput->data.mouse.lLastX; -+ req->input.hw.data.rawinput.mouse.y = rawinput->data.mouse.lLastY; -+ req->input.hw.data.rawinput.mouse.data = rawinput->data.mouse.u.ulButtons; ++ req->input.hw.rawinput.mouse.x = rawinput->data.mouse.lLastX; ++ req->input.hw.rawinput.mouse.y = rawinput->data.mouse.lLastY; ++ req->input.hw.rawinput.mouse.data = rawinput->data.mouse.u.ulButtons; + req->input.hw.lparam = rawinput->data.mouse.ulRawButtons; + break; case RIM_TYPEHID: assert( rawinput->data.hid.dwCount <= 1 ); - req->input.hw.data.rawinput.hid.device = HandleToUlong( rawinput->header.hDevice ); + req->input.hw.rawinput.hid.device = HandleToUlong( rawinput->header.hDevice ); diff --git a/server/queue.c b/server/queue.c -index a928f4d7fad..9008f8e90ff 100644 +index 52a16825778..9e47a465613 100644 --- a/server/queue.c +++ b/server/queue.c @@ -2054,7 +2054,7 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ @@ -35,20 +35,20 @@ index a928f4d7fad..9008f8e90ff 100644 raw_msg.extra_len = 0; - if (input->hw.msg == WM_INPUT) -+ if (input->hw.msg == WM_INPUT && input->hw.data.rawinput.type == RIM_TYPEHID) ++ if (input->hw.msg == WM_INPUT && input->hw.rawinput.type == RIM_TYPEHID) { raw_msg.extra = get_req_data(); raw_msg.extra_len = get_req_data_size(); @@ -2065,6 +2065,9 @@ static void queue_custom_hardware_message( struct desktop *desktop, user_handle_ msg_data->flags = 0; - msg_data->rawinput = input->hw.data.rawinput; + msg_data->rawinput = input->hw.rawinput; -+ if (input->hw.msg == WM_INPUT && input->hw.data.rawinput.type == RIM_TYPEMOUSE) ++ if (input->hw.msg == WM_INPUT && input->hw.rawinput.type == RIM_TYPEMOUSE) + msg_data->flags = input->hw.lparam; + if (input->hw.msg == WM_INPUT_DEVICE_CHANGE && - input->hw.data.rawinput.type == RIM_TYPEHID && - input->hw.data.rawinput.hid.param == GIDC_ARRIVAL) + input->hw.rawinput.type == RIM_TYPEHID && + input->hw.rawinput.hid.param == GIDC_ARRIVAL) -- 2.30.2 diff --git a/patches/user32-rawinput-mouse/definition b/patches/user32-rawinput-mouse/definition index 79417ded..925332bd 100644 --- a/patches/user32-rawinput-mouse/definition +++ b/patches/user32-rawinput-mouse/definition @@ -1,3 +1,5 @@ Fixes: [42631] Mouse drift, jump or don't react to small slow movements in Unity-engine games and Fallout 4 (partly fixed in Unity games, have walkaround in Fallout4 ) Fixes: [42675] Overwatch: Phantom mouse input / view pulled up to ceiling Depends: user32-rawinput-hid +# In the process of upstreaming. +Disabled: true diff --git a/patches/wpcap-Dynamic_Linking/definition b/patches/wpcap-Dynamic_Linking/definition index e69de29b..52cea517 100644 --- a/patches/wpcap-Dynamic_Linking/definition +++ b/patches/wpcap-Dynamic_Linking/definition @@ -0,0 +1,3 @@ +# Painful to rebase. Can we just delete this instead? +# See: +Disabled: true diff --git a/staging/upstream-commit b/staging/upstream-commit index 00e89546..776f98f9 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -99e47361a37a4bf16de131401a0c231f86214a43 +44cb53bb37d3c40ea90aec6e35a9c08326b6e848