From 117d2b210700c747799b2292adba1ecdf5bb8476 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 13 Jun 2023 09:20:03 +1000 Subject: [PATCH] Rebase against c7431990d815e664cf22267142b76cc59f21d192. --- ...-user32-Implement-QueryDisplayConfig.patch | 120 ------------------ patches/user32-QueryDisplayConfig/definition | 1 - ...ort-XInput2-events-for-individual-wi.patch | 37 +++--- ...dvertise-XInput2-version-2.1-support.patch | 26 ++-- ...-track-of-pointer-and-device-button-.patch | 24 ++-- patches/user32-rawinput-mouse/definition | 1 + ...vent-a-recursive-loop-with-the-activ.patch | 38 +++--- ...user-configured-keyboard-layout-if-a.patch | 22 ++-- ...fixed-X11-keycode-to-scancode-conver.patch | 24 ++-- ...keyboard-scancode-auto-detection-by-.patch | 13 +- staging/upstream-commit | 2 +- 11 files changed, 92 insertions(+), 216 deletions(-) delete mode 100644 patches/user32-QueryDisplayConfig/0001-user32-Implement-QueryDisplayConfig.patch delete mode 100644 patches/user32-QueryDisplayConfig/definition diff --git a/patches/user32-QueryDisplayConfig/0001-user32-Implement-QueryDisplayConfig.patch b/patches/user32-QueryDisplayConfig/0001-user32-Implement-QueryDisplayConfig.patch deleted file mode 100644 index 26c4ffc7..00000000 --- a/patches/user32-QueryDisplayConfig/0001-user32-Implement-QueryDisplayConfig.patch +++ /dev/null @@ -1,120 +0,0 @@ -From 9229c4fe3078946d7f5fd976b4e2c9f0a5a8ccb1 Mon Sep 17 00:00:00 2001 -From: Derek Lesho -Date: Fri, 10 Jan 2020 15:34:45 -0600 -Subject: [PATCH] user32: Implement QueryDisplayConfig - ---- - dlls/user32/sysparams.c | 95 +++++++++++++++++++++++++++++++++-------- - 1 file changed, 77 insertions(+), 18 deletions(-) - -diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c -index 7ebe8099419..6d673c68e8c 100644 ---- a/dlls/user32/sysparams.c -+++ b/dlls/user32/sysparams.c -@@ -1184,26 +1184,85 @@ LONG WINAPI QueryDisplayConfig(UINT32 flags, UINT32 *numpathelements, DISPLAYCON - LUID gpu_luid; - WCHAR device_name[CCHDEVICENAME]; - DEVMODEW devmode; -+ POINT origin; -+ HMONITOR monitor; -+ MONITORINFOEXW monitor_info; -+ DISPLAYCONFIG_SOURCE_MODE *source_mode = &modeinfo[0].sourceMode; -+ DISPLAYCONFIG_TARGET_MODE *target_mode = &modeinfo[1].targetMode; -+ DISPLAYCONFIG_PATH_SOURCE_INFO *source_info = &pathinfo[0].sourceInfo; -+ DISPLAYCONFIG_PATH_TARGET_INFO *target_info = &pathinfo[0].targetInfo; -+ -+ TRACE("(%08x %p %p %p %p %p)\n", flags, numpathelements, pathinfo, numinfoelements, modeinfo, topologyid); -+ -+ if (*numpathelements < 1 || *numinfoelements < 2) -+ return ERROR_INSUFFICIENT_BUFFER; -+ -+ origin.x = 0; -+ origin.y = 0; -+ monitor = MonitorFromPoint(origin, MONITOR_DEFAULTTOPRIMARY); -+ monitor_info.cbSize = sizeof(monitor_info); -+ if (!(GetMonitorInfoW(monitor, (MONITORINFO*) &monitor_info))) -+ { -+ return ERROR_GEN_FAILURE; -+ } -+ if (!(EnumDisplaySettingsW(monitor_info.szDevice, 0, &devmode))) -+ { -+ return ERROR_GEN_FAILURE; -+ } - -- FIXME("(%08x %p %p %p %p %p): semi-stub\n", flags, numpathelements, pathinfo, numinfoelements, modeinfo, topologyid); -- -- if (!numpathelements || !numinfoelements) -- return ERROR_INVALID_PARAMETER; -- -- if (!*numpathelements || !*numinfoelements) -- return ERROR_INVALID_PARAMETER; -- -- if (flags != QDC_ALL_PATHS && -- flags != QDC_ONLY_ACTIVE_PATHS && -- flags != QDC_DATABASE_CURRENT) -- return ERROR_INVALID_PARAMETER; -- -- if (((flags == QDC_DATABASE_CURRENT) && !topologyid) || -- ((flags != QDC_DATABASE_CURRENT) && topologyid)) -- return ERROR_INVALID_PARAMETER; -+ AllocateLocallyUniqueId(&gpu_luid); -+ -+ source_mode->width = devmode.dmPelsWidth; -+ source_mode->height = devmode.dmPelsHeight; -+ source_mode->pixelFormat = DISPLAYCONFIG_PIXELFORMAT_32BPP; -+ source_mode->position.x = 0; -+ source_mode->position.y = 0; -+ -+ /* no idea what pixel rate is */ -+ target_mode->targetVideoSignalInfo.pixelRate = 0xdeadbeef; -+ target_mode->targetVideoSignalInfo.hSyncFreq.Numerator = devmode.dmDisplayFrequency * devmode.dmPelsHeight; -+ target_mode->targetVideoSignalInfo.hSyncFreq.Denominator = 1; -+ target_mode->targetVideoSignalInfo.vSyncFreq.Numerator = devmode.dmDisplayFrequency; -+ target_mode->targetVideoSignalInfo.vSyncFreq.Denominator = 1; -+ target_mode->targetVideoSignalInfo.activeSize.cx = devmode.dmPelsWidth; -+ target_mode->targetVideoSignalInfo.activeSize.cy = devmode.dmPelsHeight; -+ target_mode->targetVideoSignalInfo.totalSize.cx = devmode.dmPelsWidth; -+ target_mode->targetVideoSignalInfo.totalSize.cy = devmode.dmPelsHeight; -+ target_mode->targetVideoSignalInfo.videoStandard = D3DKMDT_VSS_NTSC_M; -+ target_mode->targetVideoSignalInfo.scanLineOrdering = DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED; -+ -+ modeinfo[0].infoType = DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE; -+ modeinfo[0].id = 0; -+ modeinfo[0].adapterId = gpu_luid; -+ modeinfo[1].infoType = DISPLAYCONFIG_MODE_INFO_TYPE_TARGET; -+ modeinfo[1].id = 0; -+ modeinfo[1].adapterId = gpu_luid; -+ -+ source_info->adapterId = gpu_luid; -+ source_info->id = 0; -+ source_info->modeInfoIdx = 0; -+ source_info->statusFlags = DISPLAYCONFIG_SOURCE_IN_USE; -+ -+ target_info->adapterId = gpu_luid; -+ target_info->id = 0; -+ -+ target_info->modeInfoIdx = 1; -+ target_info->outputTechnology = DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI; -+ target_info->rotation = DISPLAYCONFIG_ROTATION_IDENTITY; -+ target_info->scaling = DISPLAYCONFIG_SCALING_IDENTITY; -+ target_info->refreshRate.Numerator = devmode.dmDisplayFrequency; -+ target_info->refreshRate.Denominator = 1; -+ target_info->scanLineOrdering = DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED; -+ target_info->targetAvailable = TRUE; -+ target_info->statusFlags = DISPLAYCONFIG_TARGET_IN_USE; -+ -+ pathinfo[0].flags = DISPLAYCONFIG_PATH_ACTIVE; -+ -+ if (flags == QDC_DATABASE_CURRENT && topologyid) -+ { -+ *topologyid = DISPLAYCONFIG_TOPOLOGY_INTERNAL; -+ } - -- if (flags != QDC_ONLY_ACTIVE_PATHS) -- FIXME("only returning active paths\n"); - - if (topologyid) - { --- -2.35.1 - diff --git a/patches/user32-QueryDisplayConfig/definition b/patches/user32-QueryDisplayConfig/definition deleted file mode 100644 index c6aab485..00000000 --- a/patches/user32-QueryDisplayConfig/definition +++ /dev/null @@ -1 +0,0 @@ -Fixes: [49583] Implement QueryDisplayConfig diff --git a/patches/user32-rawinput-mouse/0002-winex11.drv-Support-XInput2-events-for-individual-wi.patch b/patches/user32-rawinput-mouse/0002-winex11.drv-Support-XInput2-events-for-individual-wi.patch index 569c3835..a0a32a6f 100644 --- a/patches/user32-rawinput-mouse/0002-winex11.drv-Support-XInput2-events-for-individual-wi.patch +++ b/patches/user32-rawinput-mouse/0002-winex11.drv-Support-XInput2-events-for-individual-wi.patch @@ -1,4 +1,4 @@ -From 76aacbedda940eb85cbb98ea7207adcedcd039d8 Mon Sep 17 00:00:00 2001 +From 7d60bf3ed45a7ad0d08fa94f3f28c0ca499c8641 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 23 Jan 2020 11:00:19 +0100 Subject: [PATCH] winex11.drv: Support XInput2 events for individual windows. @@ -8,13 +8,13 @@ which can bring additional information. --- dlls/winex11.drv/desktop.c | 2 ++ dlls/winex11.drv/event.c | 7 +++++ - dlls/winex11.drv/mouse.c | 59 +++++++++++++++++++++++++++----------- + dlls/winex11.drv/mouse.c | 58 +++++++++++++++++++++++++++----------- dlls/winex11.drv/window.c | 3 ++ dlls/winex11.drv/x11drv.h | 12 +++++++- - 5 files changed, 66 insertions(+), 17 deletions(-) + 5 files changed, 65 insertions(+), 17 deletions(-) diff --git a/dlls/winex11.drv/desktop.c b/dlls/winex11.drv/desktop.c -index 168029367d3..7a8fb70059e 100644 +index 8a5682c1acb..6a5770c7671 100644 --- a/dlls/winex11.drv/desktop.c +++ b/dlls/winex11.drv/desktop.c @@ -379,6 +379,8 @@ BOOL X11DRV_CreateDesktop( const WCHAR *name, UINT width, UINT height ) @@ -27,7 +27,7 @@ index 168029367d3..7a8fb70059e 100644 X11DRV_init_desktop( win, width, height ); diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c -index b33fd6e0390..af96c10bbab 100644 +index 2d46d516c69..d56634104e1 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -235,6 +235,13 @@ static Bool filter_event( Display *display, XEvent *event, char *arg ) @@ -45,7 +45,7 @@ index b33fd6e0390..af96c10bbab 100644 case MotionNotify: case EnterNotify: diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c -index f9cf4a33255..edde25b7b43 100644 +index 41cb1de8bbb..23b12a81215 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -305,20 +305,32 @@ void x11drv_xinput_init(void) @@ -176,17 +176,16 @@ index f9cf4a33255..edde25b7b43 100644 NtUserDestroyWindow( msg_hwnd ); return FALSE; } -@@ -533,7 +560,7 @@ LRESULT clip_cursor_notify( HWND hwnd, HWND prev_clip_hwnd, HWND new_clip_hwnd ) - TRACE( "clip hwnd reset from %p\n", hwnd ); - data->clip_hwnd = 0; - data->clip_reset = NtGetTickCount(); -- disable_xinput2(); -+ x11drv_xinput_disable( data->display, DefaultRootWindow( data->display ), PointerMotionMask ); - NtUserDestroyWindow( hwnd ); - } - else if (prev_clip_hwnd) +@@ -483,7 +510,6 @@ static void ungrab_clipping_window(void) + clipping_cursor = FALSE; + NtUserDestroyWindow( data->clip_hwnd ); + data->clip_hwnd = 0; +- disable_xinput2(); + } + + /*********************************************************************** diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c -index 63827aa1aa6..39aff46c864 100644 +index facf4f88e17..b3e42548f12 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -362,6 +362,7 @@ static void sync_window_style( struct x11drv_win_data *data ) @@ -214,7 +213,7 @@ index 63827aa1aa6..39aff46c864 100644 NtUserSetProp( hwnd, clip_window_prop, (HANDLE)data->clip_window ); X11DRV_DisplayDevices_RegisterEventHandlers(); diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h -index 5d176a9ef14..5666cd26434 100644 +index 57dc9fdeb3c..c3f58f49b7d 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -264,6 +264,8 @@ extern void X11DRV_ThreadDetach(void) DECLSPEC_HIDDEN; @@ -241,9 +240,9 @@ index 5d176a9ef14..5666cd26434 100644 struct x11drv_thread_data { Display *display; -@@ -395,7 +405,7 @@ struct x11drv_thread_data +@@ -394,7 +404,7 @@ struct x11drv_thread_data + Window clip_window; /* window used for cursor clipping */ HWND clip_hwnd; /* message window stored in desktop while clipping is active */ - DWORD clip_reset; /* time when clipping was last reset */ #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H - enum { xi_unavailable = -1, xi_unknown, xi_disabled, xi_enabled } xi2_state; /* XInput2 state */ + enum xi2_state xi2_state; /* XInput2 state */ diff --git a/patches/user32-rawinput-mouse/0003-winex11.drv-Advertise-XInput2-version-2.1-support.patch b/patches/user32-rawinput-mouse/0003-winex11.drv-Advertise-XInput2-version-2.1-support.patch index dfe78d2a..1870ad4e 100644 --- a/patches/user32-rawinput-mouse/0003-winex11.drv-Advertise-XInput2-version-2.1-support.patch +++ b/patches/user32-rawinput-mouse/0003-winex11.drv-Advertise-XInput2-version-2.1-support.patch @@ -1,4 +1,4 @@ -From c49e3afea43630cefb5c8ee9012b2ffd48a819e5 Mon Sep 17 00:00:00 2001 +From 0df09be29ae67643b6a08986fa88bcee2026cd48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Sun, 24 Oct 2021 22:30:56 +0200 Subject: [PATCH] winex11.drv: Advertise XInput2 version 2.1 support. @@ -22,10 +22,10 @@ device events only and get rid of slave device id tracking. 2 files changed, 5 insertions(+), 40 deletions(-) diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c -index ea5e34059ec..b9ff9f38014 100644 +index 608142a32e6..2d4453e320a 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c -@@ -284,7 +284,7 @@ void x11drv_xinput_init(void) +@@ -285,7 +285,7 @@ void x11drv_xinput_init(void) { #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H struct x11drv_thread_data *data = x11drv_thread_data(); @@ -34,7 +34,7 @@ index ea5e34059ec..b9ff9f38014 100644 if (data->xi2_state != xi_unknown) return; -@@ -297,7 +297,7 @@ void x11drv_xinput_init(void) +@@ -298,7 +298,7 @@ void x11drv_xinput_init(void) else { data->xi2_state = xi_unavailable; @@ -43,7 +43,7 @@ index ea5e34059ec..b9ff9f38014 100644 } #endif } -@@ -333,7 +333,7 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask ) +@@ -334,7 +334,7 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask ) mask.mask = mask_bits; mask.mask_len = sizeof(mask_bits); @@ -52,7 +52,7 @@ index ea5e34059ec..b9ff9f38014 100644 memset( mask_bits, 0, sizeof(mask_bits) ); XISetMask( mask_bits, XI_DeviceChanged ); XISetMask( mask_bits, XI_RawMotion ); -@@ -346,16 +346,6 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask ) +@@ -347,16 +347,6 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask ) update_relative_valuators( pointer_info->classes, pointer_info->num_classes ); pXIFreeDeviceInfo( pointer_info ); @@ -69,7 +69,7 @@ index ea5e34059ec..b9ff9f38014 100644 data->xi2_state = xi_enabled; } -@@ -388,19 +378,16 @@ void x11drv_xinput_disable( Display *display, Window window, long event_mask ) +@@ -389,19 +379,16 @@ void x11drv_xinput_disable( Display *display, Window window, long event_mask ) mask.mask = NULL; mask.mask_len = 0; @@ -90,7 +90,7 @@ index ea5e34059ec..b9ff9f38014 100644 data->xi2_state = xi_disabled; #endif } -@@ -1860,7 +1847,6 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev ) +@@ -1736,7 +1723,6 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev ) if (event->reason != XISlaveSwitch) return FALSE; update_relative_valuators( event->classes, event->num_classes ); @@ -98,7 +98,7 @@ index ea5e34059ec..b9ff9f38014 100644 return TRUE; } -@@ -1876,25 +1862,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input ) +@@ -1752,25 +1738,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input ) if (x->number < 0 || y->number < 0) return FALSE; if (!event->valuators.mask_len) return FALSE; if (thread_data->xi2_state != xi_enabled) return FALSE; @@ -126,11 +126,11 @@ index ea5e34059ec..b9ff9f38014 100644 virtual_rect = NtUserGetVirtualScreenRect(); diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h -index 344625aff71..3e4d49d3dcf 100644 +index c3f58f49b7d..225b1534159 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h -@@ -394,12 +394,9 @@ struct x11drv_thread_data - DWORD clip_reset; /* time when clipping was last reset */ +@@ -405,12 +405,9 @@ struct x11drv_thread_data + HWND clip_hwnd; /* message window stored in desktop while clipping is active */ #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H enum xi2_state xi2_state; /* XInput2 state */ - void *xi2_devices; /* list of XInput2 devices (valid when state is enabled) */ @@ -143,5 +143,5 @@ index 344625aff71..3e4d49d3dcf 100644 }; -- -2.35.1 +2.40.1 diff --git a/patches/user32-rawinput-mouse/0004-winex11.drv-Keep-track-of-pointer-and-device-button-.patch b/patches/user32-rawinput-mouse/0004-winex11.drv-Keep-track-of-pointer-and-device-button-.patch index 44feeb66..66b6ac18 100644 --- a/patches/user32-rawinput-mouse/0004-winex11.drv-Keep-track-of-pointer-and-device-button-.patch +++ b/patches/user32-rawinput-mouse/0004-winex11.drv-Keep-track-of-pointer-and-device-button-.patch @@ -1,4 +1,4 @@ -From a09b36f783354e7cdd1e44fc57195b0136c8b2fd Mon Sep 17 00:00:00 2001 +From 1bcdd8784df9149082a1686bb1a346a0d2f5bd28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 19 Dec 2019 22:34:44 +0100 Subject: [PATCH] winex11.drv: Keep track of pointer and device button @@ -16,7 +16,7 @@ Original patch by Andrew Eikum . 4 files changed, 106 insertions(+), 8 deletions(-) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c -index b1c47d5258e..c6a167dc4c6 100644 +index 195cc65eddb..83169a9bb4d 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -1811,13 +1811,24 @@ BOOL X11DRV_MappingNotify( HWND dummy, XEvent *event ) @@ -51,7 +51,7 @@ index b1c47d5258e..c6a167dc4c6 100644 } diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c -index 00c55802245..e25b3e7728a 100644 +index 2d4453e320a..abf14ac55b4 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -30,6 +30,9 @@ @@ -150,7 +150,7 @@ index 00c55802245..e25b3e7728a 100644 #ifdef HAVE_X11_EXTENSIONS_XINPUT2_H /*********************************************************************** * update_relative_valuators -@@ -1876,6 +1951,8 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev ) +@@ -1723,6 +1798,8 @@ static BOOL X11DRV_DeviceChanged( XGenericEventCookie *xev ) if (event->reason != XISlaveSwitch) return FALSE; update_relative_valuators( event->classes, event->num_classes ); @@ -159,7 +159,7 @@ index 00c55802245..e25b3e7728a 100644 return TRUE; } -@@ -1963,13 +2040,12 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev ) +@@ -1810,13 +1887,12 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev ) #endif /* HAVE_X11_EXTENSIONS_XINPUT2_H */ @@ -174,7 +174,7 @@ index 00c55802245..e25b3e7728a 100644 int event, error; void *libxi_handle = dlopen( SONAME_LIBXI, RTLD_NOW ); -@@ -1985,11 +2061,20 @@ void x11drv_xinput_load(void) +@@ -1832,11 +1908,20 @@ void x11drv_xinput_load(void) return; \ } @@ -196,11 +196,11 @@ index 00c55802245..e25b3e7728a 100644 xinput2_available = XQueryExtension( gdi_display, "XInputExtension", &xinput2_opcode, &event, &error ); diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h -index 7fcb9300ba0..38cacb4d3d4 100644 +index 225b1534159..29c7259134a 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h -@@ -702,6 +702,7 @@ extern void retry_grab_clipping_window(void) DECLSPEC_HIDDEN; - extern BOOL clip_fullscreen_window( HWND hwnd, BOOL reset ) DECLSPEC_HIDDEN; +@@ -695,6 +695,7 @@ extern void sync_window_cursor( Window window ) DECLSPEC_HIDDEN; + extern void retry_grab_clipping_window(void) DECLSPEC_HIDDEN; extern void move_resize_window( HWND hwnd, int dir ) DECLSPEC_HIDDEN; extern void X11DRV_InitKeyboard( Display *display ) DECLSPEC_HIDDEN; +extern void X11DRV_InitMouse( Display *display ) DECLSPEC_HIDDEN; @@ -208,10 +208,10 @@ index 7fcb9300ba0..38cacb4d3d4 100644 extern HWND *build_hwnd_list(void) DECLSPEC_HIDDEN; diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c -index 6457c0a0b93..e449530749e 100644 +index 2691f40d750..fbff380c2b0 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c -@@ -708,6 +708,7 @@ static NTSTATUS x11drv_init( void *arg ) +@@ -705,6 +705,7 @@ static NTSTATUS x11drv_init( void *arg ) XkbUseExtension( gdi_display, NULL, NULL ); X11DRV_InitKeyboard( gdi_display ); @@ -220,5 +220,5 @@ index 6457c0a0b93..e449530749e 100644 init_user_driver(); -- -2.40.0 +2.40.1 diff --git a/patches/user32-rawinput-mouse/definition b/patches/user32-rawinput-mouse/definition index dc3fe9f3..4b047660 100644 --- a/patches/user32-rawinput-mouse/definition +++ b/patches/user32-rawinput-mouse/definition @@ -1,2 +1,3 @@ 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 + diff --git a/patches/user32-recursive-activation/0001-user32-focus-Prevent-a-recursive-loop-with-the-activ.patch b/patches/user32-recursive-activation/0001-user32-focus-Prevent-a-recursive-loop-with-the-activ.patch index 2c5d3456..159bcf8b 100644 --- a/patches/user32-recursive-activation/0001-user32-focus-Prevent-a-recursive-loop-with-the-activ.patch +++ b/patches/user32-recursive-activation/0001-user32-focus-Prevent-a-recursive-loop-with-the-activ.patch @@ -1,4 +1,4 @@ -From 364612d585a26bb8b4b9f8428103585e05f7ee78 Mon Sep 17 00:00:00 2001 +From 8c830f61a85e634b1fc135f6fe90a1dd5e45d158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Iv=C4=83ncescu?= Date: Mon, 22 Jul 2019 15:29:25 +0300 Subject: [PATCH] user32/focus: Prevent a recursive loop with the activation @@ -15,15 +15,15 @@ actually depend on this behavior, so it is needed. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46274 Signed-off-by: Gabriel Ivăncescu --- - dlls/win32u/input.c | 41 ++++++++++++++++++++++++------------ + dlls/win32u/input.c | 42 +++++++++++++++++++++++++----------- dlls/win32u/ntuser_private.h | 1 + - 2 files changed, 29 insertions(+), 13 deletions(-) + 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c -index f3b724e7010..9f89f21059f 100644 +index cbdd4b195d3..241d07cefd2 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c -@@ -1599,7 +1599,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) +@@ -1810,7 +1810,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) { HWND previous = get_active_window(); BOOL ret; @@ -32,8 +32,8 @@ index f3b724e7010..9f89f21059f 100644 CBTACTIVATESTRUCT cbt; if (previous == hwnd) -@@ -1608,16 +1608,24 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) - return TRUE; +@@ -1819,16 +1819,24 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) + goto done; } - /* call CBT hook chain */ @@ -66,7 +66,7 @@ index f3b724e7010..9f89f21059f 100644 } SERVER_START_REQ( set_active_window ) -@@ -1637,7 +1645,11 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) +@@ -1848,7 +1856,11 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) if (send_message( hwnd, WM_QUERYNEWPALETTE, 0, 0 )) send_message_timeout( HWND_BROADCAST, WM_PALETTEISCHANGING, (WPARAM)hwnd, 0, SMTO_ABORTIFHUNG, 2000, FALSE ); @@ -79,7 +79,7 @@ index f3b724e7010..9f89f21059f 100644 } old_thread = previous ? get_window_thread( previous, NULL ) : 0; -@@ -1669,7 +1681,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) +@@ -1880,7 +1892,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) } } @@ -88,28 +88,26 @@ index f3b724e7010..9f89f21059f 100644 { send_message( hwnd, WM_NCACTIVATE, hwnd == NtUserGetForegroundWindow(), (LPARAM)previous ); send_message( hwnd, WM_ACTIVATE, -@@ -1689,12 +1701,15 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) - /* Do not change focus if the window is no more active */ - if (hwnd == info.hwndActive) - { -+ /* this line exists to keep this patch from applying in the wrong place */ - if (!info.hwndFocus || !hwnd || NtUserGetAncestor( info.hwndFocus, GA_ROOT ) != hwnd) - set_focus_window( hwnd ); +@@ -1914,9 +1926,13 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus ) } } -- return TRUE; +clear_flags: + win_set_flags(hwnd, 0, WIN_IS_IN_ACTIVATION); ++ + done: + if (hwnd) clip_fullscreen_window( hwnd, FALSE ); +- return TRUE; ++ + return ret; } /********************************************************************** diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h -index 8287126258e..38ac4498a83 100644 +index b39e38db5d6..4be55209265 100644 --- a/dlls/win32u/ntuser_private.h +++ b/dlls/win32u/ntuser_private.h -@@ -104,6 +104,7 @@ typedef struct tagWND +@@ -100,6 +100,7 @@ typedef struct tagWND #define WIN_NEEDS_SHOW_OWNEDPOPUP 0x0020 /* WM_SHOWWINDOW:SC_SHOW must be sent in the next ShowOwnedPopup call */ #define WIN_CHILDREN_MOVED 0x0040 /* children may have moved, ignore stored positions */ #define WIN_HAS_IME_WIN 0x0080 /* the window has been registered with imm32 */ @@ -118,5 +116,5 @@ index 8287126258e..38ac4498a83 100644 #define WND_OTHER_PROCESS ((WND *)1) /* returned by get_win_ptr on unknown window handles */ #define WND_DESKTOP ((WND *)2) /* returned by get_win_ptr on the desktop window */ -- -2.37.2 +2.40.1 diff --git a/patches/winex11-Fixed-scancodes/0005-winex11-Use-the-user-configured-keyboard-layout-if-a.patch b/patches/winex11-Fixed-scancodes/0005-winex11-Use-the-user-configured-keyboard-layout-if-a.patch index 69834f0b..d26ff39f 100644 --- a/patches/winex11-Fixed-scancodes/0005-winex11-Use-the-user-configured-keyboard-layout-if-a.patch +++ b/patches/winex11-Fixed-scancodes/0005-winex11-Use-the-user-configured-keyboard-layout-if-a.patch @@ -1,4 +1,4 @@ -From 7701298b62301e551fd7514f79f19eabacc66cac Mon Sep 17 00:00:00 2001 +From 4ae28b915b829e0a0e1cd5afa9d91cb2c1f7a149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 6 Jan 2023 08:09:11 +0100 Subject: [PATCH] winex11: Use the user configured keyboard layout if any. @@ -12,7 +12,7 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45605 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c -index 7406aabdf40..4fc502cfe5d 100644 +index a9f172db9df..087026f7d5f 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -931,7 +931,6 @@ static const struct { @@ -94,18 +94,18 @@ index 7406aabdf40..4fc502cfe5d 100644 syms = (keysyms_per_keycode > 4) ? 4 : keysyms_per_keycode; diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h -index 12be88a31c5..653d2fe80e3 100644 +index 8798a49e506..80dbbee3727 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h -@@ -455,6 +455,7 @@ extern BOOL use_system_cursors DECLSPEC_HIDDEN; +@@ -456,6 +456,7 @@ extern BOOL use_primary_selection DECLSPEC_HIDDEN; + extern BOOL use_system_cursors DECLSPEC_HIDDEN; extern BOOL show_systray DECLSPEC_HIDDEN; - extern BOOL grab_pointer DECLSPEC_HIDDEN; extern BOOL grab_fullscreen DECLSPEC_HIDDEN; +extern int keyboard_layout DECLSPEC_HIDDEN; extern BOOL usexcomposite DECLSPEC_HIDDEN; extern BOOL managed_mode DECLSPEC_HIDDEN; extern BOOL decorated_mode DECLSPEC_HIDDEN; -@@ -723,6 +724,7 @@ extern void init_recursive_mutex( pthread_mutex_t *mutex ) DECLSPEC_HIDDEN; +@@ -716,6 +717,7 @@ extern void init_recursive_mutex( pthread_mutex_t *mutex ) DECLSPEC_HIDDEN; /* keyboard.c */ @@ -114,18 +114,18 @@ index 12be88a31c5..653d2fe80e3 100644 #define DEPTH_COUNT 3 diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c -index 751bf2b4449..7056cf6643d 100644 +index e752302b236..05fe0ad8955 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c -@@ -76,6 +76,7 @@ BOOL use_system_cursors = TRUE; +@@ -75,6 +75,7 @@ BOOL use_primary_selection = FALSE; + BOOL use_system_cursors = TRUE; BOOL show_systray = TRUE; - BOOL grab_pointer = TRUE; BOOL grab_fullscreen = FALSE; +int keyboard_layout = -1; BOOL managed_mode = TRUE; BOOL decorated_mode = TRUE; BOOL private_color_map = FALSE; -@@ -578,6 +579,9 @@ static void setup_options(void) +@@ -575,6 +576,9 @@ static void setup_options(void) if (!get_config_key( hkey, appkey, "GrabFullscreen", buffer, sizeof(buffer) )) grab_fullscreen = IS_OPTION_TRUE( buffer[0] ); @@ -136,5 +136,5 @@ index 751bf2b4449..7056cf6643d 100644 if (p) set_reg_string_value( hkey, "KeyboardLayoutList", p, len * sizeof(WCHAR) ); free( p ); -- -2.39.2 +2.40.1 diff --git a/patches/winex11-Fixed-scancodes/0008-winex11-Support-fixed-X11-keycode-to-scancode-conver.patch b/patches/winex11-Fixed-scancodes/0008-winex11-Support-fixed-X11-keycode-to-scancode-conver.patch index 8d73b654..d47ec5ad 100644 --- a/patches/winex11-Fixed-scancodes/0008-winex11-Support-fixed-X11-keycode-to-scancode-conver.patch +++ b/patches/winex11-Fixed-scancodes/0008-winex11-Support-fixed-X11-keycode-to-scancode-conver.patch @@ -1,4 +1,4 @@ -From 0f7681a0db7d45bbd3f76964bfc1d0cfe87cbbfc Mon Sep 17 00:00:00 2001 +From ec9488b146cde690e9015cd1ec442471176c2751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Wed, 30 Nov 2022 18:46:00 +0100 Subject: [PATCH] winex11: Support fixed X11 keycode to scancode conversion. @@ -16,7 +16,7 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45605 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c -index 2fa585d38b6..9a3890424a0 100644 +index 03d24edb44f..caccf34d947 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -66,6 +66,46 @@ static const unsigned int ControlMask = 1 << 2; @@ -66,7 +66,7 @@ index 2fa585d38b6..9a3890424a0 100644 static int NumLockMask, ScrollLockMask, AltGrMask; /* mask in the XKeyEvent state */ static pthread_mutex_t kbd_mutex = PTHREAD_MUTEX_INITIALIZER; -@@ -1742,7 +1782,7 @@ void X11DRV_InitKeyboard( Display *display ) +@@ -1701,7 +1741,7 @@ void X11DRV_InitKeyboard( Display *display ) } TRACE("keycode %u => vkey %04X\n", e2.keycode, vkey); keyc2vkey[e2.keycode] = vkey; @@ -75,7 +75,7 @@ index 2fa585d38b6..9a3890424a0 100644 if ((vkey & 0xff) && vkey_used[(vkey & 0xff)]) WARN("vkey %04X is being used by more than one keycode\n", vkey); vkey_used[(vkey & 0xff)] = 1; -@@ -1853,7 +1893,7 @@ void X11DRV_InitKeyboard( Display *display ) +@@ -1812,7 +1852,7 @@ void X11DRV_InitKeyboard( Display *display ) #undef VKEY_IF_NOT_USED /* If some keys still lack scancodes, assign some arbitrary ones to them now */ @@ -85,11 +85,11 @@ index 2fa585d38b6..9a3890424a0 100644 const char *ksname; keysym = XkbKeycodeToKeysym( display, keyc, 0, 0 ); diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h -index 653d2fe80e3..30a9403f185 100644 +index 80dbbee3727..260dd80de59 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h -@@ -456,6 +456,7 @@ extern BOOL show_systray DECLSPEC_HIDDEN; - extern BOOL grab_pointer DECLSPEC_HIDDEN; +@@ -457,6 +457,7 @@ extern BOOL use_system_cursors DECLSPEC_HIDDEN; + extern BOOL show_systray DECLSPEC_HIDDEN; extern BOOL grab_fullscreen DECLSPEC_HIDDEN; extern int keyboard_layout DECLSPEC_HIDDEN; +extern BOOL keyboard_scancode_detect DECLSPEC_HIDDEN; @@ -97,18 +97,18 @@ index 653d2fe80e3..30a9403f185 100644 extern BOOL managed_mode DECLSPEC_HIDDEN; extern BOOL decorated_mode DECLSPEC_HIDDEN; diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c -index 7056cf6643d..a9c0a150917 100644 +index 05fe0ad8955..802bbae7815 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c -@@ -77,6 +77,7 @@ BOOL show_systray = TRUE; - BOOL grab_pointer = TRUE; +@@ -76,6 +76,7 @@ BOOL use_system_cursors = TRUE; + BOOL show_systray = TRUE; BOOL grab_fullscreen = FALSE; int keyboard_layout = -1; +BOOL keyboard_scancode_detect = TRUE; BOOL managed_mode = TRUE; BOOL decorated_mode = TRUE; BOOL private_color_map = FALSE; -@@ -586,6 +587,9 @@ static void setup_options(void) +@@ -583,6 +584,9 @@ static void setup_options(void) if (p) set_reg_string_value( hkey, "KeyboardLayoutList", p, len * sizeof(WCHAR) ); free( p ); @@ -119,5 +119,5 @@ index 7056cf6643d..a9c0a150917 100644 default_visual.depth = wcstol( buffer, NULL, 0 ); -- -2.39.2 +2.40.1 diff --git a/patches/winex11-Fixed-scancodes/0009-winex11-Disable-keyboard-scancode-auto-detection-by-.patch b/patches/winex11-Fixed-scancodes/0009-winex11-Disable-keyboard-scancode-auto-detection-by-.patch index b50846be..9b8ff1b1 100644 --- a/patches/winex11-Fixed-scancodes/0009-winex11-Disable-keyboard-scancode-auto-detection-by-.patch +++ b/patches/winex11-Fixed-scancodes/0009-winex11-Disable-keyboard-scancode-auto-detection-by-.patch @@ -1,8 +1,7 @@ -From 84b078263007bcc40fb246a75ce7a1bb3ca62d4a Mon Sep 17 00:00:00 2001 +From fea8e9e597fd7b92166b2e78321506b884051d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 6 Jan 2023 11:31:36 +0100 -Subject: [PATCH 9/9] winex11: Disable keyboard scancode auto-detection by - default. +Subject: [PATCH] winex11: Disable keyboard scancode auto-detection by default. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30984 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45605 @@ -12,11 +11,11 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45605 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c -index bbdd5ad7010..6568fcc1c41 100644 +index 802bbae7815..26cf404731b 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c -@@ -80,7 +80,7 @@ BOOL show_systray = TRUE; - BOOL grab_pointer = TRUE; +@@ -76,7 +76,7 @@ BOOL use_system_cursors = TRUE; + BOOL show_systray = TRUE; BOOL grab_fullscreen = FALSE; int keyboard_layout = -1; -BOOL keyboard_scancode_detect = TRUE; @@ -38,5 +37,5 @@ index a9d83b45f00..3ee20d49874 100644 else CheckDlgButton( dialog, IDC_KEYBOARD_SCANCODE_DETECT, BST_UNCHECKED ); free( buffer ); -- -2.39.1 +2.40.1 diff --git a/staging/upstream-commit b/staging/upstream-commit index 8f75b445..4cb7d221 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -68a3b0077e64d1b5232ff75996b82766bcc64ced +c7431990d815e664cf22267142b76cc59f21d192