Rebase against c7431990d815e664cf22267142b76cc59f21d192.

This commit is contained in:
Alistair Leslie-Hughes 2023-06-13 09:20:03 +10:00
parent 8273be2218
commit 117d2b2107
11 changed files with 92 additions and 216 deletions

View File

@ -1,120 +0,0 @@
From 9229c4fe3078946d7f5fd976b4e2c9f0a5a8ccb1 Mon Sep 17 00:00:00 2001
From: Derek Lesho <dlesho@codeweavers.com>
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

View File

@ -1 +0,0 @@
Fixes: [49583] Implement QueryDisplayConfig

View File

@ -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?= <rbernon@codeweavers.com>
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 */

View File

@ -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?= <rbernon@codeweavers.com>
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

View File

@ -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?= <rbernon@codeweavers.com>
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 <aeikum@codeweavers.com>.
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

View File

@ -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

View File

@ -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?= <gabrielopcode@gmail.com>
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 <gabrielopcode@gmail.com>
---
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

View File

@ -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?= <rbernon@codeweavers.com>
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

View File

@ -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?= <rbernon@codeweavers.com>
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

View File

@ -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?= <rbernon@codeweavers.com>
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

View File

@ -1 +1 @@
68a3b0077e64d1b5232ff75996b82766bcc64ced
c7431990d815e664cf22267142b76cc59f21d192