From 52a1227b430fb2a392d52fe166bd4d04b690b0a5 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sun, 28 Nov 2010 01:37:16 +0000 Subject: [PATCH] [User32] - Sync up with wine 1.2 rc6 menu so it will pass the tests from rev 47939. svn path=/trunk/; revision=49834 --- reactos/dll/win32/user32/windows/menu.c | 31 +++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/reactos/dll/win32/user32/windows/menu.c b/reactos/dll/win32/user32/windows/menu.c index c9e87de47de..8f8610d64b1 100644 --- a/reactos/dll/win32/user32/windows/menu.c +++ b/reactos/dll/win32/user32/windows/menu.c @@ -3487,14 +3487,23 @@ static BOOL FASTCALL MenuInitTracking(HWND hWnd, HMENU hMenu, BOOL bPopup, UINT HideCaret(0); + MenuGetRosMenuInfo(&MenuInfo, hMenu); + /* This makes the menus of applications built with Delphi work. + * It also enables menus to be displayed in more than one window, + * but there are some bugs left that need to be fixed in this case. + */ + if(MenuInfo.Self == hMenu) + { + MenuInfo.Wnd = hWnd; + MenuSetRosMenuInfo(&MenuInfo); + } + /* Send WM_ENTERMENULOOP and WM_INITMENU message only if TPM_NONOTIFY flag is not specified */ if (!(wFlags & TPM_NONOTIFY)) SendMessageW( hWnd, WM_ENTERMENULOOP, bPopup, 0 ); SendMessageW( hWnd, WM_SETCURSOR, (WPARAM)hWnd, HTCAPTION ); - MenuGetRosMenuInfo(&MenuInfo, hMenu); - if (!(wFlags & TPM_NONOTIFY)) { SendMessageW( hWnd, WM_INITMENU, (WPARAM)hMenu, 0 ); @@ -3512,16 +3521,6 @@ static BOOL FASTCALL MenuInitTracking(HWND hWnd, HMENU hMenu, BOOL bPopup, UINT } } - /* This makes the menus of applications built with Delphi work. - * It also enables menus to be displayed in more than one window, - * but there are some bugs left that need to be fixed in this case. - */ - if(MenuInfo.Self == hMenu) - { - MenuInfo.Wnd = hWnd; - MenuSetRosMenuInfo(&MenuInfo); - } - IntNotifyWinEvent( EVENT_SYSTEM_MENUSTART, hWnd, MenuInfo.Flags & MF_SYSMENU ? OBJID_SYSMENU : OBJID_MENU, @@ -3652,6 +3651,7 @@ BOOL WINAPI TrackPopupMenuEx( HMENU Menu, UINT Flags, int x, int y, HWND Wnd, LPTPMPARAMS Tpm) { BOOL ret = FALSE; + ROSMENUINFO MenuInfo; if (!IsMenu(Menu)) { @@ -3659,6 +3659,13 @@ BOOL WINAPI TrackPopupMenuEx( HMENU Menu, UINT Flags, int x, int y, return FALSE; } + MenuGetRosMenuInfo(&MenuInfo, Menu); + if (IsWindow(MenuInfo.Wnd)) + { + SetLastError( ERROR_POPUP_ALREADY_ACTIVE ); + return FALSE; + } + MenuInitTracking(Wnd, Menu, TRUE, Flags); /* Send WM_INITMENUPOPUP message only if TPM_NONOTIFY flag is not specified */