Skip to content

Commit

Permalink
panoramiX: consolidate common id assignment code.
Browse files Browse the repository at this point in the history
This adds a new FOR_NSCREENS_FORWARD_SKIP, which skips the first
element and is a common idiom throughout panoramiX code.

It then adds a new inline function to hide id assignment to a
panoramiX resource and cleans up lots of common repeated code.

Signed-off-by: Dave Airlie <[email protected]>
Reviewed-by: Daniel Stone <[email protected]>
Reviewed-by: Alan Coopersmith <[email protected]>
  • Loading branch information
airlied committed Mar 10, 2011
1 parent c48c530 commit 5a94934
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 43 deletions.
3 changes: 2 additions & 1 deletion Xext/panoramiX.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Equipment Corporation.
#include <X11/extensions/panoramiXproto.h>
#undef _PANORAMIX_SERVER
#include "gcstruct.h"

#include "dixstruct.h"

typedef struct _PanoramiXInfo {
XID id ;
Expand All @@ -70,6 +70,7 @@ typedef struct {
} PanoramiXRes;

#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--)
#define FOR_NSCREENS(j) FOR_NSCREENS_FORWARD(j)

Expand Down
20 changes: 5 additions & 15 deletions Xext/panoramiXprocs.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,7 @@ int PanoramiXCreateWindow(ClientPtr client)
newWin->u.win.visibility = VisibilityNotViewable;
newWin->u.win.class = stuff->class;
newWin->u.win.root = FALSE;
newWin->info[0].id = stuff->wid;
for(j = 1; j < PanoramiXNumScreens; j++)
newWin->info[j].id = FakeClientID(client->index);
panoramix_setup_ids(newWin, client, stuff->wid);

if (stuff->class == InputOnly)
stuff->visual = CopyFromParent;
Expand Down Expand Up @@ -663,9 +661,7 @@ int PanoramiXCreatePixmap(ClientPtr client)

newPix->type = XRT_PIXMAP;
newPix->u.pix.shared = FALSE;
newPix->info[0].id = stuff->pid;
for(j = 1; j < PanoramiXNumScreens; j++)
newPix->info[j].id = FakeClientID(client->index);
panoramix_setup_ids(newPix, client, stuff->pid);

FOR_NSCREENS_BACKWARD(j) {
stuff->pid = newPix->info[j].id;
Expand Down Expand Up @@ -767,9 +763,7 @@ int PanoramiXCreateGC(ClientPtr client)
return BadAlloc;

newGC->type = XRT_GC;
newGC->info[0].id = stuff->gc;
for(j = 1; j < PanoramiXNumScreens; j++)
newGC->info[j].id = FakeClientID(client->index);
panoramix_setup_ids(newGC, client, stuff->gc);

FOR_NSCREENS_BACKWARD(j) {
stuff->gc = newGC->info[j].id;
Expand Down Expand Up @@ -2121,9 +2115,7 @@ int PanoramiXCreateColormap(ClientPtr client)
return BadAlloc;

newCmap->type = XRT_COLORMAP;
newCmap->info[0].id = stuff->mid;
for(j = 1; j < PanoramiXNumScreens; j++)
newCmap->info[j].id = FakeClientID(client->index);
panoramix_setup_ids(newCmap, client, stuff->mid);

orig_visual = stuff->visual;
FOR_NSCREENS_BACKWARD(j){
Expand Down Expand Up @@ -2192,9 +2184,7 @@ PanoramiXCopyColormapAndFree(ClientPtr client)
return BadAlloc;

newCmap->type = XRT_COLORMAP;
newCmap->info[0].id = stuff->mid;
for(j = 1; j < PanoramiXNumScreens; j++)
newCmap->info[j].id = FakeClientID(client->index);
panoramix_setup_ids(newCmap, client, stuff->mid);

FOR_NSCREENS_BACKWARD(j){
stuff->srcCmap = cmap->info[j].id;
Expand Down
11 changes: 11 additions & 0 deletions Xext/panoramiXsrv.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,15 @@ extern _X_EXPORT void XineramaGetImageData(
Bool isRoot
);

static inline void panoramix_setup_ids(PanoramiXRes *resource,
ClientPtr client, XID base_id)
{
int j;

resource->info[0].id = base_id;
FOR_NSCREENS_FORWARD_SKIP(j) {
resource->info[j].id = FakeClientID(client->index);
}
}

#endif /* _PANORAMIXSRV_H_ */
4 changes: 1 addition & 3 deletions Xext/shm.c
Original file line number Diff line number Diff line change
Expand Up @@ -972,9 +972,7 @@ ProcPanoramiXShmCreatePixmap(ClientPtr client)

newPix->type = XRT_PIXMAP;
newPix->u.pix.shared = TRUE;
newPix->info[0].id = stuff->pid;
for(j = 1; j < PanoramiXNumScreens; j++)
newPix->info[j].id = FakeClientID(client->index);
panoramix_setup_ids(newPix, client, stuff->pid);

result = Success;

Expand Down
5 changes: 1 addition & 4 deletions composite/compext.c
Original file line number Diff line number Diff line change
Expand Up @@ -703,10 +703,7 @@ PanoramiXCompositeNameWindowPixmap (ClientPtr client)

newPix->type = XRT_PIXMAP;
newPix->u.pix.shared = FALSE;
newPix->info[0].id = stuff->pixmap;

for (i = 1; i < PanoramiXNumScreens; i++)
newPix->info[i].id = FakeClientID (client->index);
panoramix_setup_ids(newPix, client, stuff->pixmap);

FOR_NSCREENS(i) {
rc = dixLookupResourceByType ((void **) &pWin, win->info[i].id,
Expand Down
25 changes: 5 additions & 20 deletions render/render.c
Original file line number Diff line number Diff line change
Expand Up @@ -2690,7 +2690,7 @@ PanoramiXRenderCreatePicture (ClientPtr client)
if(!(newPict = (PanoramiXRes *) malloc(sizeof(PanoramiXRes))))
return BadAlloc;
newPict->type = XRT_PICTURE;
newPict->info[0].id = stuff->pid;
panoramix_setup_ids(newPict, client, stuff->pid);

if (refDraw->type == XRT_WINDOW &&
stuff->drawable == screenInfo.screens[0]->root->drawable.id)
Expand All @@ -2699,9 +2699,6 @@ PanoramiXRenderCreatePicture (ClientPtr client)
}
else
newPict->u.pict.root = FALSE;

for(j = 1; j < PanoramiXNumScreens; j++)
newPict->info[j].id = FakeClientID(client->index);

FOR_NSCREENS_BACKWARD(j) {
stuff->pid = newPict->info[j].id;
Expand Down Expand Up @@ -3225,11 +3222,8 @@ PanoramiXRenderCreateSolidFill (ClientPtr client)
return BadAlloc;

newPict->type = XRT_PICTURE;
newPict->info[0].id = stuff->pid;
panoramix_setup_ids(newPict, client, stuff->pid);
newPict->u.pict.root = FALSE;

for(j = 1; j < PanoramiXNumScreens; j++)
newPict->info[j].id = FakeClientID(client->index);

FOR_NSCREENS_BACKWARD(j) {
stuff->pid = newPict->info[j].id;
Expand Down Expand Up @@ -3258,12 +3252,9 @@ PanoramiXRenderCreateLinearGradient (ClientPtr client)
return BadAlloc;

newPict->type = XRT_PICTURE;
newPict->info[0].id = stuff->pid;
panoramix_setup_ids(newPict, client, stuff->pid);
newPict->u.pict.root = FALSE;

for(j = 1; j < PanoramiXNumScreens; j++)
newPict->info[j].id = FakeClientID(client->index);

FOR_NSCREENS_BACKWARD(j) {
stuff->pid = newPict->info[j].id;
result = (*PanoramiXSaveRenderVector[X_RenderCreateLinearGradient]) (client);
Expand Down Expand Up @@ -3291,12 +3282,9 @@ PanoramiXRenderCreateRadialGradient (ClientPtr client)
return BadAlloc;

newPict->type = XRT_PICTURE;
newPict->info[0].id = stuff->pid;
panoramix_setup_ids(newPict, client, stuff->pid);
newPict->u.pict.root = FALSE;

for(j = 1; j < PanoramiXNumScreens; j++)
newPict->info[j].id = FakeClientID(client->index);

FOR_NSCREENS_BACKWARD(j) {
stuff->pid = newPict->info[j].id;
result = (*PanoramiXSaveRenderVector[X_RenderCreateRadialGradient]) (client);
Expand Down Expand Up @@ -3324,12 +3312,9 @@ PanoramiXRenderCreateConicalGradient (ClientPtr client)
return BadAlloc;

newPict->type = XRT_PICTURE;
newPict->info[0].id = stuff->pid;
panoramix_setup_ids(newPict, client, stuff->pid);
newPict->u.pict.root = FALSE;

for(j = 1; j < PanoramiXNumScreens; j++)
newPict->info[j].id = FakeClientID(client->index);

FOR_NSCREENS_BACKWARD(j) {
stuff->pid = newPict->info[j].id;
result = (*PanoramiXSaveRenderVector[X_RenderCreateConicalGradient]) (client);
Expand Down

0 comments on commit 5a94934

Please sign in to comment.