Track screens' installed colormaps as screen privates.

Several DDXes allow each screen to have at most one (or in some cases,
exactly one) installed colormap. These all use the same pattern: Declare
a global-lifetime array of MAXSCREENS ColormapPtrs, and index it by
screen number. This patch converts most of those to use screen privates
instead.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Acked-by: Tiago Vignatti <tiago.vignatti@nokia.com>
This commit is contained in:
Jamey Sharp 2010-04-21 22:26:28 -07:00
parent 22c4300ee2
commit da02178919
3 changed files with 30 additions and 31 deletions

View File

@ -36,16 +36,18 @@
#error "You should be compiling fbcmap_mi.c instead of fbcmap.c!"
#endif
static int cmapScrPrivateKeyIndex;
static DevPrivateKey cmapScrPrivateKey = &cmapScrPrivateKeyIndex;
ColormapPtr FbInstalledMaps[MAXSCREENS];
#define GetInstalledColormap(s) ((ColormapPtr) dixLookupPrivate(&(s)->devPrivates, cmapScrPrivateKey))
#define SetInstalledColormap(s,c) (dixSetPrivate(&(s)->devPrivates, cmapScrPrivateKey, c))
int
fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
{
/* By the time we are processing requests, we can guarantee that there
* is always a colormap installed */
*pmaps = FbInstalledMaps[pScreen->myNum]->mid;
*pmaps = GetInstalledColormap(pScreen)->mid;
return (1);
}
@ -53,8 +55,7 @@ fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
void
fbInstallColormap(ColormapPtr pmap)
{
int index = pmap->pScreen->myNum;
ColormapPtr oldpmap = FbInstalledMaps[index];
ColormapPtr oldpmap = GetInstalledColormap(pmap->pScreen);
if(pmap != oldpmap)
{
@ -63,7 +64,7 @@ fbInstallColormap(ColormapPtr pmap)
if(oldpmap != (ColormapPtr)None)
WalkTree(pmap->pScreen, TellLostMap, (char *)&oldpmap->mid);
/* Install pmap */
FbInstalledMaps[index] = pmap;
SetInstalledColormap(pmap->pScreen, pmap);
WalkTree(pmap->pScreen, TellGainedMap, (char *)&pmap->mid);
}
}
@ -71,8 +72,7 @@ fbInstallColormap(ColormapPtr pmap)
void
fbUninstallColormap(ColormapPtr pmap)
{
int index = pmap->pScreen->myNum;
ColormapPtr curpmap = FbInstalledMaps[index];
ColormapPtr curpmap = GetInstalledColormap(pmap->pScreen);
if(pmap == curpmap)
{

View File

@ -427,14 +427,18 @@ ddxProcessArgument(int argc, char *argv[], int i)
return 0;
}
static ColormapPtr InstalledMaps[MAXSCREENS];
static int cmapScrPrivateKeyIndex;
static DevPrivateKey cmapScrPrivateKey = &cmapScrPrivateKeyIndex;
#define GetInstalledColormap(s) ((ColormapPtr) dixLookupPrivate(&(s)->devPrivates, cmapScrPrivateKey))
#define SetInstalledColormap(s,c) (dixSetPrivate(&(s)->devPrivates, cmapScrPrivateKey, c))
static int
vfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
{
/* By the time we are processing requests, we can guarantee that there
* is always a colormap installed */
*pmaps = InstalledMaps[pScreen->myNum]->mid;
*pmaps = GetInstalledColormap(pScreen)->mid;
return (1);
}
@ -442,8 +446,7 @@ vfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
static void
vfbInstallColormap(ColormapPtr pmap)
{
int index = pmap->pScreen->myNum;
ColormapPtr oldpmap = InstalledMaps[index];
ColormapPtr oldpmap = GetInstalledColormap(pmap->pScreen);
if (pmap != oldpmap)
{
@ -459,7 +462,7 @@ vfbInstallColormap(ColormapPtr pmap)
if(oldpmap != (ColormapPtr)None)
WalkTree(pmap->pScreen, TellLostMap, (char *)&oldpmap->mid);
/* Install pmap */
InstalledMaps[index] = pmap;
SetInstalledColormap(pmap->pScreen, pmap);
WalkTree(pmap->pScreen, TellGainedMap, (char *)&pmap->mid);
entries = pmap->pVisual->ColormapEntries;
@ -500,7 +503,7 @@ vfbInstallColormap(ColormapPtr pmap)
static void
vfbUninstallColormap(ColormapPtr pmap)
{
ColormapPtr curpmap = InstalledMaps[pmap->pScreen->myNum];
ColormapPtr curpmap = GetInstalledColormap(pmap->pScreen);
if(pmap == curpmap)
{
@ -521,7 +524,7 @@ vfbStoreColors(ColormapPtr pmap, int ndef, xColorItem *pdefs)
XWDColor *pXWDCmap;
int i;
if (pmap != InstalledMaps[pmap->pScreen->myNum])
if (pmap != GetInstalledColormap(pmap->pScreen))
{
return;
}
@ -830,10 +833,10 @@ vfbCloseScreen(int index, ScreenPtr pScreen)
/*
* XXX probably lots of stuff to clean. For now,
* clear InstalledMaps[] so that server reset works correctly.
* clear installed colormaps so that server reset works correctly.
*/
for (i = 0; i < MAXSCREENS; i++)
InstalledMaps[i] = NULL;
for (i = 0; i < screenInfo.numScreens; i++)
SetInstalledColormap(screenInfo.screens[i], NULL);
return pScreen->CloseScreen(index, pScreen);
}

View File

@ -34,7 +34,11 @@ is" without express or implied warranty.
#include "XNWindow.h"
#include "Args.h"
static ColormapPtr InstalledMaps[MAXSCREENS];
static int cmapScrPrivateKeyIndex;
static DevPrivateKey cmapScrPrivateKey = &cmapScrPrivateKeyIndex;
#define GetInstalledColormap(s) ((ColormapPtr) dixLookupPrivate(&(s)->devPrivates, cmapScrPrivateKey))
#define SetInstalledColormap(s,c) (dixSetPrivate(&(s)->devPrivates, cmapScrPrivateKey, c))
Bool
xnestCreateColormap(ColormapPtr pCmap)
@ -332,11 +336,7 @@ xnestDirectUninstallColormaps(ScreenPtr pScreen)
void
xnestInstallColormap(ColormapPtr pCmap)
{
int index;
ColormapPtr pOldCmap;
index = pCmap->pScreen->myNum;
pOldCmap = InstalledMaps[index];
ColormapPtr pOldCmap = GetInstalledColormap(pCmap->pScreen);
if(pCmap != pOldCmap)
{
@ -346,7 +346,7 @@ xnestInstallColormap(ColormapPtr pCmap)
if(pOldCmap != (ColormapPtr)None)
WalkTree(pCmap->pScreen, TellLostMap, (pointer)&pOldCmap->mid);
InstalledMaps[index] = pCmap;
SetInstalledColormap(pCmap->pScreen, pCmap);
WalkTree(pCmap->pScreen, TellGainedMap, (pointer)&pCmap->mid);
xnestSetInstalledColormapWindows(pCmap->pScreen);
@ -357,11 +357,7 @@ xnestInstallColormap(ColormapPtr pCmap)
void
xnestUninstallColormap(ColormapPtr pCmap)
{
int index;
ColormapPtr pCurCmap;
index = pCmap->pScreen->myNum;
pCurCmap = InstalledMaps[index];
ColormapPtr pCurCmap = GetInstalledColormap(pCmap->pScreen);
if(pCmap == pCurCmap)
{
@ -382,7 +378,7 @@ int
xnestListInstalledColormaps(ScreenPtr pScreen, Colormap *pCmapIDs)
{
if (xnestInstalledDefaultColormap) {
*pCmapIDs = InstalledMaps[pScreen->myNum]->mid;
*pCmapIDs = GetInstalledColormap(pScreen)->mid;
return 1;
}
else