On Fri, 13 Jul 2012 15:36:28 +0200 Pierre Ossman <oss...@cendio.se> wrote:
> > Not sure what the fix is. Starting to activate hooks even for just the > screen pixmap still means we have to audit the code for assumptions > about windows. Not terribly appealing. I'll dig around and see if I can > find something cleaner... > Bah. Can't really find a clean way of doing this without hooking the GC ops. So here is an attempt at making those pixmap safe, and hooking the screen pixmap (other pixmaps are still ignored). Adam, was there some background info to why we should use pCompositeClip? 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,19 @@ RegionHelper src(pScreen); - if ((pSrc->type == DRAWABLE_WINDOW) && (pSrc->pScreen == pScreen)) { + if (pSrc->pScreen == pScreen) { 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