fixed minimize, restore/maximize bugs

svn path=/trunk/; revision=7195
This commit is contained in:
Thomas Bluemel 2003-12-23 18:12:38 +00:00
parent ff1bec5cec
commit 96b1759d3d
3 changed files with 29 additions and 7 deletions

View file

@ -22,4 +22,7 @@ WinPosWindowFromPoint(PWINDOW_OBJECT ScopeWin, POINT WinPoint,
PWINDOW_OBJECT* Window); PWINDOW_OBJECT* Window);
VOID FASTCALL WinPosActivateOtherWindow(PWINDOW_OBJECT Window); VOID FASTCALL WinPosActivateOtherWindow(PWINDOW_OBJECT Window);
PINTERNALPOS FASTCALL WinPosInitInternalPos(PWINDOW_OBJECT WindowObject,
POINT pt, PRECT RestoreRect);
#endif /* _WIN32K_WINPOS_H */ #endif /* _WIN32K_WINPOS_H */

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -2644,6 +2644,8 @@ NtUserGetWindowPlacement(HWND hWnd,
WINDOWPLACEMENT *lpwndpl) WINDOWPLACEMENT *lpwndpl)
{ {
PWINDOW_OBJECT WindowObject; PWINDOW_OBJECT WindowObject;
PINTERNALPOS InternalPos;
POINT Size;
WINDOWPLACEMENT Safepl; WINDOWPLACEMENT Safepl;
NTSTATUS Status; NTSTATUS Status;
@ -2669,11 +2671,21 @@ NtUserGetWindowPlacement(HWND hWnd,
Safepl.flags = 0; Safepl.flags = 0;
Safepl.showCmd = ((WindowObject->Flags & WINDOWOBJECT_RESTOREMAX) ? SW_MAXIMIZE : SW_SHOWNORMAL); 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.rcNormalPosition = InternalPos->NormalRect;
Safepl.ptMinPosition = WindowObject->InternalPos->IconPos; Safepl.ptMinPosition = InternalPos->IconPos;
Safepl.ptMaxPosition = WindowObject->InternalPos->MaxPos; Safepl.ptMaxPosition = InternalPos->MaxPos;
}
else
{
IntReleaseWindowObject(WindowObject);
return FALSE;
} }
Status = MmCopyToCaller(lpwndpl, &Safepl, sizeof(WINDOWPLACEMENT)); Status = MmCopyToCaller(lpwndpl, &Safepl, sizeof(WINDOWPLACEMENT));

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * 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 * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -165,7 +165,7 @@ WinPosShowIconTitle(PWINDOW_OBJECT WindowObject, BOOL Show)
return(FALSE); return(FALSE);
} }
PINTERNALPOS STATIC STDCALL PINTERNALPOS FASTCALL
WinPosInitInternalPos(PWINDOW_OBJECT WindowObject, POINT pt, PRECT RestoreRect) WinPosInitInternalPos(PWINDOW_OBJECT WindowObject, POINT pt, PRECT RestoreRect)
{ {
INT XInc, YInc; INT XInc, YInc;
@ -293,6 +293,13 @@ WinPosMinMaximize(PWINDOW_OBJECT WindowObject, UINT ShowFlag, RECT* NewPos)
InternalPos->MaxPos.y, Size.x, Size.y); InternalPos->MaxPos.y, Size.x, Size.y);
break; break;
} }
else
{
*NewPos = InternalPos->NormalRect;
NewPos->right -= NewPos->left;
NewPos->bottom -= NewPos->top;
break;
}
} }
else else
{ {