From 4d4d13015426243ec7d5758cc36e05120bd46bb4 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 6 Jun 2008 02:59:12 +0000 Subject: [PATCH] Attempt to fix bug 3259. Use IntGdiCleanDC for error checking. svn path=/trunk/; revision=33863 --- reactos/subsystems/win32/win32k/include/dc.h | 2 ++ reactos/subsystems/win32/win32k/ntuser/windc.c | 5 +---- reactos/subsystems/win32/win32k/objects/dc.c | 5 +++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/dc.h b/reactos/subsystems/win32/win32k/include/dc.h index 59467d12528..f77011fe0f7 100644 --- a/reactos/subsystems/win32/win32k/include/dc.h +++ b/reactos/subsystems/win32/win32k/include/dc.h @@ -261,6 +261,8 @@ typedef struct _GDIDEVICE #define DC_UnlockDc(pDC) \ GDIOBJ_UnlockObjByPtr ((POBJ)pDC) +extern PDC defaultDCstate; + NTSTATUS FASTCALL InitDcImpl(VOID); PGDIDEVICE FASTCALL IntEnumHDev(VOID); HDC FASTCALL DC_AllocDC(PUNICODE_STRING Driver); diff --git a/reactos/subsystems/win32/win32k/ntuser/windc.c b/reactos/subsystems/win32/win32k/ntuser/windc.c index 118475f3ba5..58d4f427a15 100644 --- a/reactos/subsystems/win32/win32k/ntuser/windc.c +++ b/reactos/subsystems/win32/win32k/ntuser/windc.c @@ -19,7 +19,6 @@ /* NOTE - I think we should store this per window station (including gdi objects) */ static PDCE FirstDce = NULL; -static PDC defaultDCstate = NULL; //static INT DCECount = 0; // Count of DCE in system. #define DCX_CACHECOMPAREMASK (DCX_CLIPSIBLINGS | DCX_CLIPCHILDREN | \ @@ -228,13 +227,11 @@ DceReleaseDC(DCE* dce, BOOL EndPaint) { if (!(dce->DCXFlags & DCX_NORESETATTRS)) { - PDC dc; /* make the DC clean so that SetDCState doesn't try to update the vis rgn */ IntGdiSetHookFlags(dce->hDC, DCHF_VALIDATEVISRGN); - dc = DC_LockDc ( dce->hDC ); // Clean the DC - IntGdiCopyFromSaveState(dc, defaultDCstate, dce->hDC ); // Was SetDCState. + if (!IntGdiCleanDC(dce->hDC)) return 0; dce->DCXFlags &= ~DCX_DCEBUSY; if (dce->DCXFlags & DCX_DCEDIRTY) diff --git a/reactos/subsystems/win32/win32k/objects/dc.c b/reactos/subsystems/win32/win32k/objects/dc.c index 3dd12d364c7..2c9d92da851 100644 --- a/reactos/subsystems/win32/win32k/objects/dc.c +++ b/reactos/subsystems/win32/win32k/objects/dc.c @@ -33,7 +33,7 @@ static GDIDEVICE PrimarySurface; PGDIDEVICE pPrimarySurface = &PrimarySurface; static KEVENT VideoDriverNeedsPreparation; static KEVENT VideoDriverPrepared; -static PDC defaultDCstate = NULL; +PDC defaultDCstate = NULL; NTSTATUS FASTCALL @@ -952,10 +952,11 @@ BOOL FASTCALL IntGdiCleanDC(HDC hDC) { PDC dc; + if (!hDC) return FALSE; dc = DC_LockDc ( hDC ); + if (!dc) return FALSE; // Clean the DC if (defaultDCstate) IntGdiCopyFromSaveState(dc, defaultDCstate, hDC ); - DC_UnlockDc(dc); return TRUE; }