diff --git a/reactos/subsystems/win32/win32k/include/window.h b/reactos/subsystems/win32/win32k/include/window.h index 6b5d2f25898..78f328ffa61 100644 --- a/reactos/subsystems/win32/win32k/include/window.h +++ b/reactos/subsystems/win32/win32k/include/window.h @@ -14,6 +14,8 @@ typedef struct _WINDOW_OBJECT *PWINDOW_OBJECT; extern ATOM AtomMessage; extern ATOM AtomWndObj; /* WNDOBJ list */ +extern ATOM AtomLayer; +extern ATOM AtomFlashWndState; BOOL FASTCALL UserUpdateUiState(PWND Wnd, WPARAM wParam); diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c index 8ab32f2887d..d4d3fd1f1bb 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c @@ -744,54 +744,6 @@ NtUserHardErrorControl( return 0; } -DWORD -APIENTRY -NtUserMinMaximize( - HWND hWnd, - UINT cmd, // Wine SW_ commands - BOOL Hide) -{ - RECTL NewPos; - UINT SwFlags; - PWND pWnd; - - TRACE("Enter NtUserMinMaximize\n"); - UserEnterExclusive(); - - pWnd = UserGetWindowObject(hWnd); - if ( !pWnd || // FIXME: - pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP - pWnd == IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND - { - goto Exit; - } - - if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY) - { - EngSetLastError(ERROR_INVALID_PARAMETER); - goto Exit; - } - - co_WinPosMinMaximize(pWnd, cmd, &NewPos); - - SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED; - - co_WinPosSetWindowPos( pWnd, - NULL, - NewPos.left, - NewPos.top, - NewPos.right, - NewPos.bottom, - SwFlags); - - co_WinPosShowWindow(pWnd, cmd); - -Exit: - TRACE("Leave NtUserMinMaximize\n"); - UserLeave(); - return 0; // Always NULL? -} - DWORD APIENTRY NtUserNotifyProcessCreate( @@ -1055,23 +1007,6 @@ NtUserGetLayeredWindowAttributes( return 0; } -BOOL -APIENTRY -NtUserValidateTimerCallback( - HWND hWnd, - WPARAM wParam, - LPARAM lParam) -{ - BOOL Ret = FALSE; - - UserEnterShared(); - - Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam); - - UserLeave(); - return Ret; -} - DWORD APIENTRY NtUserRemoteConnect( @@ -1156,48 +1091,6 @@ NtUserFillWindow(HWND hWndPaint, return 0; } -/* - * @implemented - */ -BOOL APIENTRY -NtUserFlashWindowEx(IN PFLASHWINFO pfwi) -{ - PWND pWnd; - FLASHWINFO finfo = {0}; - BOOL Ret = TRUE; - - 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; -} - /* * @unimplemented */ diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index f5d950064cd..c69c75b484f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -951,6 +951,47 @@ CLEANUP: END_CLEANUP; } +/* + * @implemented + */ +BOOL APIENTRY +NtUserFlashWindowEx(IN PFLASHWINFO pfwi) +{ + PWND pWnd; + FLASHWINFO finfo = {0}; + BOOL Ret = TRUE; + + 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; +} INT FASTCALL co_UserGetUpdateRgn(PWND Window, HRGN hRgn, BOOL bErase) diff --git a/reactos/subsystems/win32/win32k/ntuser/timer.c b/reactos/subsystems/win32/win32k/ntuser/timer.c index 917fc9bc028..254128afcbd 100644 --- a/reactos/subsystems/win32/win32k/ntuser/timer.c +++ b/reactos/subsystems/win32/win32k/ntuser/timer.c @@ -684,5 +684,22 @@ CLEANUP: END_CLEANUP; } +BOOL +APIENTRY +NtUserValidateTimerCallback( + HWND hWnd, + WPARAM wParam, + LPARAM lParam) +{ + BOOL Ret = FALSE; + + UserEnterShared(); + + Ret = ValidateTimerCallback(PsGetCurrentThreadWin32Thread(), lParam); + + UserLeave(); + return Ret; +} + /* EOF */ diff --git a/reactos/subsystems/win32/win32k/ntuser/winpos.c b/reactos/subsystems/win32/win32k/ntuser/winpos.c index c79d97fec31..510b01e82f6 100644 --- a/reactos/subsystems/win32/win32k/ntuser/winpos.c +++ b/reactos/subsystems/win32/win32k/ntuser/winpos.c @@ -1944,6 +1944,54 @@ Exit: return Ret; } +DWORD +APIENTRY +NtUserMinMaximize( + HWND hWnd, + UINT cmd, // Wine SW_ commands + BOOL Hide) +{ + RECTL NewPos; + UINT SwFlags; + PWND pWnd; + + TRACE("Enter NtUserMinMaximize\n"); + UserEnterExclusive(); + + pWnd = UserGetWindowObject(hWnd); + if ( !pWnd || // FIXME: + pWnd == IntGetDesktopWindow() || // pWnd->fnid == FNID_DESKTOP + pWnd == IntGetMessageWindow() ) // pWnd->fnid == FNID_MESSAGEWND + { + goto Exit; + } + + if ( cmd > SW_MAX || pWnd->state2 & WNDS2_INDESTROY) + { + EngSetLastError(ERROR_INVALID_PARAMETER); + goto Exit; + } + + co_WinPosMinMaximize(pWnd, cmd, &NewPos); + + SwFlags = Hide ? SWP_NOACTIVATE|SWP_NOZORDER|SWP_FRAMECHANGED : SWP_NOZORDER|SWP_FRAMECHANGED; + + co_WinPosSetWindowPos( pWnd, + NULL, + NewPos.left, + NewPos.top, + NewPos.right, + NewPos.bottom, + SwFlags); + + co_WinPosShowWindow(pWnd, cmd); + +Exit: + TRACE("Leave NtUserMinMaximize\n"); + UserLeave(); + return 0; // Always NULL? +} + /* * @implemented */