Author: greatlrd
Date: Thu Jul 26 22:36:58 2007
New Revision: 27878
URL:
http://svn.reactos.org/svn/reactos?rev=27878&view=rev
Log:
merge down 27768 : see bug 2055 (fixing restore / save right dc)
See issue #2055 for more details.
Modified:
branches/ros-branch-0_3_3/reactos/subsystems/win32/win32k/objects/dc.c
Modified: branches/ros-branch-0_3_3/reactos/subsystems/win32/win32k/objects/dc.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_3/reactos/subsys…
==============================================================================
--- branches/ros-branch-0_3_3/reactos/subsystems/win32/win32k/objects/dc.c (original)
+++ branches/ros-branch-0_3_3/reactos/subsystems/win32/win32k/objects/dc.c Thu Jul 26
22:36:58 2007
@@ -1811,42 +1811,44 @@
return FALSE;
}
- if(abs(SaveLevel) > dc->saveLevel || SaveLevel == 0)
+ if (SaveLevel < 0)
+ SaveLevel = dc->saveLevel + SaveLevel + 1;
+
+ if(SaveLevel < 0 || dc->saveLevel<SaveLevel)
{
DC_UnlockDc(dc);
return FALSE;
}
-
- /* FIXME this calc are not 100% correct I think ??*/
- if (SaveLevel < 0) SaveLevel = dc->saveLevel + 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;