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:
parent
692676debb
commit
3689be96ac
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue