Rebase against 6a966678e89c0c2090b7684a1c2ebfb0a295b9a8.

This commit is contained in:
Elizabeth Figura
2025-11-17 16:36:15 -06:00
parent 0229597809
commit 4741f1abc6
3 changed files with 14 additions and 131 deletions

View File

@@ -1,4 +1,4 @@
From 2f2480806c4c431aeb75308e570a317da43f3508 Mon Sep 17 00:00:00 2001
From 26240eeb2925918d8c75a251fde5fd5ed9f9bfcf 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
@@ -20,10 +20,10 @@ Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
2 files changed, 30 insertions(+), 13 deletions(-)
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index a4834b740d8..123a0ff9a94 100644
index f431ab98a9f..9e07052d612 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -1966,7 +1966,7 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
@@ -1992,7 +1992,7 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
{
HWND previous = get_active_window();
BOOL ret;
@@ -32,7 +32,7 @@ index a4834b740d8..123a0ff9a94 100644
CBTACTIVATESTRUCT cbt;
if (previous == hwnd)
@@ -1975,16 +1975,24 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
@@ -2001,16 +2001,24 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
goto done;
}
@@ -48,7 +48,7 @@ index a4834b740d8..123a0ff9a94 100644
{
- send_message( previous, WM_NCACTIVATE, FALSE, (LPARAM)hwnd );
- send_message( previous, WM_ACTIVATE,
- MAKEWPARAM( WA_INACTIVE, is_iconic(previous) ), (LPARAM)hwnd );
- MAKEWPARAM( WA_INACTIVE, is_iconic(previous) ? 0x20 : 0 ), (LPARAM)hwnd );
+ ret = FALSE;
+
+ /* call CBT hook chain */
@@ -57,16 +57,16 @@ index a4834b740d8..123a0ff9a94 100644
+ if (call_hooks( WH_CBT, HCBT_ACTIVATE, (WPARAM)hwnd, (LPARAM)&cbt, sizeof(cbt) ))
+ goto clear_flags;
+
+ if (is_window(previous))
+ if (is_window( previous ))
+ {
+ send_message( previous, WM_NCACTIVATE, FALSE, (LPARAM)hwnd );
+ send_message( previous, WM_ACTIVATE,
+ MAKEWPARAM( WA_INACTIVE, is_iconic(previous) ), (LPARAM)hwnd );
+ MAKEWPARAM( WA_INACTIVE, is_iconic(previous) ? 0x20 : 0 ), (LPARAM)hwnd );
+ }
}
SERVER_START_REQ( set_active_window )
@@ -2006,7 +2014,11 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
@@ -2032,7 +2040,11 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
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 a4834b740d8..123a0ff9a94 100644
}
old_thread = previous ? get_window_thread( previous, NULL ) : 0;
@@ -2039,7 +2051,7 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
@@ -2065,7 +2077,7 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
}
}
@@ -88,7 +88,7 @@ index a4834b740d8..123a0ff9a94 100644
{
send_message( hwnd, WM_NCACTIVATE, hwnd == NtUserGetForegroundWindow(), (LPARAM)previous );
send_message( hwnd, WM_ACTIVATE,
@@ -2064,13 +2076,17 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
@@ -2090,13 +2102,17 @@ BOOL set_active_window( HWND hwnd, HWND *prev, BOOL mouse, BOOL focus, DWORD new
}
}
@@ -108,10 +108,10 @@ index a4834b740d8..123a0ff9a94 100644
/**********************************************************************
diff --git a/dlls/win32u/ntuser_private.h b/dlls/win32u/ntuser_private.h
index 2f3bbdf91c0..74f5b07bd46 100644
index c38b6d0e029..bec513cfadb 100644
--- a/dlls/win32u/ntuser_private.h
+++ b/dlls/win32u/ntuser_private.h
@@ -92,6 +92,7 @@ typedef struct tagWND
@@ -86,6 +86,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 */
@@ -120,5 +120,5 @@ index 2f3bbdf91c0..74f5b07bd46 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.47.2
2.51.0