- Fix crash while using mouse or keyboard for menu selection in UxThmeme.
- Sync/Ports and copy paste error fixes.
svn path=/trunk/; revision=72513
if (lpitem->fType & MF_SYSMENU)
{
if (lpitem->fType & MF_SYSMENU)
{
- if ( (Wnd->style & WS_MINIMIZE))
+ if (!(Wnd->style & WS_MINIMIZE))
{
NC_GetInsideRect(Wnd, &rect);
UserDrawSysMenuButton(Wnd, hdc, &rect, lpitem->fState & (MF_HILITE | MF_MOUSESELECT));
{
NC_GetInsideRect(Wnd, &rect);
UserDrawSysMenuButton(Wnd, hdc, &rect, lpitem->fState & (MF_HILITE | MF_MOUSESELECT));
// No menu. Do not reserve any space
return 0;
}
// No menu. Do not reserve any space
return 0;
}
if (lprect == NULL)
{
return UserGetSystemMetrics(SM_CYMENU);
if (lprect == NULL)
{
return UserGetSystemMetrics(SM_CYMENU);
BOOL sendMenuSelect, PMENU topmenu)
{
HDC hdc;
BOOL sendMenuSelect, PMENU topmenu)
{
HDC hdc;
- PWND pWnd = ValidateHwndNoErr(menu->hWnd);
TRACE("M_SI: owner=%p menu=%p index=0x%04x select=0x%04x\n", pwndOwner, menu, wIndex, sendMenuSelect);
TRACE("M_SI: owner=%p menu=%p index=0x%04x select=0x%04x\n", pwndOwner, menu, wIndex, sendMenuSelect);
- if (!menu || !menu->cItems || !pWnd) return;
+ if (!menu || !menu->cItems) return;
+
+ pWnd = ValidateHwndNoErr(menu->hWnd);
+
+ if (!pWnd) return;
if (menu->iItem == wIndex) return;
if (menu->iItem == wIndex) return;
TRACE("owner=%x menu=%p 0x%04x\n", WndOwner, Menu, SelectFirst);
TRACE("owner=%x menu=%p 0x%04x\n", WndOwner, Menu, SelectFirst);
+ if (!Menu) return Menu;
+
if (Menu->iItem == NO_SELECTED_ITEM) return Menu;
Item = &Menu->rgItems[Menu->iItem];
if (Menu->iItem == NO_SELECTED_ITEM) return Menu;
Item = &Menu->rgItems[Menu->iItem];
{
/* switch to the system menu */
MenuTmp = get_win_sys_menu(hNewWnd);
{
/* switch to the system menu */
MenuTmp = get_win_sys_menu(hNewWnd);
- hNewMenu = UserHMGetHandle(MenuTmp);
+ if (MenuTmp) hNewMenu = UserHMGetHandle(MenuTmp);
co_IntSendMessage( UserHMGetHandle(pWnd), WM_INITMENUPOPUP, (WPARAM) UserHMGetHandle(menu), 0);
}
co_IntSendMessage( UserHMGetHandle(pWnd), WM_INITMENUPOPUP, (WPARAM) UserHMGetHandle(menu), 0);
}
+ if (menu->fFlags & MNF_SYSMENU)
+ MENU_InitSysMenuPopup( menu, pWnd->style, pWnd->pcls->style, HTSYSMENU);
+
if (MENU_ShowPopup(pWnd, menu, 0, wFlags, x, y, 0, 0 ))
ret = MENU_TrackMenu( menu, wFlags | TPM_POPUPMENU, 0, 0, pWnd,
lpTpm ? &lpTpm->rcExclude : NULL);
if (MENU_ShowPopup(pWnd, menu, 0, wFlags, x, y, 0, 0 ))
ret = MENU_TrackMenu( menu, wFlags | TPM_POPUPMENU, 0, 0, pWnd,
lpTpm ? &lpTpm->rcExclude : NULL);
ItemInfo.cbSize = sizeof(MENUITEMINFOW);
ItemInfo.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE | MIIM_SUBMENU;
ItemInfo.cbSize = sizeof(MENUITEMINFOW);
ItemInfo.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_STATE | MIIM_SUBMENU;
+ ItemInfo.fType = MF_POPUP;
ItemInfo.fState = MFS_ENABLED;
ItemInfo.dwTypeData = NULL;
ItemInfo.cch = 0;
ItemInfo.fState = MFS_ENABLED;
ItemInfo.dwTypeData = NULL;
ItemInfo.cch = 0;
if (OldMenu)
{
OldMenu->fFlags &= ~MNF_SYSMENU;
if (OldMenu)
{
OldMenu->fFlags &= ~MNF_SYSMENU;
- IntDestroyMenuObject(OldMenu, TRUE);
+ IntDestroyMenuObject(OldMenu, TRUE);