mirror of
https://github.com/reactos/reactos.git
synced 2024-10-01 06:57:08 +00:00
[Win32ss|NtUser]
- Support process start up user show window parameter. svn path=/trunk/; revision=66088
This commit is contained in:
parent
63ae430acc
commit
8d5b642a5f
|
@ -33,6 +33,7 @@
|
||||||
typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
|
typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
|
||||||
#define MAKEINTATOM(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
|
#define MAKEINTATOM(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
|
||||||
#define WINBASEAPI
|
#define WINBASEAPI
|
||||||
|
#define STARTF_USESHOWWINDOW 1
|
||||||
#define STARTF_USESIZE 2
|
#define STARTF_USESIZE 2
|
||||||
#define STARTF_USEPOSITION 4
|
#define STARTF_USEPOSITION 4
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
|
@ -461,12 +461,15 @@ InitThreadCallback(PETHREAD Thread)
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
PTEB pTeb;
|
PTEB pTeb;
|
||||||
LARGE_INTEGER LargeTickCount;
|
LARGE_INTEGER LargeTickCount;
|
||||||
|
PRTL_USER_PROCESS_PARAMETERS ProcessParams;
|
||||||
|
|
||||||
Process = Thread->ThreadsProcess;
|
Process = Thread->ThreadsProcess;
|
||||||
|
|
||||||
pTeb = NtCurrentTeb();
|
pTeb = NtCurrentTeb();
|
||||||
ASSERT(pTeb);
|
ASSERT(pTeb);
|
||||||
|
|
||||||
|
ProcessParams = pTeb->ProcessEnvironmentBlock->ProcessParameters;
|
||||||
|
|
||||||
/* Allocate a new Win32 thread info */
|
/* Allocate a new Win32 thread info */
|
||||||
Status = AllocW32Thread(Thread, &ptiCurrent);
|
Status = AllocW32Thread(Thread, &ptiCurrent);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -557,6 +560,24 @@ InitThreadCallback(PETHREAD Thread)
|
||||||
pci->CodePage = ptiCurrent->KeyboardLayout->CodePage;
|
pci->CodePage = ptiCurrent->KeyboardLayout->CodePage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Need to pass the user Startup Information to the current process. */
|
||||||
|
if ( ProcessParams )
|
||||||
|
{
|
||||||
|
if ( ptiCurrent->ppi->usi.cb == 0 ) // Not initialized yet.
|
||||||
|
{
|
||||||
|
if ( ProcessParams->WindowFlags != 0 ) // Need window flags set.
|
||||||
|
{
|
||||||
|
ptiCurrent->ppi->usi.cb = sizeof(USERSTARTUPINFO);
|
||||||
|
ptiCurrent->ppi->usi.dwX = ProcessParams->StartingX;
|
||||||
|
ptiCurrent->ppi->usi.dwY = ProcessParams->StartingY;
|
||||||
|
ptiCurrent->ppi->usi.dwXSize = ProcessParams->CountX;
|
||||||
|
ptiCurrent->ppi->usi.dwYSize = ProcessParams->CountY;
|
||||||
|
ptiCurrent->ppi->usi.dwFlags = ProcessParams->WindowFlags;
|
||||||
|
ptiCurrent->ppi->usi.wShowWindow = (WORD)ProcessParams->ShowWindowFlags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Assign a default window station and desktop to the process */
|
/* Assign a default window station and desktop to the process */
|
||||||
/* Do not try to open a desktop or window station before winlogon initializes */
|
/* Do not try to open a desktop or window station before winlogon initializes */
|
||||||
if (ptiCurrent->ppi->hdeskStartup == NULL && gpidLogon != 0)
|
if (ptiCurrent->ppi->hdeskStartup == NULL && gpidLogon != 0)
|
||||||
|
@ -565,13 +586,11 @@ InitThreadCallback(PETHREAD Thread)
|
||||||
HDESK hDesk = NULL;
|
HDESK hDesk = NULL;
|
||||||
UNICODE_STRING DesktopPath;
|
UNICODE_STRING DesktopPath;
|
||||||
PDESKTOP pdesk;
|
PDESKTOP pdesk;
|
||||||
PRTL_USER_PROCESS_PARAMETERS ProcessParams;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* inherit the thread desktop and process window station (if not yet inherited) from the process startup
|
* inherit the thread desktop and process window station (if not yet inherited) from the process startup
|
||||||
* info structure. See documentation of CreateProcess()
|
* info structure. See documentation of CreateProcess()
|
||||||
*/
|
*/
|
||||||
ProcessParams = pTeb->ProcessEnvironmentBlock->ProcessParameters;
|
|
||||||
|
|
||||||
Status = STATUS_UNSUCCESSFUL;
|
Status = STATUS_UNSUCCESSFUL;
|
||||||
if (ProcessParams && ProcessParams->DesktopInfo.Length > 0)
|
if (ProcessParams && ProcessParams->DesktopInfo.Length > 0)
|
||||||
|
|
|
@ -2168,6 +2168,7 @@ co_WinPosShowWindow(PWND Wnd, INT Cmd)
|
||||||
PTHREADINFO pti;
|
PTHREADINFO pti;
|
||||||
//HRGN VisibleRgn;
|
//HRGN VisibleRgn;
|
||||||
BOOL ShowOwned = FALSE;
|
BOOL ShowOwned = FALSE;
|
||||||
|
BOOL FirstTime = FALSE;
|
||||||
ASSERT_REFS_CO(Wnd);
|
ASSERT_REFS_CO(Wnd);
|
||||||
//ERR("co_WinPosShowWindow START\n");
|
//ERR("co_WinPosShowWindow START\n");
|
||||||
|
|
||||||
|
@ -2175,6 +2176,42 @@ co_WinPosShowWindow(PWND Wnd, INT Cmd)
|
||||||
WasVisible = (Wnd->style & WS_VISIBLE) != 0;
|
WasVisible = (Wnd->style & WS_VISIBLE) != 0;
|
||||||
style = Wnd->style;
|
style = Wnd->style;
|
||||||
|
|
||||||
|
ERR("co_WinPosShowWindow START hwnd %p Cmd %d usicmd %d\n",Wnd->head.h,Cmd,pti->ppi->usi.wShowWindow);
|
||||||
|
|
||||||
|
if ( pti->ppi->usi.dwFlags & STARTF_USESHOWWINDOW )
|
||||||
|
{
|
||||||
|
if ((Wnd->style & (WS_POPUP|WS_CHILD)) != WS_CHILD)
|
||||||
|
{
|
||||||
|
if ((Wnd->style & WS_CAPTION) == WS_CAPTION)
|
||||||
|
{
|
||||||
|
if (Wnd->spwndOwner == NULL)
|
||||||
|
{
|
||||||
|
if ( Cmd == SW_SHOWNORMAL || Cmd == SW_SHOW)
|
||||||
|
{
|
||||||
|
Cmd = SW_SHOWDEFAULT;
|
||||||
|
}
|
||||||
|
FirstTime = TRUE;
|
||||||
|
ERR("co_WPSW FT 1\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Cmd == SW_SHOWDEFAULT )
|
||||||
|
{
|
||||||
|
if ( pti->ppi->usi.dwFlags & STARTF_USESHOWWINDOW )
|
||||||
|
{
|
||||||
|
Cmd = pti->ppi->usi.wShowWindow;
|
||||||
|
FirstTime = TRUE;
|
||||||
|
ERR("co_WPSW FT 2\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FirstTime)
|
||||||
|
{
|
||||||
|
pti->ppi->usi.dwFlags &= ~(STARTF_USEPOSITION|STARTF_USESIZE|STARTF_USESHOWWINDOW);
|
||||||
|
}
|
||||||
|
|
||||||
switch (Cmd)
|
switch (Cmd)
|
||||||
{
|
{
|
||||||
case SW_HIDE:
|
case SW_HIDE:
|
||||||
|
@ -2182,7 +2219,7 @@ co_WinPosShowWindow(PWND Wnd, INT Cmd)
|
||||||
if (!WasVisible)
|
if (!WasVisible)
|
||||||
{
|
{
|
||||||
//ERR("co_WinPosShowWindow Exit Bad\n");
|
//ERR("co_WinPosShowWindow Exit Bad\n");
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
Swp |= SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE;
|
Swp |= SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE;
|
||||||
if (Wnd != pti->MessageQueue->spwndActive)
|
if (Wnd != pti->MessageQueue->spwndActive)
|
||||||
|
@ -2406,7 +2443,7 @@ co_WinPosShowWindow(PWND Wnd, INT Cmd)
|
||||||
if (!(style & WS_CHILD)) co_IntSendMessageNoWait(UserHMGetHandle(Wnd), WM_ACTIVATE, WA_ACTIVE, 0);
|
if (!(style & WS_CHILD)) co_IntSendMessageNoWait(UserHMGetHandle(Wnd), WM_ACTIVATE, WA_ACTIVE, 0);
|
||||||
}
|
}
|
||||||
//ERR("co_WinPosShowWindow EXIT\n");
|
//ERR("co_WinPosShowWindow EXIT\n");
|
||||||
return(WasVisible);
|
return WasVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PWND
|
static PWND
|
||||||
|
|
Loading…
Reference in a new issue