https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d2976ca58e1409a9b6a2322db1157cc8d9f19fb8

commit d2976ca58e1409a9b6a2322db1157cc8d9f19fb8
Author:     Joachim Henze <[email protected]>
AuthorDate: Fri Sep 20 00:11:10 2019 +0200
Commit:     Joachim Henze <[email protected]>
CommitDate: Fri Sep 20 00:11:10 2019 +0200

    [EXPLORER] Mitigate CORE-15760 'system menu may close unexpectedly'
    
    Looks like a race condition of the async part of SetForegroundWindow().
    
    KVM https://reactos.org/testman/compare.php?ids=69065,69069
    VBOX https://reactos.org/testman/compare.php?ids=69064,69068
    
    I intend to merge that back into 0.4.12RC as well.
---
 base/shell/explorer/taskswnd.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/base/shell/explorer/taskswnd.cpp b/base/shell/explorer/taskswnd.cpp
index 0a5d4db4424..deeb50f2547 100644
--- a/base/shell/explorer/taskswnd.cpp
+++ b/base/shell/explorer/taskswnd.cpp
@@ -1633,6 +1633,13 @@ public:
 
         ActivateTask(TaskItem->hWnd);
 
+       /* Wait up to 2 seconds for the window to process the foreground 
notification. */
+        DWORD_PTR resultDummy;
+        if (!SendMessageTimeout(TaskItem->hWnd, WM_NULL, 0, 0, 0, 2000, 
&resultDummy))
+            ERR("HandleTaskItemRightClick detected the window was unresponsive 
for 2 seconds, or was destroyed\n");
+        if (GetForegroundWindow() != TaskItem->hWnd)
+            ERR("HandleTaskItemRightClick detected the window did not become 
foreground\n");
+
         ::SendMessageW(TaskItem->hWnd, WM_POPUPSYSTEMMENU, 0, MAKELPARAM(pt.x, 
pt.y));
     }
 

Reply via email to