diff --git a/miext/rootless/rootlessGC.c b/miext/rootless/rootlessGC.c index 5341267fb..6051367fc 100644 --- a/miext/rootless/rootlessGC.c +++ b/miext/rootless/rootlessGC.c @@ -412,10 +412,12 @@ static void RootlessCopyClip(GCPtr pgcDst, GCPtr pgcSrc) #define GC_IS_ROOT(pDst) ((pDst)->type == DRAWABLE_WINDOW \ && IsRoot ((WindowPtr) (pDst))) -#define GC_SKIP_ROOT(pDst) \ +#define GC_SKIP_ROOT(pDst, pGC) \ do { \ - if (GC_IS_ROOT (pDst)) \ + if (GC_IS_ROOT (pDst)) { \ + GCOP_WRAP(pGC); \ return; \ + } \ } while (0) @@ -425,7 +427,7 @@ RootlessFillSpans(DrawablePtr dst, GCPtr pGC, int nInit, { GC_SAVE(pGC); GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("fill spans start "); if (nInit <= 0) { @@ -481,7 +483,7 @@ RootlessSetSpans(DrawablePtr dst, GCPtr pGC, char *pSrc, int nspans, int sorted) { GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("set spans start "); if (nspans <= 0) { @@ -532,7 +534,7 @@ RootlessPutImage(DrawablePtr dst, GCPtr pGC, BoxRec box; GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("put image start "); RootlessStartDrawing((WindowPtr) dst); @@ -564,7 +566,10 @@ RootlessCopyArea(DrawablePtr pSrc, DrawablePtr dst, GCPtr pGC, GCOP_UNWRAP(pGC); if (GC_IS_ROOT(dst) || GC_IS_ROOT(pSrc)) + { + GCOP_WRAP(pGC); return NULL; /* nothing exposed */ + } RL_DEBUG_MSG("copy area start (src 0x%x, dst 0x%x)", pSrc, dst); @@ -614,7 +619,10 @@ static RegionPtr RootlessCopyPlane(DrawablePtr pSrc, DrawablePtr dst, GCOP_UNWRAP(pGC); if (GC_IS_ROOT(dst) || GC_IS_ROOT(pSrc)) + { + GCOP_WRAP(pGC); return NULL; /* nothing exposed */ + } RL_DEBUG_MSG("copy plane start "); @@ -651,7 +659,7 @@ static void RootlessPolyPoint(DrawablePtr dst, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit) { GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("polypoint start "); RootlessStartDrawing((WindowPtr) dst); @@ -745,7 +753,7 @@ static void RootlessPolylines(DrawablePtr dst, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit) { GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("poly lines start "); RootlessStartDrawing((WindowPtr) dst); @@ -820,7 +828,7 @@ static void RootlessPolySegment(DrawablePtr dst, GCPtr pGC, int nseg, xSegment *pSeg) { GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("poly segment start (win 0x%x)", dst); RootlessStartDrawing((WindowPtr) dst); @@ -891,7 +899,7 @@ static void RootlessPolyRectangle(DrawablePtr dst, GCPtr pGC, int nRects, xRectangle *pRects) { GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("poly rectangle start "); RootlessStartDrawing((WindowPtr) dst); @@ -952,7 +960,7 @@ static void RootlessPolyRectangle(DrawablePtr dst, GCPtr pGC, static void RootlessPolyArc(DrawablePtr dst, GCPtr pGC, int narcs, xArc *parcs) { GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("poly arc start "); RootlessStartDrawing((WindowPtr) dst); @@ -1008,7 +1016,7 @@ static void RootlessFillPolygon(DrawablePtr dst, GCPtr pGC, { GC_SAVE(pGC); GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("fill poly start (win 0x%x, fillStyle 0x%x)", dst, pGC->fillStyle); @@ -1082,7 +1090,7 @@ static void RootlessPolyFillRect(DrawablePtr dst, GCPtr pGC, { GC_SAVE(pGC); GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("fill rect start (win 0x%x, fillStyle 0x%x)", dst, pGC->fillStyle); @@ -1137,7 +1145,7 @@ static void RootlessPolyFillArc(DrawablePtr dst, GCPtr pGC, { GC_SAVE(pGC); GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("fill arc start "); if (narcsInit > 0) { @@ -1192,7 +1200,7 @@ static void RootlessImageText8(DrawablePtr dst, GCPtr pGC, { GC_SAVE(pGC); GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("imagetext8 start "); if (count > 0) { @@ -1246,7 +1254,10 @@ static int RootlessPolyText8(DrawablePtr dst, GCPtr pGC, GCOP_UNWRAP(pGC); if (GC_IS_ROOT(dst)) + { + GCOP_WRAP(pGC); return 0; + } RL_DEBUG_MSG("polytext8 start "); @@ -1284,7 +1295,7 @@ static void RootlessImageText16(DrawablePtr dst, GCPtr pGC, { GC_SAVE(pGC); GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("imagetext16 start "); if (count > 0) { @@ -1338,7 +1349,10 @@ static int RootlessPolyText16(DrawablePtr dst, GCPtr pGC, GCOP_UNWRAP(pGC); if (GC_IS_ROOT(dst)) + { + GCOP_WRAP(pGC); return 0; + } RL_DEBUG_MSG("polytext16 start "); @@ -1377,7 +1391,7 @@ static void RootlessImageGlyphBlt(DrawablePtr dst, GCPtr pGC, { GC_SAVE(pGC); GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("imageglyph start "); if (nglyphInit > 0) { @@ -1438,7 +1452,7 @@ static void RootlessPolyGlyphBlt(DrawablePtr dst, GCPtr pGC, CharInfoPtr *ppci, pointer pglyphBase) { GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("polyglyph start "); RootlessStartDrawing((WindowPtr) dst); @@ -1484,7 +1498,7 @@ RootlessPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr dst, BoxRec box; GCOP_UNWRAP(pGC); - GC_SKIP_ROOT(dst); + GC_SKIP_ROOT(dst, pGC); RL_DEBUG_MSG("push pixels start "); RootlessStartDrawing((WindowPtr) dst); diff --git a/miext/rootless/rootlessWindow.c b/miext/rootless/rootlessWindow.c index 1aa0b7749..84aa91dbf 100644 --- a/miext/rootless/rootlessWindow.c +++ b/miext/rootless/rootlessWindow.c @@ -838,13 +838,13 @@ RootlessCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) top = TopLevelParent(pWin); if (top == NULL) { RL_DEBUG_MSG("no parent\n"); - return; + goto out; } winRec = WINREC(top); if (winRec == NULL) { RL_DEBUG_MSG("not framed\n"); - return; + goto out; } /* Move region to window local coords */ @@ -867,6 +867,7 @@ RootlessCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) RootlessDamageRegion(pWin, prgnSrc); } +out: REGION_UNINIT(pScreen, &rgnDst); fbValidateDrawable(&pWin->drawable);