mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 11:22:58 +00:00
[Win32k]
- Moved to new menu structures, synced in wine code and started first phase to server side. Resulting that more tests are running and failing less. Unplugged ntuser bad functions. - See CORE-5605, CORE-7447, CORE-7967, CORE-8098 and CORE-8107 svn path=/trunk/; revision=63027
This commit is contained in:
parent
2a6fbc8f80
commit
9e6fb311ed
9 changed files with 2440 additions and 1617 deletions
|
@ -5,6 +5,7 @@ typedef struct _PROCESSINFO *PPROCESSINFO;
|
||||||
typedef struct _THREADINFO *PTHREADINFO;
|
typedef struct _THREADINFO *PTHREADINFO;
|
||||||
struct _DESKTOP;
|
struct _DESKTOP;
|
||||||
struct _WND;
|
struct _WND;
|
||||||
|
struct tagPOPUPMENU;
|
||||||
|
|
||||||
#define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
|
#define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
|
||||||
#define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
|
#define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
|
||||||
|
@ -313,7 +314,7 @@ typedef struct tagITEM
|
||||||
struct tagMENU* spSubMenu; /* Pop-up menu. */
|
struct tagMENU* spSubMenu; /* Pop-up menu. */
|
||||||
HANDLE hbmpChecked;
|
HANDLE hbmpChecked;
|
||||||
HANDLE hbmpUnchecked;
|
HANDLE hbmpUnchecked;
|
||||||
USHORT* lpstr; /* Item text pointer. */
|
USHORT* Xlpstr; /* Item text pointer. */
|
||||||
ULONG cch;
|
ULONG cch;
|
||||||
DWORD_PTR dwItemData;
|
DWORD_PTR dwItemData;
|
||||||
ULONG xItem; /* Item position. left */
|
ULONG xItem; /* Item position. left */
|
||||||
|
@ -326,6 +327,9 @@ typedef struct tagITEM
|
||||||
HBITMAP hbmp; /* bitmap */
|
HBITMAP hbmp; /* bitmap */
|
||||||
INT cxBmp; /* Width Maximum size of the bitmap items in MIIM_BITMAP state */
|
INT cxBmp; /* Width Maximum size of the bitmap items in MIIM_BITMAP state */
|
||||||
INT cyBmp; /* Height " */
|
INT cyBmp; /* Height " */
|
||||||
|
//// ReactOS
|
||||||
|
UNICODE_STRING lpstr;
|
||||||
|
struct tagITEM *Next;
|
||||||
} ITEM, *PITEM;
|
} ITEM, *PITEM;
|
||||||
|
|
||||||
typedef struct tagMENULIST
|
typedef struct tagMENULIST
|
||||||
|
@ -347,7 +351,7 @@ typedef struct tagMENU
|
||||||
{
|
{
|
||||||
PROCDESKHEAD head;
|
PROCDESKHEAD head;
|
||||||
ULONG fFlags; /* [Style flags | Menu flags] */
|
ULONG fFlags; /* [Style flags | Menu flags] */
|
||||||
INT iItem; /* nPos of selected item, if -1 not selected. */
|
INT iItem; /* nPos of selected item, if -1 not selected. AKA focused item */
|
||||||
UINT cAlloced; /* Number of allocated items. Inc's of 8 */
|
UINT cAlloced; /* Number of allocated items. Inc's of 8 */
|
||||||
UINT cItems; /* Number of items in the menu */
|
UINT cItems; /* Number of items in the menu */
|
||||||
ULONG cxMenu; /* Width of the whole menu */
|
ULONG cxMenu; /* Width of the whole menu */
|
||||||
|
@ -363,8 +367,54 @@ typedef struct tagMENU
|
||||||
INT iTop; /* Current scroll position Top */
|
INT iTop; /* Current scroll position Top */
|
||||||
INT iMaxTop; /* Current scroll position Max Top */
|
INT iMaxTop; /* Current scroll position Max Top */
|
||||||
DWORD dwArrowsOn:2; /* Arrows: 0 off, 1 on, 2 to the top, 3 to the bottom. */
|
DWORD dwArrowsOn:2; /* Arrows: 0 off, 1 on, 2 to the top, 3 to the bottom. */
|
||||||
|
//// ReactOS
|
||||||
|
LIST_ENTRY ListEntry;
|
||||||
|
HWND hWnd; /* Window containing the menu */
|
||||||
|
BOOL TimeToHide;
|
||||||
} MENU, *PMENU;
|
} MENU, *PMENU;
|
||||||
|
|
||||||
|
typedef struct tagPOPUPMENU
|
||||||
|
{
|
||||||
|
ULONG fIsMenuBar:1;
|
||||||
|
ULONG fHasMenuBar:1;
|
||||||
|
ULONG fIsSysMenu:1;
|
||||||
|
ULONG fIsTrackPopup:1;
|
||||||
|
ULONG fDroppedLeft:1;
|
||||||
|
ULONG fHierarchyDropped:1;
|
||||||
|
ULONG fRightButton:1;
|
||||||
|
ULONG fToggle:1;
|
||||||
|
ULONG fSynchronous:1;
|
||||||
|
ULONG fFirstClick:1;
|
||||||
|
ULONG fDropNextPopup:1;
|
||||||
|
ULONG fNoNotify:1;
|
||||||
|
ULONG fAboutToHide:1;
|
||||||
|
ULONG fShowTimer:1;
|
||||||
|
ULONG fHideTimer:1;
|
||||||
|
ULONG fDestroyed:1;
|
||||||
|
ULONG fDelayedFree:1;
|
||||||
|
ULONG fFlushDelayedFree:1;
|
||||||
|
ULONG fFreed:1;
|
||||||
|
ULONG fInCancel:1;
|
||||||
|
ULONG fTrackMouseEvent:1;
|
||||||
|
ULONG fSendUninit:1;
|
||||||
|
ULONG fRtoL:1;
|
||||||
|
// ULONG fDesktopMenu:1;
|
||||||
|
ULONG iDropDir:5;
|
||||||
|
ULONG fUseMonitorRect:1;
|
||||||
|
struct _WND *spwndNotify;
|
||||||
|
struct _WND *spwndPopupMenu;
|
||||||
|
struct _WND *spwndNextPopup;
|
||||||
|
struct _WND *spwndPrevPopup;
|
||||||
|
PMENU spmenu;
|
||||||
|
PMENU spmenuAlternate;
|
||||||
|
struct _WND *spwndActivePopup;
|
||||||
|
struct tagPOPUPMENU *ppopupmenuRoot;
|
||||||
|
struct tagPOPUPMENU *ppmDelayedFree;
|
||||||
|
UINT posSelectedItem;
|
||||||
|
UINT posDropped;
|
||||||
|
} POPUPMENU, *PPOPUPMENU;
|
||||||
|
|
||||||
|
|
||||||
typedef struct _REGISTER_SYSCLASS
|
typedef struct _REGISTER_SYSCLASS
|
||||||
{
|
{
|
||||||
/* This is a reactos specific class used to initialize the
|
/* This is a reactos specific class used to initialize the
|
||||||
|
@ -657,6 +707,12 @@ typedef struct _SBWND
|
||||||
SBCALC SBCalc;
|
SBCALC SBCalc;
|
||||||
} SBWND, *PSBWND;
|
} SBWND, *PSBWND;
|
||||||
|
|
||||||
|
typedef struct _MENUWND
|
||||||
|
{
|
||||||
|
WND wnd;
|
||||||
|
PPOPUPMENU ppopupmenu;
|
||||||
|
} MENUWND, *PMENUWND;
|
||||||
|
|
||||||
typedef struct _PFNCLIENT
|
typedef struct _PFNCLIENT
|
||||||
{
|
{
|
||||||
WNDPROC pfnScrollBarWndProc;
|
WNDPROC pfnScrollBarWndProc;
|
||||||
|
@ -3371,16 +3427,20 @@ typedef struct tagROSMENUINFO
|
||||||
DWORD dwContextHelpID;
|
DWORD dwContextHelpID;
|
||||||
ULONG_PTR dwMenuData;
|
ULONG_PTR dwMenuData;
|
||||||
/* ----------- Extra ----------- */
|
/* ----------- Extra ----------- */
|
||||||
|
ULONG fFlags; /* Menu flags (MF_POPUP, MF_SYSMENU) */
|
||||||
|
UINT iItem; /* Currently focused item */
|
||||||
|
UINT cItems; /* Number of items in the menu */
|
||||||
|
WORD cxMenu; /* Width of the whole menu */
|
||||||
|
WORD cyMenu; /* Height of the whole menu */
|
||||||
|
ULONG cxTextAlign;
|
||||||
|
PWND spwndNotify; /* window receiving the messages for ownerdraw */
|
||||||
|
INT iTop;
|
||||||
|
INT iMaxTop;
|
||||||
|
DWORD dwArrowsOn:2;
|
||||||
|
|
||||||
HMENU Self; /* Handle of this menu */
|
HMENU Self; /* Handle of this menu */
|
||||||
WORD Flags; /* Menu flags (MF_POPUP, MF_SYSMENU) */
|
|
||||||
UINT FocusedItem; /* Currently focused item */
|
|
||||||
UINT MenuItemCount; /* Number of items in the menu */
|
|
||||||
HWND Wnd; /* Window containing the menu */
|
HWND Wnd; /* Window containing the menu */
|
||||||
WORD Width; /* Width of the whole menu */
|
|
||||||
WORD Height; /* Height of the whole menu */
|
|
||||||
HWND WndOwner; /* window receiving the messages for ownerdraw */
|
|
||||||
BOOL TimeToHide; /* Request hiding when receiving a second click in the top-level menu item */
|
BOOL TimeToHide; /* Request hiding when receiving a second click in the top-level menu item */
|
||||||
SIZE maxBmpSize; /* Maximum size of the bitmap items in MIIM_BITMAP state */
|
|
||||||
} ROSMENUINFO, *PROSMENUINFO;
|
} ROSMENUINFO, *PROSMENUINFO;
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
|
@ -3410,6 +3470,7 @@ typedef struct tagROSMENUITEMINFO
|
||||||
RECT Rect; /* Item area (relative to menu window) */
|
RECT Rect; /* Item area (relative to menu window) */
|
||||||
UINT dxTab; /* X position of text after Tab */
|
UINT dxTab; /* X position of text after Tab */
|
||||||
LPWSTR lpstr; /* Copy of the text pointer in MenuItem->Text */
|
LPWSTR lpstr; /* Copy of the text pointer in MenuItem->Text */
|
||||||
|
SIZE maxBmpSize; /* Maximum size of the bitmap items in MIIM_BITMAP state */
|
||||||
} ROSMENUITEMINFO, *PROSMENUITEMINFO;
|
} ROSMENUITEMINFO, *PROSMENUITEMINFO;
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
|
|
|
@ -50,8 +50,7 @@ co_IntTranslateAccelerator(
|
||||||
UINT Mask = 0, nPos;
|
UINT Mask = 0, nPos;
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
HMENU hMenu, hSubMenu;
|
HMENU hMenu, hSubMenu;
|
||||||
PMENU_OBJECT MenuObject, SubMenu;
|
PMENU MenuObject;
|
||||||
PMENU_ITEM MenuItem;
|
|
||||||
|
|
||||||
ASSERT_REFS_CO(Window);
|
ASSERT_REFS_CO(Window);
|
||||||
|
|
||||||
|
@ -101,16 +100,11 @@ co_IntTranslateAccelerator(
|
||||||
hMenu = (Window->style & WS_CHILD) ? 0 : (HMENU)Window->IDMenu;
|
hMenu = (Window->style & WS_CHILD) ? 0 : (HMENU)Window->IDMenu;
|
||||||
hSubMenu = NULL;
|
hSubMenu = NULL;
|
||||||
MenuObject = IntGetMenuObject(hMenu);
|
MenuObject = IntGetMenuObject(hMenu);
|
||||||
|
nPos = pAccel->cmd;
|
||||||
if (MenuObject)
|
if (MenuObject)
|
||||||
{
|
{
|
||||||
nPos = IntGetMenuItemByFlag(MenuObject,
|
if ((MENU_FindItem (&MenuObject, &nPos, MF_BYPOSITION)))
|
||||||
pAccel->cmd,
|
hSubMenu = MenuObject->head.h;
|
||||||
MF_BYCOMMAND,
|
|
||||||
&SubMenu,
|
|
||||||
&MenuItem,
|
|
||||||
NULL);
|
|
||||||
if (nPos != (UINT) - 1)
|
|
||||||
hSubMenu = SubMenu->head.h;
|
|
||||||
else
|
else
|
||||||
hMenu = NULL;
|
hMenu = NULL;
|
||||||
}
|
}
|
||||||
|
@ -120,16 +114,11 @@ co_IntTranslateAccelerator(
|
||||||
hMenu = Window->SystemMenu;
|
hMenu = Window->SystemMenu;
|
||||||
hSubMenu = hMenu; /* system menu is a popup menu */
|
hSubMenu = hMenu; /* system menu is a popup menu */
|
||||||
MenuObject = IntGetMenuObject(hMenu);
|
MenuObject = IntGetMenuObject(hMenu);
|
||||||
|
nPos = pAccel->cmd;
|
||||||
if (MenuObject)
|
if (MenuObject)
|
||||||
{
|
{
|
||||||
nPos = IntGetMenuItemByFlag(MenuObject,
|
if ((MENU_FindItem (&MenuObject, &nPos, MF_BYPOSITION)))
|
||||||
pAccel->cmd,
|
hSubMenu = MenuObject->head.h;
|
||||||
MF_BYCOMMAND,
|
|
||||||
&SubMenu,
|
|
||||||
&MenuItem,
|
|
||||||
NULL);
|
|
||||||
if (nPos != (UINT) - 1)
|
|
||||||
hSubMenu = SubMenu->head.h;
|
|
||||||
else
|
else
|
||||||
hMenu = NULL;
|
hMenu = NULL;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -10,32 +10,6 @@
|
||||||
#define MF_END (0x0080)
|
#define MF_END (0x0080)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct _MENU_ITEM
|
|
||||||
{
|
|
||||||
struct _MENU_ITEM *Next;
|
|
||||||
UINT fType;
|
|
||||||
UINT fState;
|
|
||||||
UINT wID;
|
|
||||||
HMENU hSubMenu;
|
|
||||||
HBITMAP hbmpChecked;
|
|
||||||
HBITMAP hbmpUnchecked;
|
|
||||||
ULONG_PTR dwItemData;
|
|
||||||
UNICODE_STRING Text;
|
|
||||||
HBITMAP hbmpItem;
|
|
||||||
RECTL Rect;
|
|
||||||
UINT dxTab;
|
|
||||||
} MENU_ITEM, *PMENU_ITEM;
|
|
||||||
|
|
||||||
typedef struct _MENU_OBJECT
|
|
||||||
{
|
|
||||||
PROCDESKHEAD head;
|
|
||||||
PEPROCESS Process;
|
|
||||||
LIST_ENTRY ListEntry;
|
|
||||||
PMENU_ITEM MenuItemList;
|
|
||||||
ROSMENUINFO MenuInfo;
|
|
||||||
BOOL RtoL;
|
|
||||||
} MENU_OBJECT, *PMENU_OBJECT;
|
|
||||||
|
|
||||||
typedef struct _SETMENUITEMRECT
|
typedef struct _SETMENUITEMRECT
|
||||||
{
|
{
|
||||||
UINT uItem;
|
UINT uItem;
|
||||||
|
@ -43,33 +17,34 @@ typedef struct _SETMENUITEMRECT
|
||||||
RECTL rcRect;
|
RECTL rcRect;
|
||||||
} SETMENUITEMRECT, *PSETMENUITEMRECT;
|
} SETMENUITEMRECT, *PSETMENUITEMRECT;
|
||||||
|
|
||||||
PMENU_OBJECT FASTCALL
|
PMENU FASTCALL
|
||||||
IntGetMenuObject(HMENU hMenu);
|
IntGetMenuObject(HMENU hMenu);
|
||||||
|
|
||||||
#define IntReleaseMenuObject(MenuObj) \
|
#define IntReleaseMenuObject(MenuObj) \
|
||||||
UserDereferenceObject(MenuObj)
|
UserDereferenceObject(MenuObj)
|
||||||
|
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
IntDestroyMenuObject(PMENU_OBJECT MenuObject, BOOL bRecurse, BOOL RemoveFromProcess);
|
IntDestroyMenuObject(PMENU MenuObject, BOOL bRecurse, BOOL RemoveFromProcess);
|
||||||
|
|
||||||
PMENU_OBJECT FASTCALL
|
PMENU FASTCALL
|
||||||
IntCloneMenu(PMENU_OBJECT Source);
|
IntCloneMenu(PMENU Source);
|
||||||
|
|
||||||
int FASTCALL
|
int FASTCALL
|
||||||
IntGetMenuItemByFlag(PMENU_OBJECT MenuObject, UINT uSearchBy, UINT fFlag,
|
IntGetMenuItemByFlag(PMENU MenuObject, UINT uSearchBy, UINT fFlag,
|
||||||
PMENU_OBJECT *SubMenu, PMENU_ITEM *MenuItem,
|
PMENU *SubMenu, PITEM *MenuItem,
|
||||||
PMENU_ITEM *PrevMenuItem);
|
PITEM *PrevMenuItem);
|
||||||
|
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
IntCleanupMenus(struct _EPROCESS *Process, PPROCESSINFO Win32Process);
|
IntCleanupMenus(struct _EPROCESS *Process, PPROCESSINFO Win32Process);
|
||||||
|
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
IntInsertMenuItem(_In_ PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
|
IntInsertMenuItem(_In_ PMENU MenuObject, UINT uItem, BOOL fByPosition,
|
||||||
PROSMENUITEMINFO ItemInfo);
|
PROSMENUITEMINFO ItemInfo);
|
||||||
|
|
||||||
PMENU_OBJECT FASTCALL
|
PMENU FASTCALL
|
||||||
IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu);
|
IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu);
|
||||||
|
|
||||||
UINT FASTCALL IntFindSubMenu(HMENU *hMenu, HMENU hSubTarget );
|
UINT FASTCALL IntFindSubMenu(HMENU *hMenu, HMENU hSubTarget );
|
||||||
UINT FASTCALL IntGetMenuState( HMENU hMenu, UINT uId, UINT uFlags);
|
UINT FASTCALL IntGetMenuState( HMENU hMenu, UINT uId, UINT uFlags);
|
||||||
|
BOOL FASTCALL IntRemoveMenuItem(PMENU Menu, UINT uPosition, UINT uFlags, BOOL bRecurse);
|
||||||
|
PITEM MENU_FindItem( PMENU *pmenu, UINT *nPos, UINT wFlags );
|
||||||
|
|
|
@ -597,7 +597,7 @@ PVOID FASTCALL ValidateHandle(HANDLE handle, HANDLE_TYPE type)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NtUserValidateHandleSecure
|
* NtUserValidateHandleSecure W2k3 has one argument.
|
||||||
*
|
*
|
||||||
* Status
|
* Status
|
||||||
* @implemented
|
* @implemented
|
||||||
|
@ -609,62 +609,46 @@ NtUserValidateHandleSecure(
|
||||||
HANDLE handle,
|
HANDLE handle,
|
||||||
BOOL Restricted)
|
BOOL Restricted)
|
||||||
{
|
{
|
||||||
if(!Restricted)
|
|
||||||
{
|
|
||||||
UINT uType;
|
UINT uType;
|
||||||
{
|
PPROCESSINFO ppi;
|
||||||
PUSER_HANDLE_ENTRY entry;
|
PUSER_HANDLE_ENTRY entry;
|
||||||
|
|
||||||
|
DECLARE_RETURN(BOOL);
|
||||||
|
UserEnterExclusive();
|
||||||
|
|
||||||
if (!(entry = handle_to_entry(gHandleTable, handle )))
|
if (!(entry = handle_to_entry(gHandleTable, handle )))
|
||||||
{
|
{
|
||||||
EngSetLastError(ERROR_INVALID_HANDLE);
|
EngSetLastError(ERROR_INVALID_HANDLE);
|
||||||
return FALSE;
|
RETURN( FALSE);
|
||||||
}
|
}
|
||||||
uType = entry->type;
|
uType = entry->type;
|
||||||
}
|
|
||||||
switch (uType)
|
switch (uType)
|
||||||
{
|
{
|
||||||
case TYPE_WINDOW:
|
case TYPE_WINDOW:
|
||||||
{
|
case TYPE_INPUTCONTEXT:
|
||||||
if (UserGetWindowObject((HWND) handle)) return TRUE;
|
ppi = ((PTHREADINFO)entry->pi)->ppi;
|
||||||
return FALSE;
|
break;
|
||||||
}
|
|
||||||
case TYPE_MENU:
|
case TYPE_MENU:
|
||||||
{
|
|
||||||
if (UserGetMenuObject((HMENU) handle)) return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
case TYPE_ACCELTABLE:
|
case TYPE_ACCELTABLE:
|
||||||
{
|
|
||||||
if (UserGetAccelObject((HACCEL) handle)) return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
case TYPE_CURSOR:
|
case TYPE_CURSOR:
|
||||||
{
|
|
||||||
if (UserGetCurIconObject((HCURSOR) handle)) return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
case TYPE_HOOK:
|
case TYPE_HOOK:
|
||||||
{
|
|
||||||
if (IntGetHookObject((HHOOK) handle)) return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
case TYPE_MONITOR:
|
|
||||||
{
|
|
||||||
if (UserGetMonitorObject((HMONITOR) handle)) return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
case TYPE_CALLPROC:
|
case TYPE_CALLPROC:
|
||||||
{
|
case TYPE_SETWINDOWPOS:
|
||||||
WNDPROC_INFO Proc;
|
ppi = entry->pi;
|
||||||
return UserGetCallProcInfo( handle, &Proc );
|
break;
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
EngSetLastError(ERROR_INVALID_HANDLE);
|
ppi = NULL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
if (!ppi) RETURN( FALSE);
|
||||||
{ /* Is handle entry restricted? */
|
|
||||||
STUB
|
// Same process job returns TRUE.
|
||||||
}
|
if (gptiCurrent->ppi->pW32Job == ppi->pW32Job) RETURN( TRUE);
|
||||||
return FALSE;
|
|
||||||
|
RETURN( FALSE);
|
||||||
|
|
||||||
|
CLEANUP:
|
||||||
|
UserLeave();
|
||||||
|
END_CLEANUP;
|
||||||
}
|
}
|
||||||
|
|
|
@ -401,17 +401,17 @@ NtUserCallTwoParam(
|
||||||
case TWOPARAM_ROUTINE_SETMENUBARHEIGHT:
|
case TWOPARAM_ROUTINE_SETMENUBARHEIGHT:
|
||||||
{
|
{
|
||||||
DWORD_PTR Ret;
|
DWORD_PTR Ret;
|
||||||
PMENU_OBJECT MenuObject = IntGetMenuObject((HMENU)Param1);
|
PMENU MenuObject = IntGetMenuObject((HMENU)Param1);
|
||||||
if(!MenuObject)
|
if(!MenuObject)
|
||||||
RETURN( 0);
|
RETURN( 0);
|
||||||
|
|
||||||
if(Param2 > 0)
|
if(Param2 > 0)
|
||||||
{
|
{
|
||||||
Ret = (MenuObject->MenuInfo.Height == (int)Param2);
|
Ret = (MenuObject->cyMenu == (int)Param2);
|
||||||
MenuObject->MenuInfo.Height = (int)Param2;
|
MenuObject->cyMenu = (int)Param2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Ret = (DWORD_PTR)MenuObject->MenuInfo.Height;
|
Ret = (DWORD_PTR)MenuObject->cyMenu;
|
||||||
IntReleaseMenuObject(MenuObject);
|
IntReleaseMenuObject(MenuObject);
|
||||||
RETURN( Ret);
|
RETURN( Ret);
|
||||||
}
|
}
|
||||||
|
@ -564,9 +564,9 @@ NtUserCallHwndLock(
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE:
|
case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE:
|
||||||
TRACE("co_IntSetForegroundWindow 1 0x%p\n",hWnd);
|
TRACE("co_IntSetForegroundWindow M 1 0x%p\n",hWnd);
|
||||||
Ret = co_IntSetForegroundWindowMouse(Window);
|
Ret = co_IntSetForegroundWindowMouse(Window);
|
||||||
TRACE("co_IntSetForegroundWindow 2 0x%p\n",hWnd);
|
TRACE("co_IntSetForegroundWindow M 2 0x%p\n",hWnd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HWNDLOCK_ROUTINE_UPDATEWINDOW:
|
case HWNDLOCK_ROUTINE_UPDATEWINDOW:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
PMENU_OBJECT FASTCALL UserGetMenuObject(HMENU hMenu);
|
PMENU FASTCALL UserGetMenuObject(HMENU hMenu);
|
||||||
|
|
||||||
#define ASSERT_REFS_CO(_obj_) \
|
#define ASSERT_REFS_CO(_obj_) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -109,7 +109,7 @@ PWND FASTCALL UserGetAncestor(PWND Wnd, UINT Type);
|
||||||
/*************** MENU.C ***************/
|
/*************** MENU.C ***************/
|
||||||
|
|
||||||
HMENU FASTCALL UserCreateMenu(BOOL PopupMenu);
|
HMENU FASTCALL UserCreateMenu(BOOL PopupMenu);
|
||||||
BOOL FASTCALL UserSetMenuDefaultItem(PMENU_OBJECT Menu, UINT uItem, UINT fByPos);
|
BOOL FASTCALL UserSetMenuDefaultItem(PMENU Menu, UINT uItem, UINT fByPos);
|
||||||
BOOL FASTCALL UserDestroyMenu(HMENU hMenu);
|
BOOL FASTCALL UserDestroyMenu(HMENU hMenu);
|
||||||
|
|
||||||
/*************** SCROLLBAR.C ***************/
|
/*************** SCROLLBAR.C ***************/
|
||||||
|
|
|
@ -459,7 +459,7 @@ UserFreeWindowInfo(PTHREADINFO ti, PWND Wnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DesktopHeapFree(Wnd->head.rpdesk, Wnd);
|
// DesktopHeapFree(Wnd->head.rpdesk, Wnd);
|
||||||
// WindowObject->Wnd = NULL;
|
// WindowObject->hWnd = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -479,7 +479,7 @@ static LRESULT co_UserFreeWindow(PWND Window,
|
||||||
HWND *Children;
|
HWND *Children;
|
||||||
HWND *ChildHandle;
|
HWND *ChildHandle;
|
||||||
PWND Child;
|
PWND Child;
|
||||||
PMENU_OBJECT Menu;
|
PMENU Menu;
|
||||||
BOOLEAN BelongsToThreadData;
|
BOOLEAN BelongsToThreadData;
|
||||||
|
|
||||||
ASSERT(Window);
|
ASSERT(Window);
|
||||||
|
@ -792,7 +792,7 @@ IntSetMenu(
|
||||||
HMENU Menu,
|
HMENU Menu,
|
||||||
BOOL *Changed)
|
BOOL *Changed)
|
||||||
{
|
{
|
||||||
PMENU_OBJECT OldMenu, NewMenu = NULL;
|
PMENU OldMenu, NewMenu = NULL;
|
||||||
|
|
||||||
if ((Wnd->style & (WS_CHILD | WS_POPUP)) == WS_CHILD)
|
if ((Wnd->style & (WS_CHILD | WS_POPUP)) == WS_CHILD)
|
||||||
{
|
{
|
||||||
|
@ -810,7 +810,7 @@ IntSetMenu(
|
||||||
if (Wnd->IDMenu)
|
if (Wnd->IDMenu)
|
||||||
{
|
{
|
||||||
OldMenu = IntGetMenuObject((HMENU) Wnd->IDMenu);
|
OldMenu = IntGetMenuObject((HMENU) Wnd->IDMenu);
|
||||||
ASSERT(NULL == OldMenu || OldMenu->MenuInfo.Wnd == Wnd->head.h);
|
ASSERT(NULL == OldMenu || OldMenu->hWnd == Wnd->head.h);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -829,7 +829,7 @@ IntSetMenu(
|
||||||
EngSetLastError(ERROR_INVALID_MENU_HANDLE);
|
EngSetLastError(ERROR_INVALID_MENU_HANDLE);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (NULL != NewMenu->MenuInfo.Wnd)
|
if (NULL != NewMenu->hWnd)
|
||||||
{
|
{
|
||||||
/* Can't use the same menu for two windows */
|
/* Can't use the same menu for two windows */
|
||||||
if (NULL != OldMenu)
|
if (NULL != OldMenu)
|
||||||
|
@ -845,12 +845,12 @@ IntSetMenu(
|
||||||
Wnd->IDMenu = (UINT) Menu;
|
Wnd->IDMenu = (UINT) Menu;
|
||||||
if (NULL != NewMenu)
|
if (NULL != NewMenu)
|
||||||
{
|
{
|
||||||
NewMenu->MenuInfo.Wnd = Wnd->head.h;
|
NewMenu->hWnd = Wnd->head.h;
|
||||||
IntReleaseMenuObject(NewMenu);
|
IntReleaseMenuObject(NewMenu);
|
||||||
}
|
}
|
||||||
if (NULL != OldMenu)
|
if (NULL != OldMenu)
|
||||||
{
|
{
|
||||||
OldMenu->MenuInfo.Wnd = NULL;
|
OldMenu->hWnd = NULL;
|
||||||
IntReleaseMenuObject(OldMenu);
|
IntReleaseMenuObject(OldMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,13 +895,13 @@ co_DestroyThreadWindows(struct _ETHREAD *Thread)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PMENU_OBJECT FASTCALL
|
PMENU FASTCALL
|
||||||
IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
||||||
{
|
{
|
||||||
PMENU_OBJECT Menu, NewMenu = NULL, SysMenu = NULL, ret = NULL;
|
PMENU Menu, NewMenu = NULL, SysMenu = NULL, ret = NULL;
|
||||||
PTHREADINFO W32Thread;
|
PTHREADINFO W32Thread;
|
||||||
HMENU hNewMenu, hSysMenu;
|
HMENU hNewMenu, hSysMenu;
|
||||||
ROSMENUITEMINFO ItemInfo;
|
ROSMENUITEMINFO ItemInfo = {0};
|
||||||
|
|
||||||
if(bRevert)
|
if(bRevert)
|
||||||
{
|
{
|
||||||
|
@ -929,10 +929,10 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
||||||
|
|
||||||
NewMenu = IntCloneMenu(Menu);
|
NewMenu = IntCloneMenu(Menu);
|
||||||
if(NewMenu)
|
if(NewMenu)
|
||||||
{
|
{ // Use spmenuSys
|
||||||
Window->SystemMenu = NewMenu->MenuInfo.Self;
|
Window->SystemMenu = NewMenu->head.h;
|
||||||
NewMenu->MenuInfo.Flags |= MNF_SYSDESKMN;
|
NewMenu->fFlags |= MNF_SYSDESKMN;
|
||||||
NewMenu->MenuInfo.Wnd = Window->head.h;
|
NewMenu->hWnd = Window->head.h;
|
||||||
ret = NewMenu;
|
ret = NewMenu;
|
||||||
//IntReleaseMenuObject(NewMenu);
|
//IntReleaseMenuObject(NewMenu);
|
||||||
}
|
}
|
||||||
|
@ -950,8 +950,8 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
||||||
UserDestroyMenu(hSysMenu);
|
UserDestroyMenu(hSysMenu);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
SysMenu->MenuInfo.Flags |= MNF_SYSDESKMN;
|
SysMenu->fFlags |= MNF_SYSDESKMN;
|
||||||
SysMenu->MenuInfo.Wnd = Window->head.h;
|
SysMenu->hWnd = Window->head.h;
|
||||||
hNewMenu = co_IntLoadSysMenuTemplate();
|
hNewMenu = co_IntLoadSysMenuTemplate();
|
||||||
if(!hNewMenu)
|
if(!hNewMenu)
|
||||||
{
|
{
|
||||||
|
@ -970,21 +970,24 @@ IntGetSystemMenu(PWND Window, BOOL bRevert, BOOL RetMenu)
|
||||||
NewMenu = IntCloneMenu(Menu);
|
NewMenu = IntCloneMenu(Menu);
|
||||||
if(NewMenu)
|
if(NewMenu)
|
||||||
{
|
{
|
||||||
NewMenu->MenuInfo.Flags |= MNF_SYSDESKMN | MNF_POPUP;
|
NewMenu->fFlags |= MNF_SYSDESKMN | MNF_POPUP;
|
||||||
NewMenu->MenuInfo.dwStyle = MNS_CHECKORBMP;
|
// Do not set MNS_CHECKORBMP it breaks menus, also original code destroyed the style anyway.
|
||||||
IntReleaseMenuObject(NewMenu);
|
IntReleaseMenuObject(NewMenu);
|
||||||
UserSetMenuDefaultItem(NewMenu, SC_CLOSE, FALSE);
|
UserSetMenuDefaultItem(NewMenu, SC_CLOSE, FALSE);
|
||||||
|
|
||||||
|
if (Window->pcls->style & CS_NOCLOSE)
|
||||||
|
IntRemoveMenuItem(NewMenu, SC_CLOSE, MF_BYCOMMAND, TRUE);
|
||||||
|
|
||||||
ItemInfo.cbSize = sizeof(MENUITEMINFOW);
|
ItemInfo.cbSize = sizeof(MENUITEMINFOW);
|
||||||
ItemInfo.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE | MIIM_SUBMENU;
|
ItemInfo.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE | MIIM_SUBMENU;
|
||||||
ItemInfo.fType = 0;
|
ItemInfo.fType = 0;
|
||||||
ItemInfo.fState = MFS_ENABLED;
|
ItemInfo.fState = MFS_ENABLED;
|
||||||
ItemInfo.dwTypeData = NULL;
|
ItemInfo.dwTypeData = NULL;
|
||||||
ItemInfo.cch = 0;
|
ItemInfo.cch = 0;
|
||||||
ItemInfo.hSubMenu = NewMenu->MenuInfo.Self;
|
ItemInfo.hSubMenu = NewMenu->head.h;
|
||||||
IntInsertMenuItem(SysMenu, (UINT) -1, TRUE, &ItemInfo);
|
IntInsertMenuItem(SysMenu, (UINT) -1, TRUE, &ItemInfo);
|
||||||
|
|
||||||
Window->SystemMenu = SysMenu->MenuInfo.Self;
|
Window->SystemMenu = SysMenu->head.h;
|
||||||
|
|
||||||
ret = SysMenu;
|
ret = SysMenu;
|
||||||
}
|
}
|
||||||
|
@ -1419,15 +1422,15 @@ co_UserSetParent(HWND hWndChild, HWND hWndNewParent)
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
IntSetSystemMenu(PWND Window, PMENU_OBJECT Menu)
|
IntSetSystemMenu(PWND Window, PMENU Menu)
|
||||||
{
|
{
|
||||||
PMENU_OBJECT OldMenu;
|
PMENU OldMenu;
|
||||||
if(Window->SystemMenu)
|
if(Window->SystemMenu)
|
||||||
{
|
{
|
||||||
OldMenu = IntGetMenuObject(Window->SystemMenu);
|
OldMenu = IntGetMenuObject(Window->SystemMenu);
|
||||||
if(OldMenu)
|
if(OldMenu)
|
||||||
{
|
{
|
||||||
OldMenu->MenuInfo.Flags &= ~ MNF_SYSDESKMN;
|
OldMenu->fFlags &= ~ MNF_SYSDESKMN;
|
||||||
IntReleaseMenuObject(OldMenu);
|
IntReleaseMenuObject(OldMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1435,10 +1438,10 @@ IntSetSystemMenu(PWND Window, PMENU_OBJECT Menu)
|
||||||
if(Menu)
|
if(Menu)
|
||||||
{
|
{
|
||||||
/* FIXME: Check window style, propably return FALSE? */
|
/* FIXME: Check window style, propably return FALSE? */
|
||||||
Window->SystemMenu = Menu->MenuInfo.Self;
|
Window->SystemMenu = Menu->head.h;
|
||||||
Menu->MenuInfo.Flags |= MNF_SYSDESKMN;
|
Menu->fFlags |= MNF_SYSDESKMN;
|
||||||
}
|
}
|
||||||
else
|
else // Use spmenuSys too!
|
||||||
Window->SystemMenu = (HMENU)0;
|
Window->SystemMenu = (HMENU)0;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1752,7 +1755,7 @@ PWND FASTCALL IntCreateWindow(CREATESTRUCTW* Cs,
|
||||||
PWND pWnd = NULL;
|
PWND pWnd = NULL;
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
PTHREADINFO pti = NULL;
|
PTHREADINFO pti = NULL;
|
||||||
PMENU_OBJECT SystemMenu;
|
PMENU SystemMenu;
|
||||||
BOOL MenuChanged;
|
BOOL MenuChanged;
|
||||||
BOOL bUnicodeWindow;
|
BOOL bUnicodeWindow;
|
||||||
|
|
||||||
|
@ -1985,8 +1988,8 @@ PWND FASTCALL IntCreateWindow(CREATESTRUCTW* Cs,
|
||||||
{
|
{
|
||||||
SystemMenu = IntGetSystemMenu(pWnd, TRUE, TRUE);
|
SystemMenu = IntGetSystemMenu(pWnd, TRUE, TRUE);
|
||||||
if(SystemMenu)
|
if(SystemMenu)
|
||||||
{
|
{ // spmenuSys
|
||||||
pWnd->SystemMenu = SystemMenu->MenuInfo.Self;
|
pWnd->SystemMenu = SystemMenu->head.h;
|
||||||
IntReleaseMenuObject(SystemMenu);
|
IntReleaseMenuObject(SystemMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3678,7 +3681,7 @@ HMENU APIENTRY
|
||||||
NtUserGetSystemMenu(HWND hWnd, BOOL bRevert)
|
NtUserGetSystemMenu(HWND hWnd, BOOL bRevert)
|
||||||
{
|
{
|
||||||
PWND Window;
|
PWND Window;
|
||||||
PMENU_OBJECT Menu;
|
PMENU Menu;
|
||||||
DECLARE_RETURN(HMENU);
|
DECLARE_RETURN(HMENU);
|
||||||
|
|
||||||
TRACE("Enter NtUserGetSystemMenu\n");
|
TRACE("Enter NtUserGetSystemMenu\n");
|
||||||
|
@ -3694,7 +3697,7 @@ NtUserGetSystemMenu(HWND hWnd, BOOL bRevert)
|
||||||
RETURN(NULL);
|
RETURN(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN(Menu->MenuInfo.Self);
|
RETURN(Menu->head.h);
|
||||||
|
|
||||||
CLEANUP:
|
CLEANUP:
|
||||||
TRACE("Leave NtUserGetSystemMenu, ret=%p\n", _ret_);
|
TRACE("Leave NtUserGetSystemMenu, ret=%p\n", _ret_);
|
||||||
|
@ -3714,7 +3717,7 @@ NtUserSetSystemMenu(HWND hWnd, HMENU hMenu)
|
||||||
{
|
{
|
||||||
BOOL Result = FALSE;
|
BOOL Result = FALSE;
|
||||||
PWND Window;
|
PWND Window;
|
||||||
PMENU_OBJECT Menu;
|
PMENU Menu;
|
||||||
DECLARE_RETURN(BOOL);
|
DECLARE_RETURN(BOOL);
|
||||||
|
|
||||||
TRACE("Enter NtUserSetSystemMenu\n");
|
TRACE("Enter NtUserSetSystemMenu\n");
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue