Xinerama: lambda-esque macro for walking Xinerama screens

Move the walking loops on Xinerama screens into lambda-esque macros:
the callers look quite like we've been using lambda functions and
closures, but actually are just fancy macro trickery.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult
2025-08-12 13:33:38 +02:00
committed by Enrico Weigelt
parent e3d9f4c3ef
commit eb17b34362
15 changed files with 335 additions and 446 deletions

View File

@@ -134,9 +134,7 @@ PanoramiXCreateWindow(ClientPtr client)
parentIsRoot = (stuff->parent == screenInfo.screens[0]->root->drawable.id)
|| (stuff->parent == screenInfo.screens[0]->screensaver.wid);
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->wid = newWin->info[walkScreenIdx].id;
stuff->parent = parent->info[walkScreenIdx].id;
if (parentIsRoot) {
@@ -154,7 +152,7 @@ PanoramiXCreateWindow(ClientPtr client)
result = (*SavedProcVector[X_CreateWindow]) (client);
if (result != Success)
break;
}
});
if (result == Success)
AddResource(newWin->info[0].id, XRT_WINDOW, newWin);
@@ -224,8 +222,7 @@ PanoramiXChangeWindowAttributes(ClientPtr client)
}
}
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->window = win->info[walkScreenIdx].id;
if (backPix)
*((CARD32 *) &stuff[1] + pback_offset) = backPix->info[walkScreenIdx].id;
@@ -234,7 +231,7 @@ PanoramiXChangeWindowAttributes(ClientPtr client)
if (cmap)
*((CARD32 *) &stuff[1] + cmap_offset) = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_ChangeWindowAttributes]) (client);
}
});
return result;
}
@@ -254,13 +251,12 @@ PanoramiXDestroyWindow(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->id = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_DestroyWindow]) (client);
if (result != Success)
break;
}
});
/* Since ProcDestroyWindow is using FreeResource, it will free
our resource for us on the last pass through the loop above */
@@ -283,13 +279,12 @@ PanoramiXDestroySubwindows(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->id = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_DestroySubwindows]) (client);
if (result != Success)
break;
}
});
/* DestroySubwindows is using FreeResource which will free
our resources for us on the last pass through the loop above */
@@ -312,13 +307,12 @@ PanoramiXChangeSaveSet(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->window = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_ChangeSaveSet]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -350,9 +344,7 @@ PanoramiXReparentWindow(ClientPtr client)
parentIsRoot = (stuff->parent == screenInfo.screens[0]->root->drawable.id)
|| (stuff->parent == screenInfo.screens[0]->screensaver.wid);
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->window = win->info[walkScreenIdx].id;
stuff->parent = parent->info[walkScreenIdx].id;
if (parentIsRoot) {
@@ -362,7 +354,7 @@ PanoramiXReparentWindow(ClientPtr client)
result = (*SavedProcVector[X_ReparentWindow]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -382,13 +374,12 @@ PanoramiXMapWindow(ClientPtr client)
if (result != Success)
return result;
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_FORWARD({
stuff->id = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_MapWindow]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -408,13 +399,12 @@ PanoramiXMapSubwindows(ClientPtr client)
if (result != Success)
return result;
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_FORWARD({
stuff->id = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_MapSubwindows]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -434,13 +424,12 @@ PanoramiXUnmapWindow(ClientPtr client)
if (result != Success)
return result;
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_FORWARD({
stuff->id = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_UnmapWindow]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -460,13 +449,12 @@ PanoramiXUnmapSubwindows(ClientPtr client)
if (result != Success)
return result;
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_FORWARD({
stuff->id = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_UnmapSubwindows]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -527,9 +515,7 @@ PanoramiXConfigureWindow(ClientPtr client)
/* have to go forward or you get expose events before
ConfigureNotify events */
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
stuff->window = win->info[walkScreenIdx].id;
if (sib)
*((CARD32 *) &stuff[1] + sib_offset) = sib->info[walkScreenIdx].id;
@@ -540,7 +526,7 @@ PanoramiXConfigureWindow(ClientPtr client)
result = (*SavedProcVector[X_ConfigureWindow]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -560,13 +546,12 @@ PanoramiXCirculateWindow(ClientPtr client)
if (result != Success)
return result;
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_FORWARD({
stuff->window = win->info[walkScreenIdx].id;
result = (*SavedProcVector[X_CirculateWindow]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -729,14 +714,13 @@ PanoramiXCreatePixmap(ClientPtr client)
newPix->u.pix.shared = FALSE;
panoramix_setup_ids(newPix, client, stuff->pid);
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->pid = newPix->info[walkScreenIdx].id;
stuff->drawable = refDraw->info[walkScreenIdx].id;
result = (*SavedProcVector[X_CreatePixmap]) (client);
if (result != Success)
break;
}
});
if (result == Success)
AddResource(newPix->info[0].id, XRT_PIXMAP, newPix);
@@ -763,13 +747,12 @@ PanoramiXFreePixmap(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->id = pix->info[walkScreenIdx].id;
result = (*SavedProcVector[X_FreePixmap]) (client);
if (result != Success)
break;
}
});
/* Since ProcFreePixmap is using FreeResource, it will free
our resource for us on the last pass through the loop above */
@@ -837,8 +820,7 @@ PanoramiXCreateGC(ClientPtr client)
newGC->type = XRT_GC;
panoramix_setup_ids(newGC, client, stuff->gc);
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->gc = newGC->info[walkScreenIdx].id;
stuff->drawable = refDraw->info[walkScreenIdx].id;
if (tile)
@@ -850,7 +832,7 @@ PanoramiXCreateGC(ClientPtr client)
result = (*SavedProcVector[X_CreateGC]) (client);
if (result != Success)
break;
}
});
if (result == Success)
AddResource(newGC->info[0].id, XRT_GC, newGC);
@@ -912,8 +894,7 @@ PanoramiXChangeGC(ClientPtr client)
}
}
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->gc = gc->info[walkScreenIdx].id;
if (tile)
*((CARD32 *) &stuff[1] + tile_offset) = tile->info[walkScreenIdx].id;
@@ -924,7 +905,7 @@ PanoramiXChangeGC(ClientPtr client)
result = (*SavedProcVector[X_ChangeGC]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -949,14 +930,13 @@ PanoramiXCopyGC(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->srcGC = srcGC->info[walkScreenIdx].id;
stuff->dstGC = dstGC->info[walkScreenIdx].id;
result = (*SavedProcVector[X_CopyGC]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -976,13 +956,12 @@ PanoramiXSetDashes(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->gc = gc->info[walkScreenIdx].id;
result = (*SavedProcVector[X_SetDashes]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -1002,13 +981,12 @@ PanoramiXSetClipRectangles(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->gc = gc->info[walkScreenIdx].id;
result = (*SavedProcVector[X_SetClipRectangles]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -1028,13 +1006,12 @@ PanoramiXFreeGC(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->id = gc->info[walkScreenIdx].id;
result = (*SavedProcVector[X_FreeGC]) (client);
if (result != Success)
break;
}
});
/* Since ProcFreeGC is using FreeResource, it will free
our resource for us on the last pass through the loop above */
@@ -1062,9 +1039,7 @@ PanoramiXClearToBackground(ClientPtr client)
y = stuff->y;
isRoot = win->u.win.root;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->window = win->info[walkScreenIdx].id;
if (isRoot) {
stuff->x = x - walkScreen->x;
@@ -1073,7 +1048,7 @@ PanoramiXClearToBackground(ClientPtr client)
result = (*SavedProcVector[X_ClearArea]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -1141,8 +1116,7 @@ PanoramiXCopyArea(ClientPtr client)
char *data;
int pitch, rc;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
rc = dixLookupDrawable(drawables + walkScreenIdx, src->info[walkScreenIdx].id, client, 0,
DixGetAttrAccess);
if (rc != Success)
@@ -1151,7 +1125,7 @@ PanoramiXCopyArea(ClientPtr client)
drawables[walkScreenIdx]->width,
drawables[walkScreenIdx]->height,
IncludeInferiors);
}
});
pitch = PixmapBytePad(width, drawables[0]->depth);
if (!(data = calloc(height, pitch)))
@@ -1160,7 +1134,7 @@ PanoramiXCopyArea(ClientPtr client)
XineramaGetImageData(drawables, srcx, srcy, width, height, ZPixmap, ~0,
data, pitch, srcIsRoot);
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->gc = gc->info[walkScreenIdx].id;
VALIDATE_DRAWABLE_AND_GC(dst->info[walkScreenIdx].id, pDst, DixWriteAccess);
if (drawables[0]->depth != pDst->depth) {
@@ -1173,7 +1147,7 @@ PanoramiXCopyArea(ClientPtr client)
width, height, 0, ZPixmap, data);
if (dstShared)
break;
}
});
free(data);
if (pGC && pGC->graphicsExposures) {
@@ -1196,8 +1170,7 @@ PanoramiXCopyArea(ClientPtr client)
RegionInit(&rgn, &sourceBox, 1);
/* subtract the (screen-space) clips of the source drawables */
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
RegionPtr sd;
if (pGC->subWindowMode == IncludeInferiors)
@@ -1215,7 +1188,7 @@ PanoramiXCopyArea(ClientPtr client)
if (pGC->subWindowMode == IncludeInferiors)
RegionDestroy(sd);
}
});
/* -dx/-dy to get back to dest-relative, plus request offsets */
RegionTranslate(&rgn, -dx + dstx, -dy + dsty);
@@ -1236,9 +1209,7 @@ PanoramiXCopyArea(ClientPtr client)
RegionNull(&totalReg);
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
RegionPtr pRgn;
stuff->dstDrawable = dst->info[walkScreenIdx].id;
@@ -1284,7 +1255,7 @@ PanoramiXCopyArea(ClientPtr client)
if (dstShared)
break;
}
});
if (pGC->graphicsExposures) {
Bool overlap;
@@ -1349,9 +1320,7 @@ PanoramiXCopyPlane(ClientPtr client)
RegionNull(&totalReg);
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
RegionPtr pRgn;
stuff->dstDrawable = dst->info[walkScreenIdx].id;
@@ -1399,7 +1368,7 @@ PanoramiXCopyPlane(ClientPtr client)
if (dstShared)
break;
}
});
if (pGC->graphicsExposures) {
Bool overlap;
@@ -1446,9 +1415,7 @@ PanoramiXPolyPoint(ClientPtr client)
memcpy((char *) origPts, (char *) &stuff[1], npoint * sizeof(xPoint));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx)
memcpy(&stuff[1], origPts, npoint * sizeof(xPoint));
@@ -1474,7 +1441,8 @@ PanoramiXPolyPoint(ClientPtr client)
result = (*SavedProcVector[X_PolyPoint]) (client);
if (result != Success)
break;
}
});
free(origPts);
return result;
}
@@ -1514,9 +1482,7 @@ PanoramiXPolyLine(ClientPtr client)
return BadAlloc;
memcpy((char *) origPts, (char *) &stuff[1], npoint * sizeof(xPoint));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx)
memcpy(&stuff[1], origPts, npoint * sizeof(xPoint));
@@ -1542,7 +1508,8 @@ PanoramiXPolyLine(ClientPtr client)
result = (*SavedProcVector[X_PolyLine]) (client);
if (result != Success)
break;
}
});
free(origPts);
return result;
}
@@ -1586,9 +1553,7 @@ PanoramiXPolySegment(ClientPtr client)
return BadAlloc;
memcpy((char *) origSegs, (char *) &stuff[1], nsegs * sizeof(xSegment));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx) /* skip on screen #0 */
memcpy(&stuff[1], origSegs, nsegs * sizeof(xSegment));
@@ -1613,7 +1578,8 @@ PanoramiXPolySegment(ClientPtr client)
result = (*SavedProcVector[X_PolySegment]) (client);
if (result != Success)
break;
}
});
free(origSegs);
return result;
}
@@ -1658,10 +1624,7 @@ PanoramiXPolyRectangle(ClientPtr client)
memcpy((char *) origRecs, (char *) &stuff[1],
nrects * sizeof(xRectangle));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx) /* skip on screen #0 */
memcpy(&stuff[1], origRecs, nrects * sizeof(xRectangle));
@@ -1684,7 +1647,8 @@ PanoramiXPolyRectangle(ClientPtr client)
result = (*SavedProcVector[X_PolyRectangle]) (client);
if (result != Success)
break;
}
});
free(origRecs);
return result;
}
@@ -1728,10 +1692,7 @@ PanoramiXPolyArc(ClientPtr client)
return BadAlloc;
memcpy((char *) origArcs, (char *) &stuff[1], narcs * sizeof(xArc));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx) /* skip screen #0 */
memcpy(&stuff[1], origArcs, narcs * sizeof(xArc));
@@ -1753,7 +1714,8 @@ PanoramiXPolyArc(ClientPtr client)
result = (*SavedProcVector[X_PolyArc]) (client);
if (result != Success)
break;
}
});
free(origArcs);
return result;
}
@@ -1795,10 +1757,7 @@ PanoramiXFillPoly(ClientPtr client)
memcpy((char *) locPts, (char *) &stuff[1],
count * sizeof(DDXPointRec));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx) /* skip screen #0 */
memcpy(&stuff[1], locPts, count * sizeof(DDXPointRec));
@@ -1823,7 +1782,8 @@ PanoramiXFillPoly(ClientPtr client)
result = (*SavedProcVector[X_FillPoly]) (client);
if (result != Success)
break;
}
});
free(locPts);
return result;
}
@@ -1867,10 +1827,7 @@ PanoramiXPolyFillRectangle(ClientPtr client)
memcpy((char *) origRects, (char *) &stuff[1],
things * sizeof(xRectangle));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx) /* skip screen #0 */
memcpy(&stuff[1], origRects, things * sizeof(xRectangle));
@@ -1893,7 +1850,8 @@ PanoramiXPolyFillRectangle(ClientPtr client)
result = (*SavedProcVector[X_PolyFillRectangle]) (client);
if (result != Success)
break;
}
});
free(origRects);
return result;
}
@@ -1937,10 +1895,7 @@ PanoramiXPolyFillArc(ClientPtr client)
return BadAlloc;
memcpy((char *) origArcs, (char *) &stuff[1], narcs * sizeof(xArc));
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_FORWARD({
if (walkScreenIdx) /* skip screen #0 */
memcpy(&stuff[1], origArcs, narcs * sizeof(xArc));
@@ -1963,7 +1918,8 @@ PanoramiXPolyFillArc(ClientPtr client)
result = (*SavedProcVector[X_PolyFillArc]) (client);
if (result != Success)
break;
}
});
free(origArcs);
return result;
}
@@ -2000,10 +1956,7 @@ PanoramiXPutImage(ClientPtr client)
orig_x = stuff->dstX;
orig_y = stuff->dstY;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
if (isRoot) {
stuff->dstX = orig_x - walkScreen->x;
stuff->dstY = orig_y - walkScreen->y;
@@ -2013,7 +1966,8 @@ PanoramiXPutImage(ClientPtr client)
result = (*SavedProcVector[X_PutImage]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2083,23 +2037,19 @@ PanoramiXGetImage(ClientPtr client)
drawables[0] = pDraw;
unsigned int walkScreenIdx;
FOR_NSCREENS_FORWARD(walkScreenIdx) {
if (!walkScreenIdx)
continue; /* skip screen #0 */
XINERAMA_FOR_EACH_SCREEN_FORWARD_SKIP0({
rc = dixLookupDrawable(drawables + walkScreenIdx,
draw->info[walkScreenIdx].id,
client, 0,
DixGetAttrAccess);
if (rc != Success)
return rc;
}
FOR_NSCREENS_FORWARD(walkScreenIdx) {
drawables[walkScreenIdx]->pScreen->SourceValidate(drawables[walkScreenIdx], 0, 0,
drawables[walkScreenIdx]->width,
drawables[walkScreenIdx]->height,
IncludeInferiors);
}
});
XINERAMA_FOR_EACH_SCREEN_FORWARD({
DrawablePtr d = drawables[walkScreenIdx];
d->pScreen->SourceValidate(d, 0, 0, d->width, d->height, IncludeInferiors);
});
size_t length;
if (format == ZPixmap) {
@@ -2215,9 +2165,7 @@ PanoramiXPolyText8(ClientPtr client)
orig_x = stuff->x;
orig_y = stuff->y;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->drawable = draw->info[walkScreenIdx].id;
stuff->gc = gc->info[walkScreenIdx].id;
if (isRoot) {
@@ -2227,7 +2175,8 @@ PanoramiXPolyText8(ClientPtr client)
result = (*SavedProcVector[X_PolyText8]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2261,10 +2210,7 @@ PanoramiXPolyText16(ClientPtr client)
orig_x = stuff->x;
orig_y = stuff->y;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->drawable = draw->info[walkScreenIdx].id;
stuff->gc = gc->info[walkScreenIdx].id;
if (isRoot) {
@@ -2274,7 +2220,8 @@ PanoramiXPolyText16(ClientPtr client)
result = (*SavedProcVector[X_PolyText16]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2308,9 +2255,7 @@ PanoramiXImageText8(ClientPtr client)
orig_x = stuff->x;
orig_y = stuff->y;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->drawable = draw->info[walkScreenIdx].id;
stuff->gc = gc->info[walkScreenIdx].id;
if (isRoot) {
@@ -2320,7 +2265,8 @@ PanoramiXImageText8(ClientPtr client)
result = (*SavedProcVector[X_ImageText8]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2354,10 +2300,7 @@ PanoramiXImageText16(ClientPtr client)
orig_x = stuff->x;
orig_y = stuff->y;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->drawable = draw->info[walkScreenIdx].id;
stuff->gc = gc->info[walkScreenIdx].id;
if (isRoot) {
@@ -2367,7 +2310,8 @@ PanoramiXImageText16(ClientPtr client)
result = (*SavedProcVector[X_ImageText16]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2394,15 +2338,14 @@ PanoramiXCreateColormap(ClientPtr client)
orig_visual = stuff->visual;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->mid = newCmap->info[walkScreenIdx].id;
stuff->window = win->info[walkScreenIdx].id;
stuff->visual = PanoramiXTranslateVisualID(walkScreenIdx, orig_visual);
result = (*SavedProcVector[X_CreateColormap]) (client);
if (result != Success)
break;
}
});
if (result == Success)
AddResource(newCmap->info[0].id, XRT_COLORMAP, newCmap);
@@ -2429,13 +2372,12 @@ PanoramiXFreeColormap(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->id = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_FreeColormap]) (client);
if (result != Success)
break;
}
});
/* Since ProcFreeColormap is using FreeResource, it will free
our resource for us on the last pass through the loop above */
@@ -2467,14 +2409,13 @@ PanoramiXCopyColormapAndFree(ClientPtr client)
newCmap->type = XRT_COLORMAP;
panoramix_setup_ids(newCmap, client, stuff->mid);
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->srcCmap = cmap->info[walkScreenIdx].id;
stuff->mid = newCmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_CopyColormapAndFree]) (client);
if (result != Success)
break;
}
});
if (result == Success)
AddResource(newCmap->info[0].id, XRT_COLORMAP, newCmap);
@@ -2500,13 +2441,13 @@ PanoramiXInstallColormap(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->id = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_InstallColormap]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2526,13 +2467,13 @@ PanoramiXUninstallColormap(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->id = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_UninstallColormap]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2553,13 +2494,13 @@ PanoramiXAllocColor(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->cmap = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_AllocColor]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2580,13 +2521,13 @@ PanoramiXAllocNamedColor(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->cmap = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_AllocNamedColor]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2607,13 +2548,13 @@ PanoramiXAllocColorCells(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->cmap = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_AllocColorCells]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2634,13 +2575,13 @@ PanoramiXAllocColorPlanes(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->cmap = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_AllocColorPlanes]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2661,11 +2602,11 @@ PanoramiXFreeColors(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->cmap = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_FreeColors]) (client);
}
});
return result;
}
@@ -2686,13 +2627,13 @@ PanoramiXStoreColors(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->cmap = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_StoreColors]) (client);
if (result != Success)
break;
}
});
return result;
}
@@ -2713,12 +2654,12 @@ PanoramiXStoreNamedColor(ClientPtr client)
if (result != Success)
return result;
int walkScreenIdx;
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
stuff->cmap = cmap->info[walkScreenIdx].id;
result = (*SavedProcVector[X_StoreNamedColor]) (client);
if (result != Success)
break;
}
});
return result;
}