Move each screen's screensaver data into ScreenRec.

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)
This commit is contained in:
Jamey Sharp 2010-05-21 23:13:51 -07:00
parent 5030540d6c
commit 80b5d3a326
8 changed files with 64 additions and 64 deletions

View File

@ -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);

View File

@ -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;
@ -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;
@ -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;
@ -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;
@ -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;
@ -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;

View File

@ -285,7 +285,7 @@ CheckScreenPrivate (ScreenPtr pScreen)
{
free(pPriv);
SetScreenPrivate (pScreen, NULL);
savedScreenInfo[pScreen->myNum].ExternalScreenSaver = NULL;
pScreen->screensaver.ExternalScreenSaver = NULL;
}
}
@ -304,7 +304,7 @@ MakeScreenPrivate (ScreenPtr pScreen)
pPriv->hasWindow = FALSE;
pPriv->installedMap = None;
SetScreenPrivate (pScreen, pPriv);
savedScreenInfo[pScreen->myNum].ExternalScreenSaver = ScreenSaverHandle;
pScreen->screensaver.ExternalScreenSaver = ScreenSaverHandle;
return pPriv;
}
@ -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);
@ -559,7 +559,7 @@ CreateSaverWindow (ScreenPtr pScreen)
Colormap wantMap;
ColormapPtr pCmap;
pSaver = &savedScreenInfo[pScreen->myNum];
pSaver = &pScreen->screensaver;
if (pSaver->pWindow)
{
pSaver->pWindow = NullWindow;
@ -672,7 +672,7 @@ DestroySaverWindow (ScreenPtr pScreen)
if (!pPriv || !pPriv->hasWindow)
return FALSE;
pSaver = &savedScreenInfo[pScreen->myNum];
pSaver = &pScreen->screensaver;
if (pSaver->pWindow)
{
pSaver->pWindow = NullWindow;
@ -756,7 +756,7 @@ ProcScreenSaverQueryInfo (ClientPtr client)
if (rc != Success)
return rc;
pSaver = &savedScreenInfo[pDraw->pScreen->myNum];
pSaver = &pDraw->pScreen->screensaver;
pPriv = GetScreenPrivate (pDraw->pScreen);
UpdateCurrentTime ();

View File

@ -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;

View File

@ -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 | \
@ -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;
@ -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);
@ -3034,7 +3032,7 @@ NotClippedByChildren(WindowPtr pWin)
pReg = REGION_CREATE(pScreen, NullBox, 1);
if (pWin->parent ||
screenIsSaved != SCREEN_SAVER_ON ||
!HasSaverWindow (pWin->drawable.pScreen->myNum))
!HasSaverWindow (pWin->drawable.pScreen))
{
REGION_INTERSECT(pScreen, pReg, &pWin->borderClip, &pWin->winSize);
}
@ -3152,33 +3150,33 @@ dixSaveScreens(ClientPtr client, int on, int mode)
}
for (i = 0; i < screenInfo.numScreens; i++)
{
ScreenPtr pScreen = screenInfo.screens[i];
if (on == SCREEN_SAVER_FORCER)
(* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i], on);
if (savedScreenInfo[i].ExternalScreenSaver)
(* pScreen->SaveScreen) (pScreen, on);
if (pScreen->screensaver.ExternalScreenSaver)
{
if ((*savedScreenInfo[i].ExternalScreenSaver)
(screenInfo.screens[i], type, on == SCREEN_SAVER_FORCER))
if ((*pScreen->screensaver.ExternalScreenSaver)
(pScreen, type, on == SCREEN_SAVER_FORCER))
continue;
}
if (type == screenIsSaved)
continue;
switch (type) {
case SCREEN_SAVER_OFF:
if (savedScreenInfo[i].blanked == SCREEN_IS_BLANKED)
if (pScreen->screensaver.blanked == SCREEN_IS_BLANKED)
{
(* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i],
what);
(* pScreen->SaveScreen) (pScreen, what);
}
else if (HasSaverWindow (i))
else if (HasSaverWindow (pScreen))
{
savedScreenInfo[i].pWindow = NullWindow;
FreeResource(savedScreenInfo[i].wid, RT_NONE);
pScreen->screensaver.pWindow = NullWindow;
FreeResource(pScreen->screensaver.wid, RT_NONE);
}
break;
case SCREEN_SAVER_CYCLE:
if (savedScreenInfo[i].blanked == SCREEN_IS_TILED)
if (pScreen->screensaver.blanked == SCREEN_IS_TILED)
{
WindowPtr pWin = savedScreenInfo[i].pWindow;
WindowPtr pWin = pScreen->screensaver.pWindow;
/* make it look like screen saver is off, so that
* NotClippedByChildren will compute a clip list
* for the root window, so miPaintWindow works
@ -3202,35 +3200,33 @@ dixSaveScreens(ClientPtr client, int on, int mode)
* Call the DDX saver in case it wants to do something
* at cycle time
*/
else if (savedScreenInfo[i].blanked == SCREEN_IS_BLANKED)
else if (pScreen->screensaver.blanked == SCREEN_IS_BLANKED)
{
(* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i],
type);
(* pScreen->SaveScreen) (pScreen, type);
}
break;
case SCREEN_SAVER_ON:
if (ScreenSaverBlanking != DontPreferBlanking)
{
if ((* screenInfo.screens[i]->SaveScreen)
(screenInfo.screens[i], what))
if ((* pScreen->SaveScreen) (pScreen, what))
{
savedScreenInfo[i].blanked = SCREEN_IS_BLANKED;
pScreen->screensaver.blanked = SCREEN_IS_BLANKED;
continue;
}
if ((ScreenSaverAllowExposures != DontAllowExposures) &&
TileScreenSaver(i, SCREEN_IS_BLACK))
TileScreenSaver(pScreen, SCREEN_IS_BLACK))
{
savedScreenInfo[i].blanked = SCREEN_IS_BLACK;
pScreen->screensaver.blanked = SCREEN_IS_BLACK;
continue;
}
}
if ((ScreenSaverAllowExposures != DontAllowExposures) &&
TileScreenSaver(i, SCREEN_IS_TILED))
TileScreenSaver(pScreen, SCREEN_IS_TILED))
{
savedScreenInfo[i].blanked = SCREEN_IS_TILED;
pScreen->screensaver.blanked = SCREEN_IS_TILED;
}
else
savedScreenInfo[i].blanked = SCREEN_ISNT_SAVED;
pScreen->screensaver.blanked = SCREEN_ISNT_SAVED;
break;
}
}
@ -3252,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];
@ -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);
@ -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)

View File

@ -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
@ -468,6 +478,7 @@ typedef struct _Screen {
pointer devPrivate;
short numVisuals;
VisualPtr visuals;
ScreenSaverStuffRec screensaver;
/* Random screen procedures */

View File

@ -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 */

View File

@ -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);
}