Sync to trunk head (r42241)
[reactos.git] / reactos / subsystems / win32 / win32k / ntuser / menu.c
index 4c23b30..3ff3890 100644 (file)
@@ -95,7 +95,7 @@ UserMenuInfo(
 { \
   if((MENU_ITEM_TYPE((MenuItem)->fType) == MF_STRING) && \
            (MenuItem)->Text.Length) { \
-    RtlFreeUnicodeString(&(MenuItem)->Text); \
+    ExFreePoolWithTag((MenuItem)->Text.Buffer, TAG_STRING); \
   } \
 }
 
@@ -220,7 +220,6 @@ IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, BOOL bRecurse)
    }
 
    /* Free memory */
-   if (MenuItem->Text.Buffer) ExFreePool(MenuItem->Text.Buffer);
    ExFreePool(MenuItem);
 
    return TRUE;
@@ -314,6 +313,7 @@ PMENU_OBJECT FASTCALL
 IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
 {
    PMENU_OBJECT Menu;
+   PPROCESSINFO CurrentWin32Process;
 
    Menu = (PMENU_OBJECT)UserCreateObject(
              gHandleTable, Handle,
@@ -347,7 +347,8 @@ IntCreateMenu(PHANDLE Handle, BOOL IsMenuBar)
    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;
 }
@@ -386,7 +387,7 @@ IntCloneMenuItems(PMENU_OBJECT Destination, PMENU_OBJECT Source)
             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);
@@ -417,6 +418,7 @@ IntCloneMenuItems(PMENU_OBJECT Destination, PMENU_OBJECT Source)
 PMENU_OBJECT FASTCALL
 IntCloneMenu(PMENU_OBJECT Source)
 {
+   PPROCESSINFO CurrentWin32Process;
    HANDLE hMenu;
    PMENU_OBJECT Menu;
 
@@ -451,7 +453,8 @@ IntCloneMenu(PMENU_OBJECT Source)
    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);
 
@@ -499,20 +502,6 @@ IntGetMenuInfo(PMENU_OBJECT Menu, PROSMENUINFO lpmi)
    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)
 {
@@ -606,7 +595,7 @@ IntGetMenuItemByFlag(PMENU_OBJECT Menu, UINT uSearchBy, UINT fFlag,
             if(CurItem->fType & MF_POPUP)
             {
                PMENU_OBJECT NewMenu = UserGetMenuObject(CurItem->hSubMenu);
-               if(Menu)
+               if(NewMenu)
                {
                    ret = IntGetMenuItemByFlag(NewMenu, uSearchBy, fFlag,
                                               SubMenu, MenuItem, PrevMenuItem);
@@ -935,7 +924,7 @@ IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
 
    if(!IntSetMenuItemInfo(SubMenu, MenuItem, ItemInfo))
    {
-      ExFreePool(MenuItem);
+      ExFreePoolWithTag(MenuItem, TAG_MENUITEM);
       return FALSE;
    }
 
@@ -1023,6 +1012,7 @@ IntBuildMenuItemList(PMENU_OBJECT MenuObject, PVOID Buffer, ULONG nMax)
          }
          mii.fState = CurItem->fState;
          mii.fType = CurItem->fType;
+         mii.wID = CurItem->wID;
          mii.hbmpChecked = CurItem->hbmpChecked;
          mii.hbmpItem = CurItem->hbmpItem;
          mii.hbmpUnchecked = CurItem->hbmpUnchecked;
@@ -1261,14 +1251,14 @@ co_IntExitTracking(PWINDOW_OBJECT Window, PMENU_OBJECT Menu, BOOL Popup,
 
 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);
 
@@ -1277,7 +1267,7 @@ co_IntTrackPopupMenu(PMENU_OBJECT Menu, PWINDOW_OBJECT Window,
 }
 
 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),
@@ -1294,7 +1284,7 @@ IntSetMenuItemRect(PMENU_OBJECT Menu, UINT Item, BOOL fByPos, RECT *rcRect)
  * 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;
@@ -1322,8 +1312,8 @@ IntCleanupMenus(struct _EPROCESS *Process, PW32PROCESS Win32Process)
    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;
@@ -1331,7 +1321,7 @@ co_InflateRect(LPRECT rect, int dx, int dy)
     rect->bottom += dy;
 }
 
-BOOLEAN STDCALL
+BOOLEAN APIENTRY
 intGetTitleBarInfo(PWINDOW_OBJECT pWindowObject, PTITLEBARINFO bti)
 {
 
@@ -1345,13 +1335,13 @@ 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)
@@ -1392,9 +1382,9 @@ intGetTitleBarInfo(PWINDOW_OBJECT pWindowObject, PTITLEBARINFO bti)
             }
         }
 
-        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)
@@ -1435,7 +1425,7 @@ intGetTitleBarInfo(PWINDOW_OBJECT pWindowObject, PTITLEBARINFO bti)
                 {
                     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;
                 }
@@ -1469,7 +1459,7 @@ intGetTitleBarInfo(PWINDOW_OBJECT pWindowObject, PTITLEBARINFO bti)
  * @implemented
  */
 DWORD
-STDCALL
+APIENTRY
 NtUserBuildMenuItemList(
    HMENU hMenu,
    VOID* Buffer,
@@ -1509,7 +1499,7 @@ CLEANUP:
 /*
  * @implemented
  */
-DWORD STDCALL
+DWORD APIENTRY
 NtUserCheckMenuItem(
    HMENU hMenu,
    UINT uIDCheckItem,
@@ -1563,15 +1553,14 @@ HMENU FASTCALL UserCreateMenu(BOOL PopupMenu)
           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;
 }
 
@@ -1579,7 +1568,7 @@ HMENU FASTCALL UserCreateMenu(BOOL PopupMenu)
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserDeleteMenu(
    HMENU hMenu,
    UINT uPosition,
@@ -1607,7 +1596,7 @@ CLEANUP:
 /*
  * @implemented
  */
-BOOLEAN STDCALL
+BOOLEAN APIENTRY
 NtUserGetTitleBarInfo(
     HWND hwnd,
     PTITLEBARINFO bti)
@@ -1627,19 +1616,19 @@ NtUserGetTitleBarInfo(
         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)
@@ -1647,19 +1636,19 @@ NtUserGetTitleBarInfo(
         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
         }
     }
 
@@ -1697,7 +1686,7 @@ BOOL FASTCALL UserDestroyMenu(HMENU hMenu)
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserDestroyMenu(
    HMENU hMenu)
 {
@@ -1730,7 +1719,7 @@ CLEANUP:
 /*
  * @implemented
  */
-UINT STDCALL
+UINT APIENTRY
 NtUserEnableMenuItem(
    HMENU hMenu,
    UINT uIDEnableItem,
@@ -1759,7 +1748,7 @@ CLEANUP:
 /*
  * @implemented
  */
-DWORD STDCALL
+DWORD APIENTRY
 UserInsertMenuItem(
    HMENU hMenu,
    UINT uItem,
@@ -1818,7 +1807,7 @@ CLEANUP:
 /*
  * @unimplemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserEndMenu(VOID)
 {
    UNIMPLEMENTED
@@ -1830,7 +1819,7 @@ NtUserEndMenu(VOID)
 /*
  * @implemented
  */
-UINT STDCALL
+UINT APIENTRY
 NtUserGetMenuDefaultItem(
    HMENU hMenu,
    UINT fByPos,
@@ -1860,7 +1849,7 @@ CLEANUP:
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserGetMenuBarInfo(
    HWND hwnd,
    LONG idObject,
@@ -1873,7 +1862,7 @@ NtUserGetMenuBarInfo(
    PWINDOW_OBJECT WindowObject;
    HMENU hMenu;
    POINT Offset;
-   RECT Rect;
+   RECTL Rect;
    MENUBARINFO kmbi;
    DECLARE_RETURN(BOOL);
 
@@ -2076,7 +2065,7 @@ CLEANUP:
 /*
  * @unimplemented
  */
-UINT STDCALL
+UINT APIENTRY
 NtUserGetMenuIndex(
    HMENU hMenu,
    UINT wID)
@@ -2090,17 +2079,17 @@ NtUserGetMenuIndex(
 /*
  * @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;
@@ -2133,13 +2122,13 @@ NtUserGetMenuItemRect(
 
    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;
@@ -2165,7 +2154,7 @@ CLEANUP:
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserHiliteMenuItem(
    HWND hWnd,
    HMENU hMenu,
@@ -2264,7 +2253,7 @@ UserMenuInfo(
  * @implemented
  */
 BOOL
-STDCALL
+APIENTRY
 NtUserMenuInfo(
    HMENU hMenu,
    PROSMENUINFO UnsafeMenuInfo,
@@ -2294,7 +2283,7 @@ CLEANUP:
 /*
  * @implemented
  */
-int STDCALL
+int APIENTRY
 NtUserMenuItemFromPoint(
    HWND hWnd,
    HMENU hMenu,
@@ -2320,8 +2309,8 @@ NtUserMenuItemFromPoint(
       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++)
@@ -2421,7 +2410,7 @@ UserMenuItemInfo(
  * @implemented
  */
 BOOL
-STDCALL
+APIENTRY
 NtUserMenuItemInfo(
    HMENU hMenu,
    UINT Item,
@@ -2453,7 +2442,7 @@ CLEANUP:
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserRemoveMenu(
    HMENU hMenu,
    UINT uPosition,
@@ -2483,7 +2472,7 @@ CLEANUP:
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserSetMenuContextHelpId(
    HMENU hMenu,
    DWORD dwContextHelpId)
@@ -2512,7 +2501,7 @@ CLEANUP:
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserSetMenuDefaultItem(
    HMENU hMenu,
    UINT uItem,
@@ -2541,7 +2530,7 @@ CLEANUP:
 /*
  * @implemented
  */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserSetMenuFlagRtoL(
    HMENU hMenu)
 {
@@ -2568,7 +2557,7 @@ CLEANUP:
 /*
  * @unimplemented
  */
-DWORD STDCALL
+DWORD APIENTRY
 NtUserThunkedMenuInfo(
    HMENU hMenu,
    LPCMENUINFO lpcmi)
@@ -2582,7 +2571,7 @@ NtUserThunkedMenuInfo(
 /*
  * @unimplemented
  */
-DWORD STDCALL
+DWORD APIENTRY
 NtUserThunkedMenuItemInfo(
    HMENU hMenu,
    UINT uItem,
@@ -2606,7 +2595,7 @@ NtUserThunkedMenuItemInfo(
  * @implemented
  */
 /* NOTE: unused function */
-BOOL STDCALL
+BOOL APIENTRY
 NtUserTrackPopupMenuEx(
    HMENU hMenu,
    UINT fuFlags,