{ \
if((MENU_ITEM_TYPE((MenuItem)->fType) == MF_STRING) && \
(MenuItem)->Text.Length) { \
- RtlFreeUnicodeString(&(MenuItem)->Text); \
+ ExFreePoolWithTag((MenuItem)->Text.Buffer, TAG_STRING); \
} \
}
}
BOOL FASTCALL
-IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem,
- BOOL RemoveFromList, BOOL bRecurse)
+IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, BOOL bRecurse)
{
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)
{
PMENU_OBJECT SubMenu;
}
/* Free memory */
- if (MenuItem->Text.Buffer) ExFreePool(MenuItem->Text.Buffer);
ExFreePool(MenuItem);
return TRUE;
BOOL bRecurse)
{
PMENU_ITEM PrevMenuItem, MenuItem;
- if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, NULL, &MenuItem,
+ if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, &Menu, &MenuItem,
&PrevMenuItem) > -1)
{
if(MenuItem)
{
Menu->MenuItemList = MenuItem->Next;
}
- return IntFreeMenuItem(Menu, MenuItem, TRUE, bRecurse);
+ Menu->MenuInfo.MenuItemCount--;
+ return IntFreeMenuItem(Menu, MenuItem, bRecurse);
}
}
return FALSE;
while(CurItem)
{
NextItem = CurItem->Next;
- IntFreeMenuItem(Menu, CurItem, FALSE, bRecurse);
+ IntFreeMenuItem(Menu, CurItem, bRecurse);
CurItem = NextItem;
res++;
}
IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
{
PMENU_OBJECT Menu;
+ PPROCESSINFO CurrentWin32Process;
Menu = (PMENU_OBJECT)UserCreateObject(
gHandleTable, Handle,
Menu->MenuItemList = NULL;
/* Insert menu item into process menu handle list */
- InsertTailList(&PsGetCurrentProcessWin32Process()->MenuListHead, &Menu->ListEntry);
+ CurrentWin32Process = PsGetCurrentProcessWin32Process();
+ InsertTailList(&CurrentWin32Process->MenuListHead, &Menu->ListEntry);
return Menu;
}
NewMenuItem->Text.Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, MenuItem->Text.MaximumLength, TAG_STRING);
if(!NewMenuItem->Text.Buffer)
{
- ExFreePool(NewMenuItem);
+ ExFreePoolWithTag(NewMenuItem, TAG_MENUITEM);
break;
}
RtlCopyUnicodeString(&NewMenuItem->Text, &MenuItem->Text);
PMENU_OBJECT FASTCALL
IntCloneMenu(PMENU_OBJECT Source)
{
+ PPROCESSINFO CurrentWin32Process;
HANDLE hMenu;
PMENU_OBJECT Menu;
Menu->MenuItemList = NULL;
/* Insert menu item into process menu handle list */
- InsertTailList(&PsGetCurrentProcessWin32Process()->MenuListHead, &Menu->ListEntry);
+ CurrentWin32Process = PsGetCurrentProcessWin32Process();
+ InsertTailList(&CurrentWin32Process->MenuListHead, &Menu->ListEntry);
IntCloneMenuItems(Menu, Source);
return TRUE;
}
-
-BOOL FASTCALL
-IntIsMenu(HMENU hMenu)
-{
- PMENU_OBJECT Menu;
-
- if((Menu = UserGetMenuObject(hMenu)))
- {
- return TRUE;
- }
- return FALSE;
-}
-
-
BOOL FASTCALL
IntSetMenuInfo(PMENU_OBJECT Menu, PROSMENUINFO lpmi)
{
if(CurItem->fType & MF_POPUP)
{
PMENU_OBJECT NewMenu = UserGetMenuObject(CurItem->hSubMenu);
- if(Menu)
+ if(NewMenu)
{
ret = IntGetMenuItemByFlag(NewMenu, uSearchBy, fFlag,
SubMenu, MenuItem, PrevMenuItem);
UINT npos = 0;
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;
- CurItem = CurItem->Next;
- pos--;
- npos++;
- }
+ LastItem = CurItem;
+ CurItem = CurItem->Next;
+ pos--;
+ npos++;
}
- if(CurItem)
+ if(LastItem)
{
- if(LastItem)
- {
- /* insert the item before CurItem */
- MenuItem->Next = LastItem->Next;
- LastItem->Next = MenuItem;
- }
- else
- {
- /* insert at the beginning */
- Menu->MenuItemList = MenuItem;
- MenuItem->Next = CurItem;
- }
+ /* insert the item after LastItem */
+ LastItem->Next = MenuItem;
}
else
{
- if(LastItem)
- {
- /* append item */
- LastItem->Next = MenuItem;
- MenuItem->Next = NULL;
- }
- else
- {
- /* insert first item */
- Menu->MenuItemList = MenuItem;
- MenuItem->Next = NULL;
- }
+ /* insert at the beginning */
+ Menu->MenuItemList = MenuItem;
}
+ MenuItem->Next = CurItem;
Menu->MenuInfo.MenuItemCount++;
return npos;
if(!IntSetMenuItemInfo(SubMenu, MenuItem, ItemInfo))
{
- ExFreePool(MenuItem);
+ ExFreePoolWithTag(MenuItem, TAG_MENUITEM);
return FALSE;
}
if(uEnable & MF_DISABLED)
{
- if(!(MenuItem->fState & MF_DISABLED))
- MenuItem->fState |= MF_DISABLED;
- if(uEnable & MF_GRAYED)
- {
- if(!(MenuItem->fState & MF_GRAYED))
- MenuItem->fState |= MF_GRAYED;
- }
+ MenuItem->fState |= MF_DISABLED;
+ MenuItem->fState |= uEnable & MF_GRAYED;
}
else
{
if(uEnable & MF_GRAYED)
{
- if(!(MenuItem->fState & MF_GRAYED))
- MenuItem->fState |= MF_GRAYED;
- if(!(MenuItem->fState & MF_DISABLED))
- MenuItem->fState |= MF_DISABLED;
+ MenuItem->fState |= (MF_GRAYED | MF_DISABLED);
}
else
{
- if(MenuItem->fState & MF_DISABLED)
- MenuItem->fState ^= MF_DISABLED;
- if(MenuItem->fState & MF_GRAYED)
- MenuItem->fState ^= MF_GRAYED;
+ MenuItem->fState &= ~(MF_DISABLED | MF_GRAYED);
}
}
}
mii.fState = CurItem->fState;
mii.fType = CurItem->fType;
+ mii.wID = CurItem->wID;
mii.hbmpChecked = CurItem->hbmpChecked;
mii.hbmpItem = CurItem->hbmpItem;
mii.hbmpUnchecked = CurItem->hbmpUnchecked;
res = (DWORD)(MenuItem->fState & MF_CHECKED);
if(uCheck & MF_CHECKED)
{
- if(!(MenuItem->fState & MF_CHECKED))
- MenuItem->fState |= MF_CHECKED;
+ MenuItem->fState |= MF_CHECKED;
}
else
{
- if(MenuItem->fState & MF_CHECKED)
- MenuItem->fState ^= MF_CHECKED;
+ MenuItem->fState &= ~MF_CHECKED;
}
return (DWORD)res;
if(uHilite & MF_HILITE)
{
- if(!(MenuItem->fState & MF_HILITE))
- MenuItem->fState |= MF_HILITE;
+ MenuItem->fState |= MF_HILITE;
}
else
{
- if(MenuItem->fState & MF_HILITE)
- MenuItem->fState ^= MF_HILITE;
+ MenuItem->fState &= ~MF_HILITE;
}
/* FIXME - update the window's menu */
{
while(MenuItem)
{
- if(MenuItem->fState & MFS_DEFAULT)
- MenuItem->fState ^= MFS_DEFAULT;
+ MenuItem->fState &= ~MFS_DEFAULT;
MenuItem = MenuItem->Next;
}
return TRUE;
{
if(pos == uItem)
{
- if(!(MenuItem->fState & MFS_DEFAULT))
- MenuItem->fState |= MFS_DEFAULT;
+ MenuItem->fState |= MFS_DEFAULT;
ret = TRUE;
}
else
{
- if(MenuItem->fState & MFS_DEFAULT)
- MenuItem->fState ^= MFS_DEFAULT;
+ MenuItem->fState &= ~MFS_DEFAULT;
}
pos++;
MenuItem = MenuItem->Next;
{
if(!ret && (MenuItem->wID == uItem))
{
- if(!(MenuItem->fState & MFS_DEFAULT))
- MenuItem->fState |= MFS_DEFAULT;
+ MenuItem->fState |= MFS_DEFAULT;
ret = TRUE;
}
else
{
- if(MenuItem->fState & MFS_DEFAULT)
- MenuItem->fState ^= MFS_DEFAULT;
+ MenuItem->fState &= ~MFS_DEFAULT;
}
MenuItem = MenuItem->Next;
}
INT FASTCALL
IntTrackMenu(PMENU_OBJECT Menu, PWINDOW_OBJECT Window, INT x, INT y,
- RECT lprect)
+ RECTL lprect)
{
return 0;
}
BOOL FASTCALL
co_IntTrackPopupMenu(PMENU_OBJECT Menu, PWINDOW_OBJECT Window,
- UINT Flags, POINT *Pos, UINT MenuPos, RECT *ExcludeRect)
+ UINT Flags, POINT *Pos, UINT MenuPos, RECTL *ExcludeRect)
{
co_IntInitTracking(Window, Menu, TRUE, Flags);
}
BOOL FASTCALL
-IntSetMenuItemRect(PMENU_OBJECT Menu, UINT Item, BOOL fByPos, RECT *rcRect)
+IntSetMenuItemRect(PMENU_OBJECT Menu, UINT Item, BOOL fByPos, RECTL *rcRect)
{
PMENU_ITEM mi;
if(IntGetMenuItemByFlag(Menu, Item, (fByPos ? MF_BYPOSITION : MF_BYCOMMAND),
* Internal function. Called when the process is destroyed to free the remaining menu handles.
*/
BOOL FASTCALL
-IntCleanupMenus(struct _EPROCESS *Process, PW32PROCESS Win32Process)
+IntCleanupMenus(struct _EPROCESS *Process, PPROCESSINFO Win32Process)
{
PEPROCESS CurrentProcess;
PLIST_ENTRY LastHead = NULL;
return TRUE;
}
-VOID STDCALL
-co_InflateRect(LPRECT rect, int dx, int dy)
+VOID APIENTRY
+co_InflateRect(RECTL *rect, int dx, int dy)
{
rect->left -= dx;
rect->top -= dy;
rect->bottom += dy;
}
-BOOLEAN STDCALL
+BOOLEAN APIENTRY
intGetTitleBarInfo(PWINDOW_OBJECT pWindowObject, PTITLEBARINFO bti)
{
bti->rgstate[0] = STATE_SYSTEM_FOCUSABLE;
- dwStyle = pWindowObject->Wnd->Style;
+ dwStyle = pWindowObject->Wnd->style;
dwExStyle = pWindowObject->Wnd->ExStyle;
bti->rcTitleBar.top = 0;
bti->rcTitleBar.left = 0;
- bti->rcTitleBar.right = pWindowObject->Wnd->WindowRect.right - pWindowObject->Wnd->WindowRect.left;
- bti->rcTitleBar.bottom = pWindowObject->Wnd->WindowRect.bottom - pWindowObject->Wnd->WindowRect.top;
+ bti->rcTitleBar.right = pWindowObject->Wnd->rcWindow.right - pWindowObject->Wnd->rcWindow.left;
+ bti->rcTitleBar.bottom = pWindowObject->Wnd->rcWindow.bottom - pWindowObject->Wnd->rcWindow.top;
/* is it iconiced ? */
if ((dwStyle & WS_ICONIC)!=WS_ICONIC)
}
}
- bti->rcTitleBar.top += pWindowObject->Wnd->WindowRect.top;
- bti->rcTitleBar.left += pWindowObject->Wnd->WindowRect.left;
- bti->rcTitleBar.right += pWindowObject->Wnd->WindowRect.left;
+ bti->rcTitleBar.top += pWindowObject->Wnd->rcWindow.top;
+ bti->rcTitleBar.left += pWindowObject->Wnd->rcWindow.left;
+ bti->rcTitleBar.right += pWindowObject->Wnd->rcWindow.left;
bti->rcTitleBar.bottom = bti->rcTitleBar.top;
if (dwExStyle & WS_EX_TOOLWINDOW)
{
bti->rgstate[4] = STATE_SYSTEM_INVISIBLE;
}
- if (pWindowObject->Wnd->Class->Style & CS_NOCLOSE)
+ if (pWindowObject->Wnd->pcls->style & CS_NOCLOSE)
{
bti->rgstate[5] = STATE_SYSTEM_UNAVAILABLE;
}
* @implemented
*/
DWORD
-STDCALL
+APIENTRY
NtUserBuildMenuItemList(
HMENU hMenu,
VOID* Buffer,
/*
* @implemented
*/
-DWORD STDCALL
+DWORD APIENTRY
NtUserCheckMenuItem(
HMENU hMenu,
UINT uIDCheckItem,
return (HMENU)0;
}
Menu = IntCreateMenu(&Handle, !PopupMenu);
- UserDereferenceObject(Menu);
ObDereferenceObject(WinStaObject);
}
else
{
Menu = IntCreateMenu(&Handle, !PopupMenu);
- UserDereferenceObject(Menu);
}
+ if (Menu) UserDereferenceObject(Menu);
return (HMENU)Handle;
}
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserDeleteMenu(
HMENU hMenu,
UINT uPosition,
/*
* @implemented
*/
-BOOLEAN STDCALL
+BOOLEAN APIENTRY
NtUserGetTitleBarInfo(
HWND hwnd,
PTITLEBARINFO bti)
retValue = FALSE;
}
- _SEH_TRY
+ _SEH2_TRY
{
/* Copy our usermode buffer bti to local buffer bartitleinfo */
ProbeForRead(bti, sizeof(TITLEBARINFO), 1);
RtlCopyMemory(&bartitleinfo, bti, sizeof(TITLEBARINFO));
}
- _SEH_HANDLE
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Fail copy the data */
SetLastWin32Error(ERROR_INVALID_PARAMETER);
retValue = FALSE;
}
- _SEH_END
+ _SEH2_END
/* Get the tile bar info */
if (retValue)
retValue = intGetTitleBarInfo(WindowObject, &bartitleinfo);
if (retValue)
{
- _SEH_TRY
+ _SEH2_TRY
{
/* Copy our buffer to user mode buffer bti */
ProbeForWrite(bti, sizeof(TITLEBARINFO), 1);
RtlCopyMemory(bti, &bartitleinfo, sizeof(TITLEBARINFO));
}
- _SEH_HANDLE
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Fail copy the data */
SetLastWin32Error(ERROR_INVALID_PARAMETER);
retValue = FALSE;
}
- _SEH_END
+ _SEH2_END
}
}
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserDestroyMenu(
HMENU hMenu)
{
/*
* @implemented
*/
-UINT STDCALL
+UINT APIENTRY
NtUserEnableMenuItem(
HMENU hMenu,
UINT uIDEnableItem,
/*
* @implemented
*/
-DWORD STDCALL
+DWORD APIENTRY
UserInsertMenuItem(
HMENU hMenu,
UINT uItem,
/*
* @unimplemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserEndMenu(VOID)
{
UNIMPLEMENTED
/*
* @implemented
*/
-UINT STDCALL
+UINT APIENTRY
NtUserGetMenuDefaultItem(
HMENU hMenu,
UINT fByPos,
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserGetMenuBarInfo(
HWND hwnd,
LONG idObject,
PWINDOW_OBJECT WindowObject;
HMENU hMenu;
POINT Offset;
- RECT Rect;
+ RECTL Rect;
MENUBARINFO kmbi;
DECLARE_RETURN(BOOL);
/*
* @unimplemented
*/
-UINT STDCALL
+UINT APIENTRY
NtUserGetMenuIndex(
HMENU hMenu,
UINT wID)
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserGetMenuItemRect(
HWND hWnd,
HMENU hMenu,
UINT uItem,
- LPRECT lprcItem)
+ PRECTL lprcItem)
{
ROSMENUINFO mi;
PWINDOW_OBJECT ReferenceWnd;
LONG XMove, YMove;
- RECT Rect;
+ RECTL Rect;
NTSTATUS Status;
PMENU_OBJECT Menu;
PMENU_ITEM MenuItem;
if(MenuItem->fType & MF_POPUP)
{
- XMove = ReferenceWnd->Wnd->ClientRect.left;
- YMove = ReferenceWnd->Wnd->ClientRect.top;
+ XMove = ReferenceWnd->Wnd->rcClient.left;
+ YMove = ReferenceWnd->Wnd->rcClient.top;
}
else
{
- XMove = ReferenceWnd->Wnd->WindowRect.left;
- YMove = ReferenceWnd->Wnd->WindowRect.top;
+ XMove = ReferenceWnd->Wnd->rcWindow.left;
+ YMove = ReferenceWnd->Wnd->rcWindow.top;
}
Rect.left += XMove;
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserHiliteMenuItem(
HWND hWnd,
HMENU hMenu,
* @implemented
*/
BOOL
-STDCALL
+APIENTRY
NtUserMenuInfo(
HMENU hMenu,
PROSMENUINFO UnsafeMenuInfo,
/*
* @implemented
*/
-int STDCALL
+int APIENTRY
NtUserMenuItemFromPoint(
HWND hWnd,
HMENU hMenu,
RETURN( -1);
}
- X -= Window->Wnd->WindowRect.left;
- Y -= Window->Wnd->WindowRect.top;
+ X -= Window->Wnd->rcWindow.left;
+ Y -= Window->Wnd->rcWindow.top;
mi = Menu->MenuItemList;
for (i = 0; NULL != mi; i++)
* @implemented
*/
BOOL
-STDCALL
+APIENTRY
NtUserMenuItemInfo(
HMENU hMenu,
UINT Item,
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserRemoveMenu(
HMENU hMenu,
UINT uPosition,
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserSetMenuContextHelpId(
HMENU hMenu,
DWORD dwContextHelpId)
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserSetMenuDefaultItem(
HMENU hMenu,
UINT uItem,
/*
* @implemented
*/
-BOOL STDCALL
+BOOL APIENTRY
NtUserSetMenuFlagRtoL(
HMENU hMenu)
{
/*
* @unimplemented
*/
-DWORD STDCALL
+DWORD APIENTRY
NtUserThunkedMenuInfo(
HMENU hMenu,
LPCMENUINFO lpcmi)
/*
* @unimplemented
*/
-DWORD STDCALL
+DWORD APIENTRY
NtUserThunkedMenuItemInfo(
HMENU hMenu,
UINT uItem,
* @implemented
*/
/* NOTE: unused function */
-BOOL STDCALL
+BOOL APIENTRY
NtUserTrackPopupMenuEx(
HMENU hMenu,
UINT fuFlags,