mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
Move WS_EX_MDICHILD check back in win32k. Reordered CreateWindowEx menu sets. All based on wine logic. Should SetMenu first or System menu? Tested with FF and AbiWord.
svn path=/trunk/; revision=31065
This commit is contained in:
parent
0102f7431b
commit
30e5bc01a9
2 changed files with 33 additions and 39 deletions
|
@ -354,13 +354,6 @@ CreateWindowExA(DWORD dwExStyle,
|
|||
hInstance,
|
||||
lpParam,
|
||||
FALSE);
|
||||
|
||||
if ((dwStyle & WS_VISIBLE) && (dwExStyle & WS_EX_MDICHILD) && hwnd != (HWND)0)
|
||||
{
|
||||
SendMessageW(hWndParent, WM_MDIREFRESHMENU, 0, 0);
|
||||
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
|
||||
}
|
||||
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
|
@ -466,13 +459,6 @@ CreateWindowExW(DWORD dwExStyle,
|
|||
hInstance,
|
||||
lpParam,
|
||||
TRUE);
|
||||
|
||||
if ((dwStyle & WS_VISIBLE) && (dwExStyle & WS_EX_MDICHILD) && hwnd != (HWND)0)
|
||||
{
|
||||
SendMessageW(hWndParent, WM_MDIREFRESHMENU, 0, 0);
|
||||
SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
|
||||
}
|
||||
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
|
|
|
@ -1657,18 +1657,6 @@ AllocErr:
|
|||
Wnd->Instance = hInstance;
|
||||
Window->hSelf = hWnd;
|
||||
|
||||
if (!hMenu)
|
||||
hMenu = Wnd->Class->hMenu;
|
||||
|
||||
if (0 != (dwStyle & WS_CHILD))
|
||||
{
|
||||
Wnd->IDMenu = (UINT) hMenu;
|
||||
}
|
||||
else
|
||||
{
|
||||
IntSetMenu(Window, hMenu, &MenuChanged);
|
||||
}
|
||||
|
||||
Window->MessageQueue = PsGetCurrentThreadWin32Thread()->MessageQueue;
|
||||
IntReferenceMessageQueue(Window->MessageQueue);
|
||||
Window->Parent = ParentWindow;
|
||||
|
@ -1770,8 +1758,7 @@ AllocErr:
|
|||
}
|
||||
|
||||
/* create system menu */
|
||||
if((dwStyle & WS_SYSMENU) &&
|
||||
(dwStyle & WS_CAPTION) == WS_CAPTION)
|
||||
if((dwStyle & WS_SYSMENU) )//&& (dwStyle & WS_CAPTION) == WS_CAPTION)
|
||||
{
|
||||
SystemMenu = IntGetSystemMenu(Window, TRUE, TRUE);
|
||||
if(SystemMenu)
|
||||
|
@ -1781,6 +1768,20 @@ AllocErr:
|
|||
}
|
||||
}
|
||||
|
||||
/* Set the window menu */
|
||||
if ((dwStyle & (WS_CHILD | WS_POPUP)) != WS_CHILD)
|
||||
{
|
||||
if (hMenu)
|
||||
IntSetMenu(Window, hMenu, &MenuChanged);
|
||||
else
|
||||
{
|
||||
hMenu = Wnd->Class->hMenu;
|
||||
if (hMenu) IntSetMenu(Window, hMenu, &MenuChanged);
|
||||
}
|
||||
}
|
||||
else
|
||||
Wnd->IDMenu = (UINT) hMenu;
|
||||
|
||||
/* Insert the window into the thread's window list. */
|
||||
InsertTailList (&PsGetCurrentThreadWin32Thread()->WindowListHead, &Window->ThreadListEntry);
|
||||
|
||||
|
@ -2051,7 +2052,6 @@ AllocErr:
|
|||
RETURN((HWND)0);
|
||||
}
|
||||
|
||||
|
||||
/* Send move and size messages. */
|
||||
if (!(Window->Flags & WINDOWOBJECT_NEED_SIZE))
|
||||
{
|
||||
|
@ -2065,7 +2065,6 @@ AllocErr:
|
|||
DPRINT("Sending bogus WM_SIZE\n");
|
||||
}
|
||||
|
||||
|
||||
lParam = MAKE_LONG(Window->Wnd->ClientRect.right -
|
||||
Window->Wnd->ClientRect.left,
|
||||
Window->Wnd->ClientRect.bottom -
|
||||
|
@ -2073,7 +2072,6 @@ AllocErr:
|
|||
co_IntSendMessage(Window->hSelf, WM_SIZE, SIZE_RESTORED,
|
||||
lParam);
|
||||
|
||||
|
||||
DPRINT("IntCreateWindow(): About to send WM_MOVE\n");
|
||||
|
||||
if (0 != (Wnd->Style & WS_CHILD) && ParentWindow)
|
||||
|
@ -2087,14 +2085,10 @@ AllocErr:
|
|||
Wnd->ClientRect.top);
|
||||
}
|
||||
|
||||
|
||||
co_IntSendMessage(Window->hSelf, WM_MOVE, 0, lParam);
|
||||
|
||||
|
||||
/* Call WNDOBJ change procs */
|
||||
IntEngWindowChanged(Window, WOC_RGN_CLIENT);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* Show or maybe minimize or maximize the window. */
|
||||
|
@ -2105,11 +2099,13 @@ AllocErr:
|
|||
|
||||
SwFlag = (Wnd->Style & WS_MINIMIZE) ? SW_MINIMIZE :
|
||||
SW_MAXIMIZE;
|
||||
|
||||
co_WinPosMinMaximize(Window, SwFlag, &NewPos);
|
||||
SwFlag =
|
||||
((Wnd->Style & WS_CHILD) || UserGetActiveWindow()) ?
|
||||
SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED :
|
||||
SWP_NOZORDER | SWP_FRAMECHANGED;
|
||||
|
||||
SwFlag = ((Wnd->Style & WS_CHILD) || UserGetActiveWindow()) ?
|
||||
SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED :
|
||||
SWP_NOZORDER | SWP_FRAMECHANGED;
|
||||
|
||||
DPRINT("IntCreateWindow(): About to minimize/maximize\n");
|
||||
DPRINT("%d,%d %dx%d\n", NewPos.left, NewPos.top, NewPos.right, NewPos.bottom);
|
||||
co_WinPosSetWindowPos(Window, 0, NewPos.left, NewPos.top,
|
||||
|
@ -2149,8 +2145,20 @@ AllocErr:
|
|||
|
||||
if (dwStyle & WS_VISIBLE)
|
||||
{
|
||||
if (Wnd->Style & WS_MAXIMIZE)
|
||||
dwShowMode = SW_SHOW;
|
||||
else if (Wnd->Style & WS_MINIMIZE)
|
||||
dwShowMode = SW_SHOWMINIMIZED;
|
||||
|
||||
DPRINT("IntCreateWindow(): About to show window\n");
|
||||
co_WinPosShowWindow(Window, dwShowMode);
|
||||
|
||||
if (Wnd->ExStyle & WS_EX_MDICHILD)
|
||||
{
|
||||
co_IntSendMessage(ParentWindow->hSelf, WM_MDIREFRESHMENU, 0, 0);
|
||||
/* ShowWindow won't activate child windows */
|
||||
co_WinPosSetWindowPos(Window, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
DPRINT("IntCreateWindow(): = %X\n", hWnd);
|
||||
|
|
Loading…
Reference in a new issue