mirror of
https://github.com/reactos/reactos.git
synced 2025-05-28 13:38:19 +00:00
[Win32k]
- Implement FlashWindowEx without the state verification test via global atom and window properties list. Pass all but two in win:test_FlashWindowEx. - Add missing atom's and global thread information pointer, based on patch from bug 5655. svn path=/trunk/; revision=53385
This commit is contained in:
parent
b47bf7e4d5
commit
40fee2398a
3 changed files with 41 additions and 3 deletions
|
@ -10,6 +10,7 @@
|
|||
#define UserLeaveCo UserLeave
|
||||
|
||||
extern PSERVERINFO gpsi;
|
||||
extern PTHREADINFO gptiCurrent;
|
||||
|
||||
INIT_FUNCTION NTSTATUS NTAPI InitUserImpl(VOID);
|
||||
VOID FASTCALL CleanupUserImpl(VOID);
|
||||
|
|
|
@ -1157,14 +1157,45 @@ NtUserFillWindow(HWND hWndPaint,
|
|||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
BOOL APIENTRY
|
||||
NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
|
||||
{
|
||||
STUB
|
||||
PWND pWnd;
|
||||
FLASHWINFO finfo = {0};
|
||||
BOOL Ret = TRUE;
|
||||
|
||||
return 1;
|
||||
UserEnterExclusive();
|
||||
|
||||
_SEH2_TRY
|
||||
{
|
||||
ProbeForRead(pfwi, sizeof(FLASHWINFO), sizeof(ULONG));
|
||||
RtlCopyMemory(&finfo, pfwi, sizeof(FLASHWINFO));
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
SetLastNtError(_SEH2_GetExceptionCode());
|
||||
Ret = FALSE;
|
||||
}
|
||||
_SEH2_END
|
||||
|
||||
if (!Ret) goto Exit;
|
||||
|
||||
if (!(pWnd = (PWND)UserGetObject(gHandleTable, finfo.hwnd, otWindow)) ||
|
||||
finfo.cbSize != sizeof(FLASHWINFO) ||
|
||||
finfo.dwFlags & ~(FLASHW_ALL|FLASHW_TIMER|FLASHW_TIMERNOFG) )
|
||||
{
|
||||
EngSetLastError(ERROR_INVALID_PARAMETER);
|
||||
Ret = FALSE;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
//Ret = IntFlashWindowEx(pWnd, &finfo);
|
||||
|
||||
Exit:
|
||||
UserLeave();
|
||||
return Ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -17,9 +17,12 @@ BOOL InitSysParams();
|
|||
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
PTHREADINFO gptiCurrent = NULL;
|
||||
ERESOURCE UserLock;
|
||||
ATOM AtomMessage; // Window Message atom.
|
||||
ATOM AtomWndObj; // Window Object atom.
|
||||
ATOM AtomLayer; // Window Layer atom.
|
||||
ATOM AtomFlashWndState; // Window Flash State atom.
|
||||
BOOL gbInitialized;
|
||||
HINSTANCE hModClient = NULL;
|
||||
BOOL ClientPfnInit = FALSE;
|
||||
|
@ -46,6 +49,8 @@ InitUserAtoms(VOID)
|
|||
gpsi->atomContextHelpIdProp = IntAddGlobalAtom(L"SysCH", TRUE);
|
||||
|
||||
AtomWndObj = IntAddGlobalAtom(L"SysWNDO", TRUE);
|
||||
AtomLayer = IntAddGlobalAtom(L"SysLayer", TRUE);
|
||||
AtomFlashWndState = IntAddGlobalAtom(L"FlashWState", TRUE);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
@ -222,6 +227,7 @@ VOID FASTCALL UserEnterExclusive(VOID)
|
|||
ASSERT_NOGDILOCKS();
|
||||
KeEnterCriticalRegion();
|
||||
ExAcquireResourceExclusiveLite(&UserLock, TRUE);
|
||||
gptiCurrent = PsGetCurrentThreadWin32Thread();
|
||||
}
|
||||
|
||||
VOID FASTCALL UserLeave(VOID)
|
||||
|
|
Loading…
Reference in a new issue