From 3cc6a1acc31161be0f14d81c588faeb0022e2e6d Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Tue, 19 Apr 2016 12:57:47 -0500 Subject: [PATCH] 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 Signed-off-by: Alexandre Julliard --- 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 7a49ac04e66..e42d8f79cf2 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)