[0.4.14][EXPLORER] Send WM_POPUPSYSTEMMENU asynchronously (#4047) CORE-16353
authorJoachim Henze <Joachim.Henze@reactos.org>
Fri, 22 Oct 2021 16:58:21 +0000 (18:58 +0200)
committerJoachim Henze <Joachim.Henze@reactos.org>
Fri, 22 Oct 2021 16:58:21 +0000 (18:58 +0200)
- 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.

Fix picked from 0.4.15-dev-3297-g 037c744eb15e464c0d92e352e00260100c785979

base/shell/explorer/taskswnd.cpp

index 17d11e2..9456186 100644 (file)
@@ -1625,6 +1625,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)
     {
@@ -1635,14 +1640,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)