mirror of
https://github.com/X11Libre/xserver.git
synced 2026-04-14 17:18:09 +00:00
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:
committed by
Enrico Weigelt
parent
e3d9f4c3ef
commit
eb17b34362
@@ -380,13 +380,10 @@ XineramaInitData(void)
|
||||
{
|
||||
RegionNull(&PanoramiXScreenRegion);
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
BoxRec TheBox;
|
||||
RegionRec ScreenRegion;
|
||||
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
|
||||
TheBox.x1 = walkScreen->x;
|
||||
TheBox.x2 = TheBox.x1 + walkScreen->width;
|
||||
TheBox.y1 = walkScreen->y;
|
||||
@@ -396,17 +393,13 @@ XineramaInitData(void)
|
||||
RegionUnion(&PanoramiXScreenRegion, &PanoramiXScreenRegion,
|
||||
&ScreenRegion);
|
||||
RegionUninit(&ScreenRegion);
|
||||
}
|
||||
});
|
||||
|
||||
PanoramiXPixWidth = screenInfo.screens[0]->x + screenInfo.screens[0]->width;
|
||||
PanoramiXPixHeight =
|
||||
screenInfo.screens[0]->y + screenInfo.screens[0]->height;
|
||||
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
if (!walkScreenIdx)
|
||||
continue; /* skip screen #0 */
|
||||
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD_SKIP0({
|
||||
int w = walkScreen->x + walkScreen->width;
|
||||
int h = walkScreen->y + walkScreen->height;
|
||||
|
||||
@@ -414,7 +407,7 @@ XineramaInitData(void)
|
||||
PanoramiXPixWidth = w;
|
||||
if (PanoramiXPixHeight < h)
|
||||
PanoramiXPixHeight = h;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -464,9 +457,7 @@ PanoramiXExtensionInit(void)
|
||||
* First make sure all the basic allocations succeed. If not,
|
||||
* run in non-PanoramiXeen mode.
|
||||
*/
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
PanoramiXScreenPtr pScreenPriv = calloc(1, sizeof(PanoramiXScreenRec));
|
||||
dixSetPrivate(&walkScreen->devPrivates, PanoramiXScreenKey,
|
||||
pScreenPriv);
|
||||
@@ -479,7 +470,7 @@ PanoramiXExtensionInit(void)
|
||||
|
||||
pScreenPriv->CreateGC = pScreen->CreateGC;
|
||||
walkScreen->CreateGC = XineramaCreateGC;
|
||||
}
|
||||
});
|
||||
|
||||
XRC_DRAWABLE = CreateNewResourceClass();
|
||||
XRT_WINDOW = CreateNewResourceType(XineramaDeleteResource,
|
||||
@@ -717,18 +708,14 @@ PanoramiXMaybeAddDepth(DepthPtr pDepth)
|
||||
int k;
|
||||
Bool found = FALSE;
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
if (!walkScreenIdx)
|
||||
continue; /* skip screen #0 */
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD_SKIP0({
|
||||
for (k = 0; k < walkScreen->numDepths; k++) {
|
||||
if (walkScreen->allowedDepths[k].depth == pDepth->depth) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!found)
|
||||
return;
|
||||
@@ -748,11 +735,7 @@ PanoramiXMaybeAddVisual(VisualPtr pVisual)
|
||||
int k;
|
||||
Bool found = FALSE;
|
||||
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
if (!walkScreenIdx)
|
||||
continue; /* skip screen #0 */
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD_SKIP0({
|
||||
found = FALSE;
|
||||
|
||||
for (k = 0; k < walkScreen->numVisuals; k++) {
|
||||
@@ -766,7 +749,7 @@ PanoramiXMaybeAddVisual(VisualPtr pVisual)
|
||||
|
||||
if (!found)
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
/* found a matching visual on all screens, add it to the subset list */
|
||||
int j = PanoramiXNumVisuals;
|
||||
@@ -824,10 +807,7 @@ PanoramiXConsolidate(void)
|
||||
}
|
||||
saver->type = XRT_WINDOW;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
root->info[walkScreenIdx].id = walkScreen->root->drawable.id;
|
||||
root->u.win.class = InputOutput;
|
||||
root->u.win.root = TRUE;
|
||||
@@ -835,7 +815,7 @@ PanoramiXConsolidate(void)
|
||||
saver->u.win.class = InputOutput;
|
||||
saver->u.win.root = TRUE;
|
||||
defmap->info[walkScreenIdx].id = walkScreen->defColormap;
|
||||
}
|
||||
});
|
||||
|
||||
AddResource(root->info[0].id, XRT_WINDOW, root);
|
||||
AddResource(saver->info[0].id, XRT_WINDOW, saver);
|
||||
@@ -1037,16 +1017,14 @@ ProcXineramaQueryScreens(ClientPtr client)
|
||||
x_rpcbuf_t rpcbuf = { .swapped = client->swapped, .err_clear = TRUE };
|
||||
|
||||
if (!noPanoramiXExtension) {
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
/* xXineramaScreenInfo is the same as xRectangle */
|
||||
x_rpcbuf_write_rect(&rpcbuf,
|
||||
walkScreen->x,
|
||||
walkScreen->y,
|
||||
walkScreen->width,
|
||||
walkScreen->height);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return X_SEND_REPLY_WITH_RPCBUF(client, reply, rpcbuf);
|
||||
@@ -1269,8 +1247,7 @@ XineramaGetImageData(DrawablePtr *pDrawables,
|
||||
|
||||
int depth = (format == XYPixmap) ? 1 : pDraw->depth;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (!XineramaGetImageDataScr(
|
||||
SrcBox,
|
||||
&GrabRegion,
|
||||
@@ -1282,10 +1259,10 @@ XineramaGetImageData(DrawablePtr *pDrawables,
|
||||
data,
|
||||
depth,
|
||||
pitch,
|
||||
screenInfo.screens[walkScreenIdx],
|
||||
walkScreen,
|
||||
pDrawables[walkScreenIdx]))
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
RegionUninit(&SrcRegion);
|
||||
RegionUninit(&GrabRegion);
|
||||
|
||||
@@ -40,6 +40,8 @@ Equipment Corporation.
|
||||
#include <X11/Xmd.h>
|
||||
#include <X11/extensions/panoramiXproto.h>
|
||||
|
||||
#include "include/scrnintstr.h" /* for screenInfo */
|
||||
|
||||
#include "gcstruct.h"
|
||||
#include "dixstruct.h"
|
||||
|
||||
@@ -66,6 +68,52 @@ typedef struct {
|
||||
} u;
|
||||
} PanoramiXRes;
|
||||
|
||||
/*
|
||||
* macro for looping over all screens (up to `PanoramiXNumScreens`).
|
||||
* Makes a new scopes and declares `walkScreenIdx` as the current screen's
|
||||
* index number as well as `walkScreen` as poiner to current ScreenRec
|
||||
*
|
||||
* @param __LAMBDA__ the code to be executed in each iteration step.
|
||||
*/
|
||||
#define XINERAMA_FOR_EACH_SCREEN_FORWARD(__LAMBDA__) \
|
||||
do { \
|
||||
for (unsigned walkScreenIdx = 0; walkScreenIdx < PanoramiXNumScreens; walkScreenIdx++) { \
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx]; \
|
||||
(void)walkScreen; \
|
||||
__LAMBDA__; \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
/*
|
||||
* just like XINERAMA_FOR_EACH_SCREEN_FORWARD(), but skipping the first
|
||||
* screen (which is the frontend to the client)
|
||||
*
|
||||
* @param __LAMBDA__ the code to be executed in each iteration step.
|
||||
*/
|
||||
#define XINERAMA_FOR_EACH_SCREEN_FORWARD_SKIP0(__LAMBDA__) \
|
||||
do { \
|
||||
for (unsigned walkScreenIdx = 1; walkScreenIdx < PanoramiXNumScreens; walkScreenIdx++) { \
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx]; \
|
||||
(void)walkScreen; \
|
||||
__LAMBDA__; \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
/*
|
||||
* like XINERAMA_FOR_EACH_SCREEN_FORWARD(), but traveling backwards.
|
||||
*
|
||||
* @param __LAMBDA__ the code to be executed in each iteration step.
|
||||
*/
|
||||
#define XINERAMA_FOR_EACH_SCREEN_BACKWARD(__LAMBDA__) \
|
||||
do { \
|
||||
for (unsigned __walkidx = PanoramiXNumScreens; __walkidx > 0; __walkidx--) { \
|
||||
unsigned walkScreenIdx = __walkidx - 1; \
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx]; \
|
||||
(void)walkScreen; \
|
||||
__LAMBDA__; \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define FOR_NSCREENS_FORWARD(j) for(j = 0; j < PanoramiXNumScreens; j++)
|
||||
#define FOR_NSCREENS_FORWARD_SKIP(j) for(j = 1; j < PanoramiXNumScreens; j++)
|
||||
#define FOR_NSCREENS_BACKWARD(j) for(j = PanoramiXNumScreens - 1; j >= 0; j--)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -51,11 +51,9 @@ static inline void
|
||||
panoramix_setup_ids(PanoramiXRes * resource, ClientPtr client, XID base_id)
|
||||
{
|
||||
resource->info[0].id = base_id;
|
||||
unsigned int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
if (walkScreenIdx) /* skip screen #0 */
|
||||
resource->info[walkScreenIdx].id = FakeClientID(client->index);
|
||||
}
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD_SKIP0({
|
||||
resource->info[walkScreenIdx].id = FakeClientID(client->index);
|
||||
});
|
||||
}
|
||||
|
||||
#endif /* _PANORAMIXSRV_H_ */
|
||||
|
||||
@@ -1133,8 +1133,7 @@ ProcScreenSaverSetAttributes(ClientPtr client)
|
||||
|
||||
orig_visual = stuff->visualID;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->drawable = draw->info[walkScreenIdx].id;
|
||||
if (backPix)
|
||||
*((CARD32 *) &stuff[1] + pback_offset) = backPix->info[walkScreenIdx].id;
|
||||
@@ -1147,7 +1146,7 @@ ProcScreenSaverSetAttributes(ClientPtr client)
|
||||
stuff->visualID = PanoramiXTranslateVisualID(walkScreenIdx, orig_visual);
|
||||
|
||||
status = ScreenSaverSetAttributes(client, stuff);
|
||||
}
|
||||
});
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
24
Xext/shape.c
24
Xext/shape.c
@@ -311,13 +311,13 @@ ProcShapeRectangles(ClientPtr client)
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->dest = win->info[walkScreenIdx].id;
|
||||
result = ShapeRectangles(client, stuff);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
#else
|
||||
return ShapeRectangles(client, stuff);
|
||||
@@ -425,15 +425,15 @@ ProcShapeMask(ClientPtr client)
|
||||
else
|
||||
pmap = NULL;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->dest = win->info[walkScreenIdx].id;
|
||||
if (pmap)
|
||||
stuff->src = pmap->info[walkScreenIdx].id;
|
||||
result = ShapeMask(client, stuff);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
#else
|
||||
return ShapeMask(client, stuff);
|
||||
@@ -557,14 +557,14 @@ ProcShapeCombine(ClientPtr client)
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->dest = win->info[walkScreenIdx].id;
|
||||
stuff->src = win2->info[walkScreenIdx].id;
|
||||
result = ShapeCombine(client, stuff);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
#else
|
||||
return ShapeCombine(client, stuff);
|
||||
@@ -628,13 +628,13 @@ ProcShapeOffset(ClientPtr client)
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
stuff->dest = win->info[walkScreenIdx].id;
|
||||
result = ShapeOffset(client, stuff);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
#else
|
||||
return ShapeOffset(client, stuff);
|
||||
|
||||
31
Xext/shm.c
31
Xext/shm.c
@@ -735,9 +735,7 @@ ProcShmPutImage(ClientPtr client)
|
||||
sendEvent = stuff->sendEvent;
|
||||
stuff->sendEvent = 0;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (!walkScreenIdx)
|
||||
stuff->sendEvent = sendEvent;
|
||||
stuff->drawable = draw->info[walkScreenIdx].id;
|
||||
@@ -749,7 +747,8 @@ ProcShmPutImage(ClientPtr client)
|
||||
result = ShmPutImage(client, stuff);
|
||||
if (result != Success)
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
#else
|
||||
return ShmPutImage(client, stuff);
|
||||
@@ -845,10 +844,7 @@ ProcShmGetImage(ClientPtr client)
|
||||
return BadAlloc;
|
||||
|
||||
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,
|
||||
@@ -857,13 +853,14 @@ ProcShmGetImage(ClientPtr client)
|
||||
free(drawables);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
});
|
||||
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD({
|
||||
drawables[walkScreenIdx]->pScreen->SourceValidate(drawables[walkScreenIdx], 0, 0,
|
||||
drawables[walkScreenIdx]->width,
|
||||
drawables[walkScreenIdx]->height,
|
||||
IncludeInferiors);
|
||||
}
|
||||
});
|
||||
|
||||
xgi = (xShmGetImageReply) {
|
||||
.visual = wVisual(((WindowPtr) pDraw)),
|
||||
@@ -976,9 +973,9 @@ ProcShmCreatePixmap(ClientPtr client)
|
||||
|
||||
result = Success;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
unsigned int lastOne = 0;
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
lastOne = walkScreenIdx;
|
||||
ShmScrPrivateRec *screen_priv;
|
||||
|
||||
screen_priv = ShmGetScreenPriv(walkScreen);
|
||||
@@ -1009,11 +1006,11 @@ ProcShmCreatePixmap(ClientPtr client)
|
||||
result = BadAlloc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (result != Success) {
|
||||
while (walkScreenIdx--)
|
||||
FreeResource(newPix->info[walkScreenIdx].id, X11_RESTYPE_NONE);
|
||||
while (lastOne--)
|
||||
FreeResource(newPix->info[lastOne].id, X11_RESTYPE_NONE);
|
||||
free(newPix);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -1244,14 +1244,13 @@ XineramaXvStopVideo(ClientPtr client)
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (port->info[walkScreenIdx].id) {
|
||||
stuff->drawable = draw->info[walkScreenIdx].id;
|
||||
stuff->port = port->info[walkScreenIdx].id;
|
||||
result = SingleXvStopVideo(client);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -1270,13 +1269,13 @@ XineramaXvSetPortAttribute(ClientPtr client)
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (port->info[walkScreenIdx].id) {
|
||||
stuff->port = port->info[walkScreenIdx].id;
|
||||
result = SingleXvSetPortAttribute(client);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1314,10 +1313,7 @@ XineramaXvShmPutImage(ClientPtr client)
|
||||
x = stuff->drw_x;
|
||||
y = stuff->drw_y;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (port->info[walkScreenIdx].id) {
|
||||
stuff->drawable = draw->info[walkScreenIdx].id;
|
||||
stuff->port = port->info[walkScreenIdx].id;
|
||||
@@ -1332,7 +1328,8 @@ XineramaXvShmPutImage(ClientPtr client)
|
||||
|
||||
result = SingleXvShmPutImage(client);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
#else /* CONFIG_MITSHM */
|
||||
@@ -1369,9 +1366,7 @@ XineramaXvPutImage(ClientPtr client)
|
||||
x = stuff->drw_x;
|
||||
y = stuff->drw_y;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (port->info[walkScreenIdx].id) {
|
||||
stuff->drawable = draw->info[walkScreenIdx].id;
|
||||
stuff->port = port->info[walkScreenIdx].id;
|
||||
@@ -1385,7 +1380,8 @@ XineramaXvPutImage(ClientPtr client)
|
||||
|
||||
result = SingleXvPutImage(client);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1419,9 +1415,7 @@ XineramaXvPutVideo(ClientPtr client)
|
||||
x = stuff->drw_x;
|
||||
y = stuff->drw_y;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (port->info[walkScreenIdx].id) {
|
||||
stuff->drawable = draw->info[walkScreenIdx].id;
|
||||
stuff->port = port->info[walkScreenIdx].id;
|
||||
@@ -1435,7 +1429,8 @@ XineramaXvPutVideo(ClientPtr client)
|
||||
|
||||
result = SingleXvPutVideo(client);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1469,9 +1464,7 @@ XineramaXvPutStill(ClientPtr client)
|
||||
x = stuff->drw_x;
|
||||
y = stuff->drw_y;
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (port->info[walkScreenIdx].id) {
|
||||
stuff->drawable = draw->info[walkScreenIdx].id;
|
||||
stuff->port = port->info[walkScreenIdx].id;
|
||||
@@ -1482,10 +1475,10 @@ XineramaXvPutStill(ClientPtr client)
|
||||
stuff->drw_x -= walkScreen->x;
|
||||
stuff->drw_y -= walkScreen->y;
|
||||
}
|
||||
|
||||
result = SingleXvPutStill(client);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1570,13 +1563,9 @@ XineramifyXv(void)
|
||||
MatchingAdaptors[0] = refAdapt;
|
||||
isOverlay = hasOverlay(refAdapt);
|
||||
|
||||
int walkScreenIdx;
|
||||
FOR_NSCREENS_FORWARD(walkScreenIdx) {
|
||||
ScreenPtr walkScreen = screenInfo.screens[walkScreenIdx];
|
||||
if (!walkScreenIdx)
|
||||
continue; /* skip screen #0 */
|
||||
XINERAMA_FOR_EACH_SCREEN_FORWARD_SKIP0({
|
||||
MatchingAdaptors[walkScreenIdx] = matchAdaptor(walkScreen, refAdapt, isOverlay);
|
||||
}
|
||||
});
|
||||
|
||||
/* now create a resource for each port */
|
||||
for (int j = 0; j < refAdapt->nPorts; j++) {
|
||||
@@ -1585,12 +1574,13 @@ XineramifyXv(void)
|
||||
if (!port)
|
||||
break;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(walkScreenIdx) {
|
||||
XINERAMA_FOR_EACH_SCREEN_BACKWARD({
|
||||
if (MatchingAdaptors[walkScreenIdx] && (MatchingAdaptors[walkScreenIdx]->nPorts > j))
|
||||
port->info[walkScreenIdx].id = MatchingAdaptors[walkScreenIdx]->base_id + j;
|
||||
else
|
||||
port->info[walkScreenIdx].id = 0;
|
||||
}
|
||||
});
|
||||
|
||||
AddResource(port->info[0].id, XvXRTPort, port);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user