From 96b1759d3ded8e8d28debd8f7928c9312e659044 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Tue, 23 Dec 2003 18:12:38 +0000 Subject: [PATCH] fixed minimize, restore/maximize bugs svn path=/trunk/; revision=7195 --- reactos/subsys/win32k/include/winpos.h | 3 +++ reactos/subsys/win32k/ntuser/window.c | 22 +++++++++++++++++----- reactos/subsys/win32k/ntuser/winpos.c | 11 +++++++++-- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/reactos/subsys/win32k/include/winpos.h b/reactos/subsys/win32k/include/winpos.h index 06fc6436be4..5de7b8f358e 100644 --- a/reactos/subsys/win32k/include/winpos.h +++ b/reactos/subsys/win32k/include/winpos.h @@ -22,4 +22,7 @@ WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, POINT WinPoint, PWINDOW_OBJECT* Window); VOID FASTCALL WinPosActivateOtherWindow(PWINDOW_OBJECT Window); +PINTERNALPOS FASTCALL WinPosInitInternalPos(PWINDOW_OBJECT WindowObject, + POINT pt, PRECT RestoreRect); + #endif /* _WIN32K_WINPOS_H */ diff --git a/reactos/subsys/win32k/ntuser/window.c b/reactos/subsys/win32k/ntuser/window.c index 5adcadf3edb..8e81b62fb0c 100644 --- a/reactos/subsys/win32k/ntuser/window.c +++ b/reactos/subsys/win32k/ntuser/window.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: window.c,v 1.172 2003/12/23 08:48:59 navaraf Exp $ +/* $Id: window.c,v 1.173 2003/12/23 18:12:38 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -2644,6 +2644,8 @@ NtUserGetWindowPlacement(HWND hWnd, WINDOWPLACEMENT *lpwndpl) { PWINDOW_OBJECT WindowObject; + PINTERNALPOS InternalPos; + POINT Size; WINDOWPLACEMENT Safepl; NTSTATUS Status; @@ -2669,11 +2671,21 @@ NtUserGetWindowPlacement(HWND hWnd, Safepl.flags = 0; Safepl.showCmd = ((WindowObject->Flags & WINDOWOBJECT_RESTOREMAX) ? SW_MAXIMIZE : SW_SHOWNORMAL); - if (WindowObject->InternalPos) + + Size.x = WindowObject->WindowRect.left; + Size.y = WindowObject->WindowRect.top; + InternalPos = WinPosInitInternalPos(WindowObject, Size, + &WindowObject->WindowRect); + if (InternalPos) { - Safepl.rcNormalPosition = WindowObject->InternalPos->NormalRect; - Safepl.ptMinPosition = WindowObject->InternalPos->IconPos; - Safepl.ptMaxPosition = WindowObject->InternalPos->MaxPos; + Safepl.rcNormalPosition = InternalPos->NormalRect; + Safepl.ptMinPosition = InternalPos->IconPos; + Safepl.ptMaxPosition = InternalPos->MaxPos; + } + else + { + IntReleaseWindowObject(WindowObject); + return FALSE; } Status = MmCopyToCaller(lpwndpl, &Safepl, sizeof(WINDOWPLACEMENT)); diff --git a/reactos/subsys/win32k/ntuser/winpos.c b/reactos/subsys/win32k/ntuser/winpos.c index 5c5b5570562..b26452c4d88 100644 --- a/reactos/subsys/win32k/ntuser/winpos.c +++ b/reactos/subsys/win32k/ntuser/winpos.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: winpos.c,v 1.63 2003/12/23 17:56:55 weiden Exp $ +/* $Id: winpos.c,v 1.64 2003/12/23 18:12:38 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -165,7 +165,7 @@ WinPosShowIconTitle(PWINDOW_OBJECT WindowObject, BOOL Show) return(FALSE); } -PINTERNALPOS STATIC STDCALL +PINTERNALPOS FASTCALL WinPosInitInternalPos(PWINDOW_OBJECT WindowObject, POINT pt, PRECT RestoreRect) { INT XInc, YInc; @@ -293,6 +293,13 @@ WinPosMinMaximize(PWINDOW_OBJECT WindowObject, UINT ShowFlag, RECT* NewPos) InternalPos->MaxPos.y, Size.x, Size.y); break; } + else + { + *NewPos = InternalPos->NormalRect; + NewPos->right -= NewPos->left; + NewPos->bottom -= NewPos->top; + break; + } } else {