Skip to content

Commit

Permalink
Move each screen's screensaver data into ScreenRec.
Browse files Browse the repository at this point in the history
Most references to the savedScreenInfo array already had the
corresponding screen pointer handy, which meant they usually looked like
"savedScreenInfo[pScreen->myNum]". Adding a field to ScreenRec instead
of keeping this information in a parallel array simplifies those
expressions, and eliminates a MAXSCREENS-sized array.

Since dix uses this data, a screen private entry isn't appropriate.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Reviewed-by: Tiago Vignatti <tiago.vignatti@nokia.com>
Tested-by: Tiago Vignatti <tiago.vignatti@nokia.com> (i686 GNU/Linux)
  • Loading branch information
jameysharp committed Jun 3, 2010
1 parent 5030540 commit 80b5d3a
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 64 deletions.
5 changes: 3 additions & 2 deletions Xext/panoramiX.c
Original file line number Diff line number Diff line change
Expand Up @@ -836,13 +836,14 @@ PanoramiXConsolidate(void)
saver->type = XRT_WINDOW;

for (i = 0; i < PanoramiXNumScreens; i++) {
ScreenPtr pScreen = screenInfo.screens[i];
root->info[i].id = WindowTable[i]->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);
Expand Down
12 changes: 6 additions & 6 deletions Xext/panoramiXprocs.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ int PanoramiXCreateWindow(ClientPtr client)
orig_x = stuff->x;
orig_y = stuff->y;
parentIsRoot = (stuff->parent == WindowTable[0]->drawable.id) ||
(stuff->parent == savedScreenInfo[0].wid);
(stuff->parent == screenInfo.screens[0]->screensaver.wid);
FOR_NSCREENS_BACKWARD(j) {
stuff->wid = newWin->info[j].id;
stuff->parent = parent->info[j].id;
Expand Down Expand Up @@ -329,7 +329,7 @@ int PanoramiXReparentWindow(ClientPtr client)
x = stuff->x;
y = stuff->y;
parentIsRoot = (stuff->parent == WindowTable[0]->drawable.id) ||
(stuff->parent == savedScreenInfo[0].wid);
(stuff->parent == screenInfo.screens[0]->screensaver.wid);
FOR_NSCREENS_BACKWARD(j) {
stuff->window = win->info[j].id;
stuff->parent = parent->info[j].id;
Expand Down Expand Up @@ -476,7 +476,7 @@ int PanoramiXConfigureWindow(ClientPtr client)
}

if(pWin->parent && ((pWin->parent == WindowTable[0]) ||
(pWin->parent->drawable.id == savedScreenInfo[0].wid)))
(pWin->parent->drawable.id == screenInfo.screens[0]->screensaver.wid)))
{
if ((Mask)stuff->mask & CWX) {
x_offset = 0;
Expand Down Expand Up @@ -563,7 +563,7 @@ int PanoramiXGetGeometry(ClientPtr client)
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))
(pWin->parent->drawable.id == screenInfo.screens[0]->screensaver.wid))
{
rep.x += panoramiXdataPtr[0].x;
rep.y += panoramiXdataPtr[0].y;
Expand Down Expand Up @@ -597,7 +597,7 @@ int PanoramiXTranslateCoords(ClientPtr client)
rep.child = None;

if((pWin == WindowTable[0]) ||
(pWin->drawable.id == savedScreenInfo[0].wid))
(pWin->drawable.id == screenInfo.screens[0]->screensaver.wid))
{
x = stuff->srcX - panoramiXdataPtr[0].x;
y = stuff->srcY - panoramiXdataPtr[0].y;
Expand Down Expand Up @@ -635,7 +635,7 @@ 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))
(pWin->drawable.id == screenInfo.screens[0]->screensaver.wid))
{
rep.dstX += panoramiXdataPtr[0].x;
rep.dstY += panoramiXdataPtr[0].y;
Expand Down
12 changes: 6 additions & 6 deletions Xext/saver.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ CheckScreenPrivate (ScreenPtr pScreen)
{
free(pPriv);
SetScreenPrivate (pScreen, NULL);
savedScreenInfo[pScreen->myNum].ExternalScreenSaver = NULL;
pScreen->screensaver.ExternalScreenSaver = NULL;
}
}

Expand All @@ -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;
}

Expand Down Expand Up @@ -504,7 +504,7 @@ SendScreenSaverNotify (ScreenPtr pScreen, int state, Bool forced)
ev.state = state;
ev.timestamp = currentTime.milliseconds;
ev.root = WindowTable[pScreen->myNum]->drawable.id;
ev.window = savedScreenInfo[pScreen->myNum].wid;
ev.window = pScreen->screensaver.wid;
ev.kind = kind;
ev.forced = forced;
WriteEventsToClient (pEv->client, 1, (xEvent *) &ev);
Expand Down Expand Up @@ -559,7 +559,7 @@ CreateSaverWindow (ScreenPtr pScreen)
Colormap wantMap;
ColormapPtr pCmap;

pSaver = &savedScreenInfo[pScreen->myNum];
pSaver = &pScreen->screensaver;
if (pSaver->pWindow)
{
pSaver->pWindow = NullWindow;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 ();
Expand Down
2 changes: 1 addition & 1 deletion composite/compwindow.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
71 changes: 34 additions & 37 deletions dix/window.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 | \
Expand Down Expand Up @@ -363,9 +361,9 @@ 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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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
Expand All @@ -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;
}
}
Expand All @@ -3252,8 +3248,9 @@ SaveScreens(int on, int mode)
}

static Bool
TileScreenSaver(int i, int kind)
TileScreenSaver(ScreenPtr pScreen, int kind)
{
int i = pScreen->myNum;
int j;
int result;
XID attributes[3];
Expand Down Expand Up @@ -3330,12 +3327,12 @@ TileScreenSaver(int i, int kind)
}
}

pWin = savedScreenInfo[i].pWindow =
CreateWindow(savedScreenInfo[i].wid,
pWin = pScreen->screensaver.pWindow =
CreateWindow(pScreen->screensaver.wid,
WindowTable[i],
-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);

Expand All @@ -3346,7 +3343,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)
Expand Down
11 changes: 11 additions & 0 deletions include/scrnintstr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -468,6 +478,7 @@ typedef struct _Screen {
pointer devPrivate;
short numVisuals;
VisualPtr visuals;
ScreenSaverStuffRec screensaver;

/* Random screen procedures */

Expand Down
13 changes: 2 additions & 11 deletions include/windowstr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
2 changes: 1 addition & 1 deletion mi/mioverlay.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit 80b5d3a

Please sign in to comment.