mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 18:15:11 +00:00
Validate parent after copying bits in child
svn path=/trunk/; revision=7287
This commit is contained in:
parent
0e37a36d20
commit
b462f0f82b
3 changed files with 14 additions and 10 deletions
|
@ -7,6 +7,8 @@
|
|||
#include <include/msgqueue.h>
|
||||
#include <include/window.h>
|
||||
|
||||
VOID FASTCALL
|
||||
IntValidateParent(PWINDOW_OBJECT Child, HRGN ValidRegion);
|
||||
BOOL FASTCALL
|
||||
IntRedrawWindow(PWINDOW_OBJECT Wnd, const RECT* UpdateRect, HRGN UpdateRgn, ULONG Flags);
|
||||
BOOL FASTCALL
|
||||
|
|
|
@ -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: painting.c,v 1.54 2003/12/27 15:09:51 navaraf Exp $
|
||||
* $Id: painting.c,v 1.55 2003/12/28 10:56:20 gvg Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -59,7 +59,7 @@
|
|||
/* PRIVATE FUNCTIONS **********************************************************/
|
||||
|
||||
VOID FASTCALL
|
||||
IntValidateParent(PWINDOW_OBJECT Child)
|
||||
IntValidateParent(PWINDOW_OBJECT Child, HRGN ValidRegion)
|
||||
{
|
||||
HWND Parent;
|
||||
PWINDOW_OBJECT ParentWindow;
|
||||
|
@ -80,11 +80,11 @@ IntValidateParent(PWINDOW_OBJECT Child)
|
|||
*/
|
||||
OffsetX = Child->WindowRect.left - ParentWindow->WindowRect.left;
|
||||
OffsetY = Child->WindowRect.top - ParentWindow->WindowRect.top;
|
||||
NtGdiOffsetRgn(Child->UpdateRegion, OffsetX, OffsetY );
|
||||
NtGdiOffsetRgn(ValidRegion, OffsetX, OffsetY );
|
||||
NtGdiCombineRgn(ParentWindow->UpdateRegion, ParentWindow->UpdateRegion,
|
||||
Child->UpdateRegion, RGN_DIFF);
|
||||
ValidRegion, RGN_DIFF);
|
||||
/* FIXME: If the resulting region is empty, remove fake posted paint message */
|
||||
NtGdiOffsetRgn(Child->UpdateRegion, -OffsetX, -OffsetY);
|
||||
NtGdiOffsetRgn(ValidRegion, -OffsetX, -OffsetY);
|
||||
}
|
||||
}
|
||||
IntReleaseWindowObject(ParentWindow);
|
||||
|
@ -361,7 +361,7 @@ IntInvalidateWindows(PWINDOW_OBJECT Window, HRGN hRgn, ULONG Flags,
|
|||
|
||||
if (ValidateParent)
|
||||
{
|
||||
IntValidateParent(Window);
|
||||
IntValidateParent(Window, Window->UpdateRegion);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -562,7 +562,7 @@ IntRedrawWindow(PWINDOW_OBJECT Window, const RECT* UpdateRect, HRGN UpdateRgn,
|
|||
if (Window->UpdateRegion != NULL && Flags & RDW_ERASENOW)
|
||||
{
|
||||
/* Validate parent covered by region. */
|
||||
IntValidateParent(Window);
|
||||
IntValidateParent(Window, Window->UpdateRegion);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -827,7 +827,7 @@ NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* lPs)
|
|||
if (Window->UpdateRegion != NULL)
|
||||
{
|
||||
MsqDecPaintCountQueue(Window->MessageQueue);
|
||||
IntValidateParent(Window);
|
||||
IntValidateParent(Window, Window->UpdateRegion);
|
||||
NtGdiDeleteObject(Window->UpdateRegion);
|
||||
Window->UpdateRegion = NULL;
|
||||
}
|
||||
|
|
|
@ -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.75 2003/12/27 15:09:51 navaraf Exp $
|
||||
/* $Id: winpos.c,v 1.76 2003/12/28 10:56:20 gvg Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -895,7 +895,7 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
|||
* we don't have to crop (can't take anything away from an empty
|
||||
* region...)
|
||||
*/
|
||||
if (!(WinPos.flags & (SWP_NOSIZE | SWP_NOZORDER)) && RgnType != ERROR &&
|
||||
if (!(WinPos.flags & SWP_NOSIZE) && RgnType != ERROR &&
|
||||
RgnType != NULLREGION)
|
||||
{
|
||||
RECT ORect = OldClientRect;
|
||||
|
@ -940,6 +940,7 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
|||
* to create a copy of CopyRgn and pass that. We need CopyRgn later
|
||||
*/
|
||||
HRGN ClipRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
|
||||
|
||||
NtGdiCombineRgn(ClipRgn, CopyRgn, NULL, RGN_COPY);
|
||||
Dc = NtUserGetDCEx(Wnd, ClipRgn, DCX_WINDOW | DCX_CACHE |
|
||||
DCX_INTERSECTRGN | DCX_CLIPSIBLINGS);
|
||||
|
@ -949,6 +950,7 @@ WinPosSetWindowPos(HWND Wnd, HWND WndInsertAfter, INT x, INT y, INT cx,
|
|||
CopyRect.left + (OldWindowRect.left - NewWindowRect.left),
|
||||
CopyRect.top + (OldWindowRect.top - NewWindowRect.top), SRCCOPY);
|
||||
NtUserReleaseDC(Wnd, Dc);
|
||||
IntValidateParent(Window, CopyRgn);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue