Fixed an old typo bug from rev 3450 by dwelch. Add support for DCX_NORESETATTRS and fixed up IntWindowFromDC.

svn path=/trunk/; revision=29394
This commit is contained in:
James Tabor 2007-10-05 06:47:42 +00:00
parent fe4f628972
commit 853d34afaf

View file

@ -247,6 +247,8 @@ DceReleaseDC(DCE* dce, BOOL EndPaint)
} }
if (dce->DCXFlags & DCX_CACHE) if (dce->DCXFlags & DCX_CACHE)
{
if (!(dce->DCXFlags & DCX_NORESETATTRS))
{ {
/* make the DC clean so that SetDCState doesn't try to update the vis rgn */ /* make the DC clean so that SetDCState doesn't try to update the vis rgn */
IntGdiSetHookFlags(dce->hDC, DCHF_VALIDATEVISRGN); IntGdiSetHookFlags(dce->hDC, DCHF_VALIDATEVISRGN);
@ -265,6 +267,7 @@ DceReleaseDC(DCE* dce, BOOL EndPaint)
dce->DCXFlags |= DCX_DCEEMPTY; dce->DCXFlags |= DCX_DCEEMPTY;
} }
} }
}
return 1; return 1;
} }
@ -400,7 +403,7 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
if (Flags & DCX_NOCLIPCHILDREN) if (Flags & DCX_NOCLIPCHILDREN)
{ {
Flags |= DCX_CACHE; Flags |= DCX_CACHE;
Flags |= ~(DCX_PARENTCLIP | DCX_CLIPCHILDREN); Flags &= ~(DCX_PARENTCLIP | DCX_CLIPCHILDREN);
} }
if (Flags & DCX_WINDOW) if (Flags & DCX_WINDOW)
@ -475,6 +478,12 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
{ {
UpdateVisRgn = FALSE; /* updated automatically, via DCHook() */ UpdateVisRgn = FALSE; /* updated automatically, via DCHook() */
} }
else
{
/* we should free dce->clip_rgn here, but Windows apparently doesn't */
Dce->DCXFlags &= ~(DCX_EXCLUDERGN | DCX_INTERSECTRGN);
Dce->hClipRgn = NULL;
}
#if 1 /* FIXME */ #if 1 /* FIXME */
UpdateVisRgn = TRUE; UpdateVisRgn = TRUE;
#endif #endif
@ -592,17 +601,18 @@ HWND FASTCALL
IntWindowFromDC(HDC hDc) IntWindowFromDC(HDC hDc)
{ {
DCE *Dce; DCE *Dce;
HWND Ret = NULL;
KeEnterCriticalRegion(); KeEnterCriticalRegion();
for (Dce = FirstDce; Dce != NULL; Dce = Dce->next) for (Dce = FirstDce; Dce != NULL; Dce = Dce->next)
{ {
if(Dce->hDC == hDc) if(Dce->hDC == hDc)
{ {
KeLeaveCriticalRegion(); Ret = Dce->hwndCurrent;
return Dce->hwndCurrent; break;
} }
} }
KeLeaveCriticalRegion(); KeLeaveCriticalRegion();
return 0; return Ret;
} }