Revert "user32: Set capture earlier on popup menus."

Vincent Povirk madewokherd at gmail.com
Tue Apr 19 12:57:47 CDT 2016


From: Vincent Povirk <vincent at codeweavers.com>

This reverts commit a9bff001a1e2c919b3f6e68d642abb8da957a2bf.

We can't set capture this early because the popup menu isn't visible
yet. To my knowledge, no applications depend on this, nor did the
next patch in the series. It's only a theoretical issue revealed by
a message test.

For bug 40474.

Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
---
 dlls/user32/menu.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index 7a49ac0..e42d8f7 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -3003,6 +3003,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
     INT executedMenuId = -1;
     MTRACKER mt;
     BOOL enterIdleSent = FALSE;
+    HWND capture_win;
 
     mt.trackFlags = 0;
     mt.hCurrentMenu = hmenu;
@@ -3030,8 +3031,9 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
 
     if (wFlags & TF_ENDMENU) fEndMenu = TRUE;
 
-    if (!(wFlags & TPM_POPUPMENU))
-        set_capture_window( mt.hOwnerWnd, GUI_INMENUMODE, NULL );
+    /* owner may not be visible when tracking a popup, so use the menu itself */
+    capture_win = (wFlags & TPM_POPUPMENU) ? menu->hWnd : mt.hOwnerWnd;
+    set_capture_window( capture_win, GUI_INMENUMODE, NULL );
 
     if ((wFlags & TPM_POPUPMENU) && menu->nItems == 0)
         return FALSE;
@@ -3327,10 +3329,6 @@ static BOOL MENU_InitTracking(HWND hWnd, HMENU hMenu, BOOL bPopup, UINT wFlags)
 
     SendMessageW( hWnd, WM_SETCURSOR, (WPARAM)hWnd, HTCAPTION );
 
-    if (bPopup)
-        /* owner may not be visible when tracking a popup, so use the menu itself */
-        set_capture_window( menu->hWnd, GUI_INMENUMODE, NULL );
-
     if (!(wFlags & TPM_NONOTIFY))
     {
        SendMessageW( hWnd, WM_INITMENU, (WPARAM)hMenu, 0 );
@@ -3484,9 +3482,6 @@ BOOL WINAPI TrackPopupMenuEx( HMENU hMenu, UINT wFlags, INT x, INT y,
         if (MENU_ShowPopup( hWnd, hMenu, 0, wFlags, x, y, 0, 0 ))
             ret = MENU_TrackMenu( hMenu, wFlags | TPM_POPUPMENU, 0, 0, hWnd,
                                   lpTpm ? &lpTpm->rcExclude : NULL );
-
-        set_capture_window( 0, GUI_INMENUMODE, NULL );
-
         MENU_ExitTracking(hWnd, TRUE);
 
         if (menu->hWnd)
-- 
2.5.0




More information about the wine-patches mailing list