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

commit 037c744eb15e464c0d92e352e00260100c785979
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Tue Oct 19 07:17:01 2021 +0900
Commit:     GitHub <[email protected]>
CommitDate: Tue Oct 19 07:17:01 2021 +0900

    [EXPLORER] Send WM_POPUPSYSTEMMENU asynchronously (#4047)
    
    - Delete useless SendMessageTimeout:WM_NULL call.
    - Add useful SendMessageCallbackW:WM_POPUPSYSTEMMENU call.
    - In the callback function of SendMessageCallbackW, do PostMessageW:WM_NULL 
to properly handle the popup menu.
    CORE-16353
---
 base/shell/explorer/taskswnd.cpp | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/base/shell/explorer/taskswnd.cpp b/base/shell/explorer/taskswnd.cpp
index 5d90d36ebc3..d6e6d2a97ac 100644
--- a/base/shell/explorer/taskswnd.cpp
+++ b/base/shell/explorer/taskswnd.cpp
@@ -1630,6 +1630,11 @@ public:
         return FALSE;
     }
 
+    static VOID CALLBACK
+    SendAsyncProc(HWND hwnd, UINT uMsg, DWORD_PTR dwData, LRESULT lResult)
+    {
+        ::PostMessageW(hwnd, WM_NULL, 0, 0);
+    }
 
     VOID HandleTaskItemRightClick(IN OUT PTASK_ITEM TaskItem)
     {
@@ -1640,14 +1645,11 @@ 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));
+        ::SendMessageCallbackW(TaskItem->hWnd, WM_POPUPSYSTEMMENU, 0, 
MAKELPARAM(pt.x, pt.y),
+                               SendAsyncProc, (ULONG_PTR)TaskItem);
     }
 
     VOID HandleTaskGroupRightClick(IN OUT PTASK_GROUP TaskGroup)

Reply via email to