diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c index 8db7773d2..5dab3aec2 100644 --- a/hw/kdrive/src/kdrive.c +++ b/hw/kdrive/src/kdrive.c @@ -154,6 +154,8 @@ static void KdDisableScreens(void) { KdSuspend(); + if (kdEnabled && (kdOsFuncs->Disable)) + kdOsFuncs->Disable(); kdEnabled = FALSE; } @@ -604,6 +606,8 @@ Bool KdCloseScreen(ScreenPtr pScreen) * Clean up OS when last card is closed */ if (card == kdCardInfo) { + if (kdEnabled && (kdOsFuncs->Disable)) + kdOsFuncs->Disable(); kdEnabled = FALSE; } } @@ -818,6 +822,8 @@ KdScreenInit(ScreenPtr pScreen, int argc, char **argv) /* * Enable the hardware */ + if ((!kdEnabled) && (kdOsFuncs->Enable)) + kdOsFuncs->Enable(); kdEnabled = TRUE; if (screen->mynum == card->selected) { diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h index 34e87347c..0df049830 100644 --- a/hw/kdrive/src/kdrive.h +++ b/hw/kdrive/src/kdrive.h @@ -280,9 +280,9 @@ void KdRemoveKeyboard(KdKeyboardInfo * ki); typedef struct _KdOsFuncs { int (*Init) (void); /* Only called when the X server is started, when serverGeneration == 1 */ - void (*Enable) (void); + void (*Enable) (void); /* called when screen is enabled */ + void (*Disable) (void); /* called when screen is disabled */ Bool (*SpecialKey) (KeySym); - void (*Disable) (void); void (*Fini) (void); void (*pollEvents) (void); void (*Bell) (int, int, int); /* if not NULL called instead of the keyboard driver's function */