mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Added patch to fix handling of WM_WINDOWPOS{CHANGING,CHANGED} for deactivated topmost window.
This commit is contained in:
parent
b51fe90caa
commit
5530538a2b
@ -393,6 +393,7 @@ patch_enable_all ()
|
||||
enable_winex11_Clipboard_HTML="$1"
|
||||
enable_winex11_DefaultDisplayFrequency="$1"
|
||||
enable_winex11_SC_KEYMENU="$1"
|
||||
enable_winex11_WM_WINDOWPOSCHANGING="$1"
|
||||
enable_winex11_Window_Groups="$1"
|
||||
enable_winex11_Window_Style="$1"
|
||||
enable_winex11_XEMBED="$1"
|
||||
@ -1369,6 +1370,9 @@ patch_enable ()
|
||||
winex11-SC_KEYMENU)
|
||||
enable_winex11_SC_KEYMENU="$2"
|
||||
;;
|
||||
winex11-WM_WINDOWPOSCHANGING)
|
||||
enable_winex11_WM_WINDOWPOSCHANGING="$2"
|
||||
;;
|
||||
winex11-Window_Groups)
|
||||
enable_winex11_Window_Groups="$2"
|
||||
;;
|
||||
@ -2038,6 +2042,13 @@ if test "$enable_wpcap_Dynamic_Linking" -eq 1; then
|
||||
enable_wpcap_Several_Fixes=1
|
||||
fi
|
||||
|
||||
if test "$enable_winex11_WM_WINDOWPOSCHANGING" -eq 1; then
|
||||
if test "$enable_winex11__NET_ACTIVE_WINDOW" -gt 1; then
|
||||
abort "Patchset winex11-_NET_ACTIVE_WINDOW disabled, but winex11-WM_WINDOWPOSCHANGING depends on that."
|
||||
fi
|
||||
enable_winex11__NET_ACTIVE_WINDOW=1
|
||||
fi
|
||||
|
||||
if test "$enable_wined3d_CSMT_Main" -eq 1; then
|
||||
if test "$enable_wined3d_CSMT_Helper" -gt 1; then
|
||||
abort "Patchset wined3d-CSMT_Helper disabled, but wined3d-CSMT_Main depends on that."
|
||||
@ -8235,6 +8246,42 @@ if test "$enable_winex11_SC_KEYMENU" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset winex11-_NET_ACTIVE_WINDOW
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#2155] Forward activate window requests to WM using _NET_ACTIVE_WINDOW
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/user32/driver.c, dlls/user32/focus.c, dlls/user32/user_private.h, dlls/winex11.drv/event.c,
|
||||
# | dlls/winex11.drv/window.c, dlls/winex11.drv/winex11.drv.spec, dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c
|
||||
# |
|
||||
if test "$enable_winex11__NET_ACTIVE_WINDOW" -eq 1; then
|
||||
patch_apply winex11-_NET_ACTIVE_WINDOW/0001-winex11.drv-Add-support-for-_NET_ACTIVE_WINDOW.patch
|
||||
patch_apply winex11-_NET_ACTIVE_WINDOW/0002-user32-Before-asking-a-WM-to-activate-a-window-make-.patch
|
||||
(
|
||||
echo '+ { "Dmitry Timoshkov", "winex11.drv: Add support for _NET_ACTIVE_WINDOW.", 2 },';
|
||||
echo '+ { "Dmitry Timoshkov", "user32: Before asking a WM to activate a window make sure that the window is in foreground and not minimized.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset winex11-WM_WINDOWPOSCHANGING
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * winex11-_NET_ACTIVE_WINDOW
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#34594] Fix handling of WM_WINDOWPOS{CHANGING,CHANGED} for deactivated topmost window
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/winex11.drv/event.c
|
||||
# |
|
||||
if test "$enable_winex11_WM_WINDOWPOSCHANGING" -eq 1; then
|
||||
patch_apply winex11-WM_WINDOWPOSCHANGING/0001-winex11.drv-Send-WM_WINDOWPOSCHANGING-WM_WINDOWPOSCH.patch
|
||||
(
|
||||
echo '+ { "Dmitry Timoshkov", "winex11.drv: Send WM_WINDOWPOSCHANGING/WM_WINDOWPOSCHANGED messages to a being deactivated topmost window.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset winex11-Window_Groups
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -8277,24 +8324,6 @@ if test "$enable_winex11_XEMBED" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset winex11-_NET_ACTIVE_WINDOW
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#2155] Forward activate window requests to WM using _NET_ACTIVE_WINDOW
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/user32/driver.c, dlls/user32/focus.c, dlls/user32/user_private.h, dlls/winex11.drv/event.c,
|
||||
# | dlls/winex11.drv/window.c, dlls/winex11.drv/winex11.drv.spec, dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c
|
||||
# |
|
||||
if test "$enable_winex11__NET_ACTIVE_WINDOW" -eq 1; then
|
||||
patch_apply winex11-_NET_ACTIVE_WINDOW/0001-winex11.drv-Add-support-for-_NET_ACTIVE_WINDOW.patch
|
||||
patch_apply winex11-_NET_ACTIVE_WINDOW/0002-user32-Before-asking-a-WM-to-activate-a-window-make-.patch
|
||||
(
|
||||
echo '+ { "Dmitry Timoshkov", "winex11.drv: Add support for _NET_ACTIVE_WINDOW.", 2 },';
|
||||
echo '+ { "Dmitry Timoshkov", "user32: Before asking a WM to activate a window make sure that the window is in foreground and not minimized.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset winex11-wglShareLists
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
@ -0,0 +1,46 @@
|
||||
From 59692b046e936dc25ecab6adaf258533a7404635 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 27 Dec 2016 17:45:05 +0800
|
||||
Subject: winex11.drv: Send WM_WINDOWPOSCHANGING/WM_WINDOWPOSCHANGED messages
|
||||
to a being deactivated topmost window.
|
||||
|
||||
---
|
||||
dlls/winex11.drv/event.c | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
|
||||
index bf2cbb07429..e38b76a7274 100644
|
||||
--- a/dlls/winex11.drv/event.c
|
||||
+++ b/dlls/winex11.drv/event.c
|
||||
@@ -593,16 +593,27 @@ static void set_input_focus( struct x11drv_win_data *data )
|
||||
*/
|
||||
static void set_focus( Display *display, HWND hwnd, Time time )
|
||||
{
|
||||
- HWND focus;
|
||||
+ HWND focus, old_active;
|
||||
Window win;
|
||||
GUITHREADINFO threadinfo;
|
||||
|
||||
+ old_active = GetForegroundWindow();
|
||||
+
|
||||
/* prevent recursion */
|
||||
x11drv_thread_data()->active_window = hwnd;
|
||||
|
||||
TRACE( "setting foreground window to %p\n", hwnd );
|
||||
SetForegroundWindow( hwnd );
|
||||
|
||||
+ /* Some applications expect that a being deactivated topmost window
|
||||
+ * receives the WM_WINDOWPOSCHANGING/WM_WINDOWPOSCHANGED messages,
|
||||
+ * and perform some specific actions. Chessmaster is one of such apps.
|
||||
+ * Window Manager keeps a topmost window on top in z-oder, so there is
|
||||
+ * no need to actually do anything, just send the messages.
|
||||
+ */
|
||||
+ if (old_active && (GetWindowLongW( old_active, GWL_EXSTYLE ) & WS_EX_TOPMOST))
|
||||
+ SetWindowPos( old_active, hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER );
|
||||
+
|
||||
threadinfo.cbSize = sizeof(threadinfo);
|
||||
GetGUIThreadInfo(0, &threadinfo);
|
||||
focus = threadinfo.hwndFocus;
|
||||
--
|
||||
2.11.0
|
||||
|
2
patches/winex11-WM_WINDOWPOSCHANGING/definition
Normal file
2
patches/winex11-WM_WINDOWPOSCHANGING/definition
Normal file
@ -0,0 +1,2 @@
|
||||
Fixes: [34594] Fix handling of WM_WINDOWPOS{CHANGING,CHANGED} for deactivated topmost window
|
||||
Depends: winex11-_NET_ACTIVE_WINDOW
|
Loading…
Reference in New Issue
Block a user