don't pass NULL handles to NtGdiCombineRgn
Modified: trunk/reactos/subsys/win32k/ntuser/painting.c
Modified: trunk/reactos/subsys/win32k/ntuser/windc.c
_____
Modified: trunk/reactos/subsys/win32k/ntuser/painting.c
--- trunk/reactos/subsys/win32k/ntuser/painting.c 2005-02-19
03:38:43 UTC (rev 13639)
+++ trunk/reactos/subsys/win32k/ntuser/painting.c 2005-02-19
11:13:41 UTC (rev 13640)
@@ -309,19 +309,20 @@
-Window->WindowRect.top);
hRgnNonClient = NtGdiCreateRectRgn(0, 0, 0, 0);
- GDIOBJ_SetOwnership(hRgnNonClient, NULL);
if (NtGdiCombineRgn(hRgnNonClient, Window->UpdateRegion,
hRgnWindow, RGN_DIFF) == NULLREGION)
{
- GDIOBJ_SetOwnership(hRgnNonClient, PsGetCurrentProcess());
NtGdiDeleteObject(hRgnNonClient);
hRgnNonClient = NULL;
}
+ else
+ {
+ GDIOBJ_SetOwnership(hRgnNonClient, NULL);
+ }
/*
* Remove the nonclient region from the standard update region.
*/
-
if (NtGdiCombineRgn(Window->UpdateRegion, Window->UpdateRegion,
hRgnWindow, RGN_AND) == NULLREGION)
{
@@ -336,12 +337,12 @@
}
else
{
- NtGdiCombineRgn(Window->NCUpdateRegion,
Window->NCUpdateRegion,
- hRgnNonClient, RGN_OR);
- if (NULL != hRgnNonClient)
+ if(NULL != hRgnNonClient)
{
- GDIOBJ_SetOwnership(hRgnNonClient, PsGetCurrentProcess());
- NtGdiDeleteObject(hRgnNonClient);
+ NtGdiCombineRgn(Window->NCUpdateRegion,
Window->NCUpdateRegion,
+ hRgnNonClient, RGN_OR);
+ GDIOBJ_SetOwnership(hRgnNonClient, PsGetCurrentProcess());
+ NtGdiDeleteObject(hRgnNonClient);
}
}
_____
Modified: trunk/reactos/subsys/win32k/ntuser/windc.c
--- trunk/reactos/subsys/win32k/ntuser/windc.c 2005-02-19 03:38:43 UTC
(rev 13639)
+++ trunk/reactos/subsys/win32k/ntuser/windc.c 2005-02-19 11:13:41 UTC
(rev 13640)
@@ -213,7 +213,7 @@
{
Dce->DCXFlags &= ~DCX_KEEPCLIPRGN;
}
- else if (Dce->hClipRgn > (HRGN) 1)
+ else if (Dce->hClipRgn != NULL)
{
GDIOBJ_SetOwnership(Dce->hClipRgn, PsGetCurrentProcess());
NtGdiDeleteObject(Dce->hClipRgn);
@@ -332,10 +332,21 @@
noparent:
if (Flags & DCX_INTERSECTRGN)
{
- NtGdiCombineRgn(hRgnVisible, hRgnVisible, Dce->hClipRgn,
RGN_AND);
+ if(Dce->hClipRgn != NULL)
+ {
+ NtGdiCombineRgn(hRgnVisible, hRgnVisible, Dce->hClipRgn,
RGN_AND);
+ }
+ else
+ {
+ if(hRgnVisible != NULL)
+ {
+ NtGdiDeleteObject(hRgnVisible);
+ }
+ hRgnVisible = NtGdiCreateRectRgn(0, 0, 0, 0);
+ }
}
- if (Flags & DCX_EXCLUDERGN)
+ if (Flags & DCX_EXCLUDERGN && Dce->hClipRgn != NULL)
{
NtGdiCombineRgn(hRgnVisible, hRgnVisible, Dce->hClipRgn,
RGN_DIFF);
}
Show replies by date