}
else if (Dce->hrgnClip != NULL)
{
- REGION_FreeRgnByHandle(Dce->hrgnClip);
+ GDIOBJ_FreeObjByHandle(Dce->hrgnClip, GDI_OBJECT_TYPE_REGION|GDI_OBJECT_TYPE_SILENT);
}
Dce->hrgnClip = NULL;
static INT FASTCALL
DceReleaseDC(DCE* dce, BOOL EndPaint)
{
- if (DCX_DCEBUSY != (dce->DCXFlags & (DCX_DCEEMPTY | DCX_DCEBUSY)))
+ if (DCX_DCEBUSY != (dce->DCXFlags & (DCX_INDESTROY | DCX_DCEEMPTY | DCX_DCEBUSY)))
{
return 0;
}
}
else if (ClipRegion != NULL)
{
+ if (Dce->hrgnClip != NULL)
+ {
+ DPRINT1("Should not be called!!\n");
+ GDIOBJ_FreeObjByHandle(Dce->hrgnClip, GDI_OBJECT_TYPE_REGION|GDI_OBJECT_TYPE_SILENT);
+ Dce->hrgnClip = NULL;
+ }
Dce->hrgnClip = ClipRegion;
}
pLE = pdce->List.Flink;
ret = CONTAINING_RECORD(pLE, DCE, List);
+ pdce->DCXFlags |= DCX_INDESTROY;
+
if (Force && !GDIOBJ_OwnedByCurrentProcess(pdce->hDC))
{
DPRINT("Change ownership for DCE! -> %x\n" , pdce);
if (!Hit) IntGdiDeleteDC(pdce->hDC, TRUE);
- if (pdce->hrgnClip && ! (pdce->DCXFlags & DCX_KEEPCLIPRGN))
+ if (pdce->hrgnClip && !(pdce->DCXFlags & DCX_KEEPCLIPRGN))
{
- REGION_FreeRgnByHandle(pdce->hrgnClip);
+ GDIOBJ_FreeObjByHandle(pdce->hrgnClip, GDI_OBJECT_TYPE_REGION|GDI_OBJECT_TYPE_SILENT);
pdce->hrgnClip = NULL;
}
if (DCECount <= 0)
{
- DPRINT1("No Entry!\n");
+ DPRINT1("FreeWindowDCE No Entry! %d\n",DCECount);
return;
}
pDCE = CONTAINING_RECORD(pLE, DCE, List);
do
{
- if (!pDCE) break;
- if (IsListEmpty(&pDCE->List)) break;
+ if (!pDCE)
+ {
+ DPRINT1("FreeWindowDCE No DCE Pointer!\n");
+ break;
+ }
+ if (IsListEmpty(&pDCE->List))
+ {
+ DPRINT1("FreeWindowDCE List is Empty!!!!\n");
+ break;
+ }
if ( pDCE->hwndCurrent == Window->hSelf &&
!(pDCE->DCXFlags & DCX_DCEEMPTY) )
{
DPRINT("POWNED DCE going Cheap!! DCX_CACHE!! hDC-> %x \n", pDCE->hDC);
if (!IntGdiSetDCOwnerEx( pDCE->hDC, GDI_OBJ_HMGR_NONE, FALSE))
- return;
+ {
+ DPRINT1("Fail Owner Switch hDC-> %x \n", pDCE->hDC);
+ break;
+ }
/* Do not change owner so thread can clean up! */
}
else if (Window->Wnd->pcls->style & CS_OWNDC) /* owned DCE*/
}
else
{
+ DPRINT1("Not POWNED or CLASSDC hwndCurrent -> %x \n", pDCE->hwndCurrent);
ASSERT(FALSE);
}
}
{
if(!pDCE) break;
if(pLE == &LEDce) break;
- if (0 == (pDCE->DCXFlags & DCX_DCEEMPTY))
+ if (0 == (pDCE->DCXFlags & (DCX_DCEEMPTY|DCX_INDESTROY)))
{
if (Window->hSelf == pDCE->hwndCurrent)
{
Dce = CONTAINING_RECORD(pLE, DCE, List);
do
{
- if(Dce->hDC == hDc)
+ if (Dce->hDC == hDc)
{
- Ret = Dce->hwndCurrent;
+ if (Dce->DCXFlags & DCX_INDESTROY)
+ Ret = NULL;
+ else
+ Ret = Dce->hwndCurrent;
break;
}
pLE = Dce->List.Flink;