--- xorg-server-1.6.3/composite/compalloc.c 2009-07-07 13:48:57.000000000 -0400 +++ xorg-server-1.6.3-backclear/composite/compalloc.c 2009-09-09 11:55:03.000000000 -0400 @@ -483,65 +483,33 @@ pPixmap->screen_x = x; pPixmap->screen_y = y; - - if (pParent->drawable.depth == pWin->drawable.depth) - { - GCPtr pGC = GetScratchGC (pWin->drawable.depth, pScreen); - - /* - * Copy bits from the parent into the new pixmap so that it will - * have "reasonable" contents in case for background None areas. - */ - if (pGC) - { - XID val = IncludeInferiors; - - ValidateGC(&pPixmap->drawable, pGC); - dixChangeGC (serverClient, pGC, GCSubwindowMode, &val, NULL); - (*pGC->ops->CopyArea) (&pParent->drawable, - &pPixmap->drawable, - pGC, - x - pParent->drawable.x, - y - pParent->drawable.y, - w, h, 0, 0); - FreeScratchGC (pGC); - } - } - else + { - PictFormatPtr pSrcFormat = compWindowFormat (pParent); - PictFormatPtr pDstFormat = compWindowFormat (pWin); + /* + * Initialize new backing pixmap as fully transparent. + */ + PictFormatPtr pDstFormat = compWindowFormat (pWin); XID inferiors = IncludeInferiors; int error; - PicturePtr pSrcPicture = CreatePicture (None, - &pParent->drawable, - pSrcFormat, - CPSubwindowMode, - &inferiors, - serverClient, &error); - PicturePtr pDstPicture = CreatePicture (None, &pPixmap->drawable, pDstFormat, 0, 0, serverClient, &error); - if (pSrcPicture && pDstPicture) + if (pDstPicture) { - CompositePicture (PictOpSrc, - pSrcPicture, + CompositePicture (PictOpClear, + pDstPicture, NULL, pDstPicture, - x - pParent->drawable.x, - y - pParent->drawable.y, - 0, 0, 0, 0, w, h); + 0, 0, 0, 0, 0, 0, w, h); } - if (pSrcPicture) - FreePicture (pSrcPicture, 0); if (pDstPicture) FreePicture (pDstPicture, 0); } + return pPixmap; }