From cf0aabe39c55b9e7afc5013424be81faea3ec43c Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sat, 21 Jul 2007 18:41:06 +0000 Subject: [PATCH] patch from : Paolo Devoti (email devotip at tiscali dot it) ----------------------------------------------------------- Fixed right hdc being save/restore , the #if 0 change was not accpected. the code works fine without it. it was problare cause by another bug. all wine test for gdi32_winetest dc pass now, without any foualt. See issue #2055 for more details. svn path=/trunk/; revision=27768 --- reactos/subsystems/win32/win32k/objects/dc.c | 38 ++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dc.c b/reactos/subsystems/win32/win32k/objects/dc.c index f8460a212f4..9a45362eb47 100644 --- a/reactos/subsystems/win32/win32k/objects/dc.c +++ b/reactos/subsystems/win32/win32k/objects/dc.c @@ -1811,42 +1811,44 @@ NtGdiRestoreDC(HDC hDC, INT SaveLevel) return FALSE; } - if(abs(SaveLevel) > dc->saveLevel || SaveLevel == 0) + if (SaveLevel < 0) + SaveLevel = dc->saveLevel + SaveLevel + 1; + + if(SaveLevel < 0 || dc->saveLevelsaveLevel + SaveLevel + 1; success=TRUE; while (dc->saveLevel >= SaveLevel) { HDC hdcs = DC_GetNextDC (dc); - dcs = DC_LockDc (hdcs); + dcs = DC_LockDc (hdcs); if (dcs == NULL) { DC_UnlockDc(dc); return FALSE; } - DC_SetNextDC (dc, DC_GetNextDC (dcs)); - dcs->hNext = 0; - - if (--dc->saveLevel < SaveLevel) - { - DC_UnlockDc( dc ); + DC_SetNextDC (dc, DC_GetNextDC (dcs)); + dcs->hNext = 0; + + if (--dc->saveLevel < SaveLevel) + { + DC_UnlockDc( dc ); DC_UnlockDc( dcs ); - NtGdiSetDCState(hDC, hdcs); - //if (!PATH_AssignGdiPath( &dc->path, &dcs->path )) - /* FIXME: This might not be quite right, since we're - * returning FALSE but still destroying the saved DC state - */ - success=FALSE; - dc = DC_LockDc(hDC); + NtGdiSetDCState(hDC, hdcs); + + if (!PATH_AssignGdiPath( &dc->w.path, &dcs->w.path )) + { + /* FIXME: This might not be quite right, since we're + * returning FALSE but still destroying the saved DC state */ + success = FALSE; + } + dc = DC_LockDc(hDC); if(!dc) { return FALSE;