diff options
Diffstat (limited to 'hw/kdrive/src/kdrive.c')
-rw-r--r-- | hw/kdrive/src/kdrive.c | 59 |
1 files changed, 40 insertions, 19 deletions
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 46f468a12..feeccf80e 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -97,13 +97,12 @@ KdOsFuncs *kdOsFuncs; void KdDisableScreen (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); - + KdDrvScreenPriv(pScreen); if (!pScreenPriv->enabled) return; //TODOif (!pScreenPriv->closed) SetRootClip (pScreen->pScreen, FALSE); - KdDisableColormap (pScreen); + // KdDisableColormap (pScreen); if (!pScreenPriv->screen->dumb && pScreenPriv->card->cfuncs->disableAccel) (*pScreenPriv->card->cfuncs->disableAccel) (pScreen); if (!pScreenPriv->screen->softCursor && pScreenPriv->card->cfuncs->disableCursor) @@ -170,7 +169,7 @@ KdDisableScreens (void) Bool KdEnableScreen (DrvScreenPtr pScreen) { - KdScreenPriv (pScreen); + KdDrvScreenPriv (pScreen); if (pScreenPriv->enabled) return TRUE; @@ -184,7 +183,7 @@ KdEnableScreen (DrvScreenPtr pScreen) (*pScreenPriv->card->cfuncs->enableCursor) (pScreen); if (!pScreenPriv->screen->dumb && pScreenPriv->card->cfuncs->enableAccel) (*pScreenPriv->card->cfuncs->enableAccel) (pScreen); - KdEnableColormap (pScreen); + // KdEnableColormap (pScreen); SetRootClip (pScreen->pScreen, TRUE); if (pScreenPriv->card->cfuncs->dpms) (*pScreenPriv->card->cfuncs->dpms) (pScreen, pScreenPriv->dpmsState); @@ -723,9 +722,9 @@ KdOsInit (KdOsFuncs *pOsFuncs) } Bool -KdAllocatePrivates (DrvScreenPtr pScreen) +KdAllocatePrivates (ScreenPtr pScreen) { - KdPrivDrvScreenPtr pScreenPriv; + KdPrivScreenPtr pScreenPriv; if (kdGeneration != serverGeneration) kdGeneration = serverGeneration; @@ -738,9 +737,24 @@ KdAllocatePrivates (DrvScreenPtr pScreen) } Bool +KdDrvAllocatePrivates (DrvScreenPtr pScreen) +{ + KdPrivDrvScreenPtr pScreenPriv; + + if (kdGeneration != serverGeneration) + kdGeneration = serverGeneration; + + pScreenPriv = calloc(1, sizeof (*pScreenPriv)); + if (!pScreenPriv) + return FALSE; + KdSetDrvScreenPriv (pScreen, pScreenPriv); + return TRUE; +} + +Bool KdCreateScreenResources (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdCardInfo *card = pScreenPriv->card; Bool ret; @@ -759,7 +773,7 @@ KdCreateScreenResources (DrvScreenPtr pScreen) Bool KdCloseScreen (DrvScreenPtr pScreen) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; KdCardInfo *card = pScreenPriv->card; Bool ret; @@ -826,7 +840,7 @@ KdCloseScreen (DrvScreenPtr pScreen) Bool KdSaveScreen (DrvScreenPtr pScreen, int on) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); int dpmsState; #if 0 @@ -880,7 +894,7 @@ KdCreateWindow (WindowPtr pWin) void KdSetSubpixelOrder (DrvScreenPtr pScreen, Rotation randr) { - KdScreenPriv(pScreen); + KdDrvScreenPriv(pScreen); KdDrvScreenInfo *screen = pScreenPriv->screen; int subpixel_order = screen->subpixel_order; Rotation subpixel_dir; @@ -951,7 +965,7 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) Bool rotated = (screen->randr & (RR_Rotate_90|RR_Rotate_270)) != 0; int width, height, *width_mmp, *height_mmp; - KdAllocatePrivates (pScreen); + KdDrvAllocatePrivates (pScreen); pScreenPriv = KdGetDrvScreenPriv(pScreen); @@ -997,9 +1011,6 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) /* * Set colormap functions */ - pScreen->InstallColormap = KdInstallColormap; - pScreen->UninstallColormap = KdUninstallColormap; - pScreen->ListInstalledColormaps = KdListInstalledColormaps; pScreen->StoreColors = KdStoreColors; @@ -1099,7 +1110,7 @@ KdDrvScreenInit(KdDrvScreenInfo *screen, int argc, char **argv) pScreenPriv->enabled = TRUE; if (!screen->softCursor && card->cfuncs->enableCursor) (*card->cfuncs->enableCursor) (pScreen); - KdEnableColormap (pScreen); + // KdEnableColormap (pScreen); if (!screen->dumb && card->cfuncs->enableAccel) (*card->cfuncs->enableAccel) (pScreen); } @@ -1197,6 +1208,8 @@ KdScreenInit(int index, ScreenPtr pScreen, Bool rotated; int width, height; + KdAllocatePrivates (pScreen); + if (!impedSetupScreen(index, pScreen)) return FALSE; @@ -1217,17 +1230,23 @@ KdScreenInit(int index, ScreenPtr pScreen, width = first->height; height = first->width; } + + pScreen->InstallColormap = KdInstallColormap; + pScreen->UninstallColormap = KdUninstallColormap; + pScreen->ListInstalledColormaps = KdListInstalledColormaps; + if (!impedFinishScreenInit(pScreen, first->fb.frameBuffer, width, height, 75, 75, first->fb.pixelStride, first->fb.bitsPerPixel)) return FALSE; - if (!miCreateDefColormap (pScreen)) { - return FALSE; - } + pScreen->SaveScreen = KdSaveScreen; if (first->softCursor) miDCInitialize(pScreen, &kdPointerScreenFuncs); + if (!miCreateDefColormap (pScreen)) { + return FALSE; + } } static void @@ -1314,6 +1333,8 @@ KdInitOutput (ScreenInfo *pScreenInfo, if (!dixRegisterPrivateKey(&kdDrvScreenPrivateKeyRec, PRIVATE_DRV_SCREEN, 0)) return FALSE; + if (!dixRegisterPrivateKey(&kdScreenPrivateKeyRec, PRIVATE_SCREEN, 0)) + return FALSE; if (!kdCardInfo) { |