DIB sync bug fix
Duane Clark
dclark at akamail.com
Sun Jan 5 14:58:57 CST 2003
In the bitblt functions, if the source and destination DCs are the same
DC, the call:
X11DRV_UnlockDIBSection( physDevSrc, FALSE );
caused the DC to be labeled as "InSync" without committing the changes
resulting from the bitblt.
This fixes bug 885.
Changelog:
If bit/stretchblt source and destination DCs are the same,
make sure the changes are committed before unlocking.
-------------- next part --------------
Index: graphics/x11drv/bitblt.c
===================================================================
RCS file: /home/wine/wine/graphics/x11drv/bitblt.c,v
retrieving revision 1.44
diff -u -r1.44 bitblt.c
--- graphics/x11drv/bitblt.c 25 Jun 2002 23:29:51 -0000 1.44
+++ graphics/x11drv/bitblt.c 5 Jan 2003 20:50:15 -0000
@@ -1608,13 +1608,15 @@
}
X11DRV_CoerceDIBSection( physDevDst, DIB_Status_GdiMod, FALSE );
- X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
+ if (physDevDst != physDevSrc)
+ X11DRV_CoerceDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
result = BITBLT_InternalStretchBlt( physDevDst, xDst, yDst, width, height,
physDevSrc, xSrc, ySrc, width, height, rop );
END:
- X11DRV_UnlockDIBSection( physDevSrc, FALSE );
+ if (physDevDst != physDevSrc)
+ X11DRV_UnlockDIBSection( physDevSrc, FALSE );
X11DRV_UnlockDIBSection( physDevDst, TRUE );
return result;
@@ -1632,12 +1634,14 @@
BOOL result;
X11DRV_LockDIBSection( physDevDst, DIB_Status_GdiMod, FALSE );
- X11DRV_LockDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
+ if (physDevDst != physDevSrc)
+ X11DRV_LockDIBSection( physDevSrc, DIB_Status_GdiMod, FALSE );
result = BITBLT_InternalStretchBlt( physDevDst, xDst, yDst, widthDst, heightDst,
physDevSrc, xSrc, ySrc, widthSrc, heightSrc, rop );
- X11DRV_UnlockDIBSection( physDevSrc, FALSE );
+ if (physDevDst != physDevSrc)
+ X11DRV_UnlockDIBSection( physDevSrc, FALSE );
X11DRV_UnlockDIBSection( physDevDst, TRUE );
return result;
}
More information about the wine-patches
mailing list