Rebase against d909f2759066afd128aa1a299d3367c7ab76da8f.

This commit is contained in:
Alistair Leslie-Hughes
2022-07-29 08:38:12 +10:00
parent d3ed71430a
commit 8708356647
7 changed files with 69 additions and 56 deletions

View File

@@ -1,4 +1,4 @@
From c336f99371aaf087b85257de1087b475452f2f84 Mon Sep 17 00:00:00 2001
From bdef98a34241f02651374715cc03f90faef96bc0 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
@@ -21,7 +21,7 @@ Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
3 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index c0a74d8edbe..585ff299142 100644
index 63388e2250e..6ddac9cc7d3 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -5571,7 +5571,7 @@ static void test_messages(void)
@@ -34,10 +34,10 @@ index c0a74d8edbe..585ff299142 100644
if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_MINIMIZE)
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index 28fc5a918c8..b8fd5622468 100644
index a478a549fb2..ac0b51dfd73 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -1547,7 +1547,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
@@ -1569,7 +1569,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
{
HWND previous = get_active_window();
BOOL ret;
@@ -46,7 +46,7 @@ index 28fc5a918c8..b8fd5622468 100644
CBTACTIVATESTRUCT cbt;
if (previous == hwnd)
@@ -1556,16 +1556,24 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
@@ -1578,16 +1578,24 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
return TRUE;
}
@@ -80,7 +80,7 @@ index 28fc5a918c8..b8fd5622468 100644
}
SERVER_START_REQ( set_active_window )
@@ -1585,7 +1593,11 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
@@ -1607,7 +1615,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, NULL, FALSE );
@@ -93,7 +93,7 @@ index 28fc5a918c8..b8fd5622468 100644
}
old_thread = previous ? get_window_thread( previous, NULL ) : 0;
@@ -1617,7 +1629,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
@@ -1639,7 +1651,7 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
}
}
@@ -102,7 +102,7 @@ index 28fc5a918c8..b8fd5622468 100644
{
send_message( hwnd, WM_NCACTIVATE, hwnd == NtUserGetForegroundWindow(), (LPARAM)previous );
send_message( hwnd, WM_ACTIVATE,
@@ -1637,12 +1649,15 @@ static BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus )
@@ -1666,12 +1678,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)
{
@@ -120,17 +120,17 @@ index 28fc5a918c8..b8fd5622468 100644
/**********************************************************************
diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h
index fe9d7e18bc9..e852a0d5aa0 100644
index 3ecd7424f77..cc27526235d 100644
--- a/dlls/win32u/ntuser_private.h
+++ b/dlls/win32u/ntuser_private.h
@@ -121,6 +121,7 @@ typedef struct tagWND
@@ -105,6 +105,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 */
+#define WIN_IS_IN_ACTIVATION 0x0100 /* the window is in an activation process */
#define WND_OTHER_PROCESS ((WND *)1) /* returned by WIN_GetPtr on unknown window handles */
#define WND_DESKTOP ((WND *)2) /* returned by WIN_GetPtr on the desktop window */
#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.34.1
2.35.1