vfb: Don't reimplement micmap so much

We know we're atop fb which is atop micmap, the only thing we need to
hook is InstallColormap to handle the xwd colormap change.

Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2014-06-10 12:54:41 -04:00
parent 692676debb
commit 3689be96ac

View File

@ -380,26 +380,10 @@ ddxProcessArgument(int argc, char *argv[], int i)
return 0; return 0;
} }
static DevPrivateKeyRec cmapScrPrivateKeyRec;
#define cmapScrPrivateKey (&cmapScrPrivateKeyRec)
#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 = GetInstalledColormap(pScreen)->mid;
return 1;
}
static void static void
vfbInstallColormap(ColormapPtr pmap) vfbInstallColormap(ColormapPtr pmap)
{ {
ColormapPtr oldpmap = GetInstalledColormap(pmap->pScreen); ColormapPtr oldpmap = GetInstalledmiColormap(pmap->pScreen);
if (pmap != oldpmap) { if (pmap != oldpmap) {
int entries; int entries;
@ -410,11 +394,7 @@ vfbInstallColormap(ColormapPtr pmap)
xColorItem *defs; xColorItem *defs;
int i; int i;
if (oldpmap != (ColormapPtr) None) miInstallColormap(pmap);
WalkTree(pmap->pScreen, TellLostMap, (char *) &oldpmap->mid);
/* Install pmap */
SetInstalledColormap(pmap->pScreen, pmap);
WalkTree(pmap->pScreen, TellGainedMap, (char *) &pmap->mid);
entries = pmap->pVisual->ColormapEntries; entries = pmap->pVisual->ColormapEntries;
pXWDHeader = vfbScreens[pmap->pScreen->myNum].pXWDHeader; pXWDHeader = vfbScreens[pmap->pScreen->myNum].pXWDHeader;
@ -451,29 +431,13 @@ vfbInstallColormap(ColormapPtr pmap)
} }
} }
static void
vfbUninstallColormap(ColormapPtr pmap)
{
ColormapPtr curpmap = GetInstalledColormap(pmap->pScreen);
if (pmap == curpmap) {
if (pmap->mid != pmap->pScreen->defColormap) {
dixLookupResourceByType((void **) &curpmap,
pmap->pScreen->defColormap,
RT_COLORMAP, serverClient,
DixInstallAccess);
(*pmap->pScreen->InstallColormap) (curpmap);
}
}
}
static void static void
vfbStoreColors(ColormapPtr pmap, int ndef, xColorItem * pdefs) vfbStoreColors(ColormapPtr pmap, int ndef, xColorItem * pdefs)
{ {
XWDColor *pXWDCmap; XWDColor *pXWDCmap;
int i; int i;
if (pmap != GetInstalledColormap(pmap->pScreen)) { if (pmap != GetInstalledmiColormap(pmap->pScreen)) {
return; return;
} }
@ -761,17 +725,9 @@ static Bool
vfbCloseScreen(ScreenPtr pScreen) vfbCloseScreen(ScreenPtr pScreen)
{ {
vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum]; vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum];
int i;
pScreen->CloseScreen = pvfb->closeScreen; pScreen->CloseScreen = pvfb->closeScreen;
/*
* XXX probably lots of stuff to clean. For now,
* clear installed colormaps so that server reset works correctly.
*/
for (i = 0; i < screenInfo.numScreens; i++)
SetInstalledColormap(screenInfo.screens[i], NULL);
/* /*
* fb overwrites miCloseScreen, so do this here * fb overwrites miCloseScreen, so do this here
*/ */
@ -790,9 +746,6 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
int ret; int ret;
char *pbits; char *pbits;
if (!dixRegisterPrivateKey(&cmapScrPrivateKeyRec, PRIVATE_SCREEN, 0))
return FALSE;
if (dpix == 0) if (dpix == 0)
dpix = 100; dpix = 100;
@ -859,8 +812,6 @@ vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
return FALSE; return FALSE;
pScreen->InstallColormap = vfbInstallColormap; pScreen->InstallColormap = vfbInstallColormap;
pScreen->UninstallColormap = vfbUninstallColormap;
pScreen->ListInstalledColormaps = vfbListInstalledColormaps;
pScreen->SaveScreen = vfbSaveScreen; pScreen->SaveScreen = vfbSaveScreen;
pScreen->StoreColors = vfbStoreColors; pScreen->StoreColors = vfbStoreColors;