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

Alexandre Julliard julliard at wine.codeweavers.com
Wed Apr 20 10:36:07 CDT 2016


Module: wine
Branch: master
Commit: 3cc6a1acc31161be0f14d81c588faeb0022e2e6d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3cc6a1acc31161be0f14d81c588faeb0022e2e6d

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Tue Apr 19 12:57:47 2016 -0500

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

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.

Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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)




More information about the wine-cvs mailing list