user: Fix behavior when selecting disabled menu items.

This commit is contained in:
Thomas Kho 2006-04-26 17:44:56 -07:00 committed by Alexandre Julliard
parent 76104e1ccc
commit b833860579
2 changed files with 14 additions and 8 deletions

View File

@ -2407,7 +2407,7 @@ static HMENU MENU_PtMenu( HMENU hMenu, POINT pt )
* *
* Execute a menu item (for instance when user pressed Enter). * Execute a menu item (for instance when user pressed Enter).
* Return the wID of the executed item. Otherwise, -1 indicating * Return the wID of the executed item. Otherwise, -1 indicating
* that no menu item was executed; * that no menu item was executed, -2 if a popup is shown;
* Have to receive the flags for the TrackPopupMenu options to avoid * Have to receive the flags for the TrackPopupMenu options to avoid
* sending unwanted message. * sending unwanted message.
* *
@ -2444,7 +2444,10 @@ static INT MENU_ExecFocusedItem( MTRACKER* pmt, HMENU hMenu, UINT wFlags )
} }
} }
else else
{
pmt->hCurrentMenu = MENU_ShowSubPopup(pmt->hOwnerWnd, hMenu, TRUE, wFlags); pmt->hCurrentMenu = MENU_ShowSubPopup(pmt->hOwnerWnd, hMenu, TRUE, wFlags);
return -2;
}
return -1; return -1;
} }
@ -2538,7 +2541,10 @@ static INT MENU_ButtonUp( MTRACKER* pmt, HMENU hPtMenu, UINT wFlags)
if( item && (ptmenu->FocusedItem == id )) if( item && (ptmenu->FocusedItem == id ))
{ {
if( !(item->fType & MF_POPUP) ) if( !(item->fType & MF_POPUP) )
return MENU_ExecFocusedItem( pmt, hPtMenu, wFlags); {
INT executedMenuId = MENU_ExecFocusedItem( pmt, hPtMenu, wFlags);
return (executedMenuId < 0) ? -1 : executedMenuId;
}
/* If we are dealing with the top-level menu */ /* If we are dealing with the top-level menu */
/* and this is a click on an already "popped" item: */ /* and this is a click on an already "popped" item: */
@ -3113,7 +3119,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
if (msg.wParam == '\r' || msg.wParam == ' ') if (msg.wParam == '\r' || msg.wParam == ' ')
{ {
executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags); executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags);
fEndMenu = (executedMenuId != -1); fEndMenu = (executedMenuId != -2);
break; break;
} }
@ -3131,7 +3137,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
MENU_SelectItem( mt.hOwnerWnd, mt.hCurrentMenu, pos, MENU_SelectItem( mt.hOwnerWnd, mt.hCurrentMenu, pos,
TRUE, 0 ); TRUE, 0 );
executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags); executedMenuId = MENU_ExecFocusedItem(&mt,mt.hCurrentMenu, wFlags);
fEndMenu = (executedMenuId != -1); fEndMenu = (executedMenuId != -2);
} }
} }
break; break;
@ -3182,7 +3188,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y,
/* The return value is only used by TrackPopupMenu */ /* The return value is only used by TrackPopupMenu */
if (!(wFlags & TPM_RETURNCMD)) return TRUE; if (!(wFlags & TPM_RETURNCMD)) return TRUE;
if (executedMenuId == -1) executedMenuId = 0; if (executedMenuId < 0) executedMenuId = 0;
return executedMenuId; return executedMenuId;
} }

View File

@ -1509,7 +1509,7 @@ static struct menu_mouse_tests_s {
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, /* test 0 */ { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, /* test 0 */
{ INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE },
@ -1517,11 +1517,11 @@ static struct menu_mouse_tests_s {
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, TRUE }, { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE },