From d52f661e5f9e70b9202f4ff4d613c1987328bc32 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 8 Mar 2015 23:36:25 +0000 Subject: [PATCH] [WIN32K] - Remove wrong flags when initializing a DC - Set DC::prgnattr before potentially passing it to the cleanup function after failure to create a handle. Add a comment that this is not actually enough. Will be fixed, once we use C++ - Increase GDI object stack levels to 20 svn path=/trunk/; revision=66615 --- reactos/win32ss/gdi/ntgdi/dclife.c | 9 +++++---- reactos/win32ss/gdi/ntgdi/gdiobj.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/reactos/win32ss/gdi/ntgdi/dclife.c b/reactos/win32ss/gdi/ntgdi/dclife.c index 05da834e9c1..c251ae37711 100644 --- a/reactos/win32ss/gdi/ntgdi/dclife.c +++ b/reactos/win32ss/gdi/ntgdi/dclife.c @@ -86,16 +86,17 @@ DC_AllocDcWithHandle(GDILOOBJTYPE eDcObjType) /* Set the actual DC type */ pdc->BaseObject.hHmgr = UlongToHandle(eDcObjType); + pdc->pdcattr = &pdc->dcattr; + /* Insert the object */ if (!GDIOBJ_hInsertObject(&pdc->BaseObject, GDI_OBJ_HMGR_POWNED)) { + /// FIXME: this is broken, since the DC is not initialized yet... DPRINT1("Could not insert DC into handle table.\n"); GDIOBJ_vFreeObject(&pdc->BaseObject); return NULL; } - pdc->pdcattr = &pdc->dcattr; - return pdc; } @@ -177,8 +178,6 @@ DC_vInitDc( pdc->erclBoundsApp.bottom = 0x00000333; // FIXME pdc->erclClip = pdc->erclBounds; pdc->co = gxcoTrivial; - - pdc->fs |= DC_SYNCHRONIZEACCESS | DC_ACCUM_APP | DC_PERMANANT | DC_DISPLAY; } else { @@ -891,11 +890,13 @@ IntGdiDeleteDC(HDC hDC, BOOL Force) if (!GreDeleteObject(hDC)) { DPRINT1("DC_FreeDC failed\n"); + return FALSE; } } else { DPRINT1("Attempted to Delete 0x%p currently being destroyed!!!\n", hDC); + return FALSE; } return TRUE; diff --git a/reactos/win32ss/gdi/ntgdi/gdiobj.h b/reactos/win32ss/gdi/ntgdi/gdiobj.h index 8cce86afb59..82146b5226c 100644 --- a/reactos/win32ss/gdi/ntgdi/gdiobj.h +++ b/reactos/win32ss/gdi/ntgdi/gdiobj.h @@ -5,7 +5,7 @@ #pragma once -#define GDI_OBJECT_STACK_LEVELS 10 +#define GDI_OBJECT_STACK_LEVELS 20 /* The first 10 entries are never used in windows, they are empty */ static const unsigned RESERVE_ENTRIES_COUNT = 10;