- IntRemoveMenuItem: Fix bug involving deleting item from submenu. (Bug 3292)

- IntFreeMenuItem: Remove code for removing item from list - the only caller that "used" this was IntRemoveMenuItem, which actually removes the item itself.
- IntInsertMenuItemToList, IntEnableMenuItem, IntCheckMenuItem, IntHiliteMenuItem: Simplify some more redundant code.

svn path=/trunk/; revision=35015
This commit is contained in:
Jeffrey Morlan 2008-08-01 17:40:56 +00:00
parent ec8d684215
commit 5f88171864
2 changed files with 30 additions and 99 deletions

View file

@ -50,8 +50,7 @@ IntGetMenuObject(HMENU hMenu);
UserDereferenceObject(MenuObj) UserDereferenceObject(MenuObj)
BOOL FASTCALL BOOL FASTCALL
IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, BOOL bRecurse);
BOOL RemoveFromList, BOOL bRecurse);
BOOL FASTCALL BOOL FASTCALL
IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags, IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags,

View file

@ -206,27 +206,9 @@ IntGetMenuObject(HMENU hMenu)
} }
BOOL FASTCALL BOOL FASTCALL
IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, BOOL bRecurse)
BOOL RemoveFromList, BOOL bRecurse)
{ {
FreeMenuText(MenuItem); FreeMenuText(MenuItem);
if(RemoveFromList)
{
PMENU_ITEM CurItem = Menu->MenuItemList;
while(CurItem)
{
if (CurItem->Next == MenuItem)
{
CurItem->Next = MenuItem->Next;
break;
}
else
{
CurItem = CurItem->Next;
}
}
Menu->MenuInfo.MenuItemCount--;
}
if(bRecurse && MenuItem->hSubMenu) if(bRecurse && MenuItem->hSubMenu)
{ {
PMENU_OBJECT SubMenu; PMENU_OBJECT SubMenu;
@ -249,7 +231,7 @@ IntRemoveMenuItem(PMENU_OBJECT Menu, UINT uPosition, UINT uFlags,
BOOL bRecurse) BOOL bRecurse)
{ {
PMENU_ITEM PrevMenuItem, MenuItem; PMENU_ITEM PrevMenuItem, MenuItem;
if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, NULL, &MenuItem, if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, &Menu, &MenuItem,
&PrevMenuItem) > -1) &PrevMenuItem) > -1)
{ {
if(MenuItem) if(MenuItem)
@ -260,7 +242,8 @@ IntRemoveMenuItem(PMENU_OBJECT Menu, UINT uPosition, UINT uFlags,
{ {
Menu->MenuItemList = MenuItem->Next; Menu->MenuItemList = MenuItem->Next;
} }
return IntFreeMenuItem(Menu, MenuItem, TRUE, bRecurse); Menu->MenuInfo.MenuItemCount--;
return IntFreeMenuItem(Menu, MenuItem, bRecurse);
} }
} }
return FALSE; return FALSE;
@ -275,7 +258,7 @@ IntDeleteMenuItems(PMENU_OBJECT Menu, BOOL bRecurse)
while(CurItem) while(CurItem)
{ {
NextItem = CurItem->Next; NextItem = CurItem->Next;
IntFreeMenuItem(Menu, CurItem, FALSE, bRecurse); IntFreeMenuItem(Menu, CurItem, bRecurse);
CurItem = NextItem; CurItem = NextItem;
res++; res++;
} }
@ -651,56 +634,25 @@ IntInsertMenuItemToList(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, int pos)
UINT npos = 0; UINT npos = 0;
CurItem = Menu->MenuItemList; CurItem = Menu->MenuItemList;
if(pos <= -1) while(CurItem && (pos != 0))
{
while(CurItem)
{
LastItem = CurItem;
CurItem = CurItem->Next;
npos++;
}
}
else
{
while(CurItem && (pos > 0))
{ {
LastItem = CurItem; LastItem = CurItem;
CurItem = CurItem->Next; CurItem = CurItem->Next;
pos--; pos--;
npos++; npos++;
} }
}
if(CurItem)
{
if(LastItem) if(LastItem)
{ {
/* insert the item before CurItem */ /* insert the item after LastItem */
MenuItem->Next = LastItem->Next;
LastItem->Next = MenuItem; LastItem->Next = MenuItem;
} }
else else
{ {
/* insert at the beginning */ /* insert at the beginning */
Menu->MenuItemList = MenuItem; Menu->MenuItemList = MenuItem;
}
MenuItem->Next = CurItem; MenuItem->Next = CurItem;
}
}
else
{
if(LastItem)
{
/* append item */
LastItem->Next = MenuItem;
MenuItem->Next = NULL;
}
else
{
/* insert first item */
Menu->MenuItemList = MenuItem;
MenuItem->Next = NULL;
}
}
Menu->MenuInfo.MenuItemCount++; Menu->MenuInfo.MenuItemCount++;
return npos; return npos;
@ -1011,29 +963,18 @@ IntEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable)
if(uEnable & MF_DISABLED) if(uEnable & MF_DISABLED)
{ {
if(!(MenuItem->fState & MF_DISABLED))
MenuItem->fState |= MF_DISABLED; MenuItem->fState |= MF_DISABLED;
if(uEnable & MF_GRAYED) MenuItem->fState |= uEnable & MF_GRAYED;
{
if(!(MenuItem->fState & MF_GRAYED))
MenuItem->fState |= MF_GRAYED;
}
} }
else else
{ {
if(uEnable & MF_GRAYED) if(uEnable & MF_GRAYED)
{ {
if(!(MenuItem->fState & MF_GRAYED)) MenuItem->fState |= (MF_GRAYED | MF_DISABLED);
MenuItem->fState |= MF_GRAYED;
if(!(MenuItem->fState & MF_DISABLED))
MenuItem->fState |= MF_DISABLED;
} }
else else
{ {
if(MenuItem->fState & MF_DISABLED) MenuItem->fState &= ~(MF_DISABLED | MF_GRAYED);
MenuItem->fState ^= MF_DISABLED;
if(MenuItem->fState & MF_GRAYED)
MenuItem->fState ^= MF_GRAYED;
} }
} }
@ -1155,13 +1096,11 @@ IntCheckMenuItem(PMENU_OBJECT MenuObject, UINT uIDCheckItem, UINT uCheck)
res = (DWORD)(MenuItem->fState & MF_CHECKED); res = (DWORD)(MenuItem->fState & MF_CHECKED);
if(uCheck & MF_CHECKED) if(uCheck & MF_CHECKED)
{ {
if(!(MenuItem->fState & MF_CHECKED))
MenuItem->fState |= MF_CHECKED; MenuItem->fState |= MF_CHECKED;
} }
else else
{ {
if(MenuItem->fState & MF_CHECKED) MenuItem->fState &= ~MF_CHECKED;
MenuItem->fState ^= MF_CHECKED;
} }
return (DWORD)res; return (DWORD)res;
@ -1180,13 +1119,11 @@ IntHiliteMenuItem(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject,
if(uHilite & MF_HILITE) if(uHilite & MF_HILITE)
{ {
if(!(MenuItem->fState & MF_HILITE))
MenuItem->fState |= MF_HILITE; MenuItem->fState |= MF_HILITE;
} }
else else
{ {
if(MenuItem->fState & MF_HILITE) MenuItem->fState &= ~MF_HILITE;
MenuItem->fState ^= MF_HILITE;
} }
/* FIXME - update the window's menu */ /* FIXME - update the window's menu */
@ -1204,8 +1141,7 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos)
{ {
while(MenuItem) while(MenuItem)
{ {
if(MenuItem->fState & MFS_DEFAULT) MenuItem->fState &= ~MFS_DEFAULT;
MenuItem->fState ^= MFS_DEFAULT;
MenuItem = MenuItem->Next; MenuItem = MenuItem->Next;
} }
return TRUE; return TRUE;
@ -1218,14 +1154,12 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos)
{ {
if(pos == uItem) if(pos == uItem)
{ {
if(!(MenuItem->fState & MFS_DEFAULT))
MenuItem->fState |= MFS_DEFAULT; MenuItem->fState |= MFS_DEFAULT;
ret = TRUE; ret = TRUE;
} }
else else
{ {
if(MenuItem->fState & MFS_DEFAULT) MenuItem->fState &= ~MFS_DEFAULT;
MenuItem->fState ^= MFS_DEFAULT;
} }
pos++; pos++;
MenuItem = MenuItem->Next; MenuItem = MenuItem->Next;
@ -1237,14 +1171,12 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos)
{ {
if(!ret && (MenuItem->wID == uItem)) if(!ret && (MenuItem->wID == uItem))
{ {
if(!(MenuItem->fState & MFS_DEFAULT))
MenuItem->fState |= MFS_DEFAULT; MenuItem->fState |= MFS_DEFAULT;
ret = TRUE; ret = TRUE;
} }
else else
{ {
if(MenuItem->fState & MFS_DEFAULT) MenuItem->fState &= ~MFS_DEFAULT;
MenuItem->fState ^= MFS_DEFAULT;
} }
MenuItem = MenuItem->Next; MenuItem = MenuItem->Next;
} }