Merge remote branch 'jamey/for-keith'
This commit is contained in:
		
						commit
						0f12e86e60
					
				
							
								
								
									
										103
									
								
								Xext/panoramiX.c
								
								
								
								
							
							
						
						
									
										103
									
								
								Xext/panoramiX.c
								
								
								
								
							| 
						 | 
				
			
			@ -70,7 +70,6 @@ int 		PanoramiXPixWidth = 0;
 | 
			
		|||
int 		PanoramiXPixHeight = 0;
 | 
			
		||||
int 		PanoramiXNumScreens = 0;
 | 
			
		||||
 | 
			
		||||
PanoramiXData *panoramiXdataPtr = NULL;
 | 
			
		||||
static RegionRec   	PanoramiXScreenRegion = {{0, 0, 0, 0}, NULL};
 | 
			
		||||
 | 
			
		||||
static int		PanoramiXNumDepths;
 | 
			
		||||
| 
						 | 
				
			
			@ -120,8 +119,6 @@ typedef struct {
 | 
			
		|||
  CloseScreenProcPtr	CloseScreen;
 | 
			
		||||
} PanoramiXScreenRec, *PanoramiXScreenPtr;
 | 
			
		||||
 | 
			
		||||
RegionRec XineramaScreenRegions[MAXSCREENS];
 | 
			
		||||
 | 
			
		||||
static void XineramaValidateGC(GCPtr, unsigned long, DrawablePtr);
 | 
			
		||||
static void XineramaChangeGC(GCPtr, unsigned long);
 | 
			
		||||
static void XineramaCopyGC(GCPtr, unsigned long, GCPtr);
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +151,6 @@ XineramaCloseScreen (int i, ScreenPtr pScreen)
 | 
			
		|||
    pScreen->CloseScreen = pScreenPriv->CloseScreen;
 | 
			
		||||
    pScreen->CreateGC = pScreenPriv->CreateGC;
 | 
			
		||||
 | 
			
		||||
    REGION_UNINIT(pScreen, &XineramaScreenRegions[pScreen->myNum]);
 | 
			
		||||
    if (pScreen->myNum == 0)
 | 
			
		||||
	REGION_UNINIT(pScreen, &PanoramiXScreenRegion);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -199,8 +195,8 @@ XineramaValidateGC(
 | 
			
		|||
 | 
			
		||||
    if((pDraw->type == DRAWABLE_WINDOW) && !(((WindowPtr)pDraw)->parent)) {
 | 
			
		||||
	/* the root window */
 | 
			
		||||
	int x_off = panoramiXdataPtr[pGC->pScreen->myNum].x;
 | 
			
		||||
	int y_off = panoramiXdataPtr[pGC->pScreen->myNum].y;
 | 
			
		||||
	int x_off = pGC->pScreen->x;
 | 
			
		||||
	int y_off = pGC->pScreen->y;
 | 
			
		||||
	int new_val;
 | 
			
		||||
 | 
			
		||||
	new_val = pGCPriv->clipOrg.x - x_off;
 | 
			
		||||
| 
						 | 
				
			
			@ -393,30 +389,28 @@ static void XineramaInitData(ScreenPtr pScreen)
 | 
			
		|||
    REGION_NULL(pScreen, &PanoramiXScreenRegion)
 | 
			
		||||
    for (i = 0; i < PanoramiXNumScreens; i++) {
 | 
			
		||||
	BoxRec TheBox;
 | 
			
		||||
	RegionRec ScreenRegion;
 | 
			
		||||
 | 
			
		||||
        pScreen = screenInfo.screens[i];
 | 
			
		||||
 | 
			
		||||
	panoramiXdataPtr[i].x = dixScreenOrigins[i].x;
 | 
			
		||||
	panoramiXdataPtr[i].y = dixScreenOrigins[i].y;
 | 
			
		||||
	panoramiXdataPtr[i].width = pScreen->width;
 | 
			
		||||
	panoramiXdataPtr[i].height = pScreen->height;
 | 
			
		||||
	TheBox.x1 = pScreen->x;
 | 
			
		||||
	TheBox.x2 = TheBox.x1 + pScreen->width;
 | 
			
		||||
	TheBox.y1 = pScreen->y;
 | 
			
		||||
	TheBox.y2 = TheBox.y1 + pScreen->height;
 | 
			
		||||
 | 
			
		||||
	TheBox.x1 = panoramiXdataPtr[i].x;
 | 
			
		||||
	TheBox.x2 = TheBox.x1 + panoramiXdataPtr[i].width;
 | 
			
		||||
	TheBox.y1 = panoramiXdataPtr[i].y;
 | 
			
		||||
	TheBox.y2 = TheBox.y1 + panoramiXdataPtr[i].height;
 | 
			
		||||
 | 
			
		||||
	REGION_INIT(pScreen, &XineramaScreenRegions[i], &TheBox, 1);
 | 
			
		||||
	REGION_INIT(pScreen, &ScreenRegion, &TheBox, 1);
 | 
			
		||||
	REGION_UNION(pScreen, &PanoramiXScreenRegion, &PanoramiXScreenRegion,
 | 
			
		||||
		     &XineramaScreenRegions[i]);
 | 
			
		||||
		     &ScreenRegion);
 | 
			
		||||
	REGION_UNINIT(pScreen, &ScreenRegion);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    PanoramiXPixWidth = panoramiXdataPtr[0].x + panoramiXdataPtr[0].width;
 | 
			
		||||
    PanoramiXPixHeight = panoramiXdataPtr[0].y + panoramiXdataPtr[0].height;
 | 
			
		||||
    PanoramiXPixWidth = screenInfo.screens[0]->x + screenInfo.screens[0]->width;
 | 
			
		||||
    PanoramiXPixHeight = screenInfo.screens[0]->y + screenInfo.screens[0]->height;
 | 
			
		||||
 | 
			
		||||
    for (i = 1; i < PanoramiXNumScreens; i++) {
 | 
			
		||||
	w = panoramiXdataPtr[i].x + panoramiXdataPtr[i].width;
 | 
			
		||||
	h = panoramiXdataPtr[i].y + panoramiXdataPtr[i].height;
 | 
			
		||||
	pScreen = screenInfo.screens[i];
 | 
			
		||||
	w = pScreen->x + pScreen->width;
 | 
			
		||||
	h = pScreen->y + pScreen->height;
 | 
			
		||||
 | 
			
		||||
	if (PanoramiXPixWidth < w)
 | 
			
		||||
	    PanoramiXPixWidth = w;
 | 
			
		||||
| 
						 | 
				
			
			@ -427,12 +421,7 @@ static void XineramaInitData(ScreenPtr pScreen)
 | 
			
		|||
 | 
			
		||||
void XineramaReinitData(ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
    REGION_UNINIT(pScreen, &PanoramiXScreenRegion);
 | 
			
		||||
    for (i = 0; i < PanoramiXNumScreens; i++)
 | 
			
		||||
	REGION_UNINIT(pScreen, &XineramaScreenRegions[i]);
 | 
			
		||||
 | 
			
		||||
    XineramaInitData(pScreen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -473,12 +462,6 @@ void PanoramiXExtensionInit(int argc, char *argv[])
 | 
			
		|||
	 *	run in non-PanoramiXeen mode.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	panoramiXdataPtr = (PanoramiXData *) 
 | 
			
		||||
		calloc(PanoramiXNumScreens, sizeof(PanoramiXData));
 | 
			
		||||
 | 
			
		||||
	if (!panoramiXdataPtr)
 | 
			
		||||
	    break;
 | 
			
		||||
 | 
			
		||||
	if (!dixRequestPrivate(PanoramiXGCKey, sizeof(PanoramiXGCRec))) {
 | 
			
		||||
		noPanoramiXExtension = TRUE;
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -836,13 +819,14 @@ PanoramiXConsolidate(void)
 | 
			
		|||
    saver->type = XRT_WINDOW;
 | 
			
		||||
 | 
			
		||||
    for (i =  0; i < PanoramiXNumScreens; i++) {
 | 
			
		||||
	root->info[i].id = WindowTable[i]->drawable.id;
 | 
			
		||||
	ScreenPtr pScreen = screenInfo.screens[i];
 | 
			
		||||
	root->info[i].id = pScreen->root->drawable.id;
 | 
			
		||||
	root->u.win.class = InputOutput;
 | 
			
		||||
        root->u.win.root = TRUE;
 | 
			
		||||
        saver->info[i].id = savedScreenInfo[i].wid;
 | 
			
		||||
        saver->info[i].id = pScreen->screensaver.wid;
 | 
			
		||||
        saver->u.win.class = InputOutput;
 | 
			
		||||
        saver->u.win.root = TRUE;
 | 
			
		||||
	defmap->info[i].id = (screenInfo.screens[i])->defColormap;
 | 
			
		||||
	defmap->info[i].id = pScreen->defColormap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    AddResource(root->info[0].id, XRT_WINDOW, root);
 | 
			
		||||
| 
						 | 
				
			
			@ -896,8 +880,6 @@ static void PanoramiXResetProc(ExtensionEntry* extEntry)
 | 
			
		|||
    screenInfo.numScreens = PanoramiXNumScreens;
 | 
			
		||||
    for (i = 256; i--; )
 | 
			
		||||
	ProcVector[i] = SavedProcVector[i];
 | 
			
		||||
 | 
			
		||||
    free(panoramiXdataPtr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -999,8 +981,8 @@ ProcPanoramiXGetScreenSize(ClientPtr client)
 | 
			
		|||
	rep.length = 0;
 | 
			
		||||
	rep.sequenceNumber = client->sequence;
 | 
			
		||||
		/* screen dimensions */
 | 
			
		||||
	rep.width  = panoramiXdataPtr[stuff->screen].width; 
 | 
			
		||||
	rep.height = panoramiXdataPtr[stuff->screen].height; 
 | 
			
		||||
	rep.width  = screenInfo.screens[stuff->screen]->width;
 | 
			
		||||
	rep.height = screenInfo.screens[stuff->screen]->height;
 | 
			
		||||
	rep.window = stuff->window;
 | 
			
		||||
	rep.screen = stuff->screen;
 | 
			
		||||
    	if (client->swapped) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1072,10 +1054,10 @@ ProcXineramaQueryScreens(ClientPtr client)
 | 
			
		|||
	int i;
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < PanoramiXNumScreens; i++) {
 | 
			
		||||
	    scratch.x_org  = panoramiXdataPtr[i].x;
 | 
			
		||||
	    scratch.y_org  = panoramiXdataPtr[i].y;
 | 
			
		||||
	    scratch.width  = panoramiXdataPtr[i].width;
 | 
			
		||||
	    scratch.height = panoramiXdataPtr[i].height;
 | 
			
		||||
	    scratch.x_org  = screenInfo.screens[i]->x;
 | 
			
		||||
	    scratch.y_org  = screenInfo.screens[i]->y;
 | 
			
		||||
	    scratch.width  = screenInfo.screens[i]->width;
 | 
			
		||||
	    scratch.height = screenInfo.screens[i]->height;
 | 
			
		||||
	
 | 
			
		||||
	    if(client->swapped) {
 | 
			
		||||
		int n;
 | 
			
		||||
| 
						 | 
				
			
			@ -1153,7 +1135,7 @@ XineramaGetImageData(
 | 
			
		|||
    int pitch,
 | 
			
		||||
    Bool isRoot
 | 
			
		||||
){
 | 
			
		||||
    RegionRec SrcRegion, GrabRegion;
 | 
			
		||||
    RegionRec SrcRegion, ScreenRegion, GrabRegion;
 | 
			
		||||
    BoxRec SrcBox, *pbox;
 | 
			
		||||
    int x, y, w, h, i, j, nbox, size, sizeNeeded, ScratchPitch, inOut, depth;
 | 
			
		||||
    DrawablePtr pDraw = pDrawables[0];
 | 
			
		||||
| 
						 | 
				
			
			@ -1165,8 +1147,8 @@ XineramaGetImageData(
 | 
			
		|||
    SrcBox.x1 = left;
 | 
			
		||||
    SrcBox.y1 = top;
 | 
			
		||||
    if(!isRoot) {
 | 
			
		||||
	SrcBox.x1 += pDraw->x + panoramiXdataPtr[0].x;
 | 
			
		||||
	SrcBox.y1 += pDraw->y + panoramiXdataPtr[0].y;
 | 
			
		||||
	SrcBox.x1 += pDraw->x + screenInfo.screens[0]->x;
 | 
			
		||||
	SrcBox.y1 += pDraw->y + screenInfo.screens[0]->y;
 | 
			
		||||
    }
 | 
			
		||||
    SrcBox.x2 = SrcBox.x1 + width;
 | 
			
		||||
    SrcBox.y2 = SrcBox.y1 + height;
 | 
			
		||||
| 
						 | 
				
			
			@ -1177,22 +1159,31 @@ XineramaGetImageData(
 | 
			
		|||
    depth = (format == XYPixmap) ? 1 : pDraw->depth;
 | 
			
		||||
 | 
			
		||||
    for(i = 0; i < PanoramiXNumScreens; i++) {
 | 
			
		||||
	BoxRec TheBox;
 | 
			
		||||
	ScreenPtr pScreen;
 | 
			
		||||
	pDraw = pDrawables[i];
 | 
			
		||||
	pScreen = pDraw->pScreen;
 | 
			
		||||
 | 
			
		||||
	inOut = RECT_IN_REGION(pScreen,&XineramaScreenRegions[i],&SrcBox);
 | 
			
		||||
	TheBox.x1 = pScreen->x;
 | 
			
		||||
	TheBox.x2 = TheBox.x1 + pScreen->width;
 | 
			
		||||
	TheBox.y1 = pScreen->y;
 | 
			
		||||
	TheBox.y2 = TheBox.y1 + pScreen->height;
 | 
			
		||||
 | 
			
		||||
	REGION_INIT(pScreen, &ScreenRegion, &TheBox, 1);
 | 
			
		||||
	inOut = RECT_IN_REGION(pScreen, &ScreenRegion, &SrcBox);
 | 
			
		||||
	if(inOut == rgnPART)
 | 
			
		||||
	    REGION_INTERSECT(pScreen, &GrabRegion, &SrcRegion, &ScreenRegion);
 | 
			
		||||
	REGION_UNINIT(pScreen, &ScreenRegion);
 | 
			
		||||
 | 
			
		||||
	if(inOut == rgnIN) {	   
 | 
			
		||||
	    (*pDraw->pScreen->GetImage)(pDraw, 
 | 
			
		||||
			SrcBox.x1 - pDraw->x - panoramiXdataPtr[i].x,
 | 
			
		||||
			SrcBox.y1 - pDraw->y - panoramiXdataPtr[i].y, 
 | 
			
		||||
	    (*pScreen->GetImage)(pDraw,
 | 
			
		||||
			SrcBox.x1 - pDraw->x - screenInfo.screens[i]->x,
 | 
			
		||||
			SrcBox.y1 - pDraw->y - screenInfo.screens[i]->y,
 | 
			
		||||
			width, height, format, planemask, data);
 | 
			
		||||
	    break;
 | 
			
		||||
	} else if (inOut == rgnOUT)
 | 
			
		||||
	    continue;
 | 
			
		||||
 | 
			
		||||
	REGION_INTERSECT(pScreen, &GrabRegion, &SrcRegion, 
 | 
			
		||||
					&XineramaScreenRegions[i]);
 | 
			
		||||
 | 
			
		||||
	nbox = REGION_NUM_RECTS(&GrabRegion);
 | 
			
		||||
 | 
			
		||||
	if(nbox) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1215,10 +1206,10 @@ XineramaGetImageData(
 | 
			
		|||
		    }	
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		x = pbox->x1 - pDraw->x - panoramiXdataPtr[i].x;
 | 
			
		||||
		y = pbox->y1 - pDraw->y - panoramiXdataPtr[i].y;
 | 
			
		||||
		x = pbox->x1 - pDraw->x - screenInfo.screens[i]->x;
 | 
			
		||||
		y = pbox->y1 - pDraw->y - screenInfo.screens[i]->y;
 | 
			
		||||
 | 
			
		||||
		(*pDraw->pScreen->GetImage)(pDraw, x, y, w, h, 
 | 
			
		||||
		(*pScreen->GetImage)(pDraw, x, y, w, h,
 | 
			
		||||
					format, planemask, ScratchMem);
 | 
			
		||||
		
 | 
			
		||||
		/* copy the memory over */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,13 +46,6 @@ Equipment Corporation.
 | 
			
		|||
#include "gcstruct.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typedef struct _PanoramiXData {
 | 
			
		||||
    int x;
 | 
			
		||||
    int y;
 | 
			
		||||
    int width;
 | 
			
		||||
    int height;
 | 
			
		||||
} PanoramiXData;
 | 
			
		||||
 | 
			
		||||
typedef struct _PanoramiXInfo {
 | 
			
		||||
    XID id ;
 | 
			
		||||
} PanoramiXInfo;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -129,14 +129,14 @@ int PanoramiXCreateWindow(ClientPtr client)
 | 
			
		|||
    orig_visual = stuff->visual;
 | 
			
		||||
    orig_x = stuff->x;
 | 
			
		||||
    orig_y = stuff->y;
 | 
			
		||||
    parentIsRoot = (stuff->parent == WindowTable[0]->drawable.id) ||
 | 
			
		||||
                   (stuff->parent == savedScreenInfo[0].wid);
 | 
			
		||||
    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 - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->y = orig_y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    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;
 | 
			
		||||
| 
						 | 
				
			
			@ -328,14 +328,14 @@ int PanoramiXReparentWindow(ClientPtr client)
 | 
			
		|||
 | 
			
		||||
    x = stuff->x;
 | 
			
		||||
    y = stuff->y;
 | 
			
		||||
    parentIsRoot = (stuff->parent == WindowTable[0]->drawable.id) ||
 | 
			
		||||
                   (stuff->parent == savedScreenInfo[0].wid);
 | 
			
		||||
    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 - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->y = y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    stuff->x = x - screenInfo.screens[j]->x;
 | 
			
		||||
	    stuff->y = y - screenInfo.screens[j]->y;
 | 
			
		||||
	}
 | 
			
		||||
	result = (*SavedProcVector[X_ReparentWindow])(client);
 | 
			
		||||
        if(result != Success) break;
 | 
			
		||||
| 
						 | 
				
			
			@ -475,8 +475,8 @@ int PanoramiXConfigureWindow(ClientPtr client)
 | 
			
		|||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(pWin->parent && ((pWin->parent == WindowTable[0]) ||
 | 
			
		||||
                        (pWin->parent->drawable.id == savedScreenInfo[0].wid)))
 | 
			
		||||
    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;
 | 
			
		||||
| 
						 | 
				
			
			@ -495,9 +495,9 @@ int PanoramiXConfigureWindow(ClientPtr client)
 | 
			
		|||
	if(sib)
 | 
			
		||||
	    *((CARD32 *) &stuff[1] + sib_offset) = sib->info[j].id;
 | 
			
		||||
	if(x_offset >= 0)
 | 
			
		||||
	    *((CARD32 *) &stuff[1] + x_offset) = x - panoramiXdataPtr[j].x;
 | 
			
		||||
	    *((CARD32 *) &stuff[1] + x_offset) = x - screenInfo.screens[j]->x;
 | 
			
		||||
	if(y_offset >= 0)
 | 
			
		||||
	    *((CARD32 *) &stuff[1] + y_offset) = y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    *((CARD32 *) &stuff[1] + y_offset) = y - screenInfo.screens[j]->y;
 | 
			
		||||
	result = (*SavedProcVector[X_ConfigureWindow])(client);
 | 
			
		||||
        if(result != Success) break;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -544,7 +544,7 @@ int PanoramiXGetGeometry(ClientPtr client)
 | 
			
		|||
    rep.type = X_Reply;
 | 
			
		||||
    rep.length = 0;
 | 
			
		||||
    rep.sequenceNumber = client->sequence;
 | 
			
		||||
    rep.root = WindowTable[0]->drawable.id;
 | 
			
		||||
    rep.root = screenInfo.screens[0]->root->drawable.id;
 | 
			
		||||
    rep.depth = pDraw->depth;
 | 
			
		||||
    rep.width = pDraw->width;
 | 
			
		||||
    rep.height = pDraw->height;
 | 
			
		||||
| 
						 | 
				
			
			@ -562,11 +562,11 @@ int PanoramiXGetGeometry(ClientPtr client)
 | 
			
		|||
        WindowPtr pWin = (WindowPtr)pDraw;
 | 
			
		||||
	rep.x = pWin->origin.x - wBorderWidth (pWin);
 | 
			
		||||
	rep.y = pWin->origin.y - wBorderWidth (pWin);
 | 
			
		||||
	if((pWin->parent == WindowTable[0]) || 
 | 
			
		||||
           (pWin->parent->drawable.id == savedScreenInfo[0].wid))
 | 
			
		||||
	if((pWin->parent == screenInfo.screens[0]->root) ||
 | 
			
		||||
           (pWin->parent->drawable.id == screenInfo.screens[0]->screensaver.wid))
 | 
			
		||||
        {
 | 
			
		||||
	   rep.x += panoramiXdataPtr[0].x;
 | 
			
		||||
	   rep.y += panoramiXdataPtr[0].y;
 | 
			
		||||
	   rep.x += screenInfo.screens[0]->x;
 | 
			
		||||
	   rep.y += screenInfo.screens[0]->y;
 | 
			
		||||
	}
 | 
			
		||||
	rep.borderWidth = pWin->borderWidth;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -596,11 +596,11 @@ int PanoramiXTranslateCoords(ClientPtr client)
 | 
			
		|||
    rep.sameScreen = xTrue;
 | 
			
		||||
    rep.child = None;
 | 
			
		||||
 | 
			
		||||
    if((pWin == WindowTable[0]) || 
 | 
			
		||||
       (pWin->drawable.id == savedScreenInfo[0].wid))
 | 
			
		||||
    if((pWin == screenInfo.screens[0]->root) ||
 | 
			
		||||
       (pWin->drawable.id == screenInfo.screens[0]->screensaver.wid))
 | 
			
		||||
    { 
 | 
			
		||||
	x = stuff->srcX - panoramiXdataPtr[0].x;
 | 
			
		||||
	y = stuff->srcY - panoramiXdataPtr[0].y;
 | 
			
		||||
	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;
 | 
			
		||||
| 
						 | 
				
			
			@ -634,11 +634,11 @@ int PanoramiXTranslateCoords(ClientPtr client)
 | 
			
		|||
    }
 | 
			
		||||
    rep.dstX = x - pDst->drawable.x;
 | 
			
		||||
    rep.dstY = y - pDst->drawable.y;
 | 
			
		||||
    if((pDst == WindowTable[0]) || 
 | 
			
		||||
       (pDst->drawable.id == savedScreenInfo[0].wid))
 | 
			
		||||
    if((pDst == screenInfo.screens[0]->root) ||
 | 
			
		||||
       (pWin->drawable.id == screenInfo.screens[0]->screensaver.wid))
 | 
			
		||||
    {
 | 
			
		||||
	rep.dstX += panoramiXdataPtr[0].x;
 | 
			
		||||
	rep.dstY += panoramiXdataPtr[0].y;
 | 
			
		||||
	rep.dstX += screenInfo.screens[0]->x;
 | 
			
		||||
	rep.dstY += screenInfo.screens[0]->y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    WriteReplyToClient(client, sizeof(xTranslateCoordsReply), &rep);
 | 
			
		||||
| 
						 | 
				
			
			@ -981,8 +981,8 @@ int PanoramiXClearToBackground(ClientPtr client)
 | 
			
		|||
    FOR_NSCREENS_BACKWARD(j) {
 | 
			
		||||
	stuff->window = win->info[j].id;
 | 
			
		||||
	if(isRoot) {
 | 
			
		||||
	    stuff->x = x - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->y = y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    stuff->x = x - screenInfo.screens[j]->x;
 | 
			
		||||
	    stuff->y = y - screenInfo.screens[j]->y;
 | 
			
		||||
	}
 | 
			
		||||
	result = (*SavedProcVector[X_ClearArea])(client);
 | 
			
		||||
	if(result != Success) break;
 | 
			
		||||
| 
						 | 
				
			
			@ -1084,20 +1084,22 @@ int PanoramiXCopyArea(ClientPtr client)
 | 
			
		|||
    } else {
 | 
			
		||||
	DrawablePtr pDst = NULL, pSrc = NULL;
 | 
			
		||||
	GCPtr pGC = NULL;
 | 
			
		||||
	RegionPtr pRgn[MAXSCREENS];
 | 
			
		||||
	RegionRec totalReg;
 | 
			
		||||
	int rc;
 | 
			
		||||
 | 
			
		||||
	REGION_NULL(unusedScreen, &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 - panoramiXdataPtr[j].x;
 | 
			
		||||
		stuff->srcY = srcy - panoramiXdataPtr[j].y;
 | 
			
		||||
		stuff->srcX = srcx - screenInfo.screens[j]->x;
 | 
			
		||||
		stuff->srcY = srcy - screenInfo.screens[j]->y;
 | 
			
		||||
	    }
 | 
			
		||||
 	    if (dstIsRoot) {	
 | 
			
		||||
		stuff->dstX = dstx - panoramiXdataPtr[j].x;
 | 
			
		||||
		stuff->dstY = dsty - panoramiXdataPtr[j].y;
 | 
			
		||||
		stuff->dstX = dstx - screenInfo.screens[j]->x;
 | 
			
		||||
		stuff->dstY = dsty - screenInfo.screens[j]->y;
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	    VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, DixWriteAccess);
 | 
			
		||||
| 
						 | 
				
			
			@ -1116,37 +1118,30 @@ int PanoramiXCopyArea(ClientPtr client)
 | 
			
		|||
 	    } else
 | 
			
		||||
		pSrc = pDst;
 | 
			
		||||
 | 
			
		||||
	    pRgn[j] = (*pGC->ops->CopyArea)(pSrc, pDst, pGC, 
 | 
			
		||||
	    pRgn = (*pGC->ops->CopyArea)(pSrc, pDst, pGC,
 | 
			
		||||
				stuff->srcX, stuff->srcY,
 | 
			
		||||
				stuff->width, stuff->height, 
 | 
			
		||||
				stuff->dstX, stuff->dstY);
 | 
			
		||||
 | 
			
		||||
	    if(dstShared) {
 | 
			
		||||
		while(j--) pRgn[j] = NULL;
 | 
			
		||||
		break;
 | 
			
		||||
	    if(pGC->graphicsExposures && pRgn) {
 | 
			
		||||
	       if(srcIsRoot) {
 | 
			
		||||
		   REGION_TRANSLATE(unusedScreen, pRgn,
 | 
			
		||||
			    screenInfo.screens[j]->x, screenInfo.screens[j]->y);
 | 
			
		||||
	       }
 | 
			
		||||
	       REGION_APPEND(unusedScreen, &totalReg, pRgn);
 | 
			
		||||
	       REGION_DESTROY(unusedScreen, pRgn);
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	    if(dstShared)
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pGC->graphicsExposures) {
 | 
			
		||||
	    ScreenPtr pScreen = pDst->pScreen;
 | 
			
		||||
	    RegionRec totalReg;
 | 
			
		||||
	    Bool overlap;
 | 
			
		||||
 | 
			
		||||
	    REGION_NULL(pScreen, &totalReg);
 | 
			
		||||
	    FOR_NSCREENS_BACKWARD(j) {
 | 
			
		||||
		if(pRgn[j]) {
 | 
			
		||||
		   if(srcIsRoot) {
 | 
			
		||||
		       REGION_TRANSLATE(pScreen, pRgn[j], 
 | 
			
		||||
				panoramiXdataPtr[j].x, panoramiXdataPtr[j].y);
 | 
			
		||||
		   }
 | 
			
		||||
		   REGION_APPEND(pScreen, &totalReg, pRgn[j]);
 | 
			
		||||
		   REGION_DESTROY(pScreen, pRgn[j]);
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	    REGION_VALIDATE(pScreen, &totalReg, &overlap);
 | 
			
		||||
	    REGION_VALIDATE(unusedScreen, &totalReg, &overlap);
 | 
			
		||||
	    (*pScreen->SendGraphicsExpose)(
 | 
			
		||||
		client, &totalReg, stuff->dstDrawable, X_CopyArea, 0);
 | 
			
		||||
	    REGION_UNINIT(pScreen, &totalReg);
 | 
			
		||||
	    REGION_UNINIT(unusedScreen, &totalReg);
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1163,7 +1158,7 @@ int PanoramiXCopyPlane(ClientPtr client)
 | 
			
		|||
    Bool		srcShared, dstShared;
 | 
			
		||||
    DrawablePtr 	psrcDraw, pdstDraw = NULL;
 | 
			
		||||
    GCPtr 		pGC = NULL;
 | 
			
		||||
    RegionPtr 		pRgn[MAXSCREENS];
 | 
			
		||||
    RegionRec		totalReg;
 | 
			
		||||
    REQUEST(xCopyPlaneReq);
 | 
			
		||||
 | 
			
		||||
    REQUEST_SIZE_MATCH(xCopyPlaneReq);
 | 
			
		||||
| 
						 | 
				
			
			@ -1198,17 +1193,19 @@ int PanoramiXCopyPlane(ClientPtr client)
 | 
			
		|||
    srcx = stuff->srcX; srcy = stuff->srcY;
 | 
			
		||||
    dstx = stuff->dstX; dsty = stuff->dstY;
 | 
			
		||||
 
 | 
			
		||||
    REGION_NULL(unusedScreen, &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 - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->srcY = srcy - panoramiXdataPtr[j].y;
 | 
			
		||||
	    stuff->srcX = srcx - screenInfo.screens[j]->x;
 | 
			
		||||
	    stuff->srcY = srcy - screenInfo.screens[j]->y;
 | 
			
		||||
	}
 | 
			
		||||
	if (dstIsRoot) {	
 | 
			
		||||
	    stuff->dstX = dstx - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->dstY = dsty - panoramiXdataPtr[j].y;
 | 
			
		||||
	    stuff->dstX = dstx - screenInfo.screens[j]->x;
 | 
			
		||||
	    stuff->dstY = dsty - screenInfo.screens[j]->y;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, DixWriteAccess);
 | 
			
		||||
| 
						 | 
				
			
			@ -1231,33 +1228,26 @@ int PanoramiXCopyPlane(ClientPtr client)
 | 
			
		|||
	    return(BadValue);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pRgn[j] = (*pGC->ops->CopyPlane)(psrcDraw, pdstDraw, pGC, 
 | 
			
		||||
	pRgn = (*pGC->ops->CopyPlane)(psrcDraw, pdstDraw, pGC,
 | 
			
		||||
				stuff->srcX, stuff->srcY,
 | 
			
		||||
				stuff->width, stuff->height, 
 | 
			
		||||
				stuff->dstX, stuff->dstY, stuff->bitPlane);
 | 
			
		||||
 | 
			
		||||
	if(dstShared) {
 | 
			
		||||
	    while(j--) pRgn[j] = NULL;
 | 
			
		||||
	    break;
 | 
			
		||||
	if(pGC->graphicsExposures && pRgn) {
 | 
			
		||||
	    REGION_APPEND(unusedScreen, &totalReg, pRgn);
 | 
			
		||||
	    REGION_DESTROY(unusedScreen, pRgn);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(dstShared)
 | 
			
		||||
	    break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(pGC->graphicsExposures) {
 | 
			
		||||
	ScreenPtr pScreen = pdstDraw->pScreen;
 | 
			
		||||
	RegionRec totalReg;
 | 
			
		||||
	Bool overlap;
 | 
			
		||||
 | 
			
		||||
	REGION_NULL(pScreen, &totalReg);
 | 
			
		||||
	FOR_NSCREENS_BACKWARD(j) {
 | 
			
		||||
	    if(pRgn[j]) {
 | 
			
		||||
		REGION_APPEND(pScreen, &totalReg, pRgn[j]);
 | 
			
		||||
		REGION_DESTROY(pScreen, pRgn[j]);
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
	REGION_VALIDATE(pScreen, &totalReg, &overlap);
 | 
			
		||||
	REGION_VALIDATE(unusedScreen, &totalReg, &overlap);
 | 
			
		||||
	(*pScreen->SendGraphicsExpose)(
 | 
			
		||||
		client, &totalReg, stuff->dstDrawable, X_CopyPlane, 0);
 | 
			
		||||
	REGION_UNINIT(pScreen, &totalReg);
 | 
			
		||||
	REGION_UNINIT(unusedScreen, &totalReg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Success;
 | 
			
		||||
| 
						 | 
				
			
			@ -1297,8 +1287,8 @@ int PanoramiXPolyPoint(ClientPtr client)
 | 
			
		|||
            if(j) memcpy(&stuff[1], origPts, npoint * sizeof(xPoint));
 | 
			
		||||
 | 
			
		||||
            if (isRoot) {
 | 
			
		||||
                int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
                int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
                int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
                int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
                    xPoint *pnts = (xPoint*)&stuff[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -1357,8 +1347,8 @@ int PanoramiXPolyLine(ClientPtr client)
 | 
			
		|||
            if(j) memcpy(&stuff[1], origPts, npoint * sizeof(xPoint));
 | 
			
		||||
 | 
			
		||||
            if (isRoot) {
 | 
			
		||||
                int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
                int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
                int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
                int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
		    xPoint *pnts = (xPoint*)&stuff[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -1420,8 +1410,8 @@ int PanoramiXPolySegment(ClientPtr client)
 | 
			
		|||
            if(j) memcpy(&stuff[1], origSegs, nsegs * sizeof(xSegment));
 | 
			
		||||
 | 
			
		||||
            if (isRoot) {
 | 
			
		||||
                int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
                int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
                int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
                int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
		    xSegment *segs = (xSegment*)&stuff[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -1483,8 +1473,8 @@ int PanoramiXPolyRectangle(ClientPtr client)
 | 
			
		|||
            if(j) memcpy(&stuff[1], origRecs, nrects * sizeof(xRectangle));
 | 
			
		||||
 | 
			
		||||
	    if (isRoot) {
 | 
			
		||||
		int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1545,8 +1535,8 @@ int PanoramiXPolyArc(ClientPtr client)
 | 
			
		|||
            if(j) memcpy(&stuff[1], origArcs, narcs * sizeof(xArc));
 | 
			
		||||
 | 
			
		||||
	    if (isRoot) {
 | 
			
		||||
		int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
	
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
		    xArc *arcs = (xArc *) &stuff[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -1603,8 +1593,8 @@ int PanoramiXFillPoly(ClientPtr client)
 | 
			
		|||
	    if(j) memcpy(&stuff[1], locPts, count * sizeof(DDXPointRec));
 | 
			
		||||
 | 
			
		||||
	    if (isRoot) {
 | 
			
		||||
		int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
		    DDXPointPtr pnts = (DDXPointPtr)&stuff[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -1666,8 +1656,8 @@ int PanoramiXPolyFillRectangle(ClientPtr client)
 | 
			
		|||
	    if(j) memcpy(&stuff[1], origRects, things * sizeof(xRectangle));
 | 
			
		||||
 | 
			
		||||
	    if (isRoot) {
 | 
			
		||||
		int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
		    xRectangle *rects = (xRectangle *) &stuff[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -1727,8 +1717,8 @@ int PanoramiXPolyFillArc(ClientPtr client)
 | 
			
		|||
	    if(j) memcpy(&stuff[1], origArcs, narcs * sizeof(xArc));
 | 
			
		||||
 | 
			
		||||
	    if (isRoot) {
 | 
			
		||||
		int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
		    xArc *arcs = (xArc *) &stuff[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -1780,8 +1770,8 @@ int PanoramiXPutImage(ClientPtr client)
 | 
			
		|||
    orig_y = stuff->dstY;
 | 
			
		||||
    FOR_NSCREENS_BACKWARD(j){
 | 
			
		||||
	if (isRoot) {
 | 
			
		||||
    	  stuff->dstX = orig_x - panoramiXdataPtr[j].x;
 | 
			
		||||
	  stuff->dstY = orig_y - panoramiXdataPtr[j].y;
 | 
			
		||||
	  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;
 | 
			
		||||
| 
						 | 
				
			
			@ -1846,10 +1836,10 @@ int PanoramiXGetImage(ClientPtr client)
 | 
			
		|||
	    return(BadMatch);
 | 
			
		||||
    } else {
 | 
			
		||||
      if( /* check for being onscreen */
 | 
			
		||||
	panoramiXdataPtr[0].x + pDraw->x + x < 0 ||
 | 
			
		||||
	panoramiXdataPtr[0].x + pDraw->x + x + w > PanoramiXPixWidth ||
 | 
			
		||||
        panoramiXdataPtr[0].y + pDraw->y + y < 0 ||
 | 
			
		||||
	panoramiXdataPtr[0].y + pDraw->y + y + h > PanoramiXPixHeight ||
 | 
			
		||||
	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 */
 | 
			
		||||
       	x < - wBorderWidth((WindowPtr)pDraw) ||
 | 
			
		||||
	x + w > wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width ||
 | 
			
		||||
| 
						 | 
				
			
			@ -1983,8 +1973,8 @@ PanoramiXPolyText8(ClientPtr client)
 | 
			
		|||
	stuff->drawable = draw->info[j].id;
 | 
			
		||||
	stuff->gc = gc->info[j].id;
 | 
			
		||||
	if (isRoot) {
 | 
			
		||||
	    stuff->x = orig_x - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->y = orig_y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    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;
 | 
			
		||||
| 
						 | 
				
			
			@ -2024,8 +2014,8 @@ PanoramiXPolyText16(ClientPtr client)
 | 
			
		|||
	stuff->drawable = draw->info[j].id;
 | 
			
		||||
	stuff->gc = gc->info[j].id;
 | 
			
		||||
	if (isRoot) {
 | 
			
		||||
	    stuff->x = orig_x - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->y = orig_y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    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;
 | 
			
		||||
| 
						 | 
				
			
			@ -2065,8 +2055,8 @@ int PanoramiXImageText8(ClientPtr client)
 | 
			
		|||
	stuff->drawable = draw->info[j].id;
 | 
			
		||||
	stuff->gc = gc->info[j].id;
 | 
			
		||||
	if (isRoot) {
 | 
			
		||||
	    stuff->x = orig_x - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->y = orig_y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    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;
 | 
			
		||||
| 
						 | 
				
			
			@ -2106,8 +2096,8 @@ int PanoramiXImageText16(ClientPtr client)
 | 
			
		|||
	stuff->drawable = draw->info[j].id;
 | 
			
		||||
	stuff->gc = gc->info[j].id;
 | 
			
		||||
	if (isRoot) {
 | 
			
		||||
	    stuff->x = orig_x - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->y = orig_y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,6 @@
 | 
			
		|||
#include "panoramiX.h"
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT int PanoramiXNumScreens;
 | 
			
		||||
extern _X_EXPORT PanoramiXData *panoramiXdataPtr;
 | 
			
		||||
extern _X_EXPORT int PanoramiXPixWidth;
 | 
			
		||||
extern _X_EXPORT int PanoramiXPixHeight;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -22,8 +21,6 @@ extern _X_EXPORT int XineramaDeleteResource(pointer, XID);
 | 
			
		|||
 | 
			
		||||
extern _X_EXPORT void XineramaReinitData(ScreenPtr);
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT RegionRec XineramaScreenRegions[MAXSCREENS];
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT unsigned long XRC_DRAWABLE;
 | 
			
		||||
extern _X_EXPORT unsigned long XRT_WINDOW;
 | 
			
		||||
extern _X_EXPORT unsigned long XRT_PIXMAP;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								Xext/saver.c
								
								
								
								
							
							
						
						
									
										18
									
								
								Xext/saver.c
								
								
								
								
							| 
						 | 
				
			
			@ -285,7 +285,7 @@ CheckScreenPrivate (ScreenPtr pScreen)
 | 
			
		|||
    {
 | 
			
		||||
	free(pPriv);
 | 
			
		||||
	SetScreenPrivate (pScreen, NULL);
 | 
			
		||||
	savedScreenInfo[pScreen->myNum].ExternalScreenSaver = NULL;
 | 
			
		||||
	pScreen->screensaver.ExternalScreenSaver = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -304,7 +304,7 @@ MakeScreenPrivate (ScreenPtr pScreen)
 | 
			
		|||
    pPriv->hasWindow = FALSE;
 | 
			
		||||
    pPriv->installedMap = None;
 | 
			
		||||
    SetScreenPrivate (pScreen, pPriv);
 | 
			
		||||
    savedScreenInfo[pScreen->myNum].ExternalScreenSaver = ScreenSaverHandle;
 | 
			
		||||
    pScreen->screensaver.ExternalScreenSaver = ScreenSaverHandle;
 | 
			
		||||
    return pPriv;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -503,8 +503,8 @@ SendScreenSaverNotify (ScreenPtr pScreen, int state, Bool forced)
 | 
			
		|||
	ev.type = ScreenSaverNotify + ScreenSaverEventBase;
 | 
			
		||||
	ev.state = state;
 | 
			
		||||
	ev.timestamp = currentTime.milliseconds;
 | 
			
		||||
	ev.root = WindowTable[pScreen->myNum]->drawable.id;
 | 
			
		||||
	ev.window = savedScreenInfo[pScreen->myNum].wid;
 | 
			
		||||
	ev.root = pScreen->root->drawable.id;
 | 
			
		||||
	ev.window = pScreen->screensaver.wid;
 | 
			
		||||
	ev.kind = kind;
 | 
			
		||||
	ev.forced = forced;
 | 
			
		||||
	WriteEventsToClient (pEv->client, 1, (xEvent *) &ev);
 | 
			
		||||
| 
						 | 
				
			
			@ -559,7 +559,7 @@ CreateSaverWindow (ScreenPtr pScreen)
 | 
			
		|||
    Colormap			wantMap;
 | 
			
		||||
    ColormapPtr			pCmap;
 | 
			
		||||
 | 
			
		||||
    pSaver = &savedScreenInfo[pScreen->myNum];
 | 
			
		||||
    pSaver = &pScreen->screensaver;
 | 
			
		||||
    if (pSaver->pWindow)
 | 
			
		||||
    {
 | 
			
		||||
	pSaver->pWindow = NullWindow;
 | 
			
		||||
| 
						 | 
				
			
			@ -580,7 +580,7 @@ CreateSaverWindow (ScreenPtr pScreen)
 | 
			
		|||
    if (GrabInProgress && GrabInProgress != pAttr->client->index)
 | 
			
		||||
	return FALSE;
 | 
			
		||||
 | 
			
		||||
    pWin = CreateWindow (pSaver->wid, WindowTable[pScreen->myNum],
 | 
			
		||||
    pWin = CreateWindow (pSaver->wid, pScreen->root,
 | 
			
		||||
			 pAttr->x, pAttr->y, pAttr->width, pAttr->height,
 | 
			
		||||
			 pAttr->borderWidth, pAttr->class, 
 | 
			
		||||
			 pAttr->mask, (XID *)pAttr->values, 
 | 
			
		||||
| 
						 | 
				
			
			@ -672,7 +672,7 @@ DestroySaverWindow (ScreenPtr pScreen)
 | 
			
		|||
    if (!pPriv || !pPriv->hasWindow)
 | 
			
		||||
	return FALSE;
 | 
			
		||||
 | 
			
		||||
    pSaver = &savedScreenInfo[pScreen->myNum];
 | 
			
		||||
    pSaver = &pScreen->screensaver;
 | 
			
		||||
    if (pSaver->pWindow)
 | 
			
		||||
    {
 | 
			
		||||
	pSaver->pWindow = NullWindow;
 | 
			
		||||
| 
						 | 
				
			
			@ -756,7 +756,7 @@ ProcScreenSaverQueryInfo (ClientPtr client)
 | 
			
		|||
    if (rc != Success)
 | 
			
		||||
	return rc;
 | 
			
		||||
 | 
			
		||||
    pSaver = &savedScreenInfo[pDraw->pScreen->myNum];
 | 
			
		||||
    pSaver = &pDraw->pScreen->screensaver;
 | 
			
		||||
    pPriv = GetScreenPrivate (pDraw->pScreen);
 | 
			
		||||
 | 
			
		||||
    UpdateCurrentTime ();
 | 
			
		||||
| 
						 | 
				
			
			@ -866,7 +866,7 @@ ScreenSaverSetAttributes (ClientPtr client)
 | 
			
		|||
    if (ret != Success)
 | 
			
		||||
	return ret;
 | 
			
		||||
    pScreen = pDraw->pScreen;
 | 
			
		||||
    pParent = WindowTable[pScreen->myNum];
 | 
			
		||||
    pParent = pScreen->root;
 | 
			
		||||
 | 
			
		||||
    ret = XaceHook(XACE_SCREENSAVER_ACCESS, client, pScreen, DixSetAttrAccess);
 | 
			
		||||
    if (ret != Success)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								Xext/shm.c
								
								
								
								
							
							
						
						
									
										12
									
								
								Xext/shm.c
								
								
								
								
							| 
						 | 
				
			
			@ -598,8 +598,8 @@ ProcPanoramiXShmPutImage(ClientPtr client)
 | 
			
		|||
	stuff->drawable = draw->info[j].id;
 | 
			
		||||
	stuff->gc = gc->info[j].id;
 | 
			
		||||
	if (isRoot) {
 | 
			
		||||
	    stuff->dstX = orig_x - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->dstY = orig_y - panoramiXdataPtr[j].y;
 | 
			
		||||
	    stuff->dstX = orig_x - screenInfo.screens[j]->x;
 | 
			
		||||
	    stuff->dstY = orig_y - screenInfo.screens[j]->y;
 | 
			
		||||
	}
 | 
			
		||||
	result = ProcShmPutImage(client);
 | 
			
		||||
	if(result != Success) break;
 | 
			
		||||
| 
						 | 
				
			
			@ -660,10 +660,10 @@ ProcPanoramiXShmGetImage(ClientPtr client)
 | 
			
		|||
	    return(BadMatch);
 | 
			
		||||
    } else {
 | 
			
		||||
      if( /* check for being onscreen */
 | 
			
		||||
	panoramiXdataPtr[0].x + pDraw->x + x < 0 ||
 | 
			
		||||
	panoramiXdataPtr[0].x + pDraw->x + x + w > PanoramiXPixWidth ||
 | 
			
		||||
        panoramiXdataPtr[0].y + pDraw->y + y < 0 ||
 | 
			
		||||
	panoramiXdataPtr[0].y + pDraw->y + y + h > PanoramiXPixHeight ||
 | 
			
		||||
	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 */
 | 
			
		||||
       	x < - wBorderWidth((WindowPtr)pDraw) ||
 | 
			
		||||
	x + w > wBorderWidth((WindowPtr)pDraw) + (int)pDraw->width ||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1690,8 +1690,8 @@ XineramaXvShmPutImage(ClientPtr client)
 | 
			
		|||
	   stuff->drw_x = x;
 | 
			
		||||
	   stuff->drw_y = y;
 | 
			
		||||
	   if(isRoot) {
 | 
			
		||||
		stuff->drw_x -= panoramiXdataPtr[i].x;
 | 
			
		||||
		stuff->drw_y -= panoramiXdataPtr[i].y;
 | 
			
		||||
		stuff->drw_x -= screenInfo.screens[i]->x;
 | 
			
		||||
		stuff->drw_y -= screenInfo.screens[i]->y;
 | 
			
		||||
	   }
 | 
			
		||||
	   stuff->send_event = (send_event && !i) ? 1 : 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1742,8 +1742,8 @@ XineramaXvPutImage(ClientPtr client)
 | 
			
		|||
	   stuff->drw_x = x;
 | 
			
		||||
	   stuff->drw_y = y;
 | 
			
		||||
	   if(isRoot) {
 | 
			
		||||
		stuff->drw_x -= panoramiXdataPtr[i].x;
 | 
			
		||||
		stuff->drw_y -= panoramiXdataPtr[i].y;
 | 
			
		||||
		stuff->drw_x -= screenInfo.screens[i]->x;
 | 
			
		||||
		stuff->drw_y -= screenInfo.screens[i]->y;
 | 
			
		||||
	   }
 | 
			
		||||
 | 
			
		||||
	   result = ProcXvPutImage(client);
 | 
			
		||||
| 
						 | 
				
			
			@ -1790,8 +1790,8 @@ XineramaXvPutVideo(ClientPtr client)
 | 
			
		|||
           stuff->drw_x = x;
 | 
			
		||||
           stuff->drw_y = y;
 | 
			
		||||
           if(isRoot) {
 | 
			
		||||
                stuff->drw_x -= panoramiXdataPtr[i].x;
 | 
			
		||||
                stuff->drw_y -= panoramiXdataPtr[i].y;
 | 
			
		||||
                stuff->drw_x -= screenInfo.screens[i]->x;
 | 
			
		||||
                stuff->drw_y -= screenInfo.screens[i]->y;
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
           result = ProcXvPutVideo(client);
 | 
			
		||||
| 
						 | 
				
			
			@ -1838,8 +1838,8 @@ XineramaXvPutStill(ClientPtr client)
 | 
			
		|||
           stuff->drw_x = x;
 | 
			
		||||
           stuff->drw_y = y;
 | 
			
		||||
           if(isRoot) {
 | 
			
		||||
                stuff->drw_x -= panoramiXdataPtr[i].x;
 | 
			
		||||
                stuff->drw_y -= panoramiXdataPtr[i].y;
 | 
			
		||||
                stuff->drw_x -= screenInfo.screens[i]->x;
 | 
			
		||||
                stuff->drw_y -= screenInfo.screens[i]->y;
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
           result = ProcXvPutStill(client);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -156,7 +156,7 @@ ProcXCloseDevice(ClientPtr client)
 | 
			
		|||
     * Delete passive grabs from all windows for this device.      */
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < screenInfo.numScreens; i++) {
 | 
			
		||||
	pWin = WindowTable[i];
 | 
			
		||||
	pWin = screenInfo.screens[i]->root;
 | 
			
		||||
	DeleteDeviceEvents(d, pWin, client);
 | 
			
		||||
	p1 = pWin->firstChild;
 | 
			
		||||
	DeleteEventsFromChildren(d, p1, client);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -926,7 +926,7 @@ ProcessRawEvent(RawDeviceEvent *ev, DeviceIntPtr device)
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < screenInfo.numScreens; i++)
 | 
			
		||||
            DeliverEventsToWindow(device, WindowTable[i], xi, 1,
 | 
			
		||||
            DeliverEventsToWindow(device, screenInfo.screens[i]->root, xi, 1,
 | 
			
		||||
                                  GetEventFilter(device, xi), NULL);
 | 
			
		||||
        free(xi);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -1042,7 +1042,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
 | 
			
		|||
 | 
			
		||||
	/* see comment in EnqueueEvents regarding the next three lines */
 | 
			
		||||
	if (ev->any.type == ET_Motion)
 | 
			
		||||
	    ev->device_event.root = WindowTable[pSprite->hotPhys.pScreen->myNum]->drawable.id;
 | 
			
		||||
	    ev->device_event.root = pSprite->hotPhys.pScreen->root->drawable.id;
 | 
			
		||||
 | 
			
		||||
	eventinfo.device = device;
 | 
			
		||||
	eventinfo.event = ev;
 | 
			
		||||
| 
						 | 
				
			
			@ -2120,7 +2120,7 @@ SendEventToAllWindows(DeviceIntPtr dev, Mask mask, xEvent * ev, int count)
 | 
			
		|||
    WindowPtr pWin, p1;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < screenInfo.numScreens; i++) {
 | 
			
		||||
        pWin = WindowTable[i];
 | 
			
		||||
        pWin = screenInfo.screens[i]->root;
 | 
			
		||||
        if (!pWin)
 | 
			
		||||
            continue;
 | 
			
		||||
        DeliverEventsToWindow(dev, pWin, ev, count, mask, NullGrab);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ int ProcXIChangeCursor(ClientPtr client)
 | 
			
		|||
 | 
			
		||||
    if (stuff->cursor == None)
 | 
			
		||||
    {
 | 
			
		||||
        if (pWin == WindowTable[pWin->drawable.pScreen->myNum])
 | 
			
		||||
        if (pWin == pWin->drawable.pScreen->root)
 | 
			
		||||
            pCursor = rootCursor;
 | 
			
		||||
        else
 | 
			
		||||
            pCursor = (CursorPtr)None;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@
 | 
			
		|||
#include "exevents.h"
 | 
			
		||||
#include "exglobals.h"
 | 
			
		||||
#include "eventconvert.h"
 | 
			
		||||
#include "scrnintstr.h"
 | 
			
		||||
#include "xkbsrv.h"
 | 
			
		||||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
| 
						 | 
				
			
			@ -181,12 +182,12 @@ ProcXIQueryPointer(ClientPtr client)
 | 
			
		|||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if(!noPanoramiXExtension) {
 | 
			
		||||
        rep.root_x += FP1616(panoramiXdataPtr[0].x, 0);
 | 
			
		||||
        rep.root_y += FP1616(panoramiXdataPtr[0].y, 0);
 | 
			
		||||
        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(panoramiXdataPtr[0].x, 0);
 | 
			
		||||
            rep.win_y += FP1616(panoramiXdataPtr[0].y, 0);
 | 
			
		||||
            rep.win_x += FP1616(screenInfo.screens[0]->x, 0);
 | 
			
		||||
            rep.win_y += FP1616(screenInfo.screens[0]->y, 0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -141,7 +141,7 @@ compScreenUpdate (ScreenPtr pScreen)
 | 
			
		|||
    compCheckTree (pScreen);
 | 
			
		||||
    if (cs->damaged)
 | 
			
		||||
    {
 | 
			
		||||
	compWindowUpdate (WindowTable[pScreen->myNum]);
 | 
			
		||||
	compWindowUpdate (pScreen->root);
 | 
			
		||||
	cs->damaged = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ Bool
 | 
			
		|||
compCreateOverlayWindow (ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    CompScreenPtr   cs = GetCompScreen(pScreen);
 | 
			
		||||
    WindowPtr	    pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr	    pRoot = pScreen->root;
 | 
			
		||||
    WindowPtr	    pWin;
 | 
			
		||||
    XID		    attrs[] = { None, TRUE }; /* backPixmap, overrideRedirect */
 | 
			
		||||
    int		    result;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -800,7 +800,7 @@ CompositeRealChildHead (WindowPtr pWin)
 | 
			
		|||
 | 
			
		||||
    if (!pWin->parent &&
 | 
			
		||||
	(screenIsSaved == SCREEN_SAVER_ON) &&
 | 
			
		||||
	(HasSaverWindow (pWin->drawable.pScreen->myNum))) {
 | 
			
		||||
	(HasSaverWindow (pWin->drawable.pScreen))) {
 | 
			
		||||
 | 
			
		||||
	/* First child is the screen saver; see if next child is the overlay */
 | 
			
		||||
	pChildBefore = pWin->firstChild;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -360,9 +360,9 @@ EnableDevice(DeviceIntPtr dev, BOOL sendevent)
 | 
			
		|||
            /* Sprites appear on first root window, so we can hardcode it */
 | 
			
		||||
            if (dev->spriteInfo->spriteOwner)
 | 
			
		||||
            {
 | 
			
		||||
                InitializeSprite(dev, WindowTable[0]);
 | 
			
		||||
                InitializeSprite(dev, screenInfo.screens[0]->root);
 | 
			
		||||
                                                 /* mode doesn't matter */
 | 
			
		||||
                EnterWindow(dev, WindowTable[0], NotifyAncestor);
 | 
			
		||||
                EnterWindow(dev, screenInfo.screens[0]->root, NotifyAncestor);
 | 
			
		||||
            }
 | 
			
		||||
            else if ((other = NextFreePointerDevice()) == NULL)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -2435,7 +2435,7 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
 | 
			
		|||
        if (dev->spriteInfo->sprite)
 | 
			
		||||
            currentRoot = dev->spriteInfo->sprite->spriteTrace[0];
 | 
			
		||||
        else /* new device auto-set to floating */
 | 
			
		||||
            currentRoot = WindowTable[0];
 | 
			
		||||
            currentRoot = screenInfo.screens[0]->root;
 | 
			
		||||
 | 
			
		||||
        /* we need to init a fake sprite */
 | 
			
		||||
        screen = currentRoot->drawable.pScreen;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -562,7 +562,7 @@ CreateConnectionBlock(void)
 | 
			
		|||
	VisualPtr	pVisual;
 | 
			
		||||
 | 
			
		||||
	pScreen = screenInfo.screens[i];
 | 
			
		||||
	root.windowId = WindowTable[i]->drawable.id;
 | 
			
		||||
	root.windowId = pScreen->root->drawable.id;
 | 
			
		||||
	root.defaultColormap = pScreen->defColormap;
 | 
			
		||||
	root.whitePixel = pScreen->whitePixel;
 | 
			
		||||
	root.blackPixel = pScreen->blackPixel;
 | 
			
		||||
| 
						 | 
				
			
			@ -912,7 +912,7 @@ GetGeometry(ClientPtr client, xGetGeometryReply *rep)
 | 
			
		|||
    rep->type = X_Reply;
 | 
			
		||||
    rep->length = 0;
 | 
			
		||||
    rep->sequenceNumber = client->sequence;
 | 
			
		||||
    rep->root = WindowTable[pDraw->pScreen->myNum]->drawable.id;
 | 
			
		||||
    rep->root = pDraw->pScreen->root->drawable.id;
 | 
			
		||||
    rep->depth = pDraw->depth;
 | 
			
		||||
    rep->width = pDraw->width;
 | 
			
		||||
    rep->height = pDraw->height;
 | 
			
		||||
| 
						 | 
				
			
			@ -972,7 +972,7 @@ ProcQueryTree(ClientPtr client)
 | 
			
		|||
        return rc;
 | 
			
		||||
    memset(&reply, 0, sizeof(xQueryTreeReply));
 | 
			
		||||
    reply.type = X_Reply;
 | 
			
		||||
    reply.root = WindowTable[pWin->drawable.pScreen->myNum]->drawable.id;
 | 
			
		||||
    reply.root = pWin->drawable.pScreen->root->drawable.id;
 | 
			
		||||
    reply.sequenceNumber = client->sequence;
 | 
			
		||||
    if (pWin->parent)
 | 
			
		||||
	reply.parent = pWin->parent->drawable.id;
 | 
			
		||||
| 
						 | 
				
			
			@ -2055,7 +2055,7 @@ DoGetImage(ClientPtr client, int format, Drawable drawable,
 | 
			
		|||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
	    pBoundingDraw = (DrawablePtr)WindowTable[pDraw->pScreen->myNum];
 | 
			
		||||
	    pBoundingDraw = (DrawablePtr)pDraw->pScreen->root;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	xgi.visual = wVisual (pWin);
 | 
			
		||||
| 
						 | 
				
			
			@ -3666,9 +3666,9 @@ SendConnSetup(ClientPtr client, char *reason)
 | 
			
		|||
    {
 | 
			
		||||
	unsigned int j;
 | 
			
		||||
	xDepth *pDepth;
 | 
			
		||||
	WindowPtr pRoot = screenInfo.screens[i]->root;
 | 
			
		||||
 | 
			
		||||
        root->currentInputMask = WindowTable[i]->eventMask |
 | 
			
		||||
			         wOtherEventMasks (WindowTable[i]);
 | 
			
		||||
        root->currentInputMask = pRoot->eventMask | wOtherEventMasks(pRoot);
 | 
			
		||||
	pDepth = (xDepth *)(root + 1);
 | 
			
		||||
	for (j = 0; j < root->nDepths; j++)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -3916,7 +3916,6 @@ AddScreen(
 | 
			
		|||
       any of the strings pointed to by argv.  They may be passed to
 | 
			
		||||
       multiple screens.
 | 
			
		||||
    */
 | 
			
		||||
    WindowTable[i] = NullWindow;
 | 
			
		||||
    screenInfo.screens[i] = pScreen;
 | 
			
		||||
    screenInfo.numScreens++;
 | 
			
		||||
    if (!(*pfnInit)(i, pScreen, argc, argv))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1077,7 +1077,7 @@ CoreFocusPointerRootNoneSwitch(DeviceIntPtr dev,
 | 
			
		|||
 | 
			
		||||
    for (i = 0; i < nscreens; i++)
 | 
			
		||||
    {
 | 
			
		||||
        root = WindowTable[i];
 | 
			
		||||
        root = screenInfo.screens[i]->root;
 | 
			
		||||
        if (!HasOtherPointer(root, GetPairedDevice(dev)) && !FirstFocusChild(root))
 | 
			
		||||
        {
 | 
			
		||||
            /* If pointer was on PointerRootWin and changes to NoneWin, and
 | 
			
		||||
| 
						 | 
				
			
			@ -1138,7 +1138,7 @@ CoreFocusToPointerRootOrNone(DeviceIntPtr dev,
 | 
			
		|||
 | 
			
		||||
    for (i = 0; i < nscreens; i++)
 | 
			
		||||
    {
 | 
			
		||||
        root = WindowTable[i];
 | 
			
		||||
        root = screenInfo.screens[i]->root;
 | 
			
		||||
        if (!HasFocus(root) && !FirstFocusChild(root))
 | 
			
		||||
        {
 | 
			
		||||
            CoreFocusEvent(dev, FocusIn, mode, B ? NotifyPointerRoot : NotifyDetailNone, root);
 | 
			
		||||
| 
						 | 
				
			
			@ -1169,7 +1169,7 @@ CoreFocusFromPointerRootOrNone(DeviceIntPtr dev,
 | 
			
		|||
 | 
			
		||||
    for (i = 0; i < nscreens; i++)
 | 
			
		||||
    {
 | 
			
		||||
        root = WindowTable[i];
 | 
			
		||||
        root = screenInfo.screens[i]->root;
 | 
			
		||||
        if (!HasFocus(root) && !FirstFocusChild(root))
 | 
			
		||||
        {
 | 
			
		||||
            /* If pointer was on PointerRootWin and changes to NoneWin, and
 | 
			
		||||
| 
						 | 
				
			
			@ -1279,7 +1279,7 @@ DeviceFocusEvents(DeviceIntPtr dev,
 | 
			
		|||
                        NotifyPointer);
 | 
			
		||||
            /* Notify all the roots */
 | 
			
		||||
            for (i = 0; i < nscreens; i++)
 | 
			
		||||
                DeviceFocusEvent(dev, XI_FocusOut, mode, out, WindowTable[i]);
 | 
			
		||||
                DeviceFocusEvent(dev, XI_FocusOut, mode, out, screenInfo.screens[i]->root);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -1293,7 +1293,7 @@ DeviceFocusEvents(DeviceIntPtr dev,
 | 
			
		|||
        }
 | 
			
		||||
        /* Notify all the roots */
 | 
			
		||||
        for (i = 0; i < nscreens; i++)
 | 
			
		||||
            DeviceFocusEvent(dev, XI_FocusIn, mode, in, WindowTable[i]);
 | 
			
		||||
            DeviceFocusEvent(dev, XI_FocusIn, mode, in, screenInfo.screens[i]->root);
 | 
			
		||||
        if (to == PointerRootWin)
 | 
			
		||||
            DeviceFocusInEvents(dev, RootWindow(dev), sprite->win, mode, NotifyPointer);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -1305,7 +1305,7 @@ DeviceFocusEvents(DeviceIntPtr dev,
 | 
			
		|||
                DeviceFocusOutEvents(dev, sprite->win, RootWindow(dev), mode,
 | 
			
		||||
                        NotifyPointer);
 | 
			
		||||
            for (i = 0; i < nscreens; i++)
 | 
			
		||||
                DeviceFocusEvent(dev, XI_FocusOut, mode, out, WindowTable[i]);
 | 
			
		||||
                DeviceFocusEvent(dev, XI_FocusOut, mode, out, screenInfo.screens[i]->root);
 | 
			
		||||
            if (to->parent != NullWindow)
 | 
			
		||||
                DeviceFocusInEvents(dev, RootWindow(dev), to, mode, NotifyNonlinearVirtual);
 | 
			
		||||
            DeviceFocusEvent(dev, XI_FocusIn, mode, NotifyNonlinear, to);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										179
									
								
								dix/events.c
								
								
								
								
							
							
						
						
									
										179
									
								
								dix/events.c
								
								
								
								
							| 
						 | 
				
			
			@ -485,6 +485,13 @@ SyntheticMotion(DeviceIntPtr dev, int x, int y) {
 | 
			
		|||
#ifdef PANORAMIX
 | 
			
		||||
static void PostNewCursor(DeviceIntPtr pDev);
 | 
			
		||||
 | 
			
		||||
static Bool
 | 
			
		||||
pointOnScreen(ScreenPtr pScreen, int x, int y)
 | 
			
		||||
{
 | 
			
		||||
    return x >= pScreen->x && x < pScreen->x + pScreen->width &&
 | 
			
		||||
           y >= pScreen->y && y < pScreen->y + pScreen->height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Bool
 | 
			
		||||
XineramaSetCursorPosition(
 | 
			
		||||
    DeviceIntPtr pDev,
 | 
			
		||||
| 
						 | 
				
			
			@ -493,7 +500,6 @@ XineramaSetCursorPosition(
 | 
			
		|||
    Bool generateEvent
 | 
			
		||||
){
 | 
			
		||||
    ScreenPtr pScreen;
 | 
			
		||||
    BoxRec box;
 | 
			
		||||
    int i;
 | 
			
		||||
    SpritePtr pSprite = pDev->spriteInfo->sprite;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -502,17 +508,16 @@ XineramaSetCursorPosition(
 | 
			
		|||
       that screen are. */
 | 
			
		||||
 | 
			
		||||
    pScreen = pSprite->screen;
 | 
			
		||||
    x += panoramiXdataPtr[0].x;
 | 
			
		||||
    y += panoramiXdataPtr[0].y;
 | 
			
		||||
    x += screenInfo.screens[0]->x;
 | 
			
		||||
    y += screenInfo.screens[0]->y;
 | 
			
		||||
 | 
			
		||||
    if(!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
 | 
			
		||||
								x, y, &box))
 | 
			
		||||
    if(!pointOnScreen(pScreen, x, y))
 | 
			
		||||
    {
 | 
			
		||||
	FOR_NSCREENS(i)
 | 
			
		||||
	{
 | 
			
		||||
	    if(i == pScreen->myNum)
 | 
			
		||||
		continue;
 | 
			
		||||
	    if(POINT_IN_REGION(pScreen, &XineramaScreenRegions[i], x, y, &box))
 | 
			
		||||
	    if(pointOnScreen(screenInfo.screens[i], x, y))
 | 
			
		||||
	    {
 | 
			
		||||
		pScreen = screenInfo.screens[i];
 | 
			
		||||
		break;
 | 
			
		||||
| 
						 | 
				
			
			@ -521,10 +526,10 @@ XineramaSetCursorPosition(
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    pSprite->screen = pScreen;
 | 
			
		||||
    pSprite->hotPhys.x = x - panoramiXdataPtr[0].x;
 | 
			
		||||
    pSprite->hotPhys.y = y - panoramiXdataPtr[0].y;
 | 
			
		||||
    x -= panoramiXdataPtr[pScreen->myNum].x;
 | 
			
		||||
    y -= panoramiXdataPtr[pScreen->myNum].y;
 | 
			
		||||
    pSprite->hotPhys.x = x - screenInfo.screens[0]->x;
 | 
			
		||||
    pSprite->hotPhys.y = y - screenInfo.screens[0]->y;
 | 
			
		||||
    x -= pScreen->x;
 | 
			
		||||
    y -= pScreen->y;
 | 
			
		||||
 | 
			
		||||
    return (*pScreen->SetCursorPosition)(pDev, pScreen, x, y, generateEvent);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -542,10 +547,10 @@ XineramaConstrainCursor(DeviceIntPtr pDev)
 | 
			
		|||
 | 
			
		||||
    /* Translate the constraining box to the screen
 | 
			
		||||
       the sprite is actually on */
 | 
			
		||||
    newBox.x1 += panoramiXdataPtr[0].x - panoramiXdataPtr[pScreen->myNum].x;
 | 
			
		||||
    newBox.x2 += panoramiXdataPtr[0].x - panoramiXdataPtr[pScreen->myNum].x;
 | 
			
		||||
    newBox.y1 += panoramiXdataPtr[0].y - panoramiXdataPtr[pScreen->myNum].y;
 | 
			
		||||
    newBox.y2 += panoramiXdataPtr[0].y - panoramiXdataPtr[pScreen->myNum].y;
 | 
			
		||||
    newBox.x1 += screenInfo.screens[0]->x - pScreen->x;
 | 
			
		||||
    newBox.x2 += screenInfo.screens[0]->x - pScreen->x;
 | 
			
		||||
    newBox.y1 += screenInfo.screens[0]->y - pScreen->y;
 | 
			
		||||
    newBox.y2 += screenInfo.screens[0]->y - pScreen->y;
 | 
			
		||||
 | 
			
		||||
    (* pScreen->ConstrainCursor)(pDev, pScreen, &newBox);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -556,9 +561,10 @@ XineramaSetWindowPntrs(DeviceIntPtr pDev, WindowPtr pWin)
 | 
			
		|||
{
 | 
			
		||||
    SpritePtr pSprite = pDev->spriteInfo->sprite;
 | 
			
		||||
 | 
			
		||||
    if(pWin == WindowTable[0]) {
 | 
			
		||||
	    memcpy(pSprite->windows, WindowTable,
 | 
			
		||||
				PanoramiXNumScreens*sizeof(WindowPtr));
 | 
			
		||||
    if(pWin == screenInfo.screens[0]->root) {
 | 
			
		||||
	int i;
 | 
			
		||||
	for (i = 0; i < PanoramiXNumScreens; i++)
 | 
			
		||||
	    pSprite->windows[i] = screenInfo.screens[i]->root;
 | 
			
		||||
    } else {
 | 
			
		||||
	PanoramiXRes *win;
 | 
			
		||||
	int rc, i;
 | 
			
		||||
| 
						 | 
				
			
			@ -594,12 +600,12 @@ XineramaConfineCursorToWindow(DeviceIntPtr pDev,
 | 
			
		|||
 | 
			
		||||
    REGION_COPY(pSprite->screen, &pSprite->Reg1,
 | 
			
		||||
            &pSprite->windows[i]->borderSize);
 | 
			
		||||
    off_x = panoramiXdataPtr[i].x;
 | 
			
		||||
    off_y = panoramiXdataPtr[i].y;
 | 
			
		||||
    off_x = screenInfo.screens[i]->x;
 | 
			
		||||
    off_y = screenInfo.screens[i]->y;
 | 
			
		||||
 | 
			
		||||
    while(i--) {
 | 
			
		||||
        x = off_x - panoramiXdataPtr[i].x;
 | 
			
		||||
        y = off_y - panoramiXdataPtr[i].y;
 | 
			
		||||
        x = off_x - screenInfo.screens[i]->x;
 | 
			
		||||
        y = off_y - screenInfo.screens[i]->y;
 | 
			
		||||
 | 
			
		||||
        if(x || y)
 | 
			
		||||
            REGION_TRANSLATE(pSprite->screen, &pSprite->Reg1, x, y);
 | 
			
		||||
| 
						 | 
				
			
			@ -607,8 +613,8 @@ XineramaConfineCursorToWindow(DeviceIntPtr pDev,
 | 
			
		|||
        REGION_UNION(pSprite->screen, &pSprite->Reg1, &pSprite->Reg1,
 | 
			
		||||
                &pSprite->windows[i]->borderSize);
 | 
			
		||||
 | 
			
		||||
        off_x = panoramiXdataPtr[i].x;
 | 
			
		||||
        off_y = panoramiXdataPtr[i].y;
 | 
			
		||||
        off_x = screenInfo.screens[i]->x;
 | 
			
		||||
        off_y = screenInfo.screens[i]->y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pSprite->hotLimits = *REGION_EXTENTS(pSprite->screen, &pSprite->Reg1);
 | 
			
		||||
| 
						 | 
				
			
			@ -619,7 +625,7 @@ XineramaConfineCursorToWindow(DeviceIntPtr pDev,
 | 
			
		|||
        pSprite->hotShape = NullRegion;
 | 
			
		||||
 | 
			
		||||
    pSprite->confined = FALSE;
 | 
			
		||||
    pSprite->confineWin = (pWin == WindowTable[0]) ? NullWindow : pWin;
 | 
			
		||||
    pSprite->confineWin = (pWin == screenInfo.screens[0]->root) ? NullWindow : pWin;
 | 
			
		||||
 | 
			
		||||
    CheckPhysLimits(pDev, pSprite->current, generateEvents, FALSE, NULL);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -813,12 +819,12 @@ CheckVirtualMotion(
 | 
			
		|||
 | 
			
		||||
            REGION_COPY(pSprite->screen, &pSprite->Reg2,
 | 
			
		||||
                    &pSprite->windows[i]->borderSize);
 | 
			
		||||
            off_x = panoramiXdataPtr[i].x;
 | 
			
		||||
            off_y = panoramiXdataPtr[i].y;
 | 
			
		||||
            off_x = screenInfo.screens[i]->x;
 | 
			
		||||
            off_y = screenInfo.screens[i]->y;
 | 
			
		||||
 | 
			
		||||
            while(i--) {
 | 
			
		||||
                x = off_x - panoramiXdataPtr[i].x;
 | 
			
		||||
                y = off_y - panoramiXdataPtr[i].y;
 | 
			
		||||
                x = off_x - screenInfo.screens[i]->x;
 | 
			
		||||
                y = off_y - screenInfo.screens[i]->y;
 | 
			
		||||
 | 
			
		||||
                if(x || y)
 | 
			
		||||
                    REGION_TRANSLATE(pSprite->screen, &pSprite->Reg2, x, y);
 | 
			
		||||
| 
						 | 
				
			
			@ -826,8 +832,8 @@ CheckVirtualMotion(
 | 
			
		|||
                REGION_UNION(pSprite->screen, &pSprite->Reg2, &pSprite->Reg2,
 | 
			
		||||
                        &pSprite->windows[i]->borderSize);
 | 
			
		||||
 | 
			
		||||
                off_x = panoramiXdataPtr[i].x;
 | 
			
		||||
                off_y = panoramiXdataPtr[i].y;
 | 
			
		||||
                off_x = screenInfo.screens[i]->x;
 | 
			
		||||
                off_y = screenInfo.screens[i]->y;
 | 
			
		||||
            }
 | 
			
		||||
        } else
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -875,7 +881,7 @@ CheckVirtualMotion(
 | 
			
		|||
#ifdef PANORAMIX
 | 
			
		||||
    if (noPanoramiXExtension) /* No typo. Only set the root win if disabled */
 | 
			
		||||
#endif
 | 
			
		||||
        RootWindow(pDev) = WindowTable[pSprite->hot.pScreen->myNum];
 | 
			
		||||
        RootWindow(pDev) = pSprite->hot.pScreen->root;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
| 
						 | 
				
			
			@ -1123,7 +1129,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
 | 
			
		|||
	 *  updated yet.
 | 
			
		||||
	 */
 | 
			
		||||
	if (ev->any.type == ET_Motion)
 | 
			
		||||
	    ev->device_event.root = WindowTable[pSprite->hotPhys.pScreen->myNum]->drawable.id;
 | 
			
		||||
	    ev->device_event.root = pSprite->hotPhys.pScreen->root->drawable.id;
 | 
			
		||||
 | 
			
		||||
	eventinfo.event = ev;
 | 
			
		||||
	eventinfo.device = device;
 | 
			
		||||
| 
						 | 
				
			
			@ -1134,10 +1140,8 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
 | 
			
		|||
    {
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
	if(!noPanoramiXExtension) {
 | 
			
		||||
            event->root_x += panoramiXdataPtr[pSprite->screen->myNum].x -
 | 
			
		||||
			      panoramiXdataPtr[0].x;
 | 
			
		||||
	    event->root_y += panoramiXdataPtr[pSprite->screen->myNum].y -
 | 
			
		||||
			      panoramiXdataPtr[0].y;
 | 
			
		||||
	    event->root_x += pSprite->screen->x - screenInfo.screens[0]->x;
 | 
			
		||||
	    event->root_y += pSprite->screen->y - screenInfo.screens[0]->y;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	pSprite->hotPhys.x = event->root_x;
 | 
			
		||||
| 
						 | 
				
			
			@ -1217,10 +1221,10 @@ PlayReleasedEvents(void)
 | 
			
		|||
                    case ET_KeyRelease:
 | 
			
		||||
                    case ET_ProximityIn:
 | 
			
		||||
                    case ET_ProximityOut:
 | 
			
		||||
                        ev->root_x += panoramiXdataPtr[0].x -
 | 
			
		||||
                            panoramiXdataPtr[pDev->spriteInfo->sprite->screen->myNum].x;
 | 
			
		||||
                        ev->root_y += panoramiXdataPtr[0].y -
 | 
			
		||||
                            panoramiXdataPtr[pDev->spriteInfo->sprite->screen->myNum].y;
 | 
			
		||||
                        ev->root_x += screenInfo.screens[0]->x -
 | 
			
		||||
                            pDev->spriteInfo->sprite->screen->x;
 | 
			
		||||
                        ev->root_y += screenInfo.screens[0]->y -
 | 
			
		||||
                            pDev->spriteInfo->sprite->screen->y;
 | 
			
		||||
                        break;
 | 
			
		||||
                    default:
 | 
			
		||||
                        break;
 | 
			
		||||
| 
						 | 
				
			
			@ -1339,7 +1343,7 @@ playmore:
 | 
			
		|||
            }
 | 
			
		||||
            else
 | 
			
		||||
                ConfineCursorToWindow(dev,
 | 
			
		||||
                        WindowTable[dev->spriteInfo->sprite->hotPhys.pScreen->myNum],
 | 
			
		||||
                        dev->spriteInfo->sprite->hotPhys.pScreen->root,
 | 
			
		||||
                        TRUE, FALSE);
 | 
			
		||||
            PostNewCursor(dev);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1369,7 +1373,7 @@ ScreenRestructured (ScreenPtr pScreen)
 | 
			
		|||
        }
 | 
			
		||||
        else
 | 
			
		||||
            ConfineCursorToWindow(pDev,
 | 
			
		||||
                    WindowTable[pDev->spriteInfo->sprite->hotPhys.pScreen->myNum],
 | 
			
		||||
                    pDev->spriteInfo->sprite->hotPhys.pScreen->root,
 | 
			
		||||
                    TRUE, FALSE);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -2560,8 +2564,8 @@ PointInBorderSize(WindowPtr pWin, int x, int y)
 | 
			
		|||
	for(i = 1; i < PanoramiXNumScreens; i++) {
 | 
			
		||||
	   if(POINT_IN_REGION(pSprite->screen,
 | 
			
		||||
			&pSprite->windows[i]->borderSize,
 | 
			
		||||
			x + panoramiXdataPtr[0].x - panoramiXdataPtr[i].x,
 | 
			
		||||
			y + panoramiXdataPtr[0].y - panoramiXdataPtr[i].y,
 | 
			
		||||
			x + screenInfo.screens[0]->x - screenInfo.screens[i]->x,
 | 
			
		||||
			y + screenInfo.screens[0]->y - screenInfo.screens[i]->y,
 | 
			
		||||
			&box))
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -2756,17 +2760,15 @@ CheckMotion(DeviceEvent *ev, DeviceIntPtr pDev)
 | 
			
		|||
            /* Motion events entering DIX get translated to Screen 0
 | 
			
		||||
               coordinates.  Replayed events have already been
 | 
			
		||||
               translated since they've entered DIX before */
 | 
			
		||||
            ev->root_x += panoramiXdataPtr[pSprite->screen->myNum].x -
 | 
			
		||||
                                       panoramiXdataPtr[0].x;
 | 
			
		||||
            ev->root_y += panoramiXdataPtr[pSprite->screen->myNum].y -
 | 
			
		||||
                                       panoramiXdataPtr[0].y;
 | 
			
		||||
            ev->root_x += pSprite->screen->x - screenInfo.screens[0]->x;
 | 
			
		||||
            ev->root_y += pSprite->screen->y - screenInfo.screens[0]->y;
 | 
			
		||||
        } else
 | 
			
		||||
#endif
 | 
			
		||||
        {
 | 
			
		||||
            if (pSprite->hot.pScreen != pSprite->hotPhys.pScreen)
 | 
			
		||||
            {
 | 
			
		||||
                pSprite->hot.pScreen = pSprite->hotPhys.pScreen;
 | 
			
		||||
                RootWindow(pDev) = WindowTable[pSprite->hot.pScreen->myNum];
 | 
			
		||||
                RootWindow(pDev) = pSprite->hot.pScreen->root;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2849,7 +2851,7 @@ WindowsRestructured(void)
 | 
			
		|||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
/* This was added to support reconfiguration under Xdmx.  The problem is
 | 
			
		||||
 * that if the 0th screen (i.e., WindowTable[0]) is moved to an origin
 | 
			
		||||
 * that if the 0th screen (i.e., screenInfo.screens[0]) is moved to an origin
 | 
			
		||||
 * other than 0,0, the information in the private sprite structure must
 | 
			
		||||
 * be updated accordingly, or XYToWindow (and other routines) will not
 | 
			
		||||
 * compute correctly. */
 | 
			
		||||
| 
						 | 
				
			
			@ -2892,7 +2894,7 @@ void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff)
 | 
			
		|||
            } else
 | 
			
		||||
                ConfineCursorToWindow(
 | 
			
		||||
                        pDev,
 | 
			
		||||
                        WindowTable[pSprite->hotPhys.pScreen->myNum],
 | 
			
		||||
                        pSprite->hotPhys.pScreen->root,
 | 
			
		||||
                        TRUE, FALSE);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -3007,10 +3009,10 @@ InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin)
 | 
			
		|||
    }
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if(!noPanoramiXExtension) {
 | 
			
		||||
        pSprite->hotLimits.x1 = -panoramiXdataPtr[0].x;
 | 
			
		||||
        pSprite->hotLimits.y1 = -panoramiXdataPtr[0].y;
 | 
			
		||||
        pSprite->hotLimits.x2 = PanoramiXPixWidth  - panoramiXdataPtr[0].x;
 | 
			
		||||
        pSprite->hotLimits.y2 = PanoramiXPixHeight - panoramiXdataPtr[0].y;
 | 
			
		||||
        pSprite->hotLimits.x1 = -screenInfo.screens[0]->x;
 | 
			
		||||
        pSprite->hotLimits.y1 = -screenInfo.screens[0]->y;
 | 
			
		||||
        pSprite->hotLimits.x2 = PanoramiXPixWidth  - screenInfo.screens[0]->x;
 | 
			
		||||
        pSprite->hotLimits.y2 = PanoramiXPixHeight - screenInfo.screens[0]->y;
 | 
			
		||||
        pSprite->physLimits = pSprite->hotLimits;
 | 
			
		||||
        pSprite->confineWin = NullWindow;
 | 
			
		||||
        pSprite->hotShape = NullRegion;
 | 
			
		||||
| 
						 | 
				
			
			@ -3051,7 +3053,7 @@ UpdateSpriteForScreen(DeviceIntPtr pDev, ScreenPtr pScreen)
 | 
			
		|||
 | 
			
		||||
    pSprite = pDev->spriteInfo->sprite;
 | 
			
		||||
 | 
			
		||||
    win = WindowTable[pScreen->myNum];
 | 
			
		||||
    win = pScreen->root;
 | 
			
		||||
 | 
			
		||||
    pSprite->hotPhys.pScreen = pScreen;
 | 
			
		||||
    pSprite->hot = pSprite->hotPhys;
 | 
			
		||||
| 
						 | 
				
			
			@ -3077,10 +3079,10 @@ UpdateSpriteForScreen(DeviceIntPtr pDev, ScreenPtr pScreen)
 | 
			
		|||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if(!noPanoramiXExtension) {
 | 
			
		||||
        pSprite->hotLimits.x1 = -panoramiXdataPtr[0].x;
 | 
			
		||||
        pSprite->hotLimits.y1 = -panoramiXdataPtr[0].y;
 | 
			
		||||
        pSprite->hotLimits.x2 = PanoramiXPixWidth  - panoramiXdataPtr[0].x;
 | 
			
		||||
        pSprite->hotLimits.y2 = PanoramiXPixHeight - panoramiXdataPtr[0].y;
 | 
			
		||||
        pSprite->hotLimits.x1 = -screenInfo.screens[0]->x;
 | 
			
		||||
        pSprite->hotLimits.y1 = -screenInfo.screens[0]->y;
 | 
			
		||||
        pSprite->hotLimits.x2 = PanoramiXPixWidth  - screenInfo.screens[0]->x;
 | 
			
		||||
        pSprite->hotLimits.y2 = PanoramiXPixHeight - screenInfo.screens[0]->y;
 | 
			
		||||
        pSprite->physLimits = pSprite->hotLimits;
 | 
			
		||||
        pSprite->screen = pScreen;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -3113,10 +3115,8 @@ NewCurrentScreen(DeviceIntPtr pDev, ScreenPtr newScreen, int x, int y)
 | 
			
		|||
    pSprite->hotPhys.y = y;
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if(!noPanoramiXExtension) {
 | 
			
		||||
	pSprite->hotPhys.x += panoramiXdataPtr[newScreen->myNum].x -
 | 
			
		||||
			    panoramiXdataPtr[0].x;
 | 
			
		||||
	pSprite->hotPhys.y += panoramiXdataPtr[newScreen->myNum].y -
 | 
			
		||||
			    panoramiXdataPtr[0].y;
 | 
			
		||||
	pSprite->hotPhys.x += newScreen->x - screenInfo.screens[0]->x;
 | 
			
		||||
	pSprite->hotPhys.y += newScreen->y - screenInfo.screens[0]->y;
 | 
			
		||||
	if (newScreen != pSprite->screen) {
 | 
			
		||||
	    pSprite->screen = newScreen;
 | 
			
		||||
	    /* Make sure we tell the DDX to update its copy of the screen */
 | 
			
		||||
| 
						 | 
				
			
			@ -3124,23 +3124,22 @@ NewCurrentScreen(DeviceIntPtr pDev, ScreenPtr newScreen, int x, int y)
 | 
			
		|||
		XineramaConfineCursorToWindow(pDev,
 | 
			
		||||
                        pSprite->confineWin, TRUE);
 | 
			
		||||
	    else
 | 
			
		||||
		XineramaConfineCursorToWindow(pDev, WindowTable[0], TRUE);
 | 
			
		||||
		XineramaConfineCursorToWindow(pDev, screenInfo.screens[0]->root, TRUE);
 | 
			
		||||
	    /* if the pointer wasn't confined, the DDX won't get
 | 
			
		||||
	       told of the pointer warp so we reposition it here */
 | 
			
		||||
	    if(!syncEvents.playingEvents)
 | 
			
		||||
		(*pSprite->screen->SetCursorPosition)(
 | 
			
		||||
                                                      pDev,
 | 
			
		||||
                                                      pSprite->screen,
 | 
			
		||||
		    pSprite->hotPhys.x + panoramiXdataPtr[0].x -
 | 
			
		||||
			panoramiXdataPtr[pSprite->screen->myNum].x,
 | 
			
		||||
		    pSprite->hotPhys.y + panoramiXdataPtr[0].y -
 | 
			
		||||
			panoramiXdataPtr[pSprite->screen->myNum].y, FALSE);
 | 
			
		||||
		    pSprite->hotPhys.x + screenInfo.screens[0]->x -
 | 
			
		||||
			pSprite->screen->x,
 | 
			
		||||
		    pSprite->hotPhys.y + screenInfo.screens[0]->y -
 | 
			
		||||
			pSprite->screen->y, FALSE);
 | 
			
		||||
	}
 | 
			
		||||
    } else
 | 
			
		||||
#endif
 | 
			
		||||
    if (newScreen != pSprite->hotPhys.pScreen)
 | 
			
		||||
	ConfineCursorToWindow(pDev, WindowTable[newScreen->myNum],
 | 
			
		||||
                TRUE, FALSE);
 | 
			
		||||
	ConfineCursorToWindow(pDev, newScreen->root, TRUE, FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
| 
						 | 
				
			
			@ -3163,14 +3162,14 @@ XineramaPointInWindowIsVisible(
 | 
			
		|||
 | 
			
		||||
    if(!XineramaSetWindowPntrs(inputInfo.pointer, pWin)) return FALSE;
 | 
			
		||||
 | 
			
		||||
    xoff = x + panoramiXdataPtr[0].x;
 | 
			
		||||
    yoff = y + panoramiXdataPtr[0].y;
 | 
			
		||||
    xoff = x + screenInfo.screens[0]->x;
 | 
			
		||||
    yoff = y + screenInfo.screens[0]->y;
 | 
			
		||||
 | 
			
		||||
    for(i = 1; i < PanoramiXNumScreens; i++) {
 | 
			
		||||
	pWin = inputInfo.pointer->spriteInfo->sprite->windows[i];
 | 
			
		||||
	pScreen = pWin->drawable.pScreen;
 | 
			
		||||
	x = xoff - panoramiXdataPtr[i].x;
 | 
			
		||||
	y = yoff - panoramiXdataPtr[i].y;
 | 
			
		||||
	x = xoff - screenInfo.screens[i]->x;
 | 
			
		||||
	y = yoff - screenInfo.screens[i]->y;
 | 
			
		||||
 | 
			
		||||
	if(POINT_IN_REGION(pScreen, &pWin->borderClip, x, y, &box)
 | 
			
		||||
	   && (!wInputShape(pWin) ||
 | 
			
		||||
| 
						 | 
				
			
			@ -3215,9 +3214,9 @@ XineramaWarpPointer(ClientPtr client)
 | 
			
		|||
 | 
			
		||||
	winX = source->drawable.x;
 | 
			
		||||
	winY = source->drawable.y;
 | 
			
		||||
	if(source == WindowTable[0]) {
 | 
			
		||||
	    winX -= panoramiXdataPtr[0].x;
 | 
			
		||||
	    winY -= panoramiXdataPtr[0].y;
 | 
			
		||||
	if(source == screenInfo.screens[0]->root) {
 | 
			
		||||
	    winX -= screenInfo.screens[0]->x;
 | 
			
		||||
	    winY -= screenInfo.screens[0]->y;
 | 
			
		||||
	}
 | 
			
		||||
	if (x < winX + stuff->srcX ||
 | 
			
		||||
	    y < winY + stuff->srcY ||
 | 
			
		||||
| 
						 | 
				
			
			@ -3231,9 +3230,9 @@ XineramaWarpPointer(ClientPtr client)
 | 
			
		|||
    if (dest) {
 | 
			
		||||
	x = dest->drawable.x;
 | 
			
		||||
	y = dest->drawable.y;
 | 
			
		||||
	if(dest == WindowTable[0]) {
 | 
			
		||||
	    x -= panoramiXdataPtr[0].x;
 | 
			
		||||
	    y -= panoramiXdataPtr[0].y;
 | 
			
		||||
	if(dest == screenInfo.screens[0]->root) {
 | 
			
		||||
	    x -= screenInfo.screens[0]->x;
 | 
			
		||||
	    y -= screenInfo.screens[0]->y;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4997,11 +4996,11 @@ ProcQueryPointer(ClientPtr client)
 | 
			
		|||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if(!noPanoramiXExtension) {
 | 
			
		||||
	rep.rootX += panoramiXdataPtr[0].x;
 | 
			
		||||
	rep.rootY += panoramiXdataPtr[0].y;
 | 
			
		||||
	rep.rootX += screenInfo.screens[0]->x;
 | 
			
		||||
	rep.rootY += screenInfo.screens[0]->y;
 | 
			
		||||
	if(stuff->id == rep.root) {
 | 
			
		||||
	    rep.winX += panoramiXdataPtr[0].x;
 | 
			
		||||
	    rep.winY += panoramiXdataPtr[0].y;
 | 
			
		||||
	    rep.winX += screenInfo.screens[0]->x;
 | 
			
		||||
	    rep.winY += screenInfo.screens[0]->y;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -5670,7 +5669,7 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events)
 | 
			
		|||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if(!noPanoramiXExtension &&
 | 
			
		||||
       (panoramiXdataPtr[0].x || panoramiXdataPtr[0].y))
 | 
			
		||||
       (screenInfo.screens[0]->x || screenInfo.screens[0]->y))
 | 
			
		||||
    {
 | 
			
		||||
	switch(events->u.u.type) {
 | 
			
		||||
	case MotionNotify:
 | 
			
		||||
| 
						 | 
				
			
			@ -5687,13 +5686,13 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events)
 | 
			
		|||
        */
 | 
			
		||||
	    count = 1;  /* should always be 1 */
 | 
			
		||||
	    memcpy(&eventCopy, events, sizeof(xEvent));
 | 
			
		||||
	    eventCopy.u.keyButtonPointer.rootX += panoramiXdataPtr[0].x;
 | 
			
		||||
	    eventCopy.u.keyButtonPointer.rootY += panoramiXdataPtr[0].y;
 | 
			
		||||
	    eventCopy.u.keyButtonPointer.rootX += screenInfo.screens[0]->x;
 | 
			
		||||
	    eventCopy.u.keyButtonPointer.rootY += screenInfo.screens[0]->y;
 | 
			
		||||
	    if(eventCopy.u.keyButtonPointer.event ==
 | 
			
		||||
	       eventCopy.u.keyButtonPointer.root)
 | 
			
		||||
	    {
 | 
			
		||||
		eventCopy.u.keyButtonPointer.eventX += panoramiXdataPtr[0].x;
 | 
			
		||||
		eventCopy.u.keyButtonPointer.eventY += panoramiXdataPtr[0].y;
 | 
			
		||||
		eventCopy.u.keyButtonPointer.eventX += screenInfo.screens[0]->x;
 | 
			
		||||
		eventCopy.u.keyButtonPointer.eventY += screenInfo.screens[0]->y;
 | 
			
		||||
	    }
 | 
			
		||||
	    events = &eventCopy;
 | 
			
		||||
	    break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1210,8 +1210,8 @@ PostSyntheticMotion(DeviceIntPtr pDev,
 | 
			
		|||
       will translate from sprite screen to screen 0 upon reentry
 | 
			
		||||
       to the DIX layer. */
 | 
			
		||||
    if (!noPanoramiXExtension) {
 | 
			
		||||
        x += panoramiXdataPtr[0].x - panoramiXdataPtr[screen].x;
 | 
			
		||||
        y += panoramiXdataPtr[0].y - panoramiXdataPtr[screen].y;
 | 
			
		||||
        x += screenInfo.screens[0]->x - screenInfo.screens[screen]->x;
 | 
			
		||||
        y += screenInfo.screens[0]->y - screenInfo.screens[screen]->y;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,8 +83,6 @@ ClientPtr  serverClient;
 | 
			
		|||
int  currentMaxClients;   /* current size of clients array */
 | 
			
		||||
long maxBigRequestSize = MAX_BIG_REQUEST_SIZE;
 | 
			
		||||
 | 
			
		||||
WindowPtr WindowTable[MAXSCREENS];
 | 
			
		||||
 | 
			
		||||
unsigned long globalSerialNumber = 0;
 | 
			
		||||
unsigned long serverGeneration = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -137,5 +135,3 @@ char *display;
 | 
			
		|||
char *ConnectionInfo;
 | 
			
		||||
 | 
			
		||||
CARD32 TimeOutValue = DEFAULT_TIMEOUT * MILLI_PER_SECOND;
 | 
			
		||||
 | 
			
		||||
DDXPointRec dixScreenOrigins[MAXSCREENS];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -249,7 +249,7 @@ int main(int argc, char *argv[], char *envp[])
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < screenInfo.numScreens; i++)
 | 
			
		||||
	    InitRootWindow(WindowTable[i]);
 | 
			
		||||
	    InitRootWindow(screenInfo.screens[i]->root);
 | 
			
		||||
 | 
			
		||||
        InitCoreDevices();
 | 
			
		||||
	InitInput(argc, argv);
 | 
			
		||||
| 
						 | 
				
			
			@ -303,7 +303,8 @@ int main(int argc, char *argv[], char *envp[])
 | 
			
		|||
 | 
			
		||||
        CloseInput();
 | 
			
		||||
 | 
			
		||||
        memset(WindowTable, 0, sizeof(WindowTable));
 | 
			
		||||
	for (i = 0; i < screenInfo.numScreens; i++)
 | 
			
		||||
	    screenInfo.screens[i]->root = NullWindow;
 | 
			
		||||
	CloseDownDevices();
 | 
			
		||||
	CloseDownEvents();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										102
									
								
								dix/window.c
								
								
								
								
							
							
						
						
									
										102
									
								
								dix/window.c
								
								
								
								
							| 
						 | 
				
			
			@ -151,12 +151,10 @@ WindowSeekDeviceCursor(WindowPtr pWin,
 | 
			
		|||
 | 
			
		||||
int screenIsSaved = SCREEN_SAVER_OFF;
 | 
			
		||||
 | 
			
		||||
ScreenSaverStuffRec savedScreenInfo[MAXSCREENS];
 | 
			
		||||
 | 
			
		||||
static int FocusPrivatesKeyIndex;
 | 
			
		||||
DevPrivateKey FocusPrivatesKey = &FocusPrivatesKeyIndex;
 | 
			
		||||
 | 
			
		||||
static Bool TileScreenSaver(int i, int kind);
 | 
			
		||||
static Bool TileScreenSaver(ScreenPtr pScreen, int kind);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define INPUTONLY_LEGAL_MASK (CWWinGravity | CWEventMask | \
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +210,7 @@ PrintWindowTree(void)
 | 
			
		|||
    for (i=0; i<screenInfo.numScreens; i++)
 | 
			
		||||
    {
 | 
			
		||||
	ErrorF("[dix] WINDOW %d\n", i);
 | 
			
		||||
	pWin = WindowTable[i];
 | 
			
		||||
	pWin = screenInfo.screens[i]->root;
 | 
			
		||||
	miPrintRegion(&pWin->clipList);
 | 
			
		||||
	p1 = pWin->firstChild;
 | 
			
		||||
	PrintChildren(p1, 4);
 | 
			
		||||
| 
						 | 
				
			
			@ -258,7 +256,7 @@ TraverseTree(WindowPtr pWin, VisitWindowProcPtr func, pointer data)
 | 
			
		|||
int
 | 
			
		||||
WalkTree(ScreenPtr pScreen, VisitWindowProcPtr func, pointer data)
 | 
			
		||||
{
 | 
			
		||||
    return(TraverseTree(WindowTable[pScreen->myNum], func, data));
 | 
			
		||||
    return(TraverseTree(pScreen->root, func, data));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* hack for forcing backing store on all windows */
 | 
			
		||||
| 
						 | 
				
			
			@ -363,12 +361,12 @@ CreateRootWindow(ScreenPtr pScreen)
 | 
			
		|||
    if (!pWin)
 | 
			
		||||
	return FALSE;
 | 
			
		||||
 | 
			
		||||
    savedScreenInfo[pScreen->myNum].pWindow = NULL;
 | 
			
		||||
    savedScreenInfo[pScreen->myNum].wid = FakeClientID(0);
 | 
			
		||||
    savedScreenInfo[pScreen->myNum].ExternalScreenSaver = NULL;
 | 
			
		||||
    pScreen->screensaver.pWindow = NULL;
 | 
			
		||||
    pScreen->screensaver.wid = FakeClientID(0);
 | 
			
		||||
    pScreen->screensaver.ExternalScreenSaver = NULL;
 | 
			
		||||
    screenIsSaved = SCREEN_SAVER_OFF;
 | 
			
		||||
 | 
			
		||||
    WindowTable[pScreen->myNum] = pWin;
 | 
			
		||||
    pScreen->root = pWin;
 | 
			
		||||
 | 
			
		||||
    pWin->drawable.pScreen = pScreen;
 | 
			
		||||
    pWin->drawable.type = DRAWABLE_WINDOW;
 | 
			
		||||
| 
						 | 
				
			
			@ -539,7 +537,7 @@ RealChildHead(WindowPtr pWin)
 | 
			
		|||
 | 
			
		||||
    if (!pWin->parent &&
 | 
			
		||||
	(screenIsSaved == SCREEN_SAVER_ON) &&
 | 
			
		||||
	(HasSaverWindow (pWin->drawable.pScreen->myNum)))
 | 
			
		||||
	(HasSaverWindow (pWin->drawable.pScreen)))
 | 
			
		||||
	return (pWin->firstChild);
 | 
			
		||||
    else
 | 
			
		||||
	return (NullWindow);
 | 
			
		||||
| 
						 | 
				
			
			@ -1329,7 +1327,7 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
 | 
			
		|||
	     */
 | 
			
		||||
	    if ( cursorID == None)
 | 
			
		||||
	    {
 | 
			
		||||
		if (pWin == WindowTable[pWin->drawable.pScreen->myNum])
 | 
			
		||||
		if (pWin == pWin->drawable.pScreen->root)
 | 
			
		||||
		    pCursor = rootCursor;
 | 
			
		||||
		else
 | 
			
		||||
		    pCursor = (CursorPtr) None;
 | 
			
		||||
| 
						 | 
				
			
			@ -2238,8 +2236,8 @@ ConfigureWindow(WindowPtr pWin, Mask mask, XID *vlist, ClientPtr client)
 | 
			
		|||
	event.u.configureRequest.y = y;
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
	if(!noPanoramiXExtension && (!pParent || !pParent->parent)) {
 | 
			
		||||
            event.u.configureRequest.x += panoramiXdataPtr[0].x;
 | 
			
		||||
            event.u.configureRequest.y += panoramiXdataPtr[0].y;
 | 
			
		||||
            event.u.configureRequest.x += screenInfo.screens[0]->x;
 | 
			
		||||
            event.u.configureRequest.y += screenInfo.screens[0]->y;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	event.u.configureRequest.width = w;
 | 
			
		||||
| 
						 | 
				
			
			@ -2319,8 +2317,8 @@ ActuallyDoSomething:
 | 
			
		|||
	event.u.configureNotify.y = y;
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
	if(!noPanoramiXExtension && (!pParent || !pParent->parent)) {
 | 
			
		||||
	    event.u.configureNotify.x += panoramiXdataPtr[0].x;
 | 
			
		||||
            event.u.configureNotify.y += panoramiXdataPtr[0].y;
 | 
			
		||||
	    event.u.configureNotify.x += screenInfo.screens[0]->x;
 | 
			
		||||
	    event.u.configureNotify.y += screenInfo.screens[0]->y;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	event.u.configureNotify.width = w;
 | 
			
		||||
| 
						 | 
				
			
			@ -2473,8 +2471,8 @@ ReparentWindow(WindowPtr pWin, WindowPtr pParent,
 | 
			
		|||
    event.u.reparent.y = y;
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if(!noPanoramiXExtension && !pParent->parent) {
 | 
			
		||||
	event.u.reparent.x += panoramiXdataPtr[0].x;
 | 
			
		||||
	event.u.reparent.y += panoramiXdataPtr[0].y;
 | 
			
		||||
	event.u.reparent.x += screenInfo.screens[0]->x;
 | 
			
		||||
	event.u.reparent.y += screenInfo.screens[0]->y;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
    event.u.reparent.override = pWin->overrideRedirect;
 | 
			
		||||
| 
						 | 
				
			
			@ -2966,7 +2964,7 @@ HandleSaveSet(ClientPtr client)
 | 
			
		|||
	pWin = SaveSetWindow(client->saveSet[j]);
 | 
			
		||||
#ifdef XFIXES
 | 
			
		||||
	if (SaveSetToRoot(client->saveSet[j]))
 | 
			
		||||
	    pParent = WindowTable[pWin->drawable.pScreen->myNum];
 | 
			
		||||
	    pParent = pWin->drawable.pScreen->root;
 | 
			
		||||
	else
 | 
			
		||||
#endif
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -3034,7 +3032,7 @@ NotClippedByChildren(WindowPtr pWin)
 | 
			
		|||
    pReg = REGION_CREATE(pScreen, NullBox, 1);
 | 
			
		||||
    if (pWin->parent ||
 | 
			
		||||
	screenIsSaved != SCREEN_SAVER_ON ||
 | 
			
		||||
	!HasSaverWindow (pWin->drawable.pScreen->myNum))
 | 
			
		||||
	!HasSaverWindow (pWin->drawable.pScreen))
 | 
			
		||||
    {
 | 
			
		||||
	REGION_INTERSECT(pScreen, pReg, &pWin->borderClip, &pWin->winSize);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -3152,33 +3150,33 @@ dixSaveScreens(ClientPtr client, int on, int mode)
 | 
			
		|||
    }
 | 
			
		||||
    for (i = 0; i < screenInfo.numScreens; i++)
 | 
			
		||||
    {
 | 
			
		||||
	ScreenPtr pScreen = screenInfo.screens[i];
 | 
			
		||||
	if (on == SCREEN_SAVER_FORCER)
 | 
			
		||||
	   (* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i], on);
 | 
			
		||||
	if (savedScreenInfo[i].ExternalScreenSaver)
 | 
			
		||||
	   (* pScreen->SaveScreen) (pScreen, on);
 | 
			
		||||
	if (pScreen->screensaver.ExternalScreenSaver)
 | 
			
		||||
	{
 | 
			
		||||
	    if ((*savedScreenInfo[i].ExternalScreenSaver)
 | 
			
		||||
		(screenInfo.screens[i], type, on == SCREEN_SAVER_FORCER))
 | 
			
		||||
	    if ((*pScreen->screensaver.ExternalScreenSaver)
 | 
			
		||||
		(pScreen, type, on == SCREEN_SAVER_FORCER))
 | 
			
		||||
		continue;
 | 
			
		||||
	}
 | 
			
		||||
	if (type == screenIsSaved)
 | 
			
		||||
	    continue;
 | 
			
		||||
	switch (type) {
 | 
			
		||||
	case SCREEN_SAVER_OFF:
 | 
			
		||||
	    if (savedScreenInfo[i].blanked == SCREEN_IS_BLANKED)
 | 
			
		||||
	    if (pScreen->screensaver.blanked == SCREEN_IS_BLANKED)
 | 
			
		||||
	    {
 | 
			
		||||
	       (* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i],
 | 
			
		||||
						      what);
 | 
			
		||||
	       (* pScreen->SaveScreen) (pScreen, what);
 | 
			
		||||
	    }
 | 
			
		||||
	    else if (HasSaverWindow (i))
 | 
			
		||||
	    else if (HasSaverWindow (pScreen))
 | 
			
		||||
	    {
 | 
			
		||||
		savedScreenInfo[i].pWindow = NullWindow;
 | 
			
		||||
		FreeResource(savedScreenInfo[i].wid, RT_NONE);
 | 
			
		||||
		pScreen->screensaver.pWindow = NullWindow;
 | 
			
		||||
		FreeResource(pScreen->screensaver.wid, RT_NONE);
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case SCREEN_SAVER_CYCLE:
 | 
			
		||||
	    if (savedScreenInfo[i].blanked == SCREEN_IS_TILED)
 | 
			
		||||
	    if (pScreen->screensaver.blanked == SCREEN_IS_TILED)
 | 
			
		||||
	    {
 | 
			
		||||
		WindowPtr pWin = savedScreenInfo[i].pWindow;
 | 
			
		||||
		WindowPtr pWin = pScreen->screensaver.pWindow;
 | 
			
		||||
		/* make it look like screen saver is off, so that
 | 
			
		||||
		 * NotClippedByChildren will compute a clip list
 | 
			
		||||
		 * for the root window, so miPaintWindow works
 | 
			
		||||
| 
						 | 
				
			
			@ -3202,35 +3200,33 @@ dixSaveScreens(ClientPtr client, int on, int mode)
 | 
			
		|||
	     * Call the DDX saver in case it wants to do something
 | 
			
		||||
	     * at cycle time
 | 
			
		||||
	     */
 | 
			
		||||
	    else if (savedScreenInfo[i].blanked == SCREEN_IS_BLANKED)
 | 
			
		||||
	    else if (pScreen->screensaver.blanked == SCREEN_IS_BLANKED)
 | 
			
		||||
	    {
 | 
			
		||||
		(* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i],
 | 
			
		||||
						       type);
 | 
			
		||||
		(* pScreen->SaveScreen) (pScreen, type);
 | 
			
		||||
	    }
 | 
			
		||||
	    break;
 | 
			
		||||
	case SCREEN_SAVER_ON:
 | 
			
		||||
	    if (ScreenSaverBlanking != DontPreferBlanking)
 | 
			
		||||
	    {
 | 
			
		||||
		if ((* screenInfo.screens[i]->SaveScreen)
 | 
			
		||||
		   (screenInfo.screens[i], what))
 | 
			
		||||
		if ((* pScreen->SaveScreen) (pScreen, what))
 | 
			
		||||
		{
 | 
			
		||||
		   savedScreenInfo[i].blanked = SCREEN_IS_BLANKED;
 | 
			
		||||
		   pScreen->screensaver.blanked = SCREEN_IS_BLANKED;
 | 
			
		||||
		   continue;
 | 
			
		||||
		}
 | 
			
		||||
		if ((ScreenSaverAllowExposures != DontAllowExposures) &&
 | 
			
		||||
		    TileScreenSaver(i, SCREEN_IS_BLACK))
 | 
			
		||||
		    TileScreenSaver(pScreen, SCREEN_IS_BLACK))
 | 
			
		||||
		{
 | 
			
		||||
		    savedScreenInfo[i].blanked = SCREEN_IS_BLACK;
 | 
			
		||||
		    pScreen->screensaver.blanked = SCREEN_IS_BLACK;
 | 
			
		||||
		    continue;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	    if ((ScreenSaverAllowExposures != DontAllowExposures) &&
 | 
			
		||||
		TileScreenSaver(i, SCREEN_IS_TILED))
 | 
			
		||||
		TileScreenSaver(pScreen, SCREEN_IS_TILED))
 | 
			
		||||
	    {
 | 
			
		||||
		savedScreenInfo[i].blanked = SCREEN_IS_TILED;
 | 
			
		||||
		pScreen->screensaver.blanked = SCREEN_IS_TILED;
 | 
			
		||||
	    }
 | 
			
		||||
	    else
 | 
			
		||||
		savedScreenInfo[i].blanked = SCREEN_ISNT_SAVED;
 | 
			
		||||
		pScreen->screensaver.blanked = SCREEN_ISNT_SAVED;
 | 
			
		||||
	    break;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -3252,7 +3248,7 @@ SaveScreens(int on, int mode)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static Bool
 | 
			
		||||
TileScreenSaver(int i, int kind)
 | 
			
		||||
TileScreenSaver(ScreenPtr pScreen, int kind)
 | 
			
		||||
{
 | 
			
		||||
    int j;
 | 
			
		||||
    int result;
 | 
			
		||||
| 
						 | 
				
			
			@ -3269,9 +3265,9 @@ TileScreenSaver(int i, int kind)
 | 
			
		|||
    attri = 0;
 | 
			
		||||
    switch (kind) {
 | 
			
		||||
    case SCREEN_IS_TILED:
 | 
			
		||||
	switch (WindowTable[i]->backgroundState) {
 | 
			
		||||
	switch (pScreen->root->backgroundState) {
 | 
			
		||||
	case BackgroundPixel:
 | 
			
		||||
	    attributes[attri++] = WindowTable[i]->background.pixel;
 | 
			
		||||
	    attributes[attri++] = pScreen->root->background.pixel;
 | 
			
		||||
	    mask |= CWBackPixel;
 | 
			
		||||
	    break;
 | 
			
		||||
	case BackgroundPixmap:
 | 
			
		||||
| 
						 | 
				
			
			@ -3283,7 +3279,7 @@ TileScreenSaver(int i, int kind)
 | 
			
		|||
	}
 | 
			
		||||
	break;
 | 
			
		||||
    case SCREEN_IS_BLACK:
 | 
			
		||||
	attributes[attri++] = WindowTable[i]->drawable.pScreen->blackPixel;
 | 
			
		||||
	attributes[attri++] = pScreen->root->drawable.pScreen->blackPixel;
 | 
			
		||||
	mask |= CWBackPixel;
 | 
			
		||||
	break;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -3330,14 +3326,14 @@ TileScreenSaver(int i, int kind)
 | 
			
		|||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pWin = savedScreenInfo[i].pWindow =
 | 
			
		||||
	 CreateWindow(savedScreenInfo[i].wid,
 | 
			
		||||
	      WindowTable[i],
 | 
			
		||||
    pWin = pScreen->screensaver.pWindow =
 | 
			
		||||
	 CreateWindow(pScreen->screensaver.wid,
 | 
			
		||||
	      pScreen->root,
 | 
			
		||||
	      -RANDOM_WIDTH, -RANDOM_WIDTH,
 | 
			
		||||
	      (unsigned short)screenInfo.screens[i]->width + RANDOM_WIDTH,
 | 
			
		||||
	      (unsigned short)screenInfo.screens[i]->height + RANDOM_WIDTH,
 | 
			
		||||
	      (unsigned short)pScreen->width + RANDOM_WIDTH,
 | 
			
		||||
	      (unsigned short)pScreen->height + RANDOM_WIDTH,
 | 
			
		||||
	      0, InputOutput, mask, attributes, 0, serverClient,
 | 
			
		||||
	      wVisual (WindowTable[i]), &result);
 | 
			
		||||
	      wVisual (pScreen->root), &result);
 | 
			
		||||
 | 
			
		||||
    if (cursor)
 | 
			
		||||
	FreeResource (cursorID, RT_NONE);
 | 
			
		||||
| 
						 | 
				
			
			@ -3346,7 +3342,7 @@ TileScreenSaver(int i, int kind)
 | 
			
		|||
	return FALSE;
 | 
			
		||||
 | 
			
		||||
    if (!AddResource(pWin->drawable.id, RT_WINDOW,
 | 
			
		||||
		     (pointer)savedScreenInfo[i].pWindow))
 | 
			
		||||
		     (pointer)pScreen->screensaver.pWindow))
 | 
			
		||||
	return FALSE;
 | 
			
		||||
 | 
			
		||||
    if (mask & CWBackPixmap)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								fb/fb.h
								
								
								
								
							
							
						
						
									
										2
									
								
								fb/fb.h
								
								
								
								
							| 
						 | 
				
			
			@ -740,7 +740,7 @@ typedef struct {
 | 
			
		|||
 | 
			
		||||
#define fbWindowEnabled(pWin) \
 | 
			
		||||
    REGION_NOTEMPTY((pWin)->drawable.pScreen, \
 | 
			
		||||
		    &WindowTable[(pWin)->drawable.pScreen->myNum]->borderClip)
 | 
			
		||||
		    &(pWin)->drawable.pScreen->root->borderClip)
 | 
			
		||||
 | 
			
		||||
#define fbDrawableEnabled(pDrawable) \
 | 
			
		||||
    ((pDrawable)->type == DRAWABLE_PIXMAP ? \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -230,7 +230,7 @@ static int dmxSLFindNext(int *list)
 | 
			
		|||
/** Make one pass over all the screens and return the number updated. */
 | 
			
		||||
static int dmxTryComputeScreenOrigins(int *screensLeft)
 | 
			
		||||
{
 | 
			
		||||
    ScreenPtr       pScreen;
 | 
			
		||||
    ScreenPtr       pScreen, refScreen;
 | 
			
		||||
    DMXScreenInfo   *screen;
 | 
			
		||||
    int             i, ref;
 | 
			
		||||
    int             changed = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -239,54 +239,56 @@ static int dmxTryComputeScreenOrigins(int *screensLeft)
 | 
			
		|||
        if (!screensLeft[i])
 | 
			
		||||
            continue;
 | 
			
		||||
        screen  = &dmxScreens[i];
 | 
			
		||||
        pScreen = screenInfo.screens[i];
 | 
			
		||||
        switch (screen->where) {
 | 
			
		||||
        case PosAbsolute:
 | 
			
		||||
            dixScreenOrigins[i].x = screen->whereX;
 | 
			
		||||
            dixScreenOrigins[i].y = screen->whereY;
 | 
			
		||||
            pScreen->x = screen->whereX;
 | 
			
		||||
            pScreen->y = screen->whereY;
 | 
			
		||||
            ++changed, screensLeft[i] = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        case PosRelative:
 | 
			
		||||
            ref = screen->whereRefScreen;
 | 
			
		||||
            if (screensLeft[ref])
 | 
			
		||||
                break;
 | 
			
		||||
            dixScreenOrigins[i].x = dixScreenOrigins[ref].x + screen->whereX;
 | 
			
		||||
            dixScreenOrigins[i].y = dixScreenOrigins[ref].y + screen->whereY;
 | 
			
		||||
            refScreen = screenInfo.screens[ref];
 | 
			
		||||
            pScreen->x = refScreen->x + screen->whereX;
 | 
			
		||||
            pScreen->y = refScreen->y + screen->whereY;
 | 
			
		||||
            ++changed, screensLeft[i] = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        case PosRightOf:
 | 
			
		||||
            ref = screen->whereRefScreen;
 | 
			
		||||
            if (screensLeft[ref])
 | 
			
		||||
                break;
 | 
			
		||||
            pScreen = screenInfo.screens[ref];
 | 
			
		||||
            dixScreenOrigins[i].x = dixScreenOrigins[ref].x + pScreen->width;
 | 
			
		||||
            dixScreenOrigins[i].y = dixScreenOrigins[ref].y;
 | 
			
		||||
            refScreen = screenInfo.screens[ref];
 | 
			
		||||
            pScreen->x = refScreen->x + refScreen->width;
 | 
			
		||||
            pScreen->y = refScreen->y;
 | 
			
		||||
            ++changed, screensLeft[i] = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        case PosLeftOf:
 | 
			
		||||
            ref = screen->whereRefScreen;
 | 
			
		||||
            if (screensLeft[ref])
 | 
			
		||||
                break;
 | 
			
		||||
            pScreen = screenInfo.screens[i];
 | 
			
		||||
            dixScreenOrigins[i].x = dixScreenOrigins[ref].x - pScreen->width;
 | 
			
		||||
            dixScreenOrigins[i].y = dixScreenOrigins[ref].y;
 | 
			
		||||
            refScreen = screenInfo.screens[ref];
 | 
			
		||||
            pScreen->x = refScreen->x - pScreen->width;
 | 
			
		||||
            pScreen->y = refScreen->y;
 | 
			
		||||
            ++changed, screensLeft[i] = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        case PosBelow:
 | 
			
		||||
            ref = screen->whereRefScreen;
 | 
			
		||||
            if (screensLeft[ref])
 | 
			
		||||
                break;
 | 
			
		||||
            pScreen = screenInfo.screens[ref];
 | 
			
		||||
            dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
			
		||||
            dixScreenOrigins[i].y = dixScreenOrigins[ref].y + pScreen->height;
 | 
			
		||||
            refScreen = screenInfo.screens[ref];
 | 
			
		||||
            pScreen->x = refScreen->x;
 | 
			
		||||
            pScreen->y = refScreen->y + refScreen->height;
 | 
			
		||||
            ++changed, screensLeft[i] = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        case PosAbove:
 | 
			
		||||
            ref = screen->whereRefScreen;
 | 
			
		||||
            if (screensLeft[ref])
 | 
			
		||||
                break;
 | 
			
		||||
            pScreen = screenInfo.screens[i];
 | 
			
		||||
            dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
			
		||||
            dixScreenOrigins[i].y = dixScreenOrigins[ref].y - pScreen->height;
 | 
			
		||||
            refScreen = screenInfo.screens[ref];
 | 
			
		||||
            pScreen->x = refScreen->x;
 | 
			
		||||
            pScreen->y = refScreen->y - pScreen->height;
 | 
			
		||||
            ++changed, screensLeft[i] = 0;
 | 
			
		||||
            break;
 | 
			
		||||
        case PosNone:
 | 
			
		||||
| 
						 | 
				
			
			@ -298,6 +300,7 @@ static int dmxTryComputeScreenOrigins(int *screensLeft)
 | 
			
		|||
 | 
			
		||||
static void dmxComputeScreenOrigins(void)
 | 
			
		||||
{
 | 
			
		||||
    ScreenPtr       pScreen;
 | 
			
		||||
    int             *screensLeft;
 | 
			
		||||
    int             i, ref;
 | 
			
		||||
    int             minX, minY;
 | 
			
		||||
| 
						 | 
				
			
			@ -313,7 +316,8 @@ static void dmxComputeScreenOrigins(void)
 | 
			
		|||
	     * guarantees that we will eventually terminate.
 | 
			
		||||
	     */
 | 
			
		||||
	    ref                     = dmxScreens[i].whereRefScreen;
 | 
			
		||||
	    dixScreenOrigins[ref].x = dixScreenOrigins[ref].y = 0;
 | 
			
		||||
	    pScreen                 = screenInfo.screens[ref];
 | 
			
		||||
	    pScreen->x = pScreen->y = 0;
 | 
			
		||||
	    screensLeft[ref]        = 0;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -322,18 +326,18 @@ static void dmxComputeScreenOrigins(void)
 | 
			
		|||
 | 
			
		||||
                                /* Justify the topmost and leftmost to
 | 
			
		||||
                                 * (0,0). */
 | 
			
		||||
    minX = dixScreenOrigins[0].x;
 | 
			
		||||
    minY = dixScreenOrigins[0].y;
 | 
			
		||||
    minX = screenInfo.screens[0]->x;
 | 
			
		||||
    minY = screenInfo.screens[0]->y;
 | 
			
		||||
    for (i = 1; i < dmxNumScreens; i++) { /* Compute minX, minY */
 | 
			
		||||
	if (dixScreenOrigins[i].x < minX)
 | 
			
		||||
            minX = dixScreenOrigins[i].x;
 | 
			
		||||
	if (dixScreenOrigins[i].y < minY)
 | 
			
		||||
            minY = dixScreenOrigins[i].y;
 | 
			
		||||
	if (screenInfo.screens[i]->x < minX)
 | 
			
		||||
            minX = screenInfo.screens[i]->x;
 | 
			
		||||
	if (screenInfo.screens[i]->y < minY)
 | 
			
		||||
            minY = screenInfo.screens[i]->y;
 | 
			
		||||
    }
 | 
			
		||||
    if (minX || minY) {
 | 
			
		||||
	for (i = 0; i < dmxNumScreens; i++) {
 | 
			
		||||
	    dixScreenOrigins[i].x -= minX;
 | 
			
		||||
	    dixScreenOrigins[i].y -= minY;
 | 
			
		||||
	    screenInfo.screens[i]->x -= minX;
 | 
			
		||||
	    screenInfo.screens[i]->y -= minY;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -398,8 +402,8 @@ void dmxInitOrigins(void)
 | 
			
		|||
 | 
			
		||||
    for (i = 0; i < dmxNumScreens; i++) {
 | 
			
		||||
        DMXScreenInfo  *dmxScreen = &dmxScreens[i];
 | 
			
		||||
        dmxScreen->rootXOrigin = dixScreenOrigins[i].x;
 | 
			
		||||
        dmxScreen->rootYOrigin = dixScreenOrigins[i].y;
 | 
			
		||||
        dmxScreen->rootXOrigin = screenInfo.screens[i]->x;
 | 
			
		||||
        dmxScreen->rootYOrigin = screenInfo.screens[i]->y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dmxReInitOrigins();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -297,7 +297,7 @@ void dmxFlushPendingSyncs(void)
 | 
			
		|||
void dmxUpdateScreenResources(ScreenPtr pScreen, int x, int y, int w, int h)
 | 
			
		||||
{
 | 
			
		||||
    DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
 | 
			
		||||
    WindowPtr      pRoot     = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr      pRoot     = pScreen->root;
 | 
			
		||||
    WindowPtr      pChild;
 | 
			
		||||
    Bool           anyMarked = FALSE;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -402,7 +402,7 @@ static void dmxConfigureScreenWindow(int idx,
 | 
			
		|||
static void dmxConfigureRootWindow(int idx, int x, int y, int w, int h)
 | 
			
		||||
{
 | 
			
		||||
    DMXScreenInfo *dmxScreen = &dmxScreens[idx];
 | 
			
		||||
    WindowPtr      pRoot     = WindowTable[idx];
 | 
			
		||||
    WindowPtr      pRoot     = screenInfo.screens[idx]->root;
 | 
			
		||||
 | 
			
		||||
    /* NOTE: Either this function or the ones that it calls must handle
 | 
			
		||||
     * the case where w == 0 || h == 0.  Currently, the functions that
 | 
			
		||||
| 
						 | 
				
			
			@ -437,7 +437,7 @@ static void dmxSetRootWindowOrigin(int idx, int x, int y)
 | 
			
		|||
{
 | 
			
		||||
    DMXScreenInfo *dmxScreen = &dmxScreens[idx];
 | 
			
		||||
    ScreenPtr      pScreen   = screenInfo.screens[idx];
 | 
			
		||||
    WindowPtr      pRoot     = WindowTable[idx];
 | 
			
		||||
    WindowPtr      pRoot     = pScreen->root;
 | 
			
		||||
    WindowPtr      pChild;
 | 
			
		||||
    int            xoff;
 | 
			
		||||
    int            yoff;
 | 
			
		||||
| 
						 | 
				
			
			@ -447,18 +447,18 @@ static void dmxSetRootWindowOrigin(int idx, int x, int y)
 | 
			
		|||
    dmxScreen->rootYOrigin = y;
 | 
			
		||||
 | 
			
		||||
    /* Compute offsets here in case <x,y> has been changed above */
 | 
			
		||||
    xoff = x - dixScreenOrigins[idx].x;
 | 
			
		||||
    yoff = y - dixScreenOrigins[idx].y;
 | 
			
		||||
    xoff = x - pScreen->x;
 | 
			
		||||
    yoff = y - pScreen->y;
 | 
			
		||||
 | 
			
		||||
    /* Adjust the root window's position in dixScreenOrigins */
 | 
			
		||||
    dixScreenOrigins[idx].x = dmxScreen->rootXOrigin;
 | 
			
		||||
    dixScreenOrigins[idx].y = dmxScreen->rootYOrigin;
 | 
			
		||||
    /* Adjust the root window's position */
 | 
			
		||||
    pScreen->x = dmxScreen->rootXOrigin;
 | 
			
		||||
    pScreen->y = dmxScreen->rootYOrigin;
 | 
			
		||||
 | 
			
		||||
    /* Recalculate the Xinerama regions and data structs */
 | 
			
		||||
    XineramaReinitData(pScreen);
 | 
			
		||||
 | 
			
		||||
    /* Adjust each of the root window's children */
 | 
			
		||||
    if (!idx) ReinitializeRootWindow(WindowTable[0], xoff, yoff);
 | 
			
		||||
    if (!idx) ReinitializeRootWindow(screenInfo.screens[0]->root, xoff, yoff);
 | 
			
		||||
    pChild = pRoot->firstChild;
 | 
			
		||||
    while (pChild) {
 | 
			
		||||
	/* Adjust child window's position */
 | 
			
		||||
| 
						 | 
				
			
			@ -634,7 +634,7 @@ int dmxConfigureDesktop(DMXDesktopAttributesPtr attribs)
 | 
			
		|||
	int   i;
 | 
			
		||||
	for (i = 0; i < dmxNumScreens; i++) {
 | 
			
		||||
	    ScreenPtr  pScreen = screenInfo.screens[i];
 | 
			
		||||
	    WindowPtr  pChild  = WindowTable[i]->firstChild;
 | 
			
		||||
	    WindowPtr  pChild  = pScreen->root->firstChild;
 | 
			
		||||
	    while (pChild) {
 | 
			
		||||
		/* Adjust child window's position */
 | 
			
		||||
		pScreen->MoveWindow(pChild,
 | 
			
		||||
| 
						 | 
				
			
			@ -914,7 +914,7 @@ static void dmxBECreateResources(pointer value, XID id, RESTYPE type,
 | 
			
		|||
static void dmxBECreateWindowTree(int idx)
 | 
			
		||||
{
 | 
			
		||||
    DMXScreenInfo *dmxScreen = &dmxScreens[idx];
 | 
			
		||||
    WindowPtr      pRoot     = WindowTable[idx];
 | 
			
		||||
    WindowPtr      pRoot     = screenInfo.screens[idx]->root;
 | 
			
		||||
    dmxWinPrivPtr  pWinPriv  = DMX_GET_WINDOW_PRIV(pRoot);
 | 
			
		||||
    WindowPtr      pWin;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -982,7 +982,7 @@ static void dmxBECreateWindowTree(int idx)
 | 
			
		|||
static void dmxForceExposures(int idx)
 | 
			
		||||
{
 | 
			
		||||
    ScreenPtr      pScreen   = screenInfo.screens[idx];
 | 
			
		||||
    WindowPtr  pRoot     = WindowTable[idx];
 | 
			
		||||
    WindowPtr  pRoot     = pScreen->root;
 | 
			
		||||
    Bool       anyMarked = FALSE;
 | 
			
		||||
    WindowPtr  pChild;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1510,7 +1510,7 @@ static void dmxBEDestroyScratchGCs(int scrnNum)
 | 
			
		|||
 *  destroy a window as well as all of it's children. */
 | 
			
		||||
static void dmxBEDestroyWindowTree(int idx)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr  pWin   = WindowTable[idx];
 | 
			
		||||
    WindowPtr  pWin   = screenInfo.screens[idx]->root;
 | 
			
		||||
    WindowPtr  pChild = pWin;
 | 
			
		||||
 | 
			
		||||
    while (1) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1497,9 +1497,7 @@ PanoramiX prefix.
 | 
			
		|||
    <para>The Xinerama extension is registered by calling AddExtension().
 | 
			
		||||
    </para>
 | 
			
		||||
 | 
			
		||||
    <para>A local per-screen array of data structures
 | 
			
		||||
    (panoramiXdataPtr[])
 | 
			
		||||
    is allocated for each physical screen, and GC and Screen private
 | 
			
		||||
    <para>GC and Screen private
 | 
			
		||||
    indexes are allocated, and both GC and Screen private areas are
 | 
			
		||||
    allocated for each physical screen.  These hold Xinerama-specific
 | 
			
		||||
    per-GC and per-Screen data.  Each screen's CreateGC and CloseScreen
 | 
			
		||||
| 
						 | 
				
			
			@ -1509,13 +1507,10 @@ PanoramiX prefix.
 | 
			
		|||
    Xinerama windows, pixmaps and colormaps.
 | 
			
		||||
    </para>
 | 
			
		||||
 | 
			
		||||
    <para>A region (XineramaScreenRegions[i]) is initialized for each
 | 
			
		||||
    physical screen, and single region (PanoramiXScreenRegion) is
 | 
			
		||||
    initialized to be the union of the screen regions.  The
 | 
			
		||||
    panoramiXdataPtr[] array is also initialized with the size and
 | 
			
		||||
    origin of each screen.  The relative positioning information for the
 | 
			
		||||
    physical screens is taken from the array
 | 
			
		||||
    dixScreenOrigins[], which
 | 
			
		||||
    <para>A region (PanoramiXScreenRegion) is
 | 
			
		||||
    initialized to be the union of the screen regions.
 | 
			
		||||
    The relative positioning information for the
 | 
			
		||||
    physical screens is taken from the ScreenRec x and y members, which
 | 
			
		||||
    the DDX layer must initialize in InitOutput().  The bounds of the
 | 
			
		||||
    combined screen is also calculated (PanoramiXPixWidth and
 | 
			
		||||
    PanoramiXPixHeight).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -370,7 +370,7 @@ void dmxCommonOthGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
 | 
			
		|||
    Display              *display = priv->display;
 | 
			
		||||
    int                  num;
 | 
			
		||||
    int                  i, j, k;
 | 
			
		||||
    int                  (*handler)(Display *, char *, char *);
 | 
			
		||||
    XextErrorHandler     handler;
 | 
			
		||||
 | 
			
		||||
    if (!display && !(display = XOpenDisplay(dmxInput->name)))
 | 
			
		||||
        return;
 | 
			
		||||
| 
						 | 
				
			
			@ -526,10 +526,9 @@ int dmxFindPointerScreen(int x, int y)
 | 
			
		|||
    int i;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < dmxNumScreens; i++) {
 | 
			
		||||
	if (x >= dixScreenOrigins[i].x
 | 
			
		||||
            && x < dixScreenOrigins[i].x + screenInfo.screens[i]->width
 | 
			
		||||
            && y >= dixScreenOrigins[i].y
 | 
			
		||||
            && y < dixScreenOrigins[i].y + screenInfo.screens[i]->height)
 | 
			
		||||
	ScreenPtr pScreen = screenInfo.screens[i];
 | 
			
		||||
	if (x >= pScreen->x && x < pScreen->x + pScreen->width &&
 | 
			
		||||
	    y >= pScreen->y && y < pScreen->y + pScreen->height)
 | 
			
		||||
	    return i;
 | 
			
		||||
    }
 | 
			
		||||
    return -1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -204,7 +204,8 @@ static void dmxConsoleDrawWindows(pointer private)
 | 
			
		|||
    XUnionRectWithRegion(&rect, whole, whole);
 | 
			
		||||
    
 | 
			
		||||
    for (i = 0; i < dmxNumScreens; i++) {
 | 
			
		||||
        WindowPtr     pRoot       = WindowTable[i];
 | 
			
		||||
        ScreenPtr     pScreen     = screenInfo.screens[i];
 | 
			
		||||
        WindowPtr     pRoot       = pScreen->root;
 | 
			
		||||
        WindowPtr     pChild;
 | 
			
		||||
 | 
			
		||||
#if DMX_WINDOW_DEBUG
 | 
			
		||||
| 
						 | 
				
			
			@ -227,10 +228,8 @@ static void dmxConsoleDrawWindows(pointer private)
 | 
			
		|||
                       pChild->overrideRedirect,
 | 
			
		||||
                       REGION_NUM_RECTS(&pChild->clipList));
 | 
			
		||||
#endif
 | 
			
		||||
                rect.x      = scalex(priv, pChild->drawable.x
 | 
			
		||||
                                     + dixScreenOrigins[i].x);
 | 
			
		||||
                rect.y      = scaley(priv, pChild->drawable.y
 | 
			
		||||
                                     + dixScreenOrigins[i].y);
 | 
			
		||||
                rect.x      = scalex(priv, pChild->drawable.x + pScreen->x);
 | 
			
		||||
                rect.y      = scaley(priv, pChild->drawable.y + pScreen->y);
 | 
			
		||||
                rect.width  = scalex(priv, pChild->drawable.width);
 | 
			
		||||
                rect.height = scaley(priv, pChild->drawable.height);
 | 
			
		||||
                XDrawRectangle(dpy, priv->pixmap, priv->gc,
 | 
			
		||||
| 
						 | 
				
			
			@ -263,15 +262,15 @@ static void dmxConsoleDraw(myPrivate *priv, int updateCursor, int update)
 | 
			
		|||
        DMXScreenInfo *dmxScreen = &dmxScreens[i];
 | 
			
		||||
	XFillRectangle(dpy, priv->pixmap,
 | 
			
		||||
                       dmxScreen->beDisplay ? priv->gcRev : priv->gcDet,
 | 
			
		||||
                       scalex(priv, dixScreenOrigins[i].x),
 | 
			
		||||
                       scaley(priv, dixScreenOrigins[i].y),
 | 
			
		||||
                       scalex(priv, screenInfo.screens[i]->x),
 | 
			
		||||
                       scaley(priv, screenInfo.screens[i]->y),
 | 
			
		||||
                       scalex(priv, screenInfo.screens[i]->width),
 | 
			
		||||
                       scaley(priv, screenInfo.screens[i]->height));
 | 
			
		||||
    }
 | 
			
		||||
    for (i = 0; i < dmxNumScreens; i++) {
 | 
			
		||||
        XDrawRectangle(dpy, priv->pixmap, priv->gc,
 | 
			
		||||
                       scalex(priv, dixScreenOrigins[i].x),
 | 
			
		||||
                       scaley(priv, dixScreenOrigins[i].y),
 | 
			
		||||
                       scalex(priv, screenInfo.screens[i]->x),
 | 
			
		||||
                       scaley(priv, screenInfo.screens[i]->y),
 | 
			
		||||
                       scalex(priv, screenInfo.screens[i]->width),
 | 
			
		||||
                       scaley(priv, screenInfo.screens[i]->height));
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -671,11 +670,11 @@ static void dmxConsoleComputeWidthHeight(myPrivate *priv,
 | 
			
		|||
                                 * possible by computing the visible
 | 
			
		||||
                                 * bounding box. */
 | 
			
		||||
    for (i = 0; i < dmxNumScreens; i++) {
 | 
			
		||||
	if (dixScreenOrigins[i].x+screenInfo.screens[i]->width > *width)
 | 
			
		||||
	    *width = dixScreenOrigins[i].x+screenInfo.screens[i]->width;
 | 
			
		||||
	if (screenInfo.screens[i]->x+screenInfo.screens[i]->width > *width)
 | 
			
		||||
	    *width = screenInfo.screens[i]->x+screenInfo.screens[i]->width;
 | 
			
		||||
        
 | 
			
		||||
	if (dixScreenOrigins[i].y+screenInfo.screens[i]->height > *height)
 | 
			
		||||
	    *height = dixScreenOrigins[i].y+screenInfo.screens[i]->height;
 | 
			
		||||
	if (screenInfo.screens[i]->y+screenInfo.screens[i]->height > *height)
 | 
			
		||||
	    *height = screenInfo.screens[i]->y+screenInfo.screens[i]->height;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -570,7 +570,7 @@ static void dmxUpdateWindowInformation(DMXInputInfo *dmxInput,
 | 
			
		|||
    int i;
 | 
			
		||||
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    if (!noPanoramiXExtension && pWindow && pWindow->parent != WindowTable[0])
 | 
			
		||||
    if (!noPanoramiXExtension && pWindow && pWindow->parent != screenInfo.screens[0]->root)
 | 
			
		||||
        return;
 | 
			
		||||
#endif
 | 
			
		||||
#if DMX_WINDOW_DEBUG
 | 
			
		||||
| 
						 | 
				
			
			@ -827,7 +827,7 @@ static void dmxPopulateLocal(DMXInputInfo *dmxInput, dmxArg a)
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int dmxInputExtensionErrorHandler(Display *dsp, char *name, char *reason)
 | 
			
		||||
int dmxInputExtensionErrorHandler(Display *dsp, _Xconst char *name, _Xconst char *reason)
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -839,7 +839,7 @@ static void dmxInputScanForExtensions(DMXInputInfo *dmxInput, int doXI)
 | 
			
		|||
    Display              *display;
 | 
			
		||||
    int                  num;
 | 
			
		||||
    int                  i, j;
 | 
			
		||||
    int                  (*handler)(Display *, char *, char *);
 | 
			
		||||
    XextErrorHandler     handler;
 | 
			
		||||
 | 
			
		||||
    if (!(display = XOpenDisplay(dmxInput->name))) return;
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -276,8 +276,8 @@ extern void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
 | 
			
		|||
extern void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
 | 
			
		||||
                                pointer ctrl, int unknown);
 | 
			
		||||
 | 
			
		||||
extern int  dmxInputExtensionErrorHandler(Display *dsp, char *name,
 | 
			
		||||
                                          char *reason);
 | 
			
		||||
extern int  dmxInputExtensionErrorHandler(Display *dsp, _Xconst char *name,
 | 
			
		||||
                                          _Xconst char *reason);
 | 
			
		||||
 | 
			
		||||
extern int          dmxInputDetach(DMXInputInfo *dmxInput);
 | 
			
		||||
extern void         dmxInputDetachAll(DMXScreenInfo *dmxScreen);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,7 +95,7 @@ KdOsFuncs	*kdOsFuncs;
 | 
			
		|||
void
 | 
			
		||||
KdSetRootClip (ScreenPtr pScreen, BOOL enable)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr	pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr	pWin = pScreen->root;
 | 
			
		||||
    WindowPtr	pChild;
 | 
			
		||||
    Bool	WasViewable;
 | 
			
		||||
    Bool	anyMarked = FALSE;
 | 
			
		||||
| 
						 | 
				
			
			@ -941,9 +941,8 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
 | 
			
		|||
    pScreenPriv->card = card;
 | 
			
		||||
    pScreenPriv->bytesPerPixel = screen->fb.bitsPerPixel >> 3;
 | 
			
		||||
    pScreenPriv->dpmsState = KD_DPMS_NORMAL;
 | 
			
		||||
#ifdef PANORAMIX
 | 
			
		||||
    dixScreenOrigins[pScreen->myNum] = screen->origin;
 | 
			
		||||
#endif
 | 
			
		||||
    pScreen->x = screen->origin.x;
 | 
			
		||||
    pScreen->y = screen->origin.y;
 | 
			
		||||
 | 
			
		||||
    if (!monitorResolution)
 | 
			
		||||
	monitorResolution = 75;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -581,7 +581,7 @@ xf86InitOrigins(void)
 | 
			
		|||
{
 | 
			
		||||
    unsigned long screensLeft, prevScreensLeft, mask;
 | 
			
		||||
    screenLayoutPtr screen;
 | 
			
		||||
    ScreenPtr pScreen;
 | 
			
		||||
    ScreenPtr pScreen, refScreen;
 | 
			
		||||
    int x1, x2, y1, y2, left, right, top, bottom;
 | 
			
		||||
    int i, j, ref, minX, minY, min, max;
 | 
			
		||||
    xf86ScreenLayoutPtr pLayout;
 | 
			
		||||
| 
						 | 
				
			
			@ -608,6 +608,7 @@ xf86InitOrigins(void)
 | 
			
		|||
	        continue;
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	    pScreen = xf86Screens[i]->pScreen;
 | 
			
		||||
	    switch(screen->where) {
 | 
			
		||||
	    case PosObsolete:
 | 
			
		||||
		OldStyleConfig = TRUE;
 | 
			
		||||
| 
						 | 
				
			
			@ -620,7 +621,7 @@ xf86InitOrigins(void)
 | 
			
		|||
			break;
 | 
			
		||||
		    }
 | 
			
		||||
		    pLayout->left = AddEdge(pLayout->left, 
 | 
			
		||||
			0, xf86Screens[i]->pScreen->height,
 | 
			
		||||
			0, pScreen->height,
 | 
			
		||||
			xf86Screens[ref]->pScreen->width, 0, ref);
 | 
			
		||||
		}
 | 
			
		||||
		if(screen->right) {
 | 
			
		||||
| 
						 | 
				
			
			@ -629,7 +630,6 @@ xf86InitOrigins(void)
 | 
			
		|||
			ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
			
		||||
			break;
 | 
			
		||||
		    }
 | 
			
		||||
		    pScreen = xf86Screens[i]->pScreen;
 | 
			
		||||
		    pLayout->right = AddEdge(pLayout->right, 
 | 
			
		||||
			0, pScreen->height, -pScreen->width, 0, ref);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -640,7 +640,7 @@ xf86InitOrigins(void)
 | 
			
		|||
			break;
 | 
			
		||||
		    }
 | 
			
		||||
		    pLayout->up = AddEdge(pLayout->up, 
 | 
			
		||||
			0, xf86Screens[i]->pScreen->width,
 | 
			
		||||
			0, pScreen->width,
 | 
			
		||||
			0, xf86Screens[ref]->pScreen->height, ref);
 | 
			
		||||
		}
 | 
			
		||||
		if(screen->bottom) {
 | 
			
		||||
| 
						 | 
				
			
			@ -649,7 +649,6 @@ xf86InitOrigins(void)
 | 
			
		|||
			ErrorF("Referenced uninitialized screen in Layout!\n");
 | 
			
		||||
			break;
 | 
			
		||||
		    }
 | 
			
		||||
		    pScreen = xf86Screens[i]->pScreen;
 | 
			
		||||
		    pLayout->down = AddEdge(pLayout->down, 
 | 
			
		||||
			0, pScreen->width, 0, -pScreen->height, ref);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -658,8 +657,8 @@ xf86InitOrigins(void)
 | 
			
		|||
		screen->x = screen->y = 0;
 | 
			
		||||
		/* FALLTHROUGH */
 | 
			
		||||
	    case PosAbsolute:
 | 
			
		||||
		dixScreenOrigins[i].x = screen->x;
 | 
			
		||||
		dixScreenOrigins[i].y = screen->y;
 | 
			
		||||
		pScreen->x = screen->x;
 | 
			
		||||
		pScreen->y = screen->y;
 | 
			
		||||
		screensLeft &= ~(1 << i);
 | 
			
		||||
		break;
 | 
			
		||||
	    case PosRelative:
 | 
			
		||||
| 
						 | 
				
			
			@ -669,8 +668,9 @@ xf86InitOrigins(void)
 | 
			
		|||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
		if(screensLeft & (1 << ref)) break;
 | 
			
		||||
		dixScreenOrigins[i].x = dixScreenOrigins[ref].x + screen->x;
 | 
			
		||||
		dixScreenOrigins[i].y = dixScreenOrigins[ref].y + screen->y;
 | 
			
		||||
		refScreen = xf86Screens[ref]->pScreen;
 | 
			
		||||
		pScreen->x = refScreen->x + screen->x;
 | 
			
		||||
		pScreen->y = refScreen->y + screen->y;
 | 
			
		||||
		screensLeft &= ~(1 << i);
 | 
			
		||||
		break;
 | 
			
		||||
	    case PosRightOf:
 | 
			
		||||
| 
						 | 
				
			
			@ -680,10 +680,9 @@ xf86InitOrigins(void)
 | 
			
		|||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
		if(screensLeft & (1 << ref)) break;
 | 
			
		||||
		pScreen = xf86Screens[ref]->pScreen;
 | 
			
		||||
		dixScreenOrigins[i].x = 
 | 
			
		||||
			dixScreenOrigins[ref].x + pScreen->width;
 | 
			
		||||
		dixScreenOrigins[i].y = dixScreenOrigins[ref].y;
 | 
			
		||||
		refScreen = xf86Screens[ref]->pScreen;
 | 
			
		||||
		pScreen->x = refScreen->x + refScreen->width;
 | 
			
		||||
		pScreen->y = refScreen->y;
 | 
			
		||||
		screensLeft &= ~(1 << i);
 | 
			
		||||
		break;
 | 
			
		||||
	    case PosLeftOf:
 | 
			
		||||
| 
						 | 
				
			
			@ -693,10 +692,9 @@ xf86InitOrigins(void)
 | 
			
		|||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
		if(screensLeft & (1 << ref)) break;
 | 
			
		||||
		pScreen = xf86Screens[i]->pScreen;
 | 
			
		||||
		dixScreenOrigins[i].x = 
 | 
			
		||||
			dixScreenOrigins[ref].x - pScreen->width;
 | 
			
		||||
		dixScreenOrigins[i].y = dixScreenOrigins[ref].y;
 | 
			
		||||
		refScreen = xf86Screens[ref]->pScreen;
 | 
			
		||||
		pScreen->x = refScreen->x - pScreen->width;
 | 
			
		||||
		pScreen->y = refScreen->y;
 | 
			
		||||
		screensLeft &= ~(1 << i);
 | 
			
		||||
		break;
 | 
			
		||||
	    case PosBelow:
 | 
			
		||||
| 
						 | 
				
			
			@ -706,10 +704,9 @@ xf86InitOrigins(void)
 | 
			
		|||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
		if(screensLeft & (1 << ref)) break;
 | 
			
		||||
		pScreen = xf86Screens[ref]->pScreen;
 | 
			
		||||
		dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
			
		||||
		dixScreenOrigins[i].y = 
 | 
			
		||||
			dixScreenOrigins[ref].y + pScreen->height;
 | 
			
		||||
		refScreen = xf86Screens[ref]->pScreen;
 | 
			
		||||
		pScreen->x = refScreen->x;
 | 
			
		||||
		pScreen->y = refScreen->y + refScreen->height;
 | 
			
		||||
		screensLeft &= ~(1 << i);
 | 
			
		||||
		break;
 | 
			
		||||
	    case PosAbove:
 | 
			
		||||
| 
						 | 
				
			
			@ -719,10 +716,9 @@ xf86InitOrigins(void)
 | 
			
		|||
		    break;
 | 
			
		||||
		}
 | 
			
		||||
		if(screensLeft & (1 << ref)) break;
 | 
			
		||||
		pScreen = xf86Screens[i]->pScreen;
 | 
			
		||||
		dixScreenOrigins[i].x = dixScreenOrigins[ref].x;
 | 
			
		||||
		dixScreenOrigins[i].y = 
 | 
			
		||||
			dixScreenOrigins[ref].y - pScreen->height;
 | 
			
		||||
		refScreen = xf86Screens[ref]->pScreen;
 | 
			
		||||
		pScreen->x = refScreen->x;
 | 
			
		||||
		pScreen->y = refScreen->y - pScreen->height;
 | 
			
		||||
		screensLeft &= ~(1 << i);
 | 
			
		||||
		break;
 | 
			
		||||
	    default:
 | 
			
		||||
| 
						 | 
				
			
			@ -741,7 +737,7 @@ xf86InitOrigins(void)
 | 
			
		|||
	    while(!((1 << i) & screensLeft)){ i++; }
 | 
			
		||||
 | 
			
		||||
	    ref = xf86ConfigLayout.screens[i].refscreen->screennum;
 | 
			
		||||
	    dixScreenOrigins[ref].x = dixScreenOrigins[ref].y = 0;
 | 
			
		||||
	    xf86Screens[ref]->pScreen->x = xf86Screens[ref]->pScreen->y = 0;
 | 
			
		||||
	    screensLeft &= ~(1 << ref);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -749,20 +745,20 @@ xf86InitOrigins(void)
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /* justify the topmost and leftmost to (0,0) */
 | 
			
		||||
    minX = dixScreenOrigins[0].x;
 | 
			
		||||
    minY = dixScreenOrigins[0].y;
 | 
			
		||||
    minX = xf86Screens[0]->pScreen->x;
 | 
			
		||||
    minY = xf86Screens[0]->pScreen->y;
 | 
			
		||||
 | 
			
		||||
    for(i = 1; i < xf86NumScreens; i++) {
 | 
			
		||||
	if(dixScreenOrigins[i].x < minX)
 | 
			
		||||
	  minX = dixScreenOrigins[i].x;
 | 
			
		||||
	if(dixScreenOrigins[i].y < minY)
 | 
			
		||||
	  minY = dixScreenOrigins[i].y;
 | 
			
		||||
	if(xf86Screens[i]->pScreen->x < minX)
 | 
			
		||||
	  minX = xf86Screens[i]->pScreen->x;
 | 
			
		||||
	if(xf86Screens[i]->pScreen->y < minY)
 | 
			
		||||
	  minY = xf86Screens[i]->pScreen->y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (minX || minY) {
 | 
			
		||||
	for(i = 0; i < xf86NumScreens; i++) {
 | 
			
		||||
	   dixScreenOrigins[i].x -= minX;
 | 
			
		||||
	   dixScreenOrigins[i].y -= minY;
 | 
			
		||||
	   xf86Screens[i]->pScreen->x -= minX;
 | 
			
		||||
	   xf86Screens[i]->pScreen->y -= minY;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -775,18 +771,20 @@ xf86InitOrigins(void)
 | 
			
		|||
 | 
			
		||||
	pScreen = xf86Screens[i]->pScreen;
 | 
			
		||||
 | 
			
		||||
	left = dixScreenOrigins[i].x;
 | 
			
		||||
	left = pScreen->x;
 | 
			
		||||
	right = left + pScreen->width;
 | 
			
		||||
	top = dixScreenOrigins[i].y;
 | 
			
		||||
	top = pScreen->y;
 | 
			
		||||
	bottom = top + pScreen->height;
 | 
			
		||||
 | 
			
		||||
	for(j = 0; j < xf86NumScreens; j++) {
 | 
			
		||||
	    if(i == j) continue;
 | 
			
		||||
 | 
			
		||||
	    x1 = dixScreenOrigins[j].x;
 | 
			
		||||
	    x2 = x1 + xf86Screens[j]->pScreen->width;
 | 
			
		||||
	    y1 = dixScreenOrigins[j].y;
 | 
			
		||||
	    y2 = y1 + xf86Screens[j]->pScreen->height;
 | 
			
		||||
	    refScreen = xf86Screens[j]->pScreen;
 | 
			
		||||
 | 
			
		||||
	    x1 = refScreen->x;
 | 
			
		||||
	    x2 = x1 + refScreen->width;
 | 
			
		||||
	    y1 = refScreen->y;
 | 
			
		||||
	    y2 = y1 + refScreen->height;
 | 
			
		||||
 | 
			
		||||
	    if((bottom > y1) && (top < y2)) {
 | 
			
		||||
		min = y1 - top;
 | 
			
		||||
| 
						 | 
				
			
			@ -796,13 +794,13 @@ xf86InitOrigins(void)
 | 
			
		|||
 | 
			
		||||
		if(((left - 1) >= x1) && ((left - 1) < x2))
 | 
			
		||||
		    pLayout->left = AddEdge(pLayout->left, min, max,
 | 
			
		||||
			dixScreenOrigins[i].x - dixScreenOrigins[j].x,
 | 
			
		||||
			dixScreenOrigins[i].y - dixScreenOrigins[j].y, j);
 | 
			
		||||
			pScreen->x - refScreen->x,
 | 
			
		||||
			pScreen->y - refScreen->y, j);
 | 
			
		||||
 | 
			
		||||
		if((right >= x1) && (right < x2))	
 | 
			
		||||
		    pLayout->right = AddEdge(pLayout->right, min, max,
 | 
			
		||||
			dixScreenOrigins[i].x - dixScreenOrigins[j].x,
 | 
			
		||||
			dixScreenOrigins[i].y - dixScreenOrigins[j].y, j);
 | 
			
		||||
			pScreen->x - refScreen->x,
 | 
			
		||||
			pScreen->y - refScreen->y, j);
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -814,13 +812,13 @@ xf86InitOrigins(void)
 | 
			
		|||
 | 
			
		||||
		if(((top - 1) >= y1) && ((top - 1) < y2))
 | 
			
		||||
		    pLayout->up = AddEdge(pLayout->up, min, max,
 | 
			
		||||
			dixScreenOrigins[i].x - dixScreenOrigins[j].x,
 | 
			
		||||
			dixScreenOrigins[i].y - dixScreenOrigins[j].y, j);
 | 
			
		||||
			pScreen->x - refScreen->x,
 | 
			
		||||
			pScreen->y - refScreen->y, j);
 | 
			
		||||
 | 
			
		||||
		if((bottom >= y1) && (bottom < y2))
 | 
			
		||||
		    pLayout->down = AddEdge(pLayout->down, min, max,
 | 
			
		||||
			dixScreenOrigins[i].x - dixScreenOrigins[j].x,
 | 
			
		||||
			dixScreenOrigins[i].y - dixScreenOrigins[j].y, j);
 | 
			
		||||
			pScreen->x - refScreen->x,
 | 
			
		||||
			pScreen->y - refScreen->y, j);
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1062,7 +1062,7 @@ xf86SetBlackWhitePixels(ScreenPtr pScreen)
 | 
			
		|||
static void
 | 
			
		||||
xf86SetRootClip (ScreenPtr pScreen, Bool enable)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr	pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr	pWin = pScreen->root;
 | 
			
		||||
    WindowPtr	pChild;
 | 
			
		||||
    Bool	WasViewable = (Bool)(pWin->viewable);
 | 
			
		||||
    Bool	anyMarked = FALSE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -159,7 +159,7 @@ xf86RandRSetMode (ScreenPtr	    pScreen,
 | 
			
		|||
    int			oldmmHeight = pScreen->mmHeight;
 | 
			
		||||
    int			oldVirtualX = scrp->virtualX;
 | 
			
		||||
    int			oldVirtualY = scrp->virtualY;
 | 
			
		||||
    WindowPtr		pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr		pRoot = pScreen->root;
 | 
			
		||||
    Bool		ret = TRUE;
 | 
			
		||||
 | 
			
		||||
    if (pRoot && scrp->vtSema)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1881,7 +1881,7 @@ xf86XVFillKeyHelperDrawable (DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes)
 | 
			
		|||
void
 | 
			
		||||
xf86XVFillKeyHelper (ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes)
 | 
			
		||||
{
 | 
			
		||||
   DrawablePtr root = &WindowTable[pScreen->myNum]->drawable;
 | 
			
		||||
   DrawablePtr root = &pScreen->root->drawable;
 | 
			
		||||
   ChangeGCVal pval[2];
 | 
			
		||||
   BoxPtr pbox = REGION_RECTS(clipboxes);
 | 
			
		||||
   int i, nbox = REGION_NUM_RECTS(clipboxes);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -347,7 +347,7 @@ SendXF86VidModeNotify(ScreenPtr pScreen, int state, Bool forced)
 | 
			
		|||
	ev.type = XF86VidModeNotify + XF86VidModeEventBase;
 | 
			
		||||
	ev.state = state;
 | 
			
		||||
	ev.timestamp = currentTime.milliseconds;
 | 
			
		||||
	ev.root = WindowTable[pScreen->myNum]->drawable.id;
 | 
			
		||||
	ev.root = pScreen->root->drawable.id;
 | 
			
		||||
	ev.kind = kind;
 | 
			
		||||
	ev.forced = forced;
 | 
			
		||||
	WriteEventsToClient (pEv->client, 1, (xEvent *) &ev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1187,7 +1187,7 @@ DRIDriverClipNotify(ScreenPtr pScreen)
 | 
			
		|||
 | 
			
		||||
	if (pDRIPriv->nrWindows > 0) {
 | 
			
		||||
	    pDRIPriv->nrWalked = 0;
 | 
			
		||||
	    TraverseTree(WindowTable[pScreen->myNum], DRIDCNTreeTraversal,
 | 
			
		||||
	    TraverseTree(pScreen->root, DRIDCNTreeTraversal,
 | 
			
		||||
			 (pointer)pDRIWindows);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -607,7 +607,7 @@ DRI2CanFlip(DrawablePtr pDraw)
 | 
			
		|||
    if (pDraw->type == DRAWABLE_PIXMAP)
 | 
			
		||||
	return TRUE;
 | 
			
		||||
 | 
			
		||||
    pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    pRoot = pScreen->root;
 | 
			
		||||
    pRootPixmap = pScreen->GetWindowPixmap(pRoot);
 | 
			
		||||
 | 
			
		||||
    pWin = (WindowPtr) pDraw;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -517,7 +517,7 @@ xf86RandR12SetMode (ScreenPtr	    pScreen,
 | 
			
		|||
    int			oldHeight = pScreen->height;
 | 
			
		||||
    int			oldmmWidth = pScreen->mmWidth;
 | 
			
		||||
    int			oldmmHeight = pScreen->mmHeight;
 | 
			
		||||
    WindowPtr		pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr		pRoot = pScreen->root;
 | 
			
		||||
    DisplayModePtr      currentMode = NULL;
 | 
			
		||||
    Bool 		ret = TRUE;
 | 
			
		||||
    PixmapPtr 		pspix = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -685,7 +685,7 @@ xf86RandR12ScreenSetSize (ScreenPtr	pScreen,
 | 
			
		|||
    XF86RandRInfoPtr	randrp = XF86RANDRINFO(pScreen);
 | 
			
		||||
    ScrnInfoPtr		pScrn = XF86SCRNINFO(pScreen);
 | 
			
		||||
    xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(pScrn);
 | 
			
		||||
    WindowPtr		pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr		pRoot = pScreen->root;
 | 
			
		||||
    PixmapPtr		pScrnPix = (*pScreen->GetScreenPixmap)(pScreen);
 | 
			
		||||
    Bool		ret = FALSE;
 | 
			
		||||
    int                 c;
 | 
			
		||||
| 
						 | 
				
			
			@ -739,7 +739,7 @@ finish:
 | 
			
		|||
    if (pRoot && pScrn->vtSema)
 | 
			
		||||
	(*pScrn->EnableDisableFBAccess) (pScreen->myNum, TRUE);
 | 
			
		||||
#if RANDR_12_INTERFACE
 | 
			
		||||
    if (xf86RandR12Key && WindowTable[pScreen->myNum] && ret)
 | 
			
		||||
    if (xf86RandR12Key && pScreen->root && ret)
 | 
			
		||||
	RRScreenSizeNotify (pScreen);
 | 
			
		||||
#endif
 | 
			
		||||
    return ret;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -76,9 +76,9 @@ xf86RotateCrtcRedisplay (xf86CrtcPtr crtc, RegionPtr region)
 | 
			
		|||
{
 | 
			
		||||
    ScrnInfoPtr		scrn = crtc->scrn;
 | 
			
		||||
    ScreenPtr		screen = scrn->pScreen;
 | 
			
		||||
    WindowPtr		root = WindowTable[screen->myNum];
 | 
			
		||||
    WindowPtr		root = screen->root;
 | 
			
		||||
    PixmapPtr		dst_pixmap = crtc->rotatedPixmap;
 | 
			
		||||
    PictFormatPtr	format = compWindowFormat (WindowTable[screen->myNum]);
 | 
			
		||||
    PictFormatPtr	format = compWindowFormat (screen->root);
 | 
			
		||||
    int			error;
 | 
			
		||||
    PicturePtr		src, dst;
 | 
			
		||||
    int			n = REGION_NUM_RECTS(region);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ XAACopyWindow(
 | 
			
		|||
    	return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pwinRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    pwinRoot = pScreen->root;
 | 
			
		||||
 | 
			
		||||
    REGION_NULL(pScreen, &rgnDst);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ XAACopyWindow8_32(
 | 
			
		|||
    	return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pwinRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    pwinRoot = pScreen->root;
 | 
			
		||||
 | 
			
		||||
    if(doUnderlay)
 | 
			
		||||
	freeReg = miOverlayCollectUnderlayRegions(pWin, &borderClip);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -324,7 +324,7 @@ XAAOverCopyWindow(
 | 
			
		|||
    RegionRec rgnDst;
 | 
			
		||||
    BoxPtr pbox;
 | 
			
		||||
    int i, nbox, dx, dy;
 | 
			
		||||
    WindowPtr pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr pRoot = pScreen->root;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    if (!pScrn->vtSema || !infoRec->ScreenToScreenBitBlt) { 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,10 +140,8 @@ AppleWMSetScreenOrigin(
 | 
			
		|||
{
 | 
			
		||||
    int32_t data[2];
 | 
			
		||||
 | 
			
		||||
    data[0] = (dixScreenOrigins[pWin->drawable.pScreen->myNum].x
 | 
			
		||||
                + darwinMainScreenX);
 | 
			
		||||
    data[1] = (dixScreenOrigins[pWin->drawable.pScreen->myNum].y
 | 
			
		||||
                + darwinMainScreenY);
 | 
			
		||||
    data[0] = pWin->drawable.pScreen->x + darwinMainScreenX;
 | 
			
		||||
    data[1] = pWin->drawable.pScreen->y + darwinMainScreenY;
 | 
			
		||||
 | 
			
		||||
    dixChangeWindowProperty(serverClient, pWin, xa_native_screen_origin(),
 | 
			
		||||
			    XA_INTEGER, 32, PropModeReplace, 2, data, TRUE);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -262,8 +262,8 @@ static Bool DarwinScreenInit(int index, ScreenPtr pScreen, int argc, char **argv
 | 
			
		|||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dixScreenOrigins[index].x = dfb->x;
 | 
			
		||||
    dixScreenOrigins[index].y = dfb->y;
 | 
			
		||||
    pScreen->x = dfb->x;
 | 
			
		||||
    pScreen->y = dfb->y;
 | 
			
		||||
 | 
			
		||||
    /*    ErrorF("Screen %d added: %dx%d @ (%d,%d)\n",
 | 
			
		||||
	  index, dfb->width, dfb->height, dfb->x, dfb->y); */
 | 
			
		||||
| 
						 | 
				
			
			@ -526,16 +526,16 @@ DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo)
 | 
			
		|||
{
 | 
			
		||||
    int i, left, top;
 | 
			
		||||
 | 
			
		||||
    left = dixScreenOrigins[0].x;
 | 
			
		||||
    top  = dixScreenOrigins[0].y;
 | 
			
		||||
    left = pScreenInfo->screens[0]->x;
 | 
			
		||||
    top  = pScreenInfo->screens[0]->y;
 | 
			
		||||
 | 
			
		||||
    /* Find leftmost screen. If there's a tie, take the topmost of the two. */
 | 
			
		||||
    for (i = 1; i < pScreenInfo->numScreens; i++) {
 | 
			
		||||
        if (dixScreenOrigins[i].x < left  ||
 | 
			
		||||
            (dixScreenOrigins[i].x == left && dixScreenOrigins[i].y < top))
 | 
			
		||||
        if (pScreenInfo->screens[i]->x < left  ||
 | 
			
		||||
            (pScreenInfo->screens[i]->x == left && pScreenInfo->screens[i]->y < top))
 | 
			
		||||
        {
 | 
			
		||||
            left = dixScreenOrigins[i].x;
 | 
			
		||||
            top = dixScreenOrigins[i].y;
 | 
			
		||||
            left = pScreenInfo->screens[i]->x;
 | 
			
		||||
            top = pScreenInfo->screens[i]->y;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -551,10 +551,10 @@ DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo)
 | 
			
		|||
 | 
			
		||||
    if (darwinMainScreenX != 0 || darwinMainScreenY != 0) {
 | 
			
		||||
        for (i = 0; i < pScreenInfo->numScreens; i++) {
 | 
			
		||||
            dixScreenOrigins[i].x -= darwinMainScreenX;
 | 
			
		||||
            dixScreenOrigins[i].y -= darwinMainScreenY;
 | 
			
		||||
            pScreenInfo->screens[i]->x -= darwinMainScreenX;
 | 
			
		||||
            pScreenInfo->screens[i]->y -= darwinMainScreenY;
 | 
			
		||||
            DEBUG_LOG("Screen %d placed at X11 coordinate (%d,%d).\n",
 | 
			
		||||
                      i, dixScreenOrigins[i].x, dixScreenOrigins[i].y);
 | 
			
		||||
                      i, pScreenInfo->screens[i]->x, pScreenInfo->screens[i]->y);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -793,7 +793,7 @@ void AbortDDX( void )
 | 
			
		|||
void
 | 
			
		||||
xf86SetRootClip (ScreenPtr pScreen, int enable)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr	pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr	pWin = pScreen->root;
 | 
			
		||||
    WindowPtr	pChild;
 | 
			
		||||
    Bool	WasViewable = (Bool)(pWin->viewable);
 | 
			
		||||
    Bool	anyMarked = TRUE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -377,8 +377,8 @@ static void DarwinPrepareValuators(DeviceIntPtr pDev, int *valuators, ScreenPtr
 | 
			
		|||
                                   float pointer_x, float pointer_y, 
 | 
			
		||||
                                   float pressure, float tilt_x, float tilt_y) {
 | 
			
		||||
    /* Fix offset between darwin and X screens */
 | 
			
		||||
    pointer_x -= darwinMainScreenX + dixScreenOrigins[screen->myNum].x;
 | 
			
		||||
    pointer_y -= darwinMainScreenY + dixScreenOrigins[screen->myNum].y;
 | 
			
		||||
    pointer_x -= darwinMainScreenX + screen->x;
 | 
			
		||||
    pointer_y -= darwinMainScreenY + screen->y;
 | 
			
		||||
 | 
			
		||||
    if(pointer_x < 0.0)
 | 
			
		||||
        pointer_x = 0.0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -255,9 +255,9 @@ static int ProcPseudoramiXGetScreenSize(ClientPtr client)
 | 
			
		|||
    rep.sequenceNumber = client->sequence;
 | 
			
		||||
    /* screen dimensions */
 | 
			
		||||
    rep.width  = pseudoramiXScreens[stuff->screen].w;
 | 
			
		||||
    // was panoramiXdataPtr[stuff->screen].width;
 | 
			
		||||
    // was screenInfo.screens[stuff->screen]->width;
 | 
			
		||||
    rep.height = pseudoramiXScreens[stuff->screen].h;
 | 
			
		||||
    // was panoramiXdataPtr[stuff->screen].height;
 | 
			
		||||
    // was screenInfo.screens[stuff->screen]->height;
 | 
			
		||||
    if (client->swapped) {
 | 
			
		||||
        swaps (&rep.sequenceNumber, n);
 | 
			
		||||
        swapl (&rep.length, n);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -259,8 +259,8 @@ void QuartzUpdateScreens(void) {
 | 
			
		|||
    PseudoramiXResetScreens();
 | 
			
		||||
    quartzProcs->AddPseudoramiXScreens(&x, &y, &width, &height);
 | 
			
		||||
    
 | 
			
		||||
    dixScreenOrigins[pScreen->myNum].x = x;
 | 
			
		||||
    dixScreenOrigins[pScreen->myNum].y = y;
 | 
			
		||||
    pScreen->x = x;
 | 
			
		||||
    pScreen->y = y;
 | 
			
		||||
    pScreen->mmWidth = pScreen->mmWidth * ((double) width / pScreen->width);
 | 
			
		||||
    pScreen->mmHeight = pScreen->mmHeight * ((double) height / pScreen->height);
 | 
			
		||||
    pScreen->width = width;
 | 
			
		||||
| 
						 | 
				
			
			@ -269,14 +269,14 @@ void QuartzUpdateScreens(void) {
 | 
			
		|||
    DarwinAdjustScreenOrigins(&screenInfo);
 | 
			
		||||
    quartzProcs->UpdateScreen(pScreen);
 | 
			
		||||
    
 | 
			
		||||
    /* DarwinAdjustScreenOrigins or UpdateScreen may change dixScreenOrigins,
 | 
			
		||||
    /* DarwinAdjustScreenOrigins or UpdateScreen may change pScreen->x/y,
 | 
			
		||||
     * so use it rather than x/y
 | 
			
		||||
     */
 | 
			
		||||
    sx = dixScreenOrigins[pScreen->myNum].x + darwinMainScreenX;
 | 
			
		||||
    sy = dixScreenOrigins[pScreen->myNum].y + darwinMainScreenY;
 | 
			
		||||
    sx = pScreen->x + darwinMainScreenX;
 | 
			
		||||
    sy = pScreen->y + darwinMainScreenY;
 | 
			
		||||
    
 | 
			
		||||
    /* Adjust the root window. */
 | 
			
		||||
    pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    pRoot = pScreen->root;
 | 
			
		||||
    AppleWMSetScreenOrigin(pRoot);
 | 
			
		||||
    pScreen->ResizeWindow(pRoot, x - sx, y - sy, width, height, NULL);
 | 
			
		||||
    miPaintWindow(pRoot, &pRoot->borderClip,  PW_BACKGROUND);
 | 
			
		||||
| 
						 | 
				
			
			@ -292,7 +292,7 @@ void QuartzUpdateScreens(void) {
 | 
			
		|||
    inputInfo.pointer->spriteInfo->sprite->physLimits = bounds;
 | 
			
		||||
    inputInfo.pointer->spriteInfo->sprite->hotLimits = bounds;
 | 
			
		||||
 | 
			
		||||
    DEBUG_LOG("Root Window: %dx%d @ (%d, %d) darwinMainScreen (%d, %d) xy (%d, %d) dixScreenOrigins (%d, %d)\n", width, height, x - sx, y - sy, darwinMainScreenX, darwinMainScreenY, x, y, dixScreenOrigins[pScreen->myNum].x, dixScreenOrigins[pScreen->myNum].y);
 | 
			
		||||
    DEBUG_LOG("Root Window: %dx%d @ (%d, %d) darwinMainScreen (%d, %d) xy (%d, %d) dixScreenOrigins (%d, %d)\n", width, height, x - sx, y - sy, darwinMainScreenX, darwinMainScreenY, x, y, pScreen->x, pScreen->y);
 | 
			
		||||
 | 
			
		||||
    /* Send an event for the root reconfigure */
 | 
			
		||||
    e.u.u.type = ConfigureNotify;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -296,8 +296,8 @@ QuartzWarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 | 
			
		|||
    {
 | 
			
		||||
        int sx, sy;
 | 
			
		||||
 | 
			
		||||
        sx = dixScreenOrigins[pScreen->myNum].x + darwinMainScreenX;
 | 
			
		||||
        sy = dixScreenOrigins[pScreen->myNum].y + darwinMainScreenY;
 | 
			
		||||
        sx = pScreen->x + darwinMainScreenX;
 | 
			
		||||
        sy = pScreen->y + darwinMainScreenY;
 | 
			
		||||
 | 
			
		||||
        CGWarpMouseCursorPosition(CGPointMake(sx + x, sy + y));
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -576,7 +576,7 @@ xprHideWindows(Bool hide)
 | 
			
		|||
    
 | 
			
		||||
    for (screen = 0; screen < screenInfo.numScreens; screen++) {
 | 
			
		||||
        RootlessFrameID prevWid = NULL;
 | 
			
		||||
        pRoot = WindowTable[screenInfo.screens[screen]->myNum];
 | 
			
		||||
        pRoot = screenInfo.screens[screen]->root;
 | 
			
		||||
 | 
			
		||||
        for (pWin = pRoot->firstChild; pWin; pWin = pWin->nextSib) {
 | 
			
		||||
            RootlessWindowRec *winRec = WINREC(pWin);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -397,7 +397,7 @@ xprUpdateScreen(ScreenPtr pScreen)
 | 
			
		|||
    rootlessGlobalOffsetX = darwinMainScreenX;
 | 
			
		||||
    rootlessGlobalOffsetY = darwinMainScreenY;
 | 
			
		||||
 | 
			
		||||
    AppleWMSetScreenOrigin(WindowTable[pScreen->myNum]);
 | 
			
		||||
    AppleWMSetScreenOrigin(pScreen->root);
 | 
			
		||||
 | 
			
		||||
    RootlessRepositionWindows(pScreen);
 | 
			
		||||
    RootlessUpdateScreenPixmap(pScreen);
 | 
			
		||||
| 
						 | 
				
			
			@ -416,7 +416,7 @@ xprInitInput(int argc, char **argv)
 | 
			
		|||
    rootlessGlobalOffsetY = darwinMainScreenY;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < screenInfo.numScreens; i++)
 | 
			
		||||
        AppleWMSetScreenOrigin(WindowTable[i]);
 | 
			
		||||
        AppleWMSetScreenOrigin(screenInfo.screens[i]->root);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ winRestoreModeKeyStates (void)
 | 
			
		|||
 | 
			
		||||
  /* Only process events if the rootwindow is mapped. The keyboard events
 | 
			
		||||
   * will cause segfaults otherwise */
 | 
			
		||||
  if (WindowTable && WindowTable[0] && WindowTable[0]->mapped == FALSE)
 | 
			
		||||
  if (screenInfo.screens[0]->root && screenInfo.screens[0]->root->mapped == FALSE)
 | 
			
		||||
    processEvents = FALSE;    
 | 
			
		||||
  
 | 
			
		||||
  /* Force to process all pending events in the mi event queue */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -243,11 +243,11 @@ winScreenInit (int index,
 | 
			
		|||
     Note the screen origin in a normalized coordinate space where (0,0) is at the top left
 | 
			
		||||
     of the native virtual desktop area
 | 
			
		||||
  */
 | 
			
		||||
  dixScreenOrigins[index].x = pScreenInfo->dwInitialX - GetSystemMetrics(SM_XVIRTUALSCREEN);
 | 
			
		||||
  dixScreenOrigins[index].y = pScreenInfo->dwInitialY - GetSystemMetrics(SM_YVIRTUALSCREEN);
 | 
			
		||||
  pScreen->x = pScreenInfo->dwInitialX - GetSystemMetrics(SM_XVIRTUALSCREEN);
 | 
			
		||||
  pScreen->y = pScreenInfo->dwInitialY - GetSystemMetrics(SM_YVIRTUALSCREEN);
 | 
			
		||||
 | 
			
		||||
  ErrorF("Screen %d added at virtual desktop coordinate (%d,%d).\n",
 | 
			
		||||
         index, dixScreenOrigins[index].x, dixScreenOrigins[index].y);
 | 
			
		||||
         index, pScreen->x, pScreen->y);
 | 
			
		||||
 | 
			
		||||
#if CYGDEBUG || YES
 | 
			
		||||
  winDebug ("winScreenInit - returning\n");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -407,7 +407,7 @@ void
 | 
			
		|||
winMWExtWMRestackWindows (ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
  winScreenPriv(pScreen);
 | 
			
		||||
  WindowPtr pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
  WindowPtr pRoot = pScreen->root;
 | 
			
		||||
  WindowPtr pWin = NULL;
 | 
			
		||||
  WindowPtr pWinPrev = NULL;
 | 
			
		||||
  win32RootlessWindowPtr pRLWin = NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -144,7 +144,7 @@ winCopyWindowNativeGDI (WindowPtr pWin,
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Get a pointer to the root window */
 | 
			
		||||
  pwinRoot = WindowTable[pWin->drawable.pScreen->myNum];
 | 
			
		||||
  pwinRoot = pWin->drawable.pScreen->root;
 | 
			
		||||
 | 
			
		||||
  /* Create a region for the destination */
 | 
			
		||||
  prgnDst = REGION_CREATE(pWin->drawable.pScreen, NULL, 1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,12 +19,9 @@ extern _X_EXPORT char *defaultFontPath;
 | 
			
		|||
extern _X_EXPORT int monitorResolution;
 | 
			
		||||
extern _X_EXPORT int defaultColorVisualClass;
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT WindowPtr WindowTable[MAXSCREENS];
 | 
			
		||||
extern _X_EXPORT int GrabInProgress;
 | 
			
		||||
extern _X_EXPORT Bool noTestExtensions;
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT DDXPointRec dixScreenOrigins[MAXSCREENS];
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT char *ConnectionInfo;
 | 
			
		||||
 | 
			
		||||
#ifdef DPMSExtension
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,6 +82,16 @@ typedef struct _Depth {
 | 
			
		|||
    VisualID		*vids;    /* block of visual ids for this depth */
 | 
			
		||||
  } DepthRec;
 | 
			
		||||
 | 
			
		||||
typedef struct _ScreenSaverStuff {
 | 
			
		||||
    WindowPtr pWindow;
 | 
			
		||||
    XID       wid;
 | 
			
		||||
    char      blanked;
 | 
			
		||||
    Bool      (*ExternalScreenSaver)(
 | 
			
		||||
	ScreenPtr	/*pScreen*/,
 | 
			
		||||
	int		/*xstate*/,
 | 
			
		||||
	Bool		/*force*/);
 | 
			
		||||
} ScreenSaverStuffRec;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  There is a typedef for each screen function pointer so that code that
 | 
			
		||||
| 
						 | 
				
			
			@ -446,7 +456,7 @@ typedef    void (* DeviceCursorCleanupProcPtr)(
 | 
			
		|||
typedef struct _Screen {
 | 
			
		||||
    int			myNum;	/* index of this instance in Screens[] */
 | 
			
		||||
    ATOM		id;
 | 
			
		||||
    short		width, height;
 | 
			
		||||
    short		x, y, width, height;
 | 
			
		||||
    short		mmWidth, mmHeight;
 | 
			
		||||
    short		numDepths;
 | 
			
		||||
    unsigned char      	rootDepth;
 | 
			
		||||
| 
						 | 
				
			
			@ -468,6 +478,8 @@ typedef struct _Screen {
 | 
			
		|||
    pointer		devPrivate;
 | 
			
		||||
    short       	numVisuals;
 | 
			
		||||
    VisualPtr		visuals;
 | 
			
		||||
    WindowPtr		root;
 | 
			
		||||
    ScreenSaverStuffRec screensaver;
 | 
			
		||||
 | 
			
		||||
    /* Random screen procedures */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -204,24 +204,15 @@ extern _X_EXPORT Mask	DontPropagateMasks[];
 | 
			
		|||
 | 
			
		||||
#define HasBorder(w)	((w)->borderWidth || wClipShape(w))
 | 
			
		||||
 | 
			
		||||
typedef struct _ScreenSaverStuff {
 | 
			
		||||
    WindowPtr pWindow;
 | 
			
		||||
    XID       wid;
 | 
			
		||||
    char      blanked;
 | 
			
		||||
    Bool      (*ExternalScreenSaver)(
 | 
			
		||||
	ScreenPtr	/*pScreen*/,
 | 
			
		||||
	int		/*xstate*/,
 | 
			
		||||
	Bool		/*force*/);
 | 
			
		||||
} ScreenSaverStuffRec, *ScreenSaverStuffPtr;
 | 
			
		||||
typedef struct _ScreenSaverStuff *ScreenSaverStuffPtr;
 | 
			
		||||
 | 
			
		||||
#define SCREEN_IS_BLANKED   0
 | 
			
		||||
#define SCREEN_ISNT_SAVED   1
 | 
			
		||||
#define SCREEN_IS_TILED     2
 | 
			
		||||
#define SCREEN_IS_BLACK	    3
 | 
			
		||||
 | 
			
		||||
#define HasSaverWindow(i)   (savedScreenInfo[i].pWindow != NullWindow)
 | 
			
		||||
#define HasSaverWindow(pScreen)   (pScreen->screensaver.pWindow != NullWindow)
 | 
			
		||||
 | 
			
		||||
extern _X_EXPORT int screenIsSaved;
 | 
			
		||||
extern _X_EXPORT ScreenSaverStuffRec savedScreenInfo[MAXSCREENS];
 | 
			
		||||
 | 
			
		||||
#endif /* WINDOWSTRUCT_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										276
									
								
								mi/midispcur.c
								
								
								
								
							
							
						
						
									
										276
									
								
								mi/midispcur.c
								
								
								
								
							| 
						 | 
				
			
			@ -66,12 +66,9 @@ static DevPrivateKey miDCSpriteKey = miDCSpriteKeyIndex;
 | 
			
		|||
typedef struct {
 | 
			
		||||
    GCPtr	    pSourceGC, pMaskGC;
 | 
			
		||||
    GCPtr	    pSaveGC, pRestoreGC;
 | 
			
		||||
    GCPtr	    pMoveGC;
 | 
			
		||||
    GCPtr	    pPixSourceGC, pPixMaskGC;
 | 
			
		||||
    PixmapPtr	    pSave, pTemp;
 | 
			
		||||
    PixmapPtr	    pSave;
 | 
			
		||||
#ifdef ARGB_CURSOR
 | 
			
		||||
    PicturePtr	    pRootPicture;
 | 
			
		||||
    PicturePtr	    pTempPicture;
 | 
			
		||||
#endif
 | 
			
		||||
} miDCBufferRec, *miDCBufferPtr;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +405,7 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
 | 
			
		|||
    }
 | 
			
		||||
    pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
 | 
			
		||||
						  miDCScreenKey);
 | 
			
		||||
    pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    pWin = pScreen->root;
 | 
			
		||||
    pBuffer = MIDCBUFFER(pDev, pScreen);
 | 
			
		||||
 | 
			
		||||
#ifdef ARGB_CURSOR
 | 
			
		||||
| 
						 | 
				
			
			@ -451,7 +448,7 @@ miDCSaveUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		|||
    pBuffer = MIDCBUFFER(pDev, pScreen);
 | 
			
		||||
 | 
			
		||||
    pSave = pBuffer->pSave;
 | 
			
		||||
    pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    pWin = pScreen->root;
 | 
			
		||||
    if (!pSave || pSave->drawable.width < w || pSave->drawable.height < h)
 | 
			
		||||
    {
 | 
			
		||||
	if (pSave)
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +482,7 @@ miDCRestoreUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		|||
    pBuffer = MIDCBUFFER(pDev, pScreen);
 | 
			
		||||
    pSave = pBuffer->pSave;
 | 
			
		||||
 | 
			
		||||
    pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    pWin = pScreen->root;
 | 
			
		||||
    if (!pSave)
 | 
			
		||||
	return FALSE;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -497,244 +494,11 @@ miDCRestoreUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		|||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
miDCChangeSave (DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		||||
                int x, int y, int w, int h, int dx, int dy)
 | 
			
		||||
{
 | 
			
		||||
    miDCScreenPtr   pScreenPriv;
 | 
			
		||||
    miDCBufferPtr   pBuffer;
 | 
			
		||||
    PixmapPtr	    pSave;
 | 
			
		||||
    WindowPtr	    pWin;
 | 
			
		||||
    GCPtr	    pGC;
 | 
			
		||||
    int		    sourcex, sourcey, destx, desty, copyw, copyh;
 | 
			
		||||
 | 
			
		||||
    pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
 | 
			
		||||
						  miDCScreenKey);
 | 
			
		||||
    pBuffer = MIDCBUFFER(pDev, pScreen);
 | 
			
		||||
 | 
			
		||||
    pSave = pBuffer->pSave;
 | 
			
		||||
    pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    /*
 | 
			
		||||
     * restore the bits which are about to get trashed
 | 
			
		||||
     */
 | 
			
		||||
    if (!pSave)
 | 
			
		||||
	return FALSE;
 | 
			
		||||
 | 
			
		||||
    pGC = pBuffer->pRestoreGC;
 | 
			
		||||
    if (pWin->drawable.serialNumber != pGC->serialNumber)
 | 
			
		||||
	ValidateGC ((DrawablePtr) pWin, pGC);
 | 
			
		||||
    /*
 | 
			
		||||
     * copy the old bits to the screen.
 | 
			
		||||
     */
 | 
			
		||||
    if (dy > 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
 | 
			
		||||
			       0, h - dy, w, dy, x + dx, y + h);
 | 
			
		||||
    }
 | 
			
		||||
    else if (dy < 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
 | 
			
		||||
			       0, 0, w, -dy, x + dx, y + dy);
 | 
			
		||||
    }
 | 
			
		||||
    if (dy >= 0)
 | 
			
		||||
    {
 | 
			
		||||
	desty = y + dy;
 | 
			
		||||
	sourcey = 0;
 | 
			
		||||
	copyh = h - dy;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
	desty = y;
 | 
			
		||||
	sourcey = - dy;
 | 
			
		||||
	copyh = h + dy;
 | 
			
		||||
    }
 | 
			
		||||
    if (dx > 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
 | 
			
		||||
			       w - dx, sourcey, dx, copyh, x + w, desty);
 | 
			
		||||
    }
 | 
			
		||||
    else if (dx < 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pWin, pGC,
 | 
			
		||||
			       0, sourcey, -dx, copyh, x + dx, desty);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pGC = pBuffer->pSaveGC;
 | 
			
		||||
    if (pSave->drawable.serialNumber != pGC->serialNumber)
 | 
			
		||||
	ValidateGC ((DrawablePtr) pSave, pGC);
 | 
			
		||||
    /*
 | 
			
		||||
     * move the bits that are still valid within the pixmap
 | 
			
		||||
     */
 | 
			
		||||
    if (dx >= 0)
 | 
			
		||||
    {
 | 
			
		||||
	sourcex = 0;
 | 
			
		||||
	destx = dx;
 | 
			
		||||
	copyw = w - dx;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
	destx = 0;
 | 
			
		||||
	sourcex = - dx;
 | 
			
		||||
	copyw = w + dx;
 | 
			
		||||
    }
 | 
			
		||||
    if (dy >= 0)
 | 
			
		||||
    {
 | 
			
		||||
	sourcey = 0;
 | 
			
		||||
	desty = dy;
 | 
			
		||||
	copyh = h - dy;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
	desty = 0;
 | 
			
		||||
	sourcey = -dy;
 | 
			
		||||
	copyh = h + dy;
 | 
			
		||||
    }
 | 
			
		||||
    (*pGC->ops->CopyArea) ((DrawablePtr) pSave, (DrawablePtr) pSave, pGC,
 | 
			
		||||
			   sourcex, sourcey, copyw, copyh, destx, desty);
 | 
			
		||||
    /*
 | 
			
		||||
     * copy the new bits from the screen into the remaining areas of the
 | 
			
		||||
     * pixmap
 | 
			
		||||
     */
 | 
			
		||||
    if (dy > 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,
 | 
			
		||||
			       x, y, w, dy, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
    else if (dy < 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,
 | 
			
		||||
			       x, y + h + dy, w, -dy, 0, h + dy);
 | 
			
		||||
    }
 | 
			
		||||
    if (dy >= 0)
 | 
			
		||||
    {
 | 
			
		||||
	desty = dy;
 | 
			
		||||
	sourcey = y + dy;
 | 
			
		||||
	copyh = h - dy;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
	desty = 0;
 | 
			
		||||
	sourcey = y;
 | 
			
		||||
	copyh = h + dy;
 | 
			
		||||
    }
 | 
			
		||||
    if (dx > 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,
 | 
			
		||||
			       x, sourcey, dx, copyh, 0, desty);
 | 
			
		||||
    }
 | 
			
		||||
    else if (dx < 0)
 | 
			
		||||
    {
 | 
			
		||||
	(*pGC->ops->CopyArea) ((DrawablePtr) pWin, (DrawablePtr) pSave, pGC,
 | 
			
		||||
			       x + w + dx, sourcey, -dx, copyh, w + dx, desty);
 | 
			
		||||
    }
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
miDCMoveCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
 | 
			
		||||
                int x, int y, int w, int h, int dx, int dy,
 | 
			
		||||
                unsigned long source, unsigned long mask)
 | 
			
		||||
{
 | 
			
		||||
    miDCCursorPtr   pPriv;
 | 
			
		||||
    miDCScreenPtr   pScreenPriv;
 | 
			
		||||
    miDCBufferPtr   pBuffer;
 | 
			
		||||
    int		    status;
 | 
			
		||||
    WindowPtr	    pWin;
 | 
			
		||||
    GCPtr	    pGC;
 | 
			
		||||
    XID		    gcval = FALSE;
 | 
			
		||||
    PixmapPtr	    pTemp;
 | 
			
		||||
 | 
			
		||||
    pPriv = (miDCCursorPtr)dixLookupPrivate(&pCursor->bits->devPrivates,
 | 
			
		||||
					    CursorScreenKey(pScreen));
 | 
			
		||||
    if (!pPriv)
 | 
			
		||||
    {
 | 
			
		||||
	pPriv = miDCRealize(pScreen, pCursor);
 | 
			
		||||
	if (!pPriv)
 | 
			
		||||
	    return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
    pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
 | 
			
		||||
						  miDCScreenKey);
 | 
			
		||||
    pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    pBuffer = MIDCBUFFER(pDev, pScreen);
 | 
			
		||||
 | 
			
		||||
    pTemp = pBuffer->pTemp;
 | 
			
		||||
    if (!pTemp ||
 | 
			
		||||
	pTemp->drawable.width != pBuffer->pSave->drawable.width ||
 | 
			
		||||
	pTemp->drawable.height != pBuffer->pSave->drawable.height)
 | 
			
		||||
    {
 | 
			
		||||
	if (pTemp)
 | 
			
		||||
	    (*pScreen->DestroyPixmap) (pTemp);
 | 
			
		||||
#ifdef ARGB_CURSOR
 | 
			
		||||
	if (pBuffer->pTempPicture)
 | 
			
		||||
	{
 | 
			
		||||
	    FreePicture (pBuffer->pTempPicture, 0);
 | 
			
		||||
	    pBuffer->pTempPicture = 0;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	pBuffer->pTemp = pTemp = (*pScreen->CreatePixmap)
 | 
			
		||||
	    (pScreen, w, h, pBuffer->pSave->drawable.depth, 0);
 | 
			
		||||
	if (!pTemp)
 | 
			
		||||
	    return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
    if (!pBuffer->pMoveGC)
 | 
			
		||||
    {
 | 
			
		||||
	pBuffer->pMoveGC = CreateGC ((DrawablePtr)pTemp,
 | 
			
		||||
	    GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
 | 
			
		||||
	if (!pBuffer->pMoveGC)
 | 
			
		||||
	    return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
    /*
 | 
			
		||||
     * copy the saved area to a temporary pixmap
 | 
			
		||||
     */
 | 
			
		||||
    pGC = pBuffer->pMoveGC;
 | 
			
		||||
    if (pGC->serialNumber != pTemp->drawable.serialNumber)
 | 
			
		||||
	ValidateGC ((DrawablePtr) pTemp, pGC);
 | 
			
		||||
    (*pGC->ops->CopyArea)((DrawablePtr)pBuffer->pSave,
 | 
			
		||||
			  (DrawablePtr)pTemp, pGC, 0, 0, w, h, 0, 0);
 | 
			
		||||
    
 | 
			
		||||
    /*
 | 
			
		||||
     * draw the cursor in the temporary pixmap
 | 
			
		||||
     */
 | 
			
		||||
#ifdef ARGB_CURSOR
 | 
			
		||||
    if (pPriv->pPicture)
 | 
			
		||||
    {
 | 
			
		||||
	if (!EnsurePicture(pBuffer->pTempPicture, &pTemp->drawable, pWin))
 | 
			
		||||
	    return FALSE;
 | 
			
		||||
	CompositePicture (PictOpOver,
 | 
			
		||||
			  pPriv->pPicture,
 | 
			
		||||
			  NULL,
 | 
			
		||||
			  pBuffer->pTempPicture,
 | 
			
		||||
			  0, 0, 0, 0, 
 | 
			
		||||
			  dx, dy, 
 | 
			
		||||
			  pCursor->bits->width,
 | 
			
		||||
			  pCursor->bits->height);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
    {
 | 
			
		||||
	miDCPutBits ((DrawablePtr)pTemp, pPriv,
 | 
			
		||||
		     pBuffer->pPixSourceGC, pBuffer->pPixMaskGC,
 | 
			
		||||
		     dx, dy, pCursor->bits->width, pCursor->bits->height,
 | 
			
		||||
		     source, mask);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pGC = pBuffer->pRestoreGC;
 | 
			
		||||
    if (pWin->drawable.serialNumber != pGC->serialNumber)
 | 
			
		||||
	ValidateGC ((DrawablePtr) pWin, pGC);
 | 
			
		||||
 | 
			
		||||
    (*pGC->ops->CopyArea) ((DrawablePtr) pTemp, (DrawablePtr) pWin,
 | 
			
		||||
			    pGC,
 | 
			
		||||
			    0, 0, w, h, x, y);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Bool
 | 
			
		||||
miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    miDCBufferPtr   pBuffer;
 | 
			
		||||
    WindowPtr       pWin;
 | 
			
		||||
    XID             gcval = FALSE;
 | 
			
		||||
    int             status;
 | 
			
		||||
    int             i;
 | 
			
		||||
 | 
			
		||||
    if (!DevHasCursor(pDev))
 | 
			
		||||
| 
						 | 
				
			
			@ -749,7 +513,7 @@ miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
 | 
			
		|||
            goto failure;
 | 
			
		||||
 | 
			
		||||
        dixSetPrivate(&pDev->devPrivates, miDCSpriteKey + pScreen->myNum, pBuffer);
 | 
			
		||||
        pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
        pWin = pScreen->root;
 | 
			
		||||
 | 
			
		||||
        pBuffer->pSourceGC = miDCMakeGC(pWin);
 | 
			
		||||
        if (!pBuffer->pSourceGC)
 | 
			
		||||
| 
						 | 
				
			
			@ -767,28 +531,12 @@ miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
 | 
			
		|||
        if (!pBuffer->pRestoreGC)
 | 
			
		||||
            goto failure;
 | 
			
		||||
 | 
			
		||||
        pBuffer->pMoveGC = CreateGC ((DrawablePtr)pWin,
 | 
			
		||||
            GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
 | 
			
		||||
        if (!pBuffer->pMoveGC)
 | 
			
		||||
            goto failure;
 | 
			
		||||
 | 
			
		||||
        pBuffer->pPixSourceGC = CreateGC ((DrawablePtr)pWin,
 | 
			
		||||
            GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
 | 
			
		||||
        if (!pBuffer->pPixSourceGC)
 | 
			
		||||
            goto failure;
 | 
			
		||||
 | 
			
		||||
        pBuffer->pPixMaskGC = CreateGC ((DrawablePtr)pWin,
 | 
			
		||||
            GCGraphicsExposures, &gcval, &status, (XID)0, serverClient);
 | 
			
		||||
        if (!pBuffer->pPixMaskGC)
 | 
			
		||||
            goto failure;
 | 
			
		||||
 | 
			
		||||
#ifdef ARGB_CURSOR
 | 
			
		||||
        pBuffer->pRootPicture = NULL;
 | 
			
		||||
        pBuffer->pTempPicture = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        // these get (re)allocated lazily depending on the cursor size
 | 
			
		||||
        pBuffer->pSave = pBuffer->pTemp = NULL;
 | 
			
		||||
        /* (re)allocated lazily depending on the cursor size */
 | 
			
		||||
        pBuffer->pSave = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
| 
						 | 
				
			
			@ -820,12 +568,14 @@ miDCDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
 | 
			
		|||
                if (pBuffer->pMaskGC) FreeGC(pBuffer->pMaskGC, (GContext) 0);
 | 
			
		||||
                if (pBuffer->pSaveGC) FreeGC(pBuffer->pSaveGC, (GContext) 0);
 | 
			
		||||
                if (pBuffer->pRestoreGC) FreeGC(pBuffer->pRestoreGC, (GContext) 0);
 | 
			
		||||
                if (pBuffer->pMoveGC) FreeGC(pBuffer->pMoveGC, (GContext) 0);
 | 
			
		||||
                if (pBuffer->pPixSourceGC) FreeGC(pBuffer->pPixSourceGC, (GContext) 0);
 | 
			
		||||
                if (pBuffer->pPixMaskGC) FreeGC(pBuffer->pPixMaskGC, (GContext) 0);
 | 
			
		||||
 | 
			
		||||
#ifdef ARGB_CURSOR
 | 
			
		||||
                /* If a pRootPicture was allocated for a root window, it
 | 
			
		||||
                 * is freed when that root window is destroyed, so don't
 | 
			
		||||
                 * free it again here. */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
                if (pBuffer->pSave) (*pScreen->DestroyPixmap)(pBuffer->pSave);
 | 
			
		||||
                if (pBuffer->pTemp) (*pScreen->DestroyPixmap)(pBuffer->pTemp);
 | 
			
		||||
 | 
			
		||||
                free(pBuffer);
 | 
			
		||||
                dixSetPrivate(&pDev->devPrivates, miDCSpriteKey + pScreen->myNum, NULL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -424,9 +424,9 @@ miSendExposures( WindowPtr pWin, RegionPtr pRgn, int dx, int dy)
 | 
			
		|||
	XID realWin = 0;
 | 
			
		||||
 | 
			
		||||
	if(!pWin->parent) {
 | 
			
		||||
	    x = panoramiXdataPtr[scrnum].x;
 | 
			
		||||
	    y = panoramiXdataPtr[scrnum].y;
 | 
			
		||||
	    pWin = WindowTable[0];
 | 
			
		||||
	    x = screenInfo.screens[scrnum]->x;
 | 
			
		||||
	    y = screenInfo.screens[scrnum]->y;
 | 
			
		||||
	    pWin = screenInfo.screens[0]->root;
 | 
			
		||||
	    realWin = pWin->drawable.id;
 | 
			
		||||
	} else if (scrnum) {
 | 
			
		||||
	    PanoramiXRes *win;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -306,7 +306,7 @@ miOverlayReparentWindow(WindowPtr pWin, WindowPtr pPriorParent)
 | 
			
		|||
{
 | 
			
		||||
    if(IN_UNDERLAY(pWin) || HasUnderlayChildren(pWin)) {
 | 
			
		||||
	/* This could probably be more optimal */
 | 
			
		||||
	RebuildTree(WindowTable[pWin->drawable.pScreen->myNum]->firstChild);
 | 
			
		||||
	RebuildTree(pWin->drawable.pScreen->root->firstChild);
 | 
			
		||||
    }	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1610,7 +1610,7 @@ miOverlayChangeBorderWidth(
 | 
			
		|||
void
 | 
			
		||||
miOverlaySetRootClip(ScreenPtr pScreen, Bool enable)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr pRoot = pScreen->root;
 | 
			
		||||
    miOverlayTreePtr pTree = MIOVERLAY_GET_WINDOW_TREE(pRoot);
 | 
			
		||||
 | 
			
		||||
    MARK_UNDERLAY(pRoot);
 | 
			
		||||
| 
						 | 
				
			
			@ -1741,7 +1741,7 @@ miOverlayComputeCompositeClip(GCPtr pGC, WindowPtr pWin)
 | 
			
		|||
	pregWin = REGION_CREATE(pScreen, NullBox, 1);
 | 
			
		||||
	freeTmpClip = TRUE;
 | 
			
		||||
	if (pWin->parent || (screenIsSaved != SCREEN_SAVER_ON) ||
 | 
			
		||||
		!HasSaverWindow (pScreen->myNum))
 | 
			
		||||
		!HasSaverWindow (pScreen))
 | 
			
		||||
	{
 | 
			
		||||
            REGION_INTERSECT(pScreen,pregWin,&pTree->borderClip,&pWin->winSize);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -798,74 +798,10 @@ miSpriteSetCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		|||
	miSpriteFindColors (pPointer, pScreen);
 | 
			
		||||
    }
 | 
			
		||||
    if (pPointer->isUp) {
 | 
			
		||||
#if 0
 | 
			
		||||
        /* FIXME: Disabled for MPX, should be rewritten */
 | 
			
		||||
	int	sx, sy;
 | 
			
		||||
	/*
 | 
			
		||||
	 * check to see if the old saved region
 | 
			
		||||
	 * encloses the new sprite, in which case we use
 | 
			
		||||
	 * the flicker-free MoveCursor primitive.
 | 
			
		||||
	 */
 | 
			
		||||
	sx = pointer->x - (int)pCursor->bits->xhot;
 | 
			
		||||
	sy = pointer->y - (int)pCursor->bits->yhot;
 | 
			
		||||
	if (sx + (int) pCursor->bits->width >= pointer->saved.x1 &&
 | 
			
		||||
	    sx < pointer->saved.x2 &&
 | 
			
		||||
	    sy + (int) pCursor->bits->height >= pointer->saved.y1 &&
 | 
			
		||||
	    sy < pointer->saved.y2 &&
 | 
			
		||||
	    (int) pCursor->bits->width + (2 * SPRITE_PAD) ==
 | 
			
		||||
		pointer->saved.x2 - pointer->saved.x1 &&
 | 
			
		||||
	    (int) pCursor->bits->height + (2 * SPRITE_PAD) ==
 | 
			
		||||
		pointer->saved.y2 - pointer->saved.y1
 | 
			
		||||
	    )
 | 
			
		||||
	{
 | 
			
		||||
	    DamageDrawInternal (pScreen, TRUE);
 | 
			
		||||
	    miSpriteIsDown(pCursorInfo);
 | 
			
		||||
	    if (!(sx >= pointer->saved.x1 &&
 | 
			
		||||
                  sx + (int)pCursor->bits->width < pointer->saved.x2
 | 
			
		||||
                  && sy >= pointer->saved.y1 &&
 | 
			
		||||
                  sy + (int)pCursor->bits->height <
 | 
			
		||||
                                pointer->saved.y2))
 | 
			
		||||
            {
 | 
			
		||||
		int oldx1, oldy1, dx, dy;
 | 
			
		||||
 | 
			
		||||
		oldx1 = pointer->saved.x1;
 | 
			
		||||
		oldy1 = pointer->saved.y1;
 | 
			
		||||
		dx = oldx1 - (sx - SPRITE_PAD);
 | 
			
		||||
		dy = oldy1 - (sy - SPRITE_PAD);
 | 
			
		||||
		pointer->saved.x1 -= dx;
 | 
			
		||||
		pointer->saved.y1 -= dy;
 | 
			
		||||
		pointer->saved.x2 -= dx;
 | 
			
		||||
		pointer->saved.y2 -= dy;
 | 
			
		||||
		(void) miDCChangeSave(pScreen,
 | 
			
		||||
				pointer->saved.x1,
 | 
			
		||||
 				pointer->saved.y1,
 | 
			
		||||
                                pointer->saved.x2 -
 | 
			
		||||
                                pointer->saved.x1,
 | 
			
		||||
                                pointer->saved.y2 -
 | 
			
		||||
                                pointer->saved.y1,
 | 
			
		||||
				dx, dy);
 | 
			
		||||
	    }
 | 
			
		||||
	    (void) miDCMoveCursor(pScreen, pCursor,
 | 
			
		||||
				  pointer->saved.x1,
 | 
			
		||||
 				  pointer->saved.y1,
 | 
			
		||||
                                  pointer->saved.x2 -
 | 
			
		||||
                                  pointer->saved.x1,
 | 
			
		||||
                                  pointer->saved.y2 -
 | 
			
		||||
                                  pointer->saved.y1,
 | 
			
		||||
				  sx - pointer->saved.x1,
 | 
			
		||||
				  sy - pointer->saved.y1,
 | 
			
		||||
				  pointer->colors[SOURCE_COLOR].pixel,
 | 
			
		||||
				  pointer->colors[MASK_COLOR].pixel);
 | 
			
		||||
	    miSpriteIsUp(pCursorInfo);
 | 
			
		||||
	    DamageDrawInternal (pScreen, FALSE);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
#endif
 | 
			
		||||
	{
 | 
			
		||||
	/* TODO: reimplement flicker-free MoveCursor */
 | 
			
		||||
	SPRITE_DEBUG (("SetCursor remove %d\n", pDev->id));
 | 
			
		||||
	miSpriteRemoveCursor (pDev, pScreen);
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!pPointer->isUp && pPointer->pCursor)
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,12 +46,5 @@ extern Bool miDCSaveUnderCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		|||
                                int x, int y, int w, int h);
 | 
			
		||||
extern Bool miDCRestoreUnderCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		||||
                                   int x, int y, int w, int h);
 | 
			
		||||
extern Bool miDCMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		||||
                           CursorPtr pCursor, int x, int y,
 | 
			
		||||
                           int w, int h, int dx, int dy,
 | 
			
		||||
                           unsigned long source, unsigned long mask);
 | 
			
		||||
extern Bool miDCChangeSave(DeviceIntPtr pDev, ScreenPtr pScreen,
 | 
			
		||||
                           int x, int y, int w, int h,
 | 
			
		||||
                           int dx, int dy);
 | 
			
		||||
extern Bool miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen);
 | 
			
		||||
extern void miDCDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -447,7 +447,7 @@ RootlessRedisplay(WindowPtr pWindow)
 | 
			
		|||
void
 | 
			
		||||
RootlessRepositionWindows(ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr root = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr root = pScreen->root;
 | 
			
		||||
    WindowPtr win;
 | 
			
		||||
 | 
			
		||||
    if (root != NULL) {
 | 
			
		||||
| 
						 | 
				
			
			@ -468,7 +468,7 @@ RootlessRepositionWindows(ScreenPtr pScreen)
 | 
			
		|||
void
 | 
			
		||||
RootlessRedisplayScreen(ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr root = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr root = pScreen->root;
 | 
			
		||||
 | 
			
		||||
    if (root != NULL) {
 | 
			
		||||
        WindowPtr win;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -213,7 +213,7 @@ extern RegionRec rootlessHugeRoot;
 | 
			
		|||
 | 
			
		||||
// Returns TRUE if this window is a root window
 | 
			
		||||
#define IsRoot(pWin) \
 | 
			
		||||
    ((pWin) == WindowTable[(pWin)->drawable.pScreen->myNum])
 | 
			
		||||
    ((pWin) == (pWin)->drawable.pScreen->root)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -493,7 +493,7 @@ static void expose_1 (WindowPtr pWin) {
 | 
			
		|||
void
 | 
			
		||||
RootlessScreenExpose (ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    expose_1 (WindowTable[pScreen->myNum]);
 | 
			
		||||
    expose_1 (pScreen->root);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,9 +53,9 @@ extern Bool no_configure_window;
 | 
			
		|||
 | 
			
		||||
#ifdef ROOTLESS_GLOBAL_COORDS
 | 
			
		||||
#define SCREEN_TO_GLOBAL_X \
 | 
			
		||||
    (dixScreenOrigins[pScreen->myNum].x + rootlessGlobalOffsetX)
 | 
			
		||||
    (pScreen->x + rootlessGlobalOffsetX)
 | 
			
		||||
#define SCREEN_TO_GLOBAL_Y \
 | 
			
		||||
    (dixScreenOrigins[pScreen->myNum].y + rootlessGlobalOffsetY)
 | 
			
		||||
    (pScreen->y + rootlessGlobalOffsetY)
 | 
			
		||||
#else
 | 
			
		||||
#define SCREEN_TO_GLOBAL_X 0
 | 
			
		||||
#define SCREEN_TO_GLOBAL_Y 0
 | 
			
		||||
| 
						 | 
				
			
			@ -109,8 +109,8 @@ void RootlessNativeWindowMoved (WindowPtr pWin) {
 | 
			
		|||
    
 | 
			
		||||
    if (xp_get_window_bounds (MAKE_WINDOW_ID(winRec->wid), &bounds) != Success) return;
 | 
			
		||||
    
 | 
			
		||||
    sx = dixScreenOrigins[pWin->drawable.pScreen->myNum].x + darwinMainScreenX;
 | 
			
		||||
    sy = dixScreenOrigins[pWin->drawable.pScreen->myNum].y + darwinMainScreenY;
 | 
			
		||||
    sx = pWin->drawable.pScreen->x + darwinMainScreenX;
 | 
			
		||||
    sy = pWin->drawable.pScreen->y + darwinMainScreenY;
 | 
			
		||||
    
 | 
			
		||||
    /* Fake up a ConfigureWindow packet to resize the window to the current bounds. */
 | 
			
		||||
    vlist[0] = (INT16) bounds.x1 - sx;
 | 
			
		||||
| 
						 | 
				
			
			@ -1517,7 +1517,7 @@ RootlessOrderAllWindows (void)
 | 
			
		|||
    RL_DEBUG_MSG("RootlessOrderAllWindows() ");
 | 
			
		||||
    for (i = 0; i < screenInfo.numScreens; i++) {
 | 
			
		||||
      if (screenInfo.screens[i] == NULL) continue;
 | 
			
		||||
      pWin = WindowTable[i];
 | 
			
		||||
      pWin = screenInfo.screens[i]->root;
 | 
			
		||||
      if (pWin == NULL) continue;
 | 
			
		||||
      
 | 
			
		||||
      for (pWin = pWin->firstChild; pWin != NULL; pWin = pWin->nextSib) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1533,7 +1533,7 @@ void
 | 
			
		|||
RootlessEnableRoot (ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr pRoot;
 | 
			
		||||
    pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    pRoot = pScreen->root;
 | 
			
		||||
    
 | 
			
		||||
    RootlessEnsureFrame (pRoot);
 | 
			
		||||
    (*pScreen->ClearToBackground) (pRoot, 0, 0, 0, 0, TRUE);
 | 
			
		||||
| 
						 | 
				
			
			@ -1546,7 +1546,7 @@ RootlessDisableRoot (ScreenPtr pScreen)
 | 
			
		|||
    WindowPtr pRoot;
 | 
			
		||||
    RootlessWindowRec *winRec;
 | 
			
		||||
 | 
			
		||||
    pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    pRoot = pScreen->root;
 | 
			
		||||
    winRec = WINREC (pRoot);
 | 
			
		||||
 | 
			
		||||
    if (NULL == winRec)
 | 
			
		||||
| 
						 | 
				
			
			@ -1572,8 +1572,10 @@ RootlessHideAllWindows (void)
 | 
			
		|||
    for (i = 0; i < screenInfo.numScreens; i++)
 | 
			
		||||
    {
 | 
			
		||||
        pScreen = screenInfo.screens[i];
 | 
			
		||||
        pWin = WindowTable[i];
 | 
			
		||||
        if (pScreen == NULL || pWin == NULL)
 | 
			
		||||
	if (pScreen == NULL)
 | 
			
		||||
	    continue;
 | 
			
		||||
	pWin = pScreen->root;
 | 
			
		||||
	if (pWin == NULL)
 | 
			
		||||
            continue;
 | 
			
		||||
        
 | 
			
		||||
        for (pWin = pWin->firstChild; pWin != NULL; pWin = pWin->nextSib)
 | 
			
		||||
| 
						 | 
				
			
			@ -1609,8 +1611,10 @@ RootlessShowAllWindows (void)
 | 
			
		|||
    for (i = 0; i < screenInfo.numScreens; i++)
 | 
			
		||||
    {
 | 
			
		||||
        pScreen = screenInfo.screens[i];
 | 
			
		||||
        pWin = WindowTable[i];
 | 
			
		||||
        if (pScreen == NULL || pWin == NULL)
 | 
			
		||||
	if (pScreen == NULL)
 | 
			
		||||
	    continue;
 | 
			
		||||
	pWin = pScreen->root;
 | 
			
		||||
	if (pWin == NULL)
 | 
			
		||||
            continue;
 | 
			
		||||
        
 | 
			
		||||
        for (pWin = pWin->firstChild; pWin != NULL; pWin = pWin->nextSib)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ RREditConnectionInfo (ScreenPtr pScreen)
 | 
			
		|||
void
 | 
			
		||||
RRSendConfigNotify (ScreenPtr pScreen)
 | 
			
		||||
{
 | 
			
		||||
    WindowPtr	pWin = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr	pWin = pScreen->root;
 | 
			
		||||
    xEvent	event;
 | 
			
		||||
 | 
			
		||||
    event.u.u.type = ConfigureNotify;
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen)
 | 
			
		|||
    rrScrPriv (pScreen);
 | 
			
		||||
    xRRScreenChangeNotifyEvent	se;
 | 
			
		||||
    RRCrtcPtr	crtc = pScrPriv->numCrtcs ? pScrPriv->crtcs[0] : NULL;
 | 
			
		||||
    WindowPtr	pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    WindowPtr	pRoot = pScreen->root;
 | 
			
		||||
    
 | 
			
		||||
    se.type = RRScreenChangeNotify + RREventBase;
 | 
			
		||||
    se.rotation = (CARD8) (crtc ? crtc->rotation : RR_Rotate_0);
 | 
			
		||||
| 
						 | 
				
			
			@ -620,7 +620,7 @@ ProcRRGetScreenInfo (ClientPtr client)
 | 
			
		|||
	rep.setOfRotations = RR_Rotate_0;
 | 
			
		||||
	rep.sequenceNumber = client->sequence;
 | 
			
		||||
	rep.length = 0;
 | 
			
		||||
	rep.root = WindowTable[pWin->drawable.pScreen->myNum]->drawable.id;
 | 
			
		||||
	rep.root = pWin->drawable.pScreen->root->drawable.id;
 | 
			
		||||
	rep.timestamp = currentTime.milliseconds;
 | 
			
		||||
	rep.configTimestamp = currentTime.milliseconds;
 | 
			
		||||
	rep.nSizes = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -649,7 +649,7 @@ ProcRRGetScreenInfo (ClientPtr client)
 | 
			
		|||
	rep.setOfRotations = output->crtc->rotations;
 | 
			
		||||
	rep.sequenceNumber = client->sequence;
 | 
			
		||||
	rep.length = 0;
 | 
			
		||||
	rep.root = WindowTable[pWin->drawable.pScreen->myNum]->drawable.id;
 | 
			
		||||
	rep.root = pWin->drawable.pScreen->root->drawable.id;
 | 
			
		||||
	rep.timestamp = pScrPriv->lastSetTime.milliseconds;
 | 
			
		||||
	rep.configTimestamp = pScrPriv->lastConfigTime.milliseconds;
 | 
			
		||||
	rep.rotation = output->crtc->rotation;
 | 
			
		||||
| 
						 | 
				
			
			@ -961,7 +961,7 @@ sendReply:
 | 
			
		|||
 | 
			
		||||
    rep.newTimestamp = pScrPriv->lastSetTime.milliseconds;
 | 
			
		||||
    rep.newConfigTimestamp = pScrPriv->lastConfigTime.milliseconds;
 | 
			
		||||
    rep.root = WindowTable[pDraw->pScreen->myNum]->drawable.id;
 | 
			
		||||
    rep.root = pDraw->pScreen->root->drawable.id;
 | 
			
		||||
 | 
			
		||||
    if (client->swapped) 
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -216,7 +216,7 @@ ProcRRXineramaGetScreenSize(ClientPtr client)
 | 
			
		|||
	return rc;
 | 
			
		||||
 | 
			
		||||
    pScreen = pWin->drawable.pScreen;
 | 
			
		||||
    pRoot = WindowTable[pScreen->myNum];
 | 
			
		||||
    pRoot = pScreen->root;
 | 
			
		||||
    
 | 
			
		||||
    rep.type = X_Reply;
 | 
			
		||||
    rep.length = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@ and Jim Haggerty of Metheus.
 | 
			
		|||
#include "swaprep.h"
 | 
			
		||||
#include "inputstr.h"
 | 
			
		||||
#include "eventconvert.h"
 | 
			
		||||
#include "scrnintstr.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -755,11 +756,11 @@ RecordSendProtocolEvents(RecordClientsAndProtocolPtr pRCAP,
 | 
			
		|||
		int scr = XineramaGetCursorScreen(inputInfo.pointer);
 | 
			
		||||
		memcpy(&shiftedEvent, pev, sizeof(xEvent));
 | 
			
		||||
		shiftedEvent.u.keyButtonPointer.rootX +=
 | 
			
		||||
		    panoramiXdataPtr[scr].x -
 | 
			
		||||
		    panoramiXdataPtr[0].x;
 | 
			
		||||
		    screenInfo.screens[scr]->x -
 | 
			
		||||
		    screenInfo.screens[0]->x;
 | 
			
		||||
		shiftedEvent.u.keyButtonPointer.rootY +=
 | 
			
		||||
		    panoramiXdataPtr[scr].y -
 | 
			
		||||
		    panoramiXdataPtr[0].y;
 | 
			
		||||
		    screenInfo.screens[scr]->y -
 | 
			
		||||
		    screenInfo.screens[0]->y;
 | 
			
		||||
		pEvToRecord = &shiftedEvent;
 | 
			
		||||
	    }
 | 
			
		||||
#endif /* PANORAMIX */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2681,7 +2681,7 @@ PanoramiXRenderCreatePicture (ClientPtr client)
 | 
			
		|||
    newPict->info[0].id = stuff->pid;
 | 
			
		||||
    
 | 
			
		||||
    if (refDraw->type == XRT_WINDOW &&
 | 
			
		||||
	stuff->drawable == WindowTable[0]->drawable.id)
 | 
			
		||||
	stuff->drawable == screenInfo.screens[0]->root->drawable.id)
 | 
			
		||||
    {
 | 
			
		||||
	newPict->u.pict.root = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -2832,22 +2832,22 @@ PanoramiXRenderComposite (ClientPtr client)
 | 
			
		|||
	stuff->src = src->info[j].id;
 | 
			
		||||
	if (src->u.pict.root)
 | 
			
		||||
	{
 | 
			
		||||
	    stuff->xSrc = orig.xSrc - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->ySrc = orig.ySrc - panoramiXdataPtr[j].y;
 | 
			
		||||
	    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 - panoramiXdataPtr[j].x;
 | 
			
		||||
	    stuff->yDst = orig.yDst - panoramiXdataPtr[j].y;
 | 
			
		||||
	    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 - panoramiXdataPtr[j].x;
 | 
			
		||||
		stuff->yMask = orig.yMask - panoramiXdataPtr[j].y;
 | 
			
		||||
		stuff->xMask = orig.xMask - screenInfo.screens[j]->x;
 | 
			
		||||
		stuff->yMask = orig.yMask - screenInfo.screens[j]->y;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
	result = (*PanoramiXSaveRenderVector[X_RenderComposite]) (client);
 | 
			
		||||
| 
						 | 
				
			
			@ -2881,14 +2881,14 @@ PanoramiXRenderCompositeGlyphs (ClientPtr client)
 | 
			
		|||
	    stuff->src = src->info[j].id;
 | 
			
		||||
	    if (src->u.pict.root)
 | 
			
		||||
	    {
 | 
			
		||||
		stuff->xSrc = xSrc - panoramiXdataPtr[j].x;
 | 
			
		||||
		stuff->ySrc = ySrc - panoramiXdataPtr[j].y;
 | 
			
		||||
		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 - panoramiXdataPtr[j].x;
 | 
			
		||||
		elt->deltay = origElt.deltay - panoramiXdataPtr[j].y;
 | 
			
		||||
		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;
 | 
			
		||||
| 
						 | 
				
			
			@ -2918,8 +2918,8 @@ PanoramiXRenderFillRectangles (ClientPtr client)
 | 
			
		|||
	    if (j) memcpy (stuff + 1, extra, extra_len);
 | 
			
		||||
	    if (dst->u.pict.root)
 | 
			
		||||
	    {
 | 
			
		||||
		int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
		    xRectangle	*rects = (xRectangle *) (stuff + 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -2966,8 +2966,8 @@ PanoramiXRenderTrapezoids(ClientPtr client)
 | 
			
		|||
	FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
	    if (j) memcpy (stuff + 1, extra, extra_len);
 | 
			
		||||
	    if (dst->u.pict.root) {
 | 
			
		||||
                int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
                    xTrapezoid  *trap = (xTrapezoid *) (stuff + 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -3026,8 +3026,8 @@ PanoramiXRenderTriangles(ClientPtr client)
 | 
			
		|||
	FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
	    if (j) memcpy (stuff + 1, extra, extra_len);
 | 
			
		||||
	    if (dst->u.pict.root) {
 | 
			
		||||
                int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
                    xTriangle  *tri = (xTriangle *) (stuff + 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -3082,8 +3082,8 @@ PanoramiXRenderTriStrip(ClientPtr client)
 | 
			
		|||
	FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
	    if (j) memcpy (stuff + 1, extra, extra_len);
 | 
			
		||||
	    if (dst->u.pict.root) {
 | 
			
		||||
                int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
                    xPointFixed  *fixed = (xPointFixed *) (stuff + 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -3134,8 +3134,8 @@ PanoramiXRenderTriFan(ClientPtr client)
 | 
			
		|||
	FOR_NSCREENS_FORWARD(j) {
 | 
			
		||||
	    if (j) memcpy (stuff + 1, extra, extra_len);
 | 
			
		||||
	    if (dst->u.pict.root) {
 | 
			
		||||
                int x_off = panoramiXdataPtr[j].x;
 | 
			
		||||
		int y_off = panoramiXdataPtr[j].y;
 | 
			
		||||
		int x_off = screenInfo.screens[j]->x;
 | 
			
		||||
		int y_off = screenInfo.screens[j]->y;
 | 
			
		||||
 | 
			
		||||
		if(x_off || y_off) {
 | 
			
		||||
                    xPointFixed  *fixed = (xPointFixed *) (stuff + 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -3188,8 +3188,8 @@ PanoramiXRenderAddTraps (ClientPtr client)
 | 
			
		|||
	    
 | 
			
		||||
	    if (picture->u.pict.root)
 | 
			
		||||
	    {
 | 
			
		||||
		stuff->xOff = x_off + panoramiXdataPtr[j].x;
 | 
			
		||||
		stuff->yOff = y_off + panoramiXdataPtr[j].y;
 | 
			
		||||
		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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -690,7 +690,7 @@ ReplaceCursor (CursorPtr pCursor,
 | 
			
		|||
	}
 | 
			
		||||
    }
 | 
			
		||||
    /* this "knows" that WindowHasNewCursor doesn't depend on it's argument */
 | 
			
		||||
    WindowHasNewCursor (WindowTable[0]);
 | 
			
		||||
    WindowHasNewCursor (screenInfo.screens[0]->root);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Bool 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		|||
#include "inputstr.h"
 | 
			
		||||
#include "opaque.h"
 | 
			
		||||
#include "property.h"
 | 
			
		||||
#include "scrnintstr.h"
 | 
			
		||||
#define	XKBSRV_NEED_FILE_FUNCS
 | 
			
		||||
#include <xkbsrv.h>
 | 
			
		||||
#include "xkbgeom.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +211,7 @@ char *			pval;
 | 
			
		|||
	ErrorF("[xkb] Internal Error! bad size (%d!=%d) for _XKB_RULES_NAMES\n",
 | 
			
		||||
								out,len);
 | 
			
		||||
    }
 | 
			
		||||
    dixChangeWindowProperty(serverClient, WindowTable[0], name, XA_STRING, 8,
 | 
			
		||||
    dixChangeWindowProperty(serverClient, screenInfo.screens[0]->root, name, XA_STRING, 8,
 | 
			
		||||
			    PropModeReplace, len, pval, TRUE);
 | 
			
		||||
    free(pval);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue