On Tue, 17 Jul 2012 08:14:15 -0400 Brian Hinz <bph...@users.sourceforge.net> wrote:
> Completely reproducible. I only sent a couple of screenshots, but it's > nearly unusable because the background is painted over on almost any menu, > textbox, etc. DeferUpdate=0 paints the background instantly, so that the > menu is never seen, setting it high shows the menu briefly and then it's > painted over. Just like with the borders, a client refresh request > repaints everything correctly. Found it. The CopyArea operation can have any pixmap as the source, meaning the coordinates might be wrong (did I mention using pixmaps was problematic? :)). Try the updated patch. Rgds -- Pierre Ossman Software Development Cendio AB http://cendio.com Teknikringen 8 http://twitter.com/ThinLinc 583 30 Linköping http://facebook.com/ThinLinc Phone: +46-13-214600 http://plus.google.com/112509906846170010689 A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing?
Index: vncHooks.cc =================================================================== --- vncHooks.cc (revision 25497) +++ vncHooks.cc (working copy) @@ -750,7 +750,7 @@ }; -// ValidateGC - wrap the "ops" if a viewable window +// ValidateGC - wrap the "ops" if a viewable window OR the screen pixmap static void vncHooksValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable) @@ -762,7 +762,9 @@ (*pGC->funcs->ValidateGC) (pGC, changes, pDrawable); u.vncHooksGC->wrappedOps = 0; - if (pDrawable->type == DRAWABLE_WINDOW && ((WindowPtr) pDrawable)->viewable) { + if ((pDrawable->type == DRAWABLE_WINDOW && + ((WindowPtr) pDrawable)->viewable) || + (pDrawable == &pGC->pScreen->GetScreenPixmap(pGC->pScreen)->drawable)) { u.vncHooksGC->wrappedOps = pGC->ops; DBGPRINT((stderr,"vncHooksValidateGC: wrapped GC ops\n")); } @@ -842,7 +844,7 @@ { GC_OP_UNWRAPPER(pDrawable, pGC, FillSpans); - RegionHelper changed(pScreen, &((WindowPtr)pDrawable)->borderClip); + RegionHelper changed(pScreen, pGC->pCompositeClip); (*pGC->ops->FillSpans) (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); @@ -858,7 +860,7 @@ { GC_OP_UNWRAPPER(pDrawable, pGC, SetSpans); - RegionHelper changed(pScreen, &((WindowPtr)pDrawable)->borderClip); + RegionHelper changed(pScreen, pGC->pCompositeClip); (*pGC->ops->SetSpans) (pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted); @@ -910,16 +912,23 @@ RegionHelper src(pScreen); - if ((pSrc->type == DRAWABLE_WINDOW) && (pSrc->pScreen == pScreen)) { + // The source of the data has to be something that's on screen. + // This means either a window, or the screen pixmap. + if ((pSrc->pScreen == pScreen) && + ((pSrc->type == DRAWABLE_WINDOW) || + (pSrc == &pScreen->GetScreenPixmap(pScreen)->drawable))) { box.x1 = srcx + pSrc->x; box.y1 = srcy + pSrc->y; box.x2 = box.x1 + w; box.y2 = box.y1 + h; src.init(&box, 0); - if (REGION_NOTEMPTY(pScreen, &((WindowPtr)pSrc)->clipList)) { - REGION_INTERSECT(pScreen, src.reg, src.reg, &((WindowPtr)pSrc)->clipList); + + if ((pSrc->type == DRAWABLE_WINDOW) && + REGION_NOTEMPTY(pScreen, &((WindowPtr)pSrc)->clipList)) { + REGION_INTERSECT(pScreen, src.reg, src.reg, &((WindowPtr)pSrc)->clipList); } + REGION_TRANSLATE(pScreen, src.reg, dstx + pDst->x - srcx - pSrc->x, dsty + pDst->y - srcy - pSrc->y);
signature.asc
Description: PGP signature
------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________ Tigervnc-devel mailing list Tigervnc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tigervnc-devel