aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xfree86/shadowfb/shadow.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw/xfree86/shadowfb/shadow.c')
-rw-r--r--xorg-server/hw/xfree86/shadowfb/shadow.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/xorg-server/hw/xfree86/shadowfb/shadow.c b/xorg-server/hw/xfree86/shadowfb/shadow.c
index 4c7551de9..20e70d6ce 100644
--- a/xorg-server/hw/xfree86/shadowfb/shadow.c
+++ b/xorg-server/hw/xfree86/shadowfb/shadow.c
@@ -216,9 +216,14 @@ static Bool
ShadowEnterVT(int index, int flags)
{
ScrnInfoPtr pScrn = xf86Screens[index];
+ Bool ret;
ShadowScreenPtr pPriv = GET_SCREEN_PRIVATE(pScrn->pScreen);
- if((*pPriv->EnterVT)(index, flags)) {
+ pScrn->EnterVT = pPriv->EnterVT;
+ ret = (*pPriv->EnterVT)(index, flags);
+ pPriv->EnterVT = pScrn->EnterVT;
+ pScrn->EnterVT = ShadowEnterVT;
+ if(ret) {
pPriv->vtSema = TRUE;
return TRUE;
}
@@ -229,11 +234,15 @@ ShadowEnterVT(int index, int flags)
static void
ShadowLeaveVT(int index, int flags)
{
+ ScrnInfoPtr pScrn = xf86Screens[index];
ShadowScreenPtr pPriv = GET_SCREEN_PRIVATE(xf86Screens[index]->pScreen);
pPriv->vtSema = FALSE;
+ pScrn->LeaveVT = pPriv->LeaveVT;
(*pPriv->LeaveVT)(index, flags);
+ pPriv->LeaveVT = pScrn->LeaveVT;
+ pScrn->LeaveVT = ShadowLeaveVT;
}
/**********************************************************/