* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* PURPOSE: Menus
- * FILE: subsys/win32k/ntuser/menu.c
+ * FILE: win32ss/user/ntuser/menu.c
* PROGRAMER: Thomas Weidenmueller (w3seek@users.sourceforge.net)
*/
return pMenu;
}
+BOOL
+FASTCALL
+IntIsMenu(HMENU Menu)
+{
+ if (UserGetMenuObject(Menu)) return TRUE;
+ return FALSE;
+}
+
+
PMENU WINAPI
IntGetMenu(HWND hWnd)
{
if ( (!(GMDI_USEDISABLED & gmdiFlags)) && (MenuItem->fState & MFS_DISABLED )) return -1;
/* search rekursiv when needed */
- if ( (MenuItem->fType & MF_POPUP) && (gmdiFlags & GMDI_GOINTOPOPUPS) && MenuItem->spSubMenu)
+ if ( (gmdiFlags & GMDI_GOINTOPOPUPS) && MenuItem->spSubMenu )
{
UINT ret;
(*gismc)++;
{
if ( (Wnd->style & WS_MINIMIZE))
{
- UserGetInsideRectNC(Wnd, &rect);
+ NC_GetInsideRect(Wnd, &rect);
UserDrawSysMenuButton(Wnd, hdc, &rect, lpitem->fState & (MF_HILITE | MF_MOUSESELECT));
}
return;
** the menu owner has finished drawing.
*/
DRAWITEMSTRUCT dis;
+ COLORREF old_bk, old_text;
dis.CtlType = ODT_MENU;
dis.CtlID = 0;
dis.hDC, dis.rcItem.left, dis.rcItem.top, dis.rcItem.right,
dis.rcItem.bottom);
TRACE("Ownerdraw: Width %d Height %d\n", dis.rcItem.right-dis.rcItem.left, dis.rcItem.bottom-dis.rcItem.top);
+ old_bk = GreGetBkColor(hdc);
+ old_text = GreGetTextColor(hdc);
co_IntSendMessage(UserHMGetHandle(WndOwner), WM_DRAWITEM, 0, (LPARAM) &dis);
+ IntGdiSetBkColor(hdc, old_bk);
+ IntGdiSetTextColor(hdc, old_text);
/* Draw the popup-menu arrow */
- if (lpitem->spSubMenu)
+ if (!menuBar && lpitem->spSubMenu)
{
RECT rectTemp;
RtlCopyMemory(&rectTemp, &rect, sizeof(RECT));
HFONT hfontOld = 0;
PMENU lppop = UserGetMenuObject(UlongToHandle(pWnd->IDMenu));
- if (lppop == NULL || lprect == NULL)
+ if (lppop == NULL)
+ {
+ // No menu. Do not reserve any space
+ return 0;
+ }
+
+ if (lprect == NULL)
{
return UserGetSystemMetrics(SM_CYMENU);
}
if (pItem->spSubMenu)
{
- return (pItem->spSubMenu->cItems << 8) | ((pItem->fState|pItem->fType) & 0xff);
+ return (pItem->spSubMenu->cItems << 8) | ((pItem->fState|pItem->fType|MF_POPUP) & 0xff);
}
else
return (pItem->fType | pItem->fState);
*/
Status = IntValidateWindowStationHandle(CurrentProcess->Win32WindowStation,
- KernelMode,
+ UserMode,
0,
&WinStaObject,
0);
if (!(MenuItem = MENU_FindItem( &Menu, &Item, (ByPosition ? MF_BYPOSITION : MF_BYCOMMAND) )))
{
+ /* workaround for Word 95: pretend that SC_TASKLIST item exists. */
+ if ( SetOrGet && Item == SC_TASKLIST && !ByPosition )
+ return TRUE;
+
EngSetLastError(ERROR_MENU_ITEM_NOT_FOUND);
return( FALSE);
}
/* lpszCaption may be NULL, check for it and call RtlInitUnicodeString()
if bInsert == TRUE call UserInsertMenuItem() else UserSetMenuItemInfo() */
+ RtlInitEmptyUnicodeString(&lstrCaption, NULL, 0);
+
if (!(Menu = UserGetMenuObject(hMenu)))
{
RETURN(FALSE);
}
- RtlInitUnicodeString(&lstrCaption, 0);
-
/* Check if we got a Caption */
if (lpszCaption && lpszCaption->Buffer)
{
RETURN( UserMenuItemInfo(Menu, uItem, fByPosition, (PROSMENUITEMINFO)lpmii, TRUE, &lstrCaption));
CLEANUP:
+ if (lstrCaption.Buffer)
+ {
+ ReleaseCapturedUnicodeString(&lstrCaption, UserMode);
+ }
+
TRACE("Leave NtUserThunkedMenuItemInfo, ret=%i\n",_ret_);
UserLeave();
END_CLEANUP;