IntRemoveMenuItem( PMENU pMenu, UINT nPos, UINT wFlags, BOOL bRecurse )
{
PITEM item;
+ PITEM newItems;
TRACE("(menu=%p pos=%04x flags=%04x)\n",pMenu, nPos, wFlags);
if (!(item = MENU_FindItem( &pMenu, &nPos, wFlags ))) return FALSE;
}
else
{
- while(nPos < pMenu->cItems)
- {
- *item = *(item+1);
- item++;
- nPos++;
- }
- pMenu->rgItems = DesktopHeapReAlloc(pMenu->head.rpdesk, pMenu->rgItems, pMenu->cItems * sizeof(ITEM));
+ while (nPos < pMenu->cItems)
+ {
+ *item = *(item+1);
+ item++;
+ nPos++;
+ }
+ newItems = DesktopHeapReAlloc(pMenu->head.rpdesk, pMenu->rgItems, pMenu->cItems * sizeof(ITEM));
+ if (newItems)
+ {
+ pMenu->rgItems = newItems;
+ }
}
return TRUE;
}
if(!Source->cItems)
return FALSE;
- NewMenuItem = DesktopHeapAlloc(Destination->head.rpdesk, (Source->cItems+1) * sizeof(ITEM));
+ NewMenuItem = DesktopHeapAlloc(Destination->head.rpdesk, Source->cItems * sizeof(ITEM));
if(!NewMenuItem) return FALSE;
- RtlZeroMemory(NewMenuItem, (Source->cItems+1) * sizeof(ITEM));
+ RtlZeroMemory(NewMenuItem, Source->cItems * sizeof(ITEM));
Destination->rgItems = NewMenuItem;
NewMenuItem->Xlpstr = NewMenuItem->lpstr.Buffer;
}
NewMenuItem->hbmp = MenuItem->hbmp;
+ Destination->cItems = i + 1;
}
return TRUE;
}
Menu->spwndNotify = NULL;
Menu->cyMenu = 0;
Menu->cxMenu = 0;
- Menu->cItems = Source->cItems;
+ Menu->cItems = 0;
Menu->iTop = 0;
Menu->iMaxTop = 0;
Menu->cxTextAlign = 0;
if (!(lpitem->fState & MF_HILITE) )
{
++rect.left; ++rect.top; ++rect.right; ++rect.bottom;
- IntGdiSetTextColor(hdc, RGB(0xff, 0xff, 0xff));
+ IntGdiSetTextColor(hdc, IntGetSysColor(COLOR_BTNHIGHLIGHT));
DrawTextW( hdc, Text, i, &rect, uFormat );
--rect.left; --rect.top; --rect.right; --rect.bottom;
}
- IntGdiSetTextColor(hdc, RGB(0x80, 0x80, 0x80));
+ IntGdiSetTextColor(hdc, IntGetSysColor(COLOR_BTNSHADOW));
}
DrawTextW( hdc, Text, i, &rect, uFormat);
if (!(lpitem->fState & MF_HILITE) )
{
++rect.left; ++rect.top; ++rect.right; ++rect.bottom;
- IntGdiSetTextColor(hdc, RGB(0xff, 0xff, 0xff));
+ IntGdiSetTextColor(hdc, IntGetSysColor(COLOR_BTNHIGHLIGHT));
DrawTextW( hdc, Text + i + 1, -1, &rect, uFormat);
--rect.left; --rect.top; --rect.right; --rect.bottom;
}
- IntGdiSetTextColor(hdc, RGB(0x80, 0x80, 0x80));
+ IntGdiSetTextColor(hdc, IntGetSysColor(COLOR_BTNSHADOW));
}
DrawTextW( hdc, Text + i + 1, -1, &rect, uFormat );
}
}
Wnd->fnid = FNID_MENU;
pPopupMenu = DesktopHeapAlloc( Wnd->head.rpdesk, sizeof(POPUPMENU) );
+ if (pPopupMenu == NULL)
+ {
+ return TRUE;
+ }
pPopupMenu->posSelectedItem = NO_SELECTED_ITEM;
pPopupMenu->spwndPopupMenu = Wnd;
((PMENUWND)Wnd)->ppopupmenu = pPopupMenu;
if (!hNewMenu)
{
ERR("No Menu!!\n");
- IntReleaseMenuObject(SysMenu);
- UserDestroyMenu(hSysMenu);
+ IntDestroyMenuObject(SysMenu, FALSE);
return NULL;
}
Menu = UserGetMenuObject(hNewMenu);
if (!Menu)
{
- IntReleaseMenuObject(SysMenu);
- UserDestroyMenu(hSysMenu);
+ IntDestroyMenuObject(SysMenu, FALSE);
return NULL;
}
IntMenuItemInfo(Menu, SC_MINIMIZE, FALSE, &ItemInfoSet, TRUE, NULL);
NewMenu = IntCloneMenu(Menu);
+ if (NewMenu == NULL)
+ {
+ IntDestroyMenuObject(Menu, FALSE);
+ IntDestroyMenuObject(SysMenu, FALSE);
+ return NULL;
+ }
IntReleaseMenuObject(NewMenu);
UserSetMenuDefaultItem(NewMenu, SC_CLOSE, FALSE);