- protect TRACE against NULL-ptr
- rewrote GetMenuItemID/GetSubMenu to use MENU_FindItem (hmenu=0xffff fix).
diff --git a/controls/menu.c b/controls/menu.c
index abfddaa..0722249 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -2538,7 +2538,8 @@
MTRACKER mt = { 0, hmenu, hmenu, hwnd, {x, y} }; /* control struct */
TRACE(menu,"hmenu=0x%04x flags=0x%08x (%d,%d) hwnd=0x%04x (%d,%d)-(%d,%d)\n",
- hmenu, wFlags, x, y, hwnd, lprect->left, lprect->top, lprect->right, lprect->bottom);
+ hmenu, wFlags, x, y, hwnd, (lprect) ? lprect->left : 0, (lprect) ? lprect->top : 0,
+ (lprect) ? lprect->right : 0, (lprect) ? lprect->bottom : 0);
fEndMenu = FALSE;
if (!(menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu ))) return FALSE;
@@ -2718,6 +2719,7 @@
}
ReleaseCapture();
+
if( IsWindow( mt.hOwnerWnd ) )
{
MENU_HideSubPopups( mt.hOwnerWnd, mt.hTopMenu, FALSE );
@@ -3278,35 +3280,27 @@
return menu->nItems;
}
-
/**********************************************************************
* GetMenuItemID16 (USER.264)
*/
UINT16 WINAPI GetMenuItemID16( HMENU16 hMenu, INT16 nPos )
{
- LPPOPUPMENU menu;
-
- if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return -1;
- if ((nPos < 0) || ((UINT16) nPos >= menu->nItems)) return -1;
- if (menu->items[nPos].fType & MF_POPUP) return -1;
- return menu->items[nPos].wID;
+ return (UINT16) GetMenuItemID (hMenu, nPos);
}
-
/**********************************************************************
* GetMenuItemID32 (USER32.263)
*/
UINT WINAPI GetMenuItemID( HMENU hMenu, INT nPos )
{
- LPPOPUPMENU menu;
+ MENUITEM * lpmi;
- if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return -1;
- if ((nPos < 0) || (nPos >= menu->nItems)) return -1;
- if (menu->items[nPos].fType & MF_POPUP) return -1;
- return menu->items[nPos].wID;
+ if (!(lpmi = MENU_FindItem(&hMenu,&nPos,MF_BYPOSITION))) return 0;
+ if (lpmi->fType & MF_POPUP) return -1;
+ return lpmi->wID;
+
}
-
/*******************************************************************
* InsertMenu16 (USER.410)
*/
@@ -3857,12 +3851,11 @@
*/
HMENU WINAPI GetSubMenu( HMENU hMenu, INT nPos )
{
- LPPOPUPMENU lppop;
+ MENUITEM * lpmi;
- if (!(lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return 0;
- if ((UINT)nPos >= lppop->nItems) return 0;
- if (!(lppop->items[nPos].fType & MF_POPUP)) return 0;
- return lppop->items[nPos].hSubMenu;
+ if (!(lpmi = MENU_FindItem(&hMenu,&nPos,MF_BYPOSITION))) return 0;
+ if (!(lpmi->fType & MF_POPUP)) return 0;
+ return lpmi->hSubMenu;
}
@@ -4299,7 +4292,7 @@
}
/**********************************************************************
- * GetMenuDefaultItem32 (USER32.260)
+ * GetMenuDefaultItem (USER32.260)
*/
UINT WINAPI GetMenuDefaultItem(HMENU hmenu, UINT bypos, UINT flags)
{