[PATCH resend] CreateRootWindow: Set root windows' drawable.x/y to -pScreen->x/y.

Jeremy Huddleston jeremyhu at apple.com
Wed Sep 21 13:36:00 PDT 2011


I'd like to test this on XQuartz as we have a "funky" use of Xinerama, but this doesn't seem to apply to current master.

Applying: CreateRootWindow: Set root windows' drawable.x/y to -pScreen->x/y.
error: patch failed: Xext/panoramiX.c:109
error: Xext/panoramiX.c: patch does not apply
Patch failed at 0001 CreateRootWindow: Set root windows' drawable.x/y to -pScreen->x/y.
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".


---

$ cat Xext/panoramiX.c.rej 
***************
*** 109,149 ****
  
  int (* SavedProcVector[256]) (ClientPtr client) = { NULL, };
  
- static DevPrivateKeyRec PanoramiXGCKeyRec;
- #define PanoramiXGCKey (&PanoramiXGCKeyRec)
  static DevPrivateKeyRec PanoramiXScreenKeyRec;
  #define PanoramiXScreenKey (&PanoramiXScreenKeyRec)
  
  typedef struct {
-   DDXPointRec clipOrg;
-   DDXPointRec patOrg;
-   GCFuncs *wrapFuncs;
- } PanoramiXGCRec, *PanoramiXGCPtr;
- 
- typedef struct {
-   CreateGCProcPtr	CreateGC;
    CloseScreenProcPtr	CloseScreen;
  } PanoramiXScreenRec, *PanoramiXScreenPtr;
  
- static void XineramaValidateGC(GCPtr, unsigned long, DrawablePtr);
- static void XineramaChangeGC(GCPtr, unsigned long);
- static void XineramaCopyGC(GCPtr, unsigned long, GCPtr);
- static void XineramaDestroyGC(GCPtr);
- 
- static GCFuncs XineramaGCFuncs = {
-     XineramaValidateGC, XineramaChangeGC, XineramaCopyGC, XineramaDestroyGC,
- };
- 
- #define Xinerama_GC_FUNC_PROLOGUE(pGC)\
-     PanoramiXGCPtr  pGCPriv = (PanoramiXGCPtr) \
- 	dixLookupPrivate(&(pGC)->devPrivates, PanoramiXGCKey); \
-     (pGC)->funcs = pGCPriv->wrapFuncs;
- 
- #define Xinerama_GC_FUNC_EPILOGUE(pGC)\
-     pGCPriv->wrapFuncs = (pGC)->funcs;\
-     (pGC)->funcs = &XineramaGCFuncs;
- 
- 
  static Bool
  XineramaCloseScreen (int i, ScreenPtr pScreen)
  {
--- 109,121 ----
  
  int (* SavedProcVector[256]) (ClientPtr client) = { NULL, };
  
  static DevPrivateKeyRec PanoramiXScreenKeyRec;
  #define PanoramiXScreenKey (&PanoramiXScreenKeyRec)
  
  typedef struct {
    CloseScreenProcPtr	CloseScreen;
  } PanoramiXScreenRec, *PanoramiXScreenPtr;
  
  static Bool
  XineramaCloseScreen (int i, ScreenPtr pScreen)
  {
***************
*** 165,304 ****
      return (*pScreen->CloseScreen) (i, pScreen);
  }
  
- static Bool
- XineramaCreateGC(GCPtr pGC)
- {
-     ScreenPtr pScreen = pGC->pScreen;
-     PanoramiXScreenPtr pScreenPriv = (PanoramiXScreenPtr)
- 	dixLookupPrivate(&pScreen->devPrivates, PanoramiXScreenKey);
-     Bool ret;
- 
-     pScreen->CreateGC = pScreenPriv->CreateGC;
-     if((ret = (*pScreen->CreateGC)(pGC))) {
- 	PanoramiXGCPtr pGCPriv = (PanoramiXGCPtr)
- 	    dixLookupPrivate(&pGC->devPrivates, PanoramiXGCKey);
- 
- 	pGCPriv->wrapFuncs = pGC->funcs;
-         pGC->funcs = &XineramaGCFuncs;
- 
- 	pGCPriv->clipOrg.x = pGC->clipOrg.x; 
- 	pGCPriv->clipOrg.y = pGC->clipOrg.y;
- 	pGCPriv->patOrg.x = pGC->patOrg.x;
- 	pGCPriv->patOrg.y = pGC->patOrg.y;
-     }
-     pScreen->CreateGC = XineramaCreateGC;
- 
-     return ret;
- }
- 
- static void
- XineramaValidateGC(
-    GCPtr         pGC,
-    unsigned long changes,
-    DrawablePtr   pDraw 
- ){
-     Xinerama_GC_FUNC_PROLOGUE (pGC);
- 
-     if((pDraw->type == DRAWABLE_WINDOW) && !(((WindowPtr)pDraw)->parent)) {
- 	/* the root window */
- 	int x_off = pGC->pScreen->x;
- 	int y_off = pGC->pScreen->y;
- 	int new_val;
- 
- 	new_val = pGCPriv->clipOrg.x - x_off;
- 	if(pGC->clipOrg.x != new_val) {
- 	    pGC->clipOrg.x = new_val;
- 	    changes |= GCClipXOrigin;
- 	}
- 	new_val = pGCPriv->clipOrg.y - y_off;
- 	if(pGC->clipOrg.y != new_val) {
- 	    pGC->clipOrg.y = new_val;
- 	    changes |= GCClipYOrigin;
- 	}
- 	new_val = pGCPriv->patOrg.x - x_off;
- 	if(pGC->patOrg.x != new_val) {
- 	    pGC->patOrg.x = new_val;
- 	    changes |= GCTileStipXOrigin;
- 	}
- 	new_val = pGCPriv->patOrg.y - y_off;
- 	if(pGC->patOrg.y != new_val) {
- 	    pGC->patOrg.y = new_val;
- 	    changes |= GCTileStipYOrigin;
- 	}
-     } else {
- 	if(pGC->clipOrg.x != pGCPriv->clipOrg.x) {
- 	    pGC->clipOrg.x = pGCPriv->clipOrg.x;
- 	    changes |= GCClipXOrigin;
- 	}
- 	if(pGC->clipOrg.y != pGCPriv->clipOrg.y) {
- 	    pGC->clipOrg.y = pGCPriv->clipOrg.y;
- 	    changes |= GCClipYOrigin;
- 	}
- 	if(pGC->patOrg.x != pGCPriv->patOrg.x) {
- 	    pGC->patOrg.x = pGCPriv->patOrg.x;
- 	    changes |= GCTileStipXOrigin;
- 	}
- 	if(pGC->patOrg.y != pGCPriv->patOrg.y) {
- 	    pGC->patOrg.y = pGCPriv->patOrg.y;
- 	    changes |= GCTileStipYOrigin;
- 	}
-     }
-   
-     (*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
-     Xinerama_GC_FUNC_EPILOGUE (pGC);
- }
- 
- static void
- XineramaDestroyGC(GCPtr pGC)
- {
-     Xinerama_GC_FUNC_PROLOGUE (pGC);
-     (*pGC->funcs->DestroyGC)(pGC);
-     Xinerama_GC_FUNC_EPILOGUE (pGC);
- }
- 
- static void
- XineramaChangeGC (
-     GCPtr	    pGC,
-     unsigned long   mask
- ){
-     Xinerama_GC_FUNC_PROLOGUE (pGC);
- 
-     if(mask & GCTileStipXOrigin)
- 	pGCPriv->patOrg.x = pGC->patOrg.x;
-     if(mask & GCTileStipYOrigin)
- 	pGCPriv->patOrg.y = pGC->patOrg.y;
-     if(mask & GCClipXOrigin)
- 	pGCPriv->clipOrg.x = pGC->clipOrg.x; 
-     if(mask & GCClipYOrigin)
- 	pGCPriv->clipOrg.y = pGC->clipOrg.y;
- 
-     (*pGC->funcs->ChangeGC) (pGC, mask);
-     Xinerama_GC_FUNC_EPILOGUE (pGC);
- }
- 
- static void
- XineramaCopyGC (
-     GCPtr	    pGCSrc, 
-     unsigned long   mask,
-     GCPtr	    pGCDst
- ){
-     PanoramiXGCPtr pSrcPriv = (PanoramiXGCPtr)
- 	dixLookupPrivate(&pGCSrc->devPrivates, PanoramiXGCKey);
-     Xinerama_GC_FUNC_PROLOGUE (pGCDst);
- 
-     if(mask & GCTileStipXOrigin)
-         pGCPriv->patOrg.x = pSrcPriv->patOrg.x;
-     if(mask & GCTileStipYOrigin)
-         pGCPriv->patOrg.y = pSrcPriv->patOrg.y;
-     if(mask & GCClipXOrigin)
-         pGCPriv->clipOrg.x = pSrcPriv->clipOrg.x;
-     if(mask & GCClipYOrigin)
-         pGCPriv->clipOrg.y = pSrcPriv->clipOrg.y;
- 
-     (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
-     Xinerama_GC_FUNC_EPILOGUE (pGCDst);
- }
- 
  int
  XineramaDeleteResource(pointer data, XID id)
  {
--- 136,141 ----
      return (*pScreen->CloseScreen) (i, pScreen);
  }
  
  int
  XineramaDeleteResource(pointer data, XID id)
  {


On Sep 18, 2011, at 19:36, Jamey Sharp wrote:

> A window's DrawableRec's x and y fields contain the offsets to be
> applied to protocol-visible window-relative coordinates in order to make
> those coordinates screen-relative instead. When Xinerama is active,
> coordinates relative to the root window need to be adjusted for each
> screen by the position of that screen in the logical root coordinate
> space, so (-pScreen->x) and (-pScreen->y) are the natural values for
> the root drawable's x and y offsets.
> 
> This eliminates special cases throughout the Xinerama layer that needed
> to adjust coordinates as specified by clients if they were used relative
> to a root window.
> 
> While this deletes Xinerama-layer code that modified request buffers
> (aside from XID rewrites), some GC ops implementations also modify the
> request buffer. (miPolyFill is an example.) Since Xinerama submits the
> same request buffer once for each screen, it needs to undo the changes
> made by these ops, even though it doesn't make its own modifications any
> more. So I've preserved all Xinerama code that unconditionally saved and
> restored parts of the request buffer. If the save/restore code was
> conditional on whether the drawable was a root window, then it was safe
> to delete.
> 
> Signed-off-by: Jamey Sharp <jamey at minilop.net>
> ---
> I tested this patch when I originally posted it last year using a pair
> of xf86-video-dummy screens and x11vnc. After rebasing, I've re-tested
> using two xf86-video-nested screens. It works great and deletes a bunch
> of code. I'd really appreciate review. If you can test in a multi-head
> setup and offer a Tested-by, that will probably make Keith happier...
> 
> Note that this is based on some other patches I have out for review
> right now:
> 
>        xnest: Delete unused nClipRects GC-private field. (reviewed)
>        Quit wrapping ChangeClip, CopyClip, and DestroyClip in GCFuncs.
>        Make GC clientClip always be a region.
> 
> It can be rebased without those, but since they touch the same code some
> simple merge conflicts come up.
> 
> Besides rebasing, there's one change since the last version: now I only
> set the root windows' origins if Xinerama is active. For some reason we
> allow screen origins to be set even without Xinerama, though they aren't
> meaningful then.
> 
> Xext/panoramiX.c      |  181 +-------------------------
> Xext/panoramiX.h      |    1 -
> Xext/panoramiXprocs.c |  354 ++++---------------------------------------------
> Xext/panoramiXsrv.h   |    3 +-
> Xext/shm.c            |   38 ++----
> Xext/xvdisp.c         |   28 ----
> Xi/xiquerypointer.c   |    5 -
> dix/window.c          |    6 +
> render/render.c       |  134 -------------------
> 9 files changed, 47 insertions(+), 703 deletions(-)
> 
> diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
> index 23a6d05..3138d40 100644
> --- a/Xext/panoramiX.c
> +++ b/Xext/panoramiX.c
> @@ -109,41 +109,13 @@ static void PanoramiXResetProc(ExtensionEntry*);
> 
> int (* SavedProcVector[256]) (ClientPtr client) = { NULL, };
> 
> -static DevPrivateKeyRec PanoramiXGCKeyRec;
> -#define PanoramiXGCKey (&PanoramiXGCKeyRec)
> static DevPrivateKeyRec PanoramiXScreenKeyRec;
> #define PanoramiXScreenKey (&PanoramiXScreenKeyRec)
> 
> typedef struct {
> -  DDXPointRec clipOrg;
> -  DDXPointRec patOrg;
> -  GCFuncs *wrapFuncs;
> -} PanoramiXGCRec, *PanoramiXGCPtr;
> -
> -typedef struct {
> -  CreateGCProcPtr	CreateGC;
>   CloseScreenProcPtr	CloseScreen;
> } PanoramiXScreenRec, *PanoramiXScreenPtr;
> 
> -static void XineramaValidateGC(GCPtr, unsigned long, DrawablePtr);
> -static void XineramaChangeGC(GCPtr, unsigned long);
> -static void XineramaCopyGC(GCPtr, unsigned long, GCPtr);
> -static void XineramaDestroyGC(GCPtr);
> -
> -static GCFuncs XineramaGCFuncs = {
> -    XineramaValidateGC, XineramaChangeGC, XineramaCopyGC, XineramaDestroyGC,
> -};
> -
> -#define Xinerama_GC_FUNC_PROLOGUE(pGC)\
> -    PanoramiXGCPtr  pGCPriv = (PanoramiXGCPtr) \
> -	dixLookupPrivate(&(pGC)->devPrivates, PanoramiXGCKey); \
> -    (pGC)->funcs = pGCPriv->wrapFuncs;
> -
> -#define Xinerama_GC_FUNC_EPILOGUE(pGC)\
> -    pGCPriv->wrapFuncs = (pGC)->funcs;\
> -    (pGC)->funcs = &XineramaGCFuncs;
> -
> -
> static Bool
> XineramaCloseScreen (int i, ScreenPtr pScreen)
> {
> @@ -151,7 +123,6 @@ XineramaCloseScreen (int i, ScreenPtr pScreen)
> 	dixLookupPrivate(&pScreen->devPrivates, PanoramiXScreenKey);
> 
>     pScreen->CloseScreen = pScreenPriv->CloseScreen;
> -    pScreen->CreateGC = pScreenPriv->CreateGC;
> 
>     if (pScreen->myNum == 0)
> 	RegionUninit(&PanoramiXScreenRegion);
> @@ -161,140 +132,6 @@ XineramaCloseScreen (int i, ScreenPtr pScreen)
>     return (*pScreen->CloseScreen) (i, pScreen);
> }
> 
> -static Bool
> -XineramaCreateGC(GCPtr pGC)
> -{
> -    ScreenPtr pScreen = pGC->pScreen;
> -    PanoramiXScreenPtr pScreenPriv = (PanoramiXScreenPtr)
> -	dixLookupPrivate(&pScreen->devPrivates, PanoramiXScreenKey);
> -    Bool ret;
> -
> -    pScreen->CreateGC = pScreenPriv->CreateGC;
> -    if((ret = (*pScreen->CreateGC)(pGC))) {
> -	PanoramiXGCPtr pGCPriv = (PanoramiXGCPtr)
> -	    dixLookupPrivate(&pGC->devPrivates, PanoramiXGCKey);
> -
> -	pGCPriv->wrapFuncs = pGC->funcs;
> -        pGC->funcs = &XineramaGCFuncs;
> -
> -	pGCPriv->clipOrg.x = pGC->clipOrg.x; 
> -	pGCPriv->clipOrg.y = pGC->clipOrg.y;
> -	pGCPriv->patOrg.x = pGC->patOrg.x;
> -	pGCPriv->patOrg.y = pGC->patOrg.y;
> -    }
> -    pScreen->CreateGC = XineramaCreateGC;
> -
> -    return ret;
> -}
> -
> -static void
> -XineramaValidateGC(
> -   GCPtr         pGC,
> -   unsigned long changes,
> -   DrawablePtr   pDraw 
> -){
> -    Xinerama_GC_FUNC_PROLOGUE (pGC);
> -
> -    if((pDraw->type == DRAWABLE_WINDOW) && !(((WindowPtr)pDraw)->parent)) {
> -	/* the root window */
> -	int x_off = pGC->pScreen->x;
> -	int y_off = pGC->pScreen->y;
> -	int new_val;
> -
> -	new_val = pGCPriv->clipOrg.x - x_off;
> -	if(pGC->clipOrg.x != new_val) {
> -	    pGC->clipOrg.x = new_val;
> -	    changes |= GCClipXOrigin;
> -	}
> -	new_val = pGCPriv->clipOrg.y - y_off;
> -	if(pGC->clipOrg.y != new_val) {
> -	    pGC->clipOrg.y = new_val;
> -	    changes |= GCClipYOrigin;
> -	}
> -	new_val = pGCPriv->patOrg.x - x_off;
> -	if(pGC->patOrg.x != new_val) {
> -	    pGC->patOrg.x = new_val;
> -	    changes |= GCTileStipXOrigin;
> -	}
> -	new_val = pGCPriv->patOrg.y - y_off;
> -	if(pGC->patOrg.y != new_val) {
> -	    pGC->patOrg.y = new_val;
> -	    changes |= GCTileStipYOrigin;
> -	}
> -    } else {
> -	if(pGC->clipOrg.x != pGCPriv->clipOrg.x) {
> -	    pGC->clipOrg.x = pGCPriv->clipOrg.x;
> -	    changes |= GCClipXOrigin;
> -	}
> -	if(pGC->clipOrg.y != pGCPriv->clipOrg.y) {
> -	    pGC->clipOrg.y = pGCPriv->clipOrg.y;
> -	    changes |= GCClipYOrigin;
> -	}
> -	if(pGC->patOrg.x != pGCPriv->patOrg.x) {
> -	    pGC->patOrg.x = pGCPriv->patOrg.x;
> -	    changes |= GCTileStipXOrigin;
> -	}
> -	if(pGC->patOrg.y != pGCPriv->patOrg.y) {
> -	    pGC->patOrg.y = pGCPriv->patOrg.y;
> -	    changes |= GCTileStipYOrigin;
> -	}
> -    }
> -  
> -    (*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
> -    Xinerama_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> -static void
> -XineramaDestroyGC(GCPtr pGC)
> -{
> -    Xinerama_GC_FUNC_PROLOGUE (pGC);
> -    (*pGC->funcs->DestroyGC)(pGC);
> -    Xinerama_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> -static void
> -XineramaChangeGC (
> -    GCPtr	    pGC,
> -    unsigned long   mask
> -){
> -    Xinerama_GC_FUNC_PROLOGUE (pGC);
> -
> -    if(mask & GCTileStipXOrigin)
> -	pGCPriv->patOrg.x = pGC->patOrg.x;
> -    if(mask & GCTileStipYOrigin)
> -	pGCPriv->patOrg.y = pGC->patOrg.y;
> -    if(mask & GCClipXOrigin)
> -	pGCPriv->clipOrg.x = pGC->clipOrg.x; 
> -    if(mask & GCClipYOrigin)
> -	pGCPriv->clipOrg.y = pGC->clipOrg.y;
> -
> -    (*pGC->funcs->ChangeGC) (pGC, mask);
> -    Xinerama_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> -static void
> -XineramaCopyGC (
> -    GCPtr	    pGCSrc, 
> -    unsigned long   mask,
> -    GCPtr	    pGCDst
> -){
> -    PanoramiXGCPtr pSrcPriv = (PanoramiXGCPtr)
> -	dixLookupPrivate(&pGCSrc->devPrivates, PanoramiXGCKey);
> -    Xinerama_GC_FUNC_PROLOGUE (pGCDst);
> -
> -    if(mask & GCTileStipXOrigin)
> -        pGCPriv->patOrg.x = pSrcPriv->patOrg.x;
> -    if(mask & GCTileStipYOrigin)
> -        pGCPriv->patOrg.y = pSrcPriv->patOrg.y;
> -    if(mask & GCClipXOrigin)
> -        pGCPriv->clipOrg.x = pSrcPriv->clipOrg.x;
> -    if(mask & GCClipYOrigin)
> -        pGCPriv->clipOrg.y = pSrcPriv->clipOrg.y;
> -
> -    (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
> -    Xinerama_GC_FUNC_EPILOGUE (pGCDst);
> -}
> -
> int
> XineramaDeleteResource(pointer data, XID id)
> {
> @@ -422,11 +259,6 @@ void PanoramiXExtensionInit(int argc, char *argv[])
> 	return;
>     }
> 
> -    if (!dixRegisterPrivateKey(&PanoramiXGCKeyRec, PRIVATE_GC, sizeof(PanoramiXGCRec))) {
> -	noPanoramiXExtension = TRUE;
> -	return;
> -    }
> -
>     PanoramiXNumScreens = screenInfo.numScreens;
>     if (PanoramiXNumScreens == 1) {		/* Only 1 screen 	*/
> 	noPanoramiXExtension = TRUE;
> @@ -456,10 +288,8 @@ void PanoramiXExtensionInit(int argc, char *argv[])
> 		return;
> 	   }
> 	
> -	   pScreenPriv->CreateGC = pScreen->CreateGC;
> 	   pScreenPriv->CloseScreen = pScreen->CloseScreen;
> 	
> -	   pScreen->CreateGC = XineramaCreateGC;
> 	   pScreen->CloseScreen = XineramaCloseScreen;
> 	}
> 
> @@ -1121,8 +951,7 @@ XineramaGetImageData(
>     unsigned int format,
>     unsigned long planemask,
>     char *data,
> -    int pitch,
> -    Bool isRoot
> +    int pitch
> ){
>     RegionRec SrcRegion, ScreenRegion, GrabRegion;
>     BoxRec SrcBox, *pbox;
> @@ -1133,12 +962,8 @@ XineramaGetImageData(
>     size = 0;
> 
>     /* find box in logical screen space */
> -    SrcBox.x1 = left;
> -    SrcBox.y1 = top;
> -    if(!isRoot) {
> -	SrcBox.x1 += pDraw->x + screenInfo.screens[0]->x;
> -	SrcBox.y1 += pDraw->y + screenInfo.screens[0]->y;
> -    }
> +    SrcBox.x1 = left + pDraw->x + screenInfo.screens[0]->x;
> +    SrcBox.y1 = top + pDraw->y + screenInfo.screens[0]->y;
>     SrcBox.x2 = SrcBox.x1 + width;
>     SrcBox.y2 = SrcBox.y1 + height;
> 
> diff --git a/Xext/panoramiX.h b/Xext/panoramiX.h
> index 71651e5..fcfac0e 100644
> --- a/Xext/panoramiX.h
> +++ b/Xext/panoramiX.h
> @@ -76,5 +76,4 @@ typedef struct {
> 
> #define IS_SHARED_PIXMAP(r) (((r)->type == XRT_PIXMAP) && (r)->u.pix.shared)
> 
> -#define IS_ROOT_DRAWABLE(d) (((d)->type == XRT_WINDOW) && (d)->u.win.root)
> #endif /* _PANORAMIX_H_ */
> diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c
> index 9ea4611..9bd63f6 100644
> --- a/Xext/panoramiXprocs.c
> +++ b/Xext/panoramiXprocs.c
> @@ -61,9 +61,7 @@ int PanoramiXCreateWindow(ClientPtr client)
>     REQUEST(xCreateWindowReq);
>     int pback_offset = 0, pbord_offset = 0, cmap_offset = 0;
>     int result, len, j;
> -    int orig_x, orig_y;
>     XID orig_visual, tmp;
> -    Bool parentIsRoot;
> 
>     REQUEST_AT_LEAST_SIZE(xCreateWindowReq);
> 
> @@ -125,17 +123,9 @@ int PanoramiXCreateWindow(ClientPtr client)
>     if (stuff->class == InputOnly)
> 	stuff->visual = CopyFromParent;
>     orig_visual = stuff->visual;
> -    orig_x = stuff->x;
> -    orig_y = stuff->y;
> -    parentIsRoot = (stuff->parent == screenInfo.screens[0]->root->drawable.id) ||
> -                   (stuff->parent == screenInfo.screens[0]->screensaver.wid);
>     FOR_NSCREENS_BACKWARD(j) {
>         stuff->wid = newWin->info[j].id;
>         stuff->parent = parent->info[j].id;
> -	if (parentIsRoot) {
> -	    stuff->x = orig_x - screenInfo.screens[j]->x;
> -	    stuff->y = orig_y - screenInfo.screens[j]->y;
> -	}
> 	if (backPix)
> 	    *((CARD32 *) &stuff[1] + pback_offset) = backPix->info[j].id;
> 	if (bordPix)
> @@ -308,8 +298,6 @@ int PanoramiXReparentWindow(ClientPtr client)
> {
>     PanoramiXRes *win, *parent;
>     int         result, j;
> -    int		x, y;
> -    Bool	parentIsRoot;
>     REQUEST(xReparentWindowReq);
> 
>     REQUEST_SIZE_MATCH(xReparentWindowReq);
> @@ -324,17 +312,9 @@ int PanoramiXReparentWindow(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    x = stuff->x;
> -    y = stuff->y;
> -    parentIsRoot = (stuff->parent == screenInfo.screens[0]->root->drawable.id) ||
> -                   (stuff->parent == screenInfo.screens[0]->screensaver.wid);
>     FOR_NSCREENS_BACKWARD(j) {
> 	stuff->window = win->info[j].id;
> 	stuff->parent = parent->info[j].id;
> -	if(parentIsRoot) {
> -	    stuff->x = x - screenInfo.screens[j]->x;
> -	    stuff->y = y - screenInfo.screens[j]->y;
> -	}
> 	result = (*SavedProcVector[X_ReparentWindow])(client);
>         if(result != Success) break;
>     }
> @@ -439,10 +419,7 @@ int PanoramiXConfigureWindow(ClientPtr client)
> {
>     PanoramiXRes *win;
>     PanoramiXRes *sib = NULL;
> -    WindowPtr   pWin;
> -    int         result, j, len, sib_offset = 0, x = 0, y = 0;
> -    int		x_offset = -1;
> -    int		y_offset = -1;
> +    int         result, j, len, sib_offset = 0;
>     REQUEST(xConfigureWindowReq);
> 
>     REQUEST_AT_LEAST_SIZE(xConfigureWindowReq);
> @@ -451,12 +428,6 @@ int PanoramiXConfigureWindow(ClientPtr client)
>     if (Ones(stuff->mask) != len)
>         return BadLength;
> 
> -    /* because we need the parent */
> -    result = dixLookupResourceByType((pointer *)&pWin, stuff->window,
> -				     RT_WINDOW, client, DixWriteAccess);
> -    if (result != Success)
> -	return result;
> -
>     result = dixLookupResourceByType((pointer *)&win, stuff->window,
> 				     XRT_WINDOW, client, DixWriteAccess);
>     if (result != Success)
> @@ -473,29 +444,12 @@ int PanoramiXConfigureWindow(ClientPtr client)
> 	}
>     }
> 
> -    if(pWin->parent && ((pWin->parent == screenInfo.screens[0]->root) ||
> -                        (pWin->parent->drawable.id == screenInfo.screens[0]->screensaver.wid)))
> -    {
> -	if ((Mask)stuff->mask & CWX) {
> -	    x_offset = 0;
> -	    x = *((CARD32 *)&stuff[1]);
> -	}
> -	if ((Mask)stuff->mask & CWY) {
> -	    y_offset = (x_offset == -1) ? 0 : 1;
> -	    y = *((CARD32 *) &stuff[1] + y_offset);
> -	}
> -    }
> -
>     /* have to go forward or you get expose events before 
> 	ConfigureNotify events */
>     FOR_NSCREENS_FORWARD(j) {
> 	stuff->window = win->info[j].id;
> 	if(sib)
> 	    *((CARD32 *) &stuff[1] + sib_offset) = sib->info[j].id;
> -	if(x_offset >= 0)
> -	    *((CARD32 *) &stuff[1] + x_offset) = x - screenInfo.screens[j]->x;
> -	if(y_offset >= 0)
> -	    *((CARD32 *) &stuff[1] + y_offset) = y - screenInfo.screens[j]->y;
> 	result = (*SavedProcVector[X_ConfigureWindow])(client);
>         if(result != Success) break;
>     }
> @@ -594,15 +548,8 @@ int PanoramiXTranslateCoords(ClientPtr client)
>     rep.sameScreen = xTrue;
>     rep.child = None;
> 
> -    if((pWin == screenInfo.screens[0]->root) ||
> -       (pWin->drawable.id == screenInfo.screens[0]->screensaver.wid))
> -    { 
> -	x = stuff->srcX - screenInfo.screens[0]->x;
> -	y = stuff->srcY - screenInfo.screens[0]->y;
> -    } else {
> -	x = pWin->drawable.x + stuff->srcX;
> -	y = pWin->drawable.y + stuff->srcY;
> -    }
> +    x = pWin->drawable.x + stuff->srcX;
> +    y = pWin->drawable.y + stuff->srcY;
>     pWin = pDst->firstChild;
>     while (pWin) {
> 	    BoxRec  box;
> @@ -631,12 +578,6 @@ int PanoramiXTranslateCoords(ClientPtr client)
>     }
>     rep.dstX = x - pDst->drawable.x;
>     rep.dstY = y - pDst->drawable.y;
> -    if((pDst == screenInfo.screens[0]->root) ||
> -       (pDst->drawable.id == screenInfo.screens[0]->screensaver.wid))
> -    {
> -	rep.dstX += screenInfo.screens[0]->x;
> -	rep.dstY += screenInfo.screens[0]->y;
> -    }
> 
>     WriteReplyToClient(client, sizeof(xTranslateCoordsReply), &rep);
>     return Success;
> @@ -957,8 +898,7 @@ int PanoramiXFreeGC(ClientPtr client)
> int PanoramiXClearToBackground(ClientPtr client)
> {
>     PanoramiXRes *win;
> -    int         result, j, x, y;
> -    Bool	isRoot;
> +    int         result, j;
>     REQUEST(xClearAreaReq);
> 
>     REQUEST_SIZE_MATCH(xClearAreaReq);
> @@ -968,15 +908,8 @@ int PanoramiXClearToBackground(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    x = stuff->x;
> -    y = stuff->y;
> -    isRoot = win->u.win.root;
>     FOR_NSCREENS_BACKWARD(j) {
> 	stuff->window = win->info[j].id;
> -	if(isRoot) {
> -	    stuff->x = x - screenInfo.screens[j]->x;
> -	    stuff->y = y - screenInfo.screens[j]->y;
> -	}
> 	result = (*SavedProcVector[X_ClearArea])(client);
> 	if(result != Success) break;
>     }
> @@ -997,10 +930,8 @@ int PanoramiXClearToBackground(ClientPtr client)
> 
> int PanoramiXCopyArea(ClientPtr client)
> {
> -    int			j, result, srcx, srcy, dstx, dsty;
> +    int			j, result;
>     PanoramiXRes	*gc, *src, *dst;
> -    Bool		srcIsRoot = FALSE;
> -    Bool		dstIsRoot = FALSE;
>     Bool		srcShared, dstShared;
>     REQUEST(xCopyAreaReq);
> 
> @@ -1028,13 +959,6 @@ int PanoramiXCopyArea(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    if((dst->type == XRT_WINDOW) && dst->u.win.root)
> -	dstIsRoot = TRUE;
> -    if((src->type == XRT_WINDOW) && src->u.win.root)
> -	srcIsRoot = TRUE;
> -
> -    srcx = stuff->srcX; srcy = stuff->srcY;
> -    dstx = stuff->dstX; dsty = stuff->dstY;
>     if((dst->type == XRT_PIXMAP) && (src->type == XRT_WINDOW)) {
> 	DrawablePtr drawables[MAXSCREENS];
> 	DrawablePtr pDst;
> @@ -1053,9 +977,8 @@ int PanoramiXCopyArea(ClientPtr client)
> 	if(!(data = calloc(1, stuff->height * pitch)))
> 	    return BadAlloc;
> 
> -	XineramaGetImageData(drawables, srcx, srcy, 
> -		stuff->width, stuff->height, ZPixmap, ~0, data, pitch, 
> -		srcIsRoot);
> +	XineramaGetImageData(drawables, stuff->srcX, stuff->srcY,
> +		stuff->width, stuff->height, ZPixmap, ~0, data, pitch);
> 
> 	FOR_NSCREENS_BACKWARD(j) {
> 	    stuff->gc = gc->info[j].id;
> @@ -1066,7 +989,7 @@ int PanoramiXCopyArea(ClientPtr client)
> 		return BadMatch;
> 	    }
> 
> -	    (*pGC->ops->PutImage) (pDst, pGC, pDst->depth, dstx, dsty, 
> +	    (*pGC->ops->PutImage) (pDst, pGC, pDst->depth, stuff->dstX, stuff->dstY,
> 				   stuff->width, stuff->height, 
> 				   0, ZPixmap, data);
> 
> @@ -1086,14 +1009,6 @@ int PanoramiXCopyArea(ClientPtr client)
> 	    stuff->dstDrawable = dst->info[j].id;
> 	    stuff->srcDrawable = src->info[j].id;
> 	    stuff->gc          = gc->info[j].id;
> - 	    if (srcIsRoot) {	
> -		stuff->srcX = srcx - screenInfo.screens[j]->x;
> -		stuff->srcY = srcy - screenInfo.screens[j]->y;
> -	    }
> - 	    if (dstIsRoot) {	
> -		stuff->dstX = dstx - screenInfo.screens[j]->x;
> -		stuff->dstY = dsty - screenInfo.screens[j]->y;
> -	    }
> 
> 	    VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, DixWriteAccess);
> 
> @@ -1116,10 +1031,6 @@ int PanoramiXCopyArea(ClientPtr client)
> 				stuff->width, stuff->height, 
> 				stuff->dstX, stuff->dstY);
> 	    if(pGC->graphicsExposures && pRgn) {
> -	       if(srcIsRoot) {
> -		   RegionTranslate(pRgn,
> -			    screenInfo.screens[j]->x, screenInfo.screens[j]->y);
> -	       }
> 	       RegionAppend(&totalReg, pRgn);
> 	       RegionDestroy(pRgn);
> 	    }
> @@ -1143,10 +1054,8 @@ int PanoramiXCopyArea(ClientPtr client)
> 
> int PanoramiXCopyPlane(ClientPtr client)
> {
> -    int			j, srcx, srcy, dstx, dsty, rc;
> +    int			j, rc;
>     PanoramiXRes	*gc, *src, *dst;
> -    Bool		srcIsRoot = FALSE;
> -    Bool		dstIsRoot = FALSE;
>     Bool		srcShared, dstShared;
>     DrawablePtr 	psrcDraw, pdstDraw = NULL;
>     GCPtr 		pGC = NULL;
> @@ -1177,28 +1086,12 @@ int PanoramiXCopyPlane(ClientPtr client)
>     if (rc != Success)
> 	return rc;
> 
> -    if((dst->type == XRT_WINDOW) && dst->u.win.root)
> -	dstIsRoot = TRUE;
> -    if((src->type == XRT_WINDOW) && src->u.win.root)
> -	srcIsRoot = TRUE;
> -
> -    srcx = stuff->srcX; srcy = stuff->srcY;
> -    dstx = stuff->dstX; dsty = stuff->dstY;
> - 
>     RegionNull(&totalReg);
>     FOR_NSCREENS_BACKWARD(j) {
> 	RegionPtr pRgn;
> 	stuff->dstDrawable = dst->info[j].id;
> 	stuff->srcDrawable = src->info[j].id;
> 	stuff->gc          = gc->info[j].id;
> -	if (srcIsRoot) {	
> -	    stuff->srcX = srcx - screenInfo.screens[j]->x;
> -	    stuff->srcY = srcy - screenInfo.screens[j]->y;
> -	}
> -	if (dstIsRoot) {	
> -	    stuff->dstX = dstx - screenInfo.screens[j]->x;
> -	    stuff->dstY = dsty - screenInfo.screens[j]->y;
> -	}
> 
> 	VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, DixWriteAccess);
> 	if (stuff->dstDrawable != stuff->srcDrawable) {
> @@ -1250,7 +1143,6 @@ int PanoramiXPolyPoint(ClientPtr client)
>     PanoramiXRes *gc, *draw;
>     int 	  result, npoint, j;
>     xPoint 	  *origPts;
> -    Bool	  isRoot;
>     REQUEST(xPolyPointReq);
> 
>     REQUEST_AT_LEAST_SIZE(xPolyPointReq);
> @@ -1268,7 +1160,6 @@ int PanoramiXPolyPoint(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
>     npoint = bytes_to_int32((client->req_len << 2) - sizeof(xPolyPointReq));
>     if (npoint > 0) {
>         origPts = malloc(npoint * sizeof(xPoint));
> @@ -1277,22 +1168,6 @@ int PanoramiXPolyPoint(ClientPtr client)
> 
>             if(j) memcpy(&stuff[1], origPts, npoint * sizeof(xPoint));
> 
> -            if (isRoot) {
> -                int x_off = screenInfo.screens[j]->x;
> -                int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -                    xPoint *pnts = (xPoint*)&stuff[1];
> -		    int i = (stuff->coordMode==CoordModePrevious) ? 1 : npoint;
> -
> -		    while(i--) {
> -			pnts->x -= x_off;
> -			pnts->y -= y_off;
> -			pnts++;
> -                    }
> -		}
> -            }
> -
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_PolyPoint])(client);
> @@ -1310,7 +1185,6 @@ int PanoramiXPolyLine(ClientPtr client)
>     PanoramiXRes *gc, *draw;
>     int 	  result, npoint, j;
>     xPoint 	  *origPts;
> -    Bool	  isRoot;
>     REQUEST(xPolyLineReq);
> 
>     REQUEST_AT_LEAST_SIZE(xPolyLineReq);
> @@ -1328,7 +1202,6 @@ int PanoramiXPolyLine(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
>     npoint = bytes_to_int32((client->req_len << 2) - sizeof(xPolyLineReq));
>     if (npoint > 0){
>         origPts = malloc(npoint * sizeof(xPoint));
> @@ -1337,22 +1210,6 @@ int PanoramiXPolyLine(ClientPtr client)
> 
>             if(j) memcpy(&stuff[1], origPts, npoint * sizeof(xPoint));
> 
> -            if (isRoot) {
> -                int x_off = screenInfo.screens[j]->x;
> -                int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -		    xPoint *pnts = (xPoint*)&stuff[1];
> -		    int i = (stuff->coordMode==CoordModePrevious) ? 1 : npoint;
> -
> -		    while(i--) {
> -			pnts->x -= x_off;
> -			pnts->y -= y_off;
> -			pnts++;
> -		    }
> -		}
> -            }
> -
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_PolyLine])(client);
> @@ -1367,10 +1224,9 @@ int PanoramiXPolyLine(ClientPtr client)
> 
> int PanoramiXPolySegment(ClientPtr client)
> {
> -    int		  result, nsegs, i, j;
> +    int		  result, nsegs, j;
>     PanoramiXRes *gc, *draw;
>     xSegment 	  *origSegs;
> -    Bool	  isRoot;
>     REQUEST(xPolySegmentReq);
> 
>     REQUEST_AT_LEAST_SIZE(xPolySegmentReq);
> @@ -1388,8 +1244,6 @@ int PanoramiXPolySegment(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
>     nsegs = (client->req_len << 2) - sizeof(xPolySegmentReq);
>     if(nsegs & 4) return BadLength;
>     nsegs >>= 3;
> @@ -1400,22 +1254,6 @@ int PanoramiXPolySegment(ClientPtr client)
> 
>             if(j) memcpy(&stuff[1], origSegs, nsegs * sizeof(xSegment));
> 
> -            if (isRoot) {
> -                int x_off = screenInfo.screens[j]->x;
> -                int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -		    xSegment *segs = (xSegment*)&stuff[1];
> -
> -		    for (i = nsegs; i--; segs++) {
> -			segs->x1 -= x_off;
> -			segs->x2 -= x_off;
> -			segs->y1 -= y_off;
> -			segs->y2 -= y_off;
> -		    }
> -		}
> -            }
> -
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_PolySegment])(client);
> @@ -1430,9 +1268,8 @@ int PanoramiXPolySegment(ClientPtr client)
> 
> int PanoramiXPolyRectangle(ClientPtr client)
> {
> -    int 	  result, nrects, i, j;
> +    int 	  result, nrects, j;
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
>     xRectangle 	  *origRecs;
>     REQUEST(xPolyRectangleReq);
> 
> @@ -1451,8 +1288,6 @@ int PanoramiXPolyRectangle(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
>     nrects = (client->req_len << 2) - sizeof(xPolyRectangleReq);
>     if(nrects & 4) return BadLength;
>     nrects >>= 3;
> @@ -1463,21 +1298,6 @@ int PanoramiXPolyRectangle(ClientPtr client)
> 
>             if(j) memcpy(&stuff[1], origRecs, nrects * sizeof(xRectangle));
> 
> -	    if (isRoot) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -
> -		if(x_off || y_off) {
> -	    	    xRectangle *rects = (xRectangle *) &stuff[1];
> -
> -		    for (i = nrects; i--; rects++) {
> -			rects->x -= x_off;
> -			rects->y -= y_off;
> -		    }
> -		}
> -	    } 
> -
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_PolyRectangle])(client);
> @@ -1492,9 +1312,8 @@ int PanoramiXPolyRectangle(ClientPtr client)
> 
> int PanoramiXPolyArc(ClientPtr client)
> {
> -    int 	  result, narcs, i, j;
> +    int 	  result, narcs, j;
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
>     xArc	  *origArcs;
>     REQUEST(xPolyArcReq);
> 
> @@ -1513,8 +1332,6 @@ int PanoramiXPolyArc(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
>     narcs = (client->req_len << 2) - sizeof(xPolyArcReq);
>     if(narcs % sizeof(xArc)) return BadLength;
>     narcs /= sizeof(xArc);
> @@ -1525,19 +1342,6 @@ int PanoramiXPolyArc(ClientPtr client)
> 
>             if(j) memcpy(&stuff[1], origArcs, narcs * sizeof(xArc));
> 
> -	    if (isRoot) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -	
> -		if(x_off || y_off) {
> -		    xArc *arcs = (xArc *) &stuff[1];
> -
> -		    for (i = narcs; i--; arcs++) {
> -			arcs->x -= x_off;
> -			arcs->y -= y_off;
> -		    }
> -		}
> -            }
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_PolyArc])(client);
> @@ -1554,7 +1358,6 @@ int PanoramiXFillPoly(ClientPtr client)
> {
>     int 	  result, count, j;
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
>     DDXPointPtr	  locPts;
>     REQUEST(xFillPolyReq);
> 
> @@ -1573,8 +1376,6 @@ int PanoramiXFillPoly(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
>     count = bytes_to_int32((client->req_len << 2) - sizeof(xFillPolyReq));
>     if (count > 0){
> 	locPts = malloc(count * sizeof(DDXPointRec));
> @@ -1583,22 +1384,6 @@ int PanoramiXFillPoly(ClientPtr client)
> 
> 	    if(j) memcpy(&stuff[1], locPts, count * sizeof(DDXPointRec));
> 
> -	    if (isRoot) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -		    DDXPointPtr pnts = (DDXPointPtr)&stuff[1];
> -		    int i = (stuff->coordMode==CoordModePrevious) ? 1 : count;
> -
> -		    while(i--) {
> -			pnts->x -= x_off;
> -			pnts->y -= y_off;
> -			pnts++;
> -		    }
> -		}
> -	    }
> -
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_FillPoly])(client);
> @@ -1613,9 +1398,8 @@ int PanoramiXFillPoly(ClientPtr client)
> 
> int PanoramiXPolyFillRectangle(ClientPtr client)
> {
> -    int 	  result, things, i, j;
> +    int 	  result, things, j;
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
>     xRectangle	  *origRects;
>     REQUEST(xPolyFillRectangleReq);
> 
> @@ -1634,8 +1418,6 @@ int PanoramiXPolyFillRectangle(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
>     things = (client->req_len << 2) - sizeof(xPolyFillRectangleReq);
>     if(things & 4) return BadLength;
>     things >>= 3;
> @@ -1646,20 +1428,6 @@ int PanoramiXPolyFillRectangle(ClientPtr client)
> 
> 	    if(j) memcpy(&stuff[1], origRects, things * sizeof(xRectangle));
> 
> -	    if (isRoot) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -		    xRectangle *rects = (xRectangle *) &stuff[1];
> -
> -		    for (i = things; i--; rects++) {
> -			rects->x -= x_off;
> -			rects->y -= y_off;
> -		    }
> -		}
> -	    }
> -
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_PolyFillRectangle])(client);
> @@ -1675,8 +1443,7 @@ int PanoramiXPolyFillRectangle(ClientPtr client)
> int PanoramiXPolyFillArc(ClientPtr client)
> {
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
> -    int 	  result, narcs, i, j;
> +    int 	  result, narcs, j;
>     xArc	  *origArcs;
>     REQUEST(xPolyFillArcReq);
> 
> @@ -1695,8 +1462,6 @@ int PanoramiXPolyFillArc(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
>     narcs = (client->req_len << 2) - sizeof(xPolyFillArcReq);
>     if (narcs % sizeof(xArc)) return BadLength;
>     narcs /= sizeof(xArc);
> @@ -1707,20 +1472,6 @@ int PanoramiXPolyFillArc(ClientPtr client)
> 
> 	    if(j) memcpy(&stuff[1], origArcs, narcs * sizeof(xArc));
> 
> -	    if (isRoot) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -		    xArc *arcs = (xArc *) &stuff[1];
> -
> -		    for (i = narcs; i--; arcs++) {
> -			arcs->x -= x_off;
> -			arcs->y -= y_off;
> -		    }
> -		}
> -	    }
> -
> 	    stuff->drawable = draw->info[j].id;
> 	    stuff->gc = gc->info[j].id;
> 	    result = (* SavedProcVector[X_PolyFillArc])(client);
> @@ -1736,8 +1487,7 @@ int PanoramiXPolyFillArc(ClientPtr client)
> int PanoramiXPutImage(ClientPtr client)
> {
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
> -    int		  j, result, orig_x, orig_y;
> +    int		  j, result;
>     REQUEST(xPutImageReq);
> 
>     REQUEST_AT_LEAST_SIZE(xPutImageReq);
> @@ -1755,15 +1505,7 @@ int PanoramiXPutImage(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
> -    orig_x = stuff->dstX;
> -    orig_y = stuff->dstY;
>     FOR_NSCREENS_BACKWARD(j){
> -	if (isRoot) {
> -	  stuff->dstX = orig_x - screenInfo.screens[j]->x;
> -	  stuff->dstY = orig_y - screenInfo.screens[j]->y;
> -	}
> 	stuff->drawable = draw->info[j].id;
> 	stuff->gc = gc->info[j].id;
> 	result = (* SavedProcVector[X_PutImage])(client);
> @@ -1779,7 +1521,6 @@ int PanoramiXGetImage(ClientPtr client)
>     DrawablePtr 	pDraw;
>     PanoramiXRes	*draw;
>     xGetImageReply	xgi;
> -    Bool		isRoot;
>     char		*pBuf;
>     int         	i, x, y, w, h, format, rc;
>     Mask		plane = 0, planemask;
> @@ -1818,20 +1559,15 @@ int PanoramiXGetImage(ClientPtr client)
>     format = stuff->format;
>     planemask = stuff->planeMask;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> +    /* check for being onscreen */
> +    if(screenInfo.screens[0]->x + pDraw->x + x < 0 ||
> +       screenInfo.screens[0]->x + pDraw->x + x + w > PanoramiXPixWidth ||
> +       screenInfo.screens[0]->y + pDraw->y + y < 0 ||
> +       screenInfo.screens[0]->y + pDraw->y + y + h > PanoramiXPixHeight)
> +	return BadMatch;
> 
> -    if(isRoot) {
> -      if( /* check for being onscreen */
> -	x < 0 || x + w > PanoramiXPixWidth ||
> -	y < 0 || y + h > PanoramiXPixHeight )
> -	    return BadMatch;
> -    } else {
> -      if( /* check for being onscreen */
> -	screenInfo.screens[0]->x + pDraw->x + x < 0 ||
> -	screenInfo.screens[0]->x + pDraw->x + x + w > PanoramiXPixWidth ||
> -	screenInfo.screens[0]->y + pDraw->y + y < 0 ||
> -	screenInfo.screens[0]->y + pDraw->y + y + h > PanoramiXPixHeight ||
> -	 /* check for being inside of border */
> +    if(!draw->u.win.root) {
> +      if( /* check for being inside of border */
>        	x < - wBorderWidth((WindowPtr)pDraw) ||
> 	x + w > wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width ||
> 	y < -wBorderWidth((WindowPtr)pDraw) ||
> @@ -1894,7 +1630,7 @@ int PanoramiXGetImage(ClientPtr client)
> 		memset(pBuf, 0, nlines * widthBytesLine);
> 
> 	    XineramaGetImageData(drawables, x, y + linesDone, w, nlines,
> -			format, planemask, pBuf, widthBytesLine, isRoot);
> +			format, planemask, pBuf, widthBytesLine);
> 
> 		(void)WriteToClient(client,
> 				    (int)(nlines * widthBytesLine),
> @@ -1912,7 +1648,7 @@ int PanoramiXGetImage(ClientPtr client)
> 
> 		    XineramaGetImageData(drawables, x, y + linesDone, w, 
> 					nlines, format, plane, pBuf,
> -					widthBytesLine, isRoot);
> +					widthBytesLine);
> 
> 		    (void)WriteToClient(client,
> 				    (int)(nlines * widthBytesLine),
> @@ -1936,9 +1672,7 @@ int
> PanoramiXPolyText8(ClientPtr client)
> {
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
>     int 	  result, j;
> -    int	 	  orig_x, orig_y;
>     REQUEST(xPolyTextReq);
> 
>     REQUEST_AT_LEAST_SIZE(xPolyTextReq);
> @@ -1956,17 +1690,9 @@ PanoramiXPolyText8(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
> -    orig_x = stuff->x;
> -    orig_y = stuff->y;
>     FOR_NSCREENS_BACKWARD(j){
> 	stuff->drawable = draw->info[j].id;
> 	stuff->gc = gc->info[j].id;
> -	if (isRoot) {
> -	    stuff->x = orig_x - screenInfo.screens[j]->x;
> -	    stuff->y = orig_y - screenInfo.screens[j]->y;
> -	}
> 	result = (*SavedProcVector[X_PolyText8])(client);
> 	if(result != Success) break;
>     }
> @@ -1977,9 +1703,7 @@ int
> PanoramiXPolyText16(ClientPtr client)
> {
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
>     int 	  result, j;
> -    int	 	  orig_x, orig_y;
>     REQUEST(xPolyTextReq);
> 
>     REQUEST_AT_LEAST_SIZE(xPolyTextReq);
> @@ -1997,17 +1721,9 @@ PanoramiXPolyText16(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
> -    orig_x = stuff->x;
> -    orig_y = stuff->y;
>     FOR_NSCREENS_BACKWARD(j){
> 	stuff->drawable = draw->info[j].id;
> 	stuff->gc = gc->info[j].id;
> -	if (isRoot) {
> -	    stuff->x = orig_x - screenInfo.screens[j]->x;
> -	    stuff->y = orig_y - screenInfo.screens[j]->y;
> -	}
> 	result = (*SavedProcVector[X_PolyText16])(client);
> 	if(result != Success) break;
>     }
> @@ -2019,8 +1735,6 @@ int PanoramiXImageText8(ClientPtr client)
> {
>     int 	  result, j;
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
> -    int		  orig_x, orig_y;
>     REQUEST(xImageTextReq);
> 
>     REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars);
> @@ -2038,17 +1752,9 @@ int PanoramiXImageText8(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
> -    orig_x = stuff->x;
> -    orig_y = stuff->y;
>     FOR_NSCREENS_BACKWARD(j){
> 	stuff->drawable = draw->info[j].id;
> 	stuff->gc = gc->info[j].id;
> -	if (isRoot) {
> -	    stuff->x = orig_x - screenInfo.screens[j]->x;
> -	    stuff->y = orig_y - screenInfo.screens[j]->y;
> -	}
> 	result = (*SavedProcVector[X_ImageText8])(client);
> 	if(result != Success) break;
>     }
> @@ -2060,8 +1766,6 @@ int PanoramiXImageText16(ClientPtr client)
> {
>     int 	  result, j;
>     PanoramiXRes *gc, *draw;
> -    Bool	  isRoot;
> -    int		  orig_x, orig_y;
>     REQUEST(xImageTextReq);
> 
>     REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1);
> @@ -2079,17 +1783,9 @@ int PanoramiXImageText16(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = IS_ROOT_DRAWABLE(draw);
> -
> -    orig_x = stuff->x;
> -    orig_y = stuff->y;
>     FOR_NSCREENS_BACKWARD(j){
> 	stuff->drawable = draw->info[j].id;
> 	stuff->gc = gc->info[j].id;
> -	if (isRoot) {
> -	    stuff->x = orig_x - screenInfo.screens[j]->x;
> -	    stuff->y = orig_y - screenInfo.screens[j]->y;
> -	}
> 	result = (*SavedProcVector[X_ImageText16])(client);
> 	if(result != Success) break;
>     }
> diff --git a/Xext/panoramiXsrv.h b/Xext/panoramiXsrv.h
> index 39d4952..b673052 100644
> --- a/Xext/panoramiXsrv.h
> +++ b/Xext/panoramiXsrv.h
> @@ -47,8 +47,7 @@ extern _X_EXPORT void XineramaGetImageData(
>     unsigned int format,
>     unsigned long planemask,
>     char *data,
> -    int pitch,
> -    Bool isRoot
> +    int pitch
> );
> 
> static inline void panoramix_setup_ids(PanoramiXRes *resource, 
> diff --git a/Xext/shm.c b/Xext/shm.c
> index 4141a8f..7fccb23 100644
> --- a/Xext/shm.c
> +++ b/Xext/shm.c
> @@ -741,9 +741,9 @@ ProcShmGetImage(ClientPtr client)
> static int 
> ProcPanoramiXShmPutImage(ClientPtr client)
> {
> -    int			 j, result, orig_x, orig_y;
> +    int			 j, result;
>     PanoramiXRes	*draw, *gc;
> -    Bool		 sendEvent, isRoot;
> +    Bool		 sendEvent;
> 
>     REQUEST(xShmPutImageReq);
>     REQUEST_SIZE_MATCH(xShmPutImageReq);
> @@ -758,20 +758,12 @@ ProcPanoramiXShmPutImage(ClientPtr client)
>     if (result != Success)
>         return result;
> 
> -    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
> -
> -    orig_x = stuff->dstX;
> -    orig_y = stuff->dstY;
>     sendEvent = stuff->sendEvent;
>     stuff->sendEvent = 0;
>     FOR_NSCREENS(j) {
> 	if(!j) stuff->sendEvent = sendEvent;
> 	stuff->drawable = draw->info[j].id;
> 	stuff->gc = gc->info[j].id;
> -	if (isRoot) {
> -	    stuff->dstX = orig_x - screenInfo.screens[j]->x;
> -	    stuff->dstY = orig_y - screenInfo.screens[j]->y;
> -	}
> 	result = ProcShmPutImage(client);
> 	if(result != Success) break;
>     }
> @@ -789,7 +781,6 @@ ProcPanoramiXShmGetImage(ClientPtr client)
>     int         	i, x, y, w, h, format, rc;
>     Mask		plane = 0, planemask;
>     long		lenPer = 0, length, widthBytesLine;
> -    Bool		isRoot;
> 
>     REQUEST(xShmGetImageReq);
> 
> @@ -822,20 +813,15 @@ ProcPanoramiXShmGetImage(ClientPtr client)
>     format = stuff->format;
>     planemask = stuff->planeMask;
> 
> -    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
> +    /* check for being onscreen */
> +    if(screenInfo.screens[0]->x + pDraw->x + x < 0 ||
> +       screenInfo.screens[0]->x + pDraw->x + x + w > PanoramiXPixWidth ||
> +       screenInfo.screens[0]->y + pDraw->y + y < 0 ||
> +       screenInfo.screens[0]->y + pDraw->y + y + h > PanoramiXPixHeight)
> +	return BadMatch;
> 
> -    if(isRoot) {
> -      if( /* check for being onscreen */
> -	x < 0 || x + w > PanoramiXPixWidth ||
> -	y < 0 || y + h > PanoramiXPixHeight )
> -	    return BadMatch;
> -    } else {
> -      if( /* check for being onscreen */
> -	screenInfo.screens[0]->x + pDraw->x + x < 0 ||
> -	screenInfo.screens[0]->x + pDraw->x + x + w > PanoramiXPixWidth ||
> -	screenInfo.screens[0]->y + pDraw->y + y < 0 ||
> -	screenInfo.screens[0]->y + pDraw->y + y + h > PanoramiXPixHeight ||
> -	 /* check for being inside of border */
> +    if(!draw->u.win.root) {
> +	if( /* check for being inside of border */
>        	x < - wBorderWidth((WindowPtr)pDraw) ||
> 	x + w > wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width ||
> 	y < -wBorderWidth((WindowPtr)pDraw) ||
> @@ -881,7 +867,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
>     else if (format == ZPixmap) {
> 	    XineramaGetImageData(drawables, x, y, w, h, format, planemask,
> 					shmdesc->addr + stuff->offset,
> -					widthBytesLine, isRoot);
> +					widthBytesLine);
>     } else {
> 
> 	length = stuff->offset;
> @@ -889,7 +875,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
> 	    if (planemask & plane) {
> 		XineramaGetImageData(drawables, x, y, w, h, 
> 				     format, plane, shmdesc->addr + length,
> -				     widthBytesLine, isRoot);
> +				     widthBytesLine);
> 		length += lenPer;
> 	    }
> 	}
> diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c
> index b968431..0fc78db 100644
> --- a/Xext/xvdisp.c
> +++ b/Xext/xvdisp.c
> @@ -1657,7 +1657,6 @@ XineramaXvShmPutImage(ClientPtr client)
>     REQUEST(xvShmPutImageReq);
>     PanoramiXRes *draw, *gc, *port;
>     Bool send_event = stuff->send_event;
> -    Bool isRoot;
>     int result, i, x, y;
> 
>     REQUEST_SIZE_MATCH(xvShmPutImageReq);
> @@ -1677,8 +1676,6 @@ XineramaXvShmPutImage(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
> -
>     x = stuff->drw_x;
>     y = stuff->drw_y;
> 
> @@ -1689,10 +1686,6 @@ XineramaXvShmPutImage(ClientPtr client)
> 	   stuff->gc = gc->info[i].id;
> 	   stuff->drw_x = x;
> 	   stuff->drw_y = y;
> -	   if(isRoot) {
> -		stuff->drw_x -= screenInfo.screens[i]->x;
> -		stuff->drw_y -= screenInfo.screens[i]->y;
> -	   }
> 	   stuff->send_event = (send_event && !i) ? 1 : 0;
> 
> 	   result = ProcXvShmPutImage(client);
> @@ -1709,7 +1702,6 @@ XineramaXvPutImage(ClientPtr client)
> {
>     REQUEST(xvPutImageReq);
>     PanoramiXRes *draw, *gc, *port;
> -    Bool isRoot;
>     int result, i, x, y;
> 
>     REQUEST_AT_LEAST_SIZE(xvPutImageReq);
> @@ -1729,8 +1721,6 @@ XineramaXvPutImage(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
> -
>     x = stuff->drw_x;
>     y = stuff->drw_y;
> 
> @@ -1741,10 +1731,6 @@ XineramaXvPutImage(ClientPtr client)
> 	   stuff->gc = gc->info[i].id;
> 	   stuff->drw_x = x;
> 	   stuff->drw_y = y;
> -	   if(isRoot) {
> -		stuff->drw_x -= screenInfo.screens[i]->x;
> -		stuff->drw_y -= screenInfo.screens[i]->y;
> -	   }
> 
> 	   result = ProcXvPutImage(client);
> 	}
> @@ -1757,7 +1743,6 @@ XineramaXvPutVideo(ClientPtr client)
> {
>     REQUEST(xvPutImageReq);
>     PanoramiXRes *draw, *gc, *port;
> -    Bool isRoot;
>     int result, i, x, y;
> 
>     REQUEST_AT_LEAST_SIZE(xvPutVideoReq);
> @@ -1777,8 +1762,6 @@ XineramaXvPutVideo(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
> -
>     x = stuff->drw_x;
>     y = stuff->drw_y;
> 
> @@ -1789,10 +1772,6 @@ XineramaXvPutVideo(ClientPtr client)
>            stuff->gc = gc->info[i].id;
>            stuff->drw_x = x;
>            stuff->drw_y = y;
> -           if(isRoot) {
> -                stuff->drw_x -= screenInfo.screens[i]->x;
> -                stuff->drw_y -= screenInfo.screens[i]->y;
> -           }
> 
>            result = ProcXvPutVideo(client);
>         }
> @@ -1805,7 +1784,6 @@ XineramaXvPutStill(ClientPtr client)
> {
>     REQUEST(xvPutImageReq);
>     PanoramiXRes *draw, *gc, *port;
> -    Bool isRoot;
>     int result, i, x, y;
> 
>     REQUEST_AT_LEAST_SIZE(xvPutImageReq);
> @@ -1825,8 +1803,6 @@ XineramaXvPutStill(ClientPtr client)
>     if (result != Success)
> 	return result;
> 
> -    isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
> -
>     x = stuff->drw_x;
>     y = stuff->drw_y;
> 
> @@ -1837,10 +1813,6 @@ XineramaXvPutStill(ClientPtr client)
>            stuff->gc = gc->info[i].id;
>            stuff->drw_x = x;
>            stuff->drw_y = y;
> -           if(isRoot) {
> -                stuff->drw_x -= screenInfo.screens[i]->x;
> -                stuff->drw_y -= screenInfo.screens[i]->y;
> -           }
> 
>            result = ProcXvPutStill(client);
>         }
> diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c
> index 5131799..8edbfcf 100644
> --- a/Xi/xiquerypointer.c
> +++ b/Xi/xiquerypointer.c
> @@ -184,11 +184,6 @@ ProcXIQueryPointer(ClientPtr client)
>     if(!noPanoramiXExtension) {
>         rep.root_x += FP1616(screenInfo.screens[0]->x, 0);
>         rep.root_y += FP1616(screenInfo.screens[0]->y, 0);
> -        if (stuff->win == rep.root)
> -        {
> -            rep.win_x += FP1616(screenInfo.screens[0]->x, 0);
> -            rep.win_y += FP1616(screenInfo.screens[0]->y, 0);
> -        }
>     }
> #endif
> 
> diff --git a/dix/window.c b/dix/window.c
> index 1953f02..ed928eb 100644
> --- a/dix/window.c
> +++ b/dix/window.c
> @@ -508,6 +508,12 @@ CreateRootWindow(ScreenPtr pScreen)
>     pWin->drawable.height = pScreen->height;
>     pWin->drawable.width = pScreen->width;
>     pWin->drawable.x = pWin->drawable.y = 0;
> +#ifdef PANORAMIX
> +    if(!noPanoramiXExtension) {
> +	pWin->drawable.x = -pScreen->x;
> +	pWin->drawable.y = -pScreen->y;
> +    }
> +#endif
> 
>     box.x1 = 0;
>     box.y1 = 0;
> diff --git a/render/render.c b/render/render.c
> index ebb1d63..d672cb7 100644
> --- a/render/render.c
> +++ b/render/render.c
> @@ -2831,7 +2831,6 @@ PanoramiXRenderComposite (ClientPtr client)
> {
>     PanoramiXRes	*src, *msk, *dst;
>     int			result = Success, j;
> -    xRenderCompositeReq	orig;
>     REQUEST(xRenderCompositeReq);
> 
>     REQUEST_SIZE_MATCH(xRenderCompositeReq);
> @@ -2840,30 +2839,11 @@ PanoramiXRenderComposite (ClientPtr client)
>     VERIFY_XIN_ALPHA (msk, stuff->mask, client, DixReadAccess);
>     VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess);
> 
> -    orig = *stuff;
> -    
>     FOR_NSCREENS_FORWARD(j) {
> 	stuff->src = src->info[j].id;
> -	if (src->u.pict.root)
> -	{
> -	    stuff->xSrc = orig.xSrc - screenInfo.screens[j]->x;
> -	    stuff->ySrc = orig.ySrc - screenInfo.screens[j]->y;
> -	}
> 	stuff->dst = dst->info[j].id;
> -	if (dst->u.pict.root)
> -	{
> -	    stuff->xDst = orig.xDst - screenInfo.screens[j]->x;
> -	    stuff->yDst = orig.yDst - screenInfo.screens[j]->y;
> -	}
> 	if (msk)
> -	{
> 	    stuff->mask = msk->info[j].id;
> -	    if (msk->u.pict.root)
> -	    {
> -		stuff->xMask = orig.xMask - screenInfo.screens[j]->x;
> -		stuff->yMask = orig.yMask - screenInfo.screens[j]->y;
> -	    }
> -	}
> 	result = (*PanoramiXSaveRenderVector[X_RenderComposite]) (client);
> 	if(result != Success) break;
>     }
> @@ -2877,8 +2857,6 @@ PanoramiXRenderCompositeGlyphs (ClientPtr client)
>     PanoramiXRes    *src, *dst;
>     int		    result = Success, j;
>     REQUEST(xRenderCompositeGlyphsReq);
> -    xGlyphElt	    origElt, *elt;
> -    INT16	    xSrc, ySrc;
> 
>     REQUEST_AT_LEAST_SIZE(xRenderCompositeGlyphsReq);
>     VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess);
> @@ -2887,23 +2865,9 @@ PanoramiXRenderCompositeGlyphs (ClientPtr client)
>     if (client->req_len << 2 >= (sizeof (xRenderCompositeGlyphsReq) +
> 				 sizeof (xGlyphElt)))
>     {
> -	elt = (xGlyphElt *) (stuff + 1);
> -	origElt = *elt;
> -	xSrc = stuff->xSrc;
> -	ySrc = stuff->ySrc;
> 	FOR_NSCREENS_FORWARD(j) {
> 	    stuff->src = src->info[j].id;
> -	    if (src->u.pict.root)
> -	    {
> -		stuff->xSrc = xSrc - screenInfo.screens[j]->x;
> -		stuff->ySrc = ySrc - screenInfo.screens[j]->y;
> -	    }
> 	    stuff->dst = dst->info[j].id;
> -	    if (dst->u.pict.root)
> -	    {
> -		elt->deltax = origElt.deltax - screenInfo.screens[j]->x;
> -		elt->deltay = origElt.deltay - screenInfo.screens[j]->y;
> -	    }
> 	    result = (*PanoramiXSaveRenderVector[stuff->renderReqType]) (client);
> 	    if(result != Success) break;
> 	}
> @@ -2930,23 +2894,6 @@ PanoramiXRenderFillRectangles (ClientPtr client)
> 	memcpy (extra, stuff + 1, extra_len);
> 	FOR_NSCREENS_FORWARD(j) {
> 	    if (j) memcpy (stuff + 1, extra, extra_len);
> -	    if (dst->u.pict.root)
> -	    {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -		    xRectangle	*rects = (xRectangle *) (stuff + 1);
> -		    int		i = extra_len / sizeof (xRectangle);
> -
> -		    while (i--)
> -		    {
> -			rects->x -= x_off;
> -			rects->y -= y_off;
> -			rects++;
> -		    }
> -		}
> -	    }
> 	    stuff->dst = dst->info[j].id;
> 	    result = (*PanoramiXSaveRenderVector[X_RenderFillRectangles]) (client);
> 	    if(result != Success) break;
> @@ -2979,29 +2926,6 @@ PanoramiXRenderTrapezoids(ClientPtr client)
> 
> 	FOR_NSCREENS_FORWARD(j) {
> 	    if (j) memcpy (stuff + 1, extra, extra_len);
> -	    if (dst->u.pict.root) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -                    xTrapezoid  *trap = (xTrapezoid *) (stuff + 1);
> -		    int         i = extra_len / sizeof (xTrapezoid);
> -
> -		    while (i--) {
> -			trap->top -= y_off;
> -			trap->bottom -= y_off;
> -			trap->left.p1.x -= x_off;
> -			trap->left.p1.y -= y_off;
> -			trap->left.p2.x -= x_off;
> -			trap->left.p2.y -= y_off;
> -			trap->right.p1.x -= x_off;
> -			trap->right.p1.y -= y_off;
> -			trap->right.p2.x -= x_off;
> -			trap->right.p2.y -= y_off;
> -			trap++;
> -		    }
> -		}
> -	    }
> 	    
>             stuff->src = src->info[j].id;
>             stuff->dst = dst->info[j].id;
> @@ -3039,25 +2963,6 @@ PanoramiXRenderTriangles(ClientPtr client)
> 
> 	FOR_NSCREENS_FORWARD(j) {
> 	    if (j) memcpy (stuff + 1, extra, extra_len);
> -	    if (dst->u.pict.root) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -                    xTriangle  *tri = (xTriangle *) (stuff + 1);
> -		    int         i = extra_len / sizeof (xTriangle);
> -
> -		    while (i--) {
> -			tri->p1.x -= x_off;
> -			tri->p1.y -= y_off;
> -			tri->p2.x -= x_off;
> -			tri->p2.y -= y_off;
> -			tri->p3.x -= x_off;
> -			tri->p3.y -= y_off;
> -			tri++;
> -		    }
> -		}
> -	    }
> 	    
>             stuff->src = src->info[j].id;
>             stuff->dst = dst->info[j].id;
> @@ -3095,21 +3000,6 @@ PanoramiXRenderTriStrip(ClientPtr client)
> 
> 	FOR_NSCREENS_FORWARD(j) {
> 	    if (j) memcpy (stuff + 1, extra, extra_len);
> -	    if (dst->u.pict.root) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -                    xPointFixed  *fixed = (xPointFixed *) (stuff + 1);
> -		    int         i = extra_len / sizeof (xPointFixed);
> -
> -		    while (i--) {
> -			fixed->x -= x_off;
> -			fixed->y -= y_off;
> -			fixed++;
> -		    }
> -		}
> -	    }
> 	    
>             stuff->src = src->info[j].id;
>             stuff->dst = dst->info[j].id;
> @@ -3147,21 +3037,6 @@ PanoramiXRenderTriFan(ClientPtr client)
> 
> 	FOR_NSCREENS_FORWARD(j) {
> 	    if (j) memcpy (stuff + 1, extra, extra_len);
> -	    if (dst->u.pict.root) {
> -		int x_off = screenInfo.screens[j]->x;
> -		int y_off = screenInfo.screens[j]->y;
> -
> -		if(x_off || y_off) {
> -                    xPointFixed  *fixed = (xPointFixed *) (stuff + 1);
> -		    int         i = extra_len / sizeof (xPointFixed);
> -
> -		    while (i--) {
> -			fixed->x -= x_off;
> -			fixed->y -= y_off;
> -			fixed++;
> -		    }
> -		}
> -	    }
> 	    
>             stuff->src = src->info[j].id;
>             stuff->dst = dst->info[j].id;
> @@ -3185,7 +3060,6 @@ PanoramiXRenderAddTraps (ClientPtr client)
>     REQUEST(xRenderAddTrapsReq);
>     char	    *extra;
>     int		    extra_len;
> -    INT16    	    x_off, y_off;
> 
>     REQUEST_AT_LEAST_SIZE (xRenderAddTrapsReq);
>     VERIFY_XIN_PICTURE (picture, stuff->picture, client, DixWriteAccess);
> @@ -3194,17 +3068,9 @@ PanoramiXRenderAddTraps (ClientPtr client)
> 	(extra = (char *) malloc(extra_len)))
>     {
> 	memcpy (extra, stuff + 1, extra_len);
> -	x_off = stuff->xOff;
> -	y_off = stuff->yOff;
> 	FOR_NSCREENS_FORWARD(j) {
> 	    if (j) memcpy (stuff + 1, extra, extra_len);
> 	    stuff->picture = picture->info[j].id;
> -	    
> -	    if (picture->u.pict.root)
> -	    {
> -		stuff->xOff = x_off + screenInfo.screens[j]->x;
> -		stuff->yOff = y_off + screenInfo.screens[j]->y;
> -	    }
> 	    result = (*PanoramiXSaveRenderVector[X_RenderAddTraps]) (client);
> 	    if(result != Success) break;
> 	}
> -- 
> 1.7.5.4
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 

---
Jeremy Huddleston

Rebuild Sudan
 - Board of Directors
 - http://www.rebuildsudan.org

Berkeley Foundation for Opportunities in Information Technology
 - Advisory Board
 - http://www.bfoit.org



More information about the xorg-devel mailing list