From b227226476ae94d094376c561d77e85589592fe6 Mon Sep 17 00:00:00 2001 From: Stuart Kreitman Date: Fri, 15 Oct 2004 21:09:00 +0000 Subject: Bugzilla #1644: Attach an atom "VFB" to root window of dummy driver. Committing in Head. Modified Files: dummy.h dummy_driver.c --- src/dummy.h | 4 +++- src/dummy_driver.c | 64 ++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/dummy.h b/src/dummy.h index edffc4e..77a759d 100644 --- a/src/dummy.h +++ b/src/dummy.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/dummy/dummy.h,v 1.2 2003/04/23 21:51:35 tsi Exp $ */ +/* $XFree86$ */ /* All drivers should typically include these */ #include "xf86.h" @@ -65,6 +65,8 @@ typedef struct dummyRec int interlace; dummy_colors colors[256]; pointer* FBBase; + Bool (*CreateWindow)() ; /* wrapped CreateWindow */ + Bool prop; } DUMMYRec, *DUMMYPtr; /* The privates of the DUMMY driver */ diff --git a/src/dummy_driver.c b/src/dummy_driver.c index 4ad5670..a623693 100644 --- a/src/dummy_driver.c +++ b/src/dummy_driver.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/dummy/dummy_driver.c,v 1.4 2003/08/23 15:02:57 dawes Exp $ */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/dummy/dummy_driver.c,v 1.5tsi Exp $ */ /* * Copyright 2002, SuSE Linux AG, Author: Egbert Eich @@ -21,6 +21,10 @@ /* All drivers using the mi colormap manipulation need this */ #include "micmap.h" +/* identifying atom needed by magnifiers */ +#include "Xatom.h" +#include "property.h" + #include "xf86cmap.h" #include "xf86fbman.h" @@ -55,8 +59,9 @@ static Bool DUMMYScreenInit(int Index, ScreenPtr pScreen, int argc, static Bool DUMMYEnterVT(int scrnIndex, int flags); static void DUMMYLeaveVT(int scrnIndex, int flags); static Bool DUMMYCloseScreen(int scrnIndex, ScreenPtr pScreen); +static Bool DUMMYCreateWindow(WindowPtr pWin); static void DUMMYFreeScreen(int scrnIndex, int flags); -static int DUMMYValidMode(int scrnIndex, DisplayModePtr mode, +static ModeStatus DUMMYValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags); static Bool DUMMYSaveScreen(ScreenPtr pScreen, int mode); @@ -149,7 +154,7 @@ static XF86ModuleVersionInfo dummyVersRec = MODULEVENDORSTRING, MODINFOSTRING1, MODINFOSTRING2, - XF86_VERSION_CURRENT, + XORG_VERSION_CURRENT, DUMMY_MAJOR_VERSION, DUMMY_MINOR_VERSION, DUMMY_PATCHLEVEL, ABI_CLASS_VIDEODRV, ABI_VIDEODRV_VERSION, @@ -309,10 +314,6 @@ DUMMYPreInit(ScrnInfoPtr pScrn, int flags) if (!DUMMYGetRec(pScrn)) { return FALSE; } -# define RETURN \ - { DUMMYFreeRec(pScrn);\ - return FALSE;\ - } dPtr = DUMMYPTR(pScrn); @@ -471,6 +472,10 @@ DUMMYPreInit(ScrnInfoPtr pScrn, int flags) RETURN; xf86LoaderReqSymLists(ramdacSymbols, NULL); } + + /* We have no contiguous physical fb in physical memory */ + pScrn->memPhysBase = 0; + pScrn->fbOffset = 0; return TRUE; } @@ -532,6 +537,8 @@ DUMMYLoadPalette( } +static ScrnInfoPtr DUMMYScrn; /* static-globalize it */ + /* Mandatory */ static Bool DUMMYScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) @@ -540,7 +547,6 @@ DUMMYScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) DUMMYPtr dPtr; int ret; VisualPtr visual; - int height, width; /* * we need to get the ScrnInfoRec for this screen, so let's allocate @@ -548,6 +554,7 @@ DUMMYScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) */ pScrn = xf86Screens[pScreen->myNum]; dPtr = DUMMYPTR(pScrn); + DUMMYScrn = pScrn; if (!(dPtr->FBBase = xalloc(pScrn->videoRam * 1024))) @@ -580,9 +587,6 @@ DUMMYScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) * Call the framebuffer layer's ScreenInit function, and fill in other * pScreen fields. */ - width = pScrn->virtualX; - height = pScrn->virtualY; - ret = fbScreenInit(pScreen, dPtr->FBBase, pScrn->virtualX, pScrn->virtualY, pScrn->xDpi, pScrn->yDpi, @@ -668,6 +672,10 @@ DUMMYScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) dPtr->CloseScreen = pScreen->CloseScreen; pScreen->CloseScreen = DUMMYCloseScreen; + /* Wrap the current CreateWindow function */ + dPtr->CreateWindow = pScreen->CreateWindow; + pScreen->CreateWindow = DUMMYCreateWindow; + /* Report any unused options (only for the first generation) */ if (serverGeneration == 1) { xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options); @@ -753,7 +761,7 @@ DUMMYSaveScreen(ScreenPtr pScreen, int mode) } /* Optional */ -static int +static ModeStatus DUMMYValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) { return(MODE_OK); @@ -777,3 +785,35 @@ dummyModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) return(TRUE); } + +Atom VFB_PROP = 0; +#define VFB_PROP_NAME "VFB_IDENT" + + + +static Bool +DUMMYCreateWindow(WindowPtr pWin) +{ + DUMMYPtr dPtr = DUMMYPTR(DUMMYScrn); + WindowPtr pWinRoot; + int ret; + + ret = dPtr->CreateWindow(pWin); + if(ret != TRUE) + return(ret); + + if(dPtr->prop == FALSE) { + pWinRoot = WindowTable[DUMMYScrn->pScreen->myNum]; + if (! ValidAtom(VFB_PROP)) + VFB_PROP = MakeAtom(VFB_PROP_NAME, strlen(VFB_PROP_NAME), 1); + + ret = ChangeWindowProperty(pWinRoot, VFB_PROP, XA_STRING, + 8, PropModeReplace, (int)4, (pointer)"TRUE", FALSE); + if( ret != Success) + ErrorF("Could not set VFB root window property"); + dPtr->prop = TRUE; + + return TRUE; + } + return TRUE; +} -- cgit v1.2.3