aboutsummaryrefslogtreecommitdiffstats
path: root/unix
diff options
context:
space:
mode:
authorAdam Tkac <atkac@redhat.com>2012-09-05 13:29:19 +0000
committerAdam Tkac <atkac@redhat.com>2012-09-05 13:29:19 +0000
commitd91aa60d73496e54c24ab090a94f531e13e6e34d (patch)
tree1dbef48f85df7a97be75722bb1306d6d5ded0229 /unix
parent7a0e1b9040f20a01a6f7df514c8c2dd7fc60ce11 (diff)
downloadtigervnc-d91aa60d73496e54c24ab090a94f531e13e6e34d.tar.gz
tigervnc-d91aa60d73496e54c24ab090a94f531e13e6e34d.zip
Add support for X.Org 1.13
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4995 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'unix')
-rw-r--r--unix/xserver/hw/vnc/vncHooks.cc30
-rw-r--r--unix/xserver/hw/vnc/xf86vncModule.cc2
-rw-r--r--unix/xserver/hw/vnc/xorg-version.h4
-rw-r--r--unix/xserver/hw/vnc/xvnc.cc75
4 files changed, 108 insertions, 3 deletions
diff --git a/unix/xserver/hw/vnc/vncHooks.cc b/unix/xserver/hw/vnc/vncHooks.cc
index c75886c0..f99c267a 100644
--- a/unix/xserver/hw/vnc/vncHooks.cc
+++ b/unix/xserver/hw/vnc/vncHooks.cc
@@ -118,7 +118,11 @@ static DevPrivateKeyRec vncHooksGCKeyRec;
// screen functions
+#if XORG < 112
static Bool vncHooksCloseScreen(int i, ScreenPtr pScreen);
+#else
+static Bool vncHooksCloseScreen(ScreenPtr pScreen);
+#endif
static Bool vncHooksCreateGC(GCPtr pGC);
static void vncHooksCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg,
RegionPtr pOldRegion);
@@ -135,8 +139,13 @@ static Bool vncHooksDisplayCursor(
DeviceIntPtr pDev,
#endif
ScreenPtr pScreen, CursorPtr cursor);
+#if XORG < 112
static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout,
pointer pReadmask);
+#else
+static void vncHooksBlockHandler(ScreenPtr pScreen, pointer pTimeout,
+ pointer pReadmask);
+#endif
#ifdef RENDER
static void vncHooksComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask,
@@ -352,7 +361,11 @@ Bool vncHooksInit(ScreenPtr pScreen, XserverDesktop* desktop)
// CloseScreen - unwrap the screen functions and call the original CloseScreen
// function
+#if XORG < 112
static Bool vncHooksCloseScreen(int i, ScreenPtr pScreen_)
+#else
+static Bool vncHooksCloseScreen(ScreenPtr pScreen_)
+#endif
{
SCREEN_UNWRAP(pScreen_, CloseScreen);
@@ -385,7 +398,11 @@ static Bool vncHooksCloseScreen(int i, ScreenPtr pScreen_)
DBGPRINT((stderr,"vncHooksCloseScreen: unwrapped screen functions\n"));
+#if XORG < 112
return (*pScreen->CloseScreen)(i, pScreen);
+#else
+ return (*pScreen->CloseScreen)(pScreen);
+#endif
}
// CreateGC - wrap the "GC funcs"
@@ -550,14 +567,27 @@ static Bool vncHooksDisplayCursor(
// BlockHandler - ignore any changes during the block handler - it's likely
// these are just drawing the cursor.
+#if XORG < 112
static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout,
pointer pReadmask)
+#else
+static void vncHooksBlockHandler(ScreenPtr pScreen_, pointer pTimeout,
+ pointer pReadmask)
+#endif
{
+#if XORG < 112
SCREEN_UNWRAP(screenInfo.screens[i], BlockHandler);
+#else
+ SCREEN_UNWRAP(pScreen_, BlockHandler);
+#endif
vncHooksScreen->desktop->ignoreHooks(true);
+#if XORG < 112
(*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
+#else
+ (*pScreen->BlockHandler) (pScreen, pTimeout, pReadmask);
+#endif
vncHooksScreen->desktop->ignoreHooks(false);
diff --git a/unix/xserver/hw/vnc/xf86vncModule.cc b/unix/xserver/hw/vnc/xf86vncModule.cc
index b1ab2756..f37600b1 100644
--- a/unix/xserver/hw/vnc/xf86vncModule.cc
+++ b/unix/xserver/hw/vnc/xf86vncModule.cc
@@ -58,8 +58,10 @@ ExtensionModule vncExt =
{
vncExtensionInitWithParams,
"VNC",
+#if XORG < 112
NULL,
NULL,
+#endif
NULL
};
diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h
index 9a2db937..c1f45d7d 100644
--- a/unix/xserver/hw/vnc/xorg-version.h
+++ b/unix/xserver/hw/vnc/xorg-version.h
@@ -40,8 +40,10 @@
#define XORG 111
#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (12 * 100000) + (99 * 1000))
#define XORG 112
+#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (13 * 100000) + (99 * 1000))
+#define XORG 113
#else
-#error "X.Org newer than 1.10 is not supported"
+#error "X.Org newer than 1.13 is not supported"
#endif
#endif
diff --git a/unix/xserver/hw/vnc/xvnc.cc b/unix/xserver/hw/vnc/xvnc.cc
index fcf7deb5..3b848b2b 100644
--- a/unix/xserver/hw/vnc/xvnc.cc
+++ b/unix/xserver/hw/vnc/xvnc.cc
@@ -285,7 +285,11 @@ OsVendorInit()
}
void
+#if XORG < 113
OsVendorFatalError()
+#else
+OsVendorFatalError(const char *f, va_list args)
+#endif
{
}
@@ -626,14 +630,25 @@ GetTimeInMillis()
}
#endif
+#if XORG < 113
static ColormapPtr InstalledMaps[MAXSCREENS];
+#else
+static DevPrivateKeyRec cmapScrPrivateKeyRec;
+#define cmapScrPrivateKey (&cmapScrPrivateKeyRec)
+#define GetInstalledColormap(s) ((ColormapPtr) dixLookupPrivate(&(s)->devPrivates, cmapScrPrivateKey))
+#define SetInstalledColormap(s,c) (dixSetPrivate(&(s)->devPrivates, cmapScrPrivateKey, c))
+#endif
static int
vfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
{
/* By the time we are processing requests, we can guarantee that there
* is always a colormap installed */
+#if XORG < 113
*pmaps = InstalledMaps[pScreen->myNum]->mid;
+#else
+ *pmaps = GetInstalledColormap(pScreen)->mid;
+#endif
return (1);
}
@@ -641,8 +656,16 @@ vfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
static void
vfbInstallColormap(ColormapPtr pmap)
{
+#if XORG < 113
int index = pmap->pScreen->myNum;
- ColormapPtr oldpmap = InstalledMaps[index];
+#endif
+ ColormapPtr oldpmap;
+
+#if XORG < 113
+ oldpmap = InstalledMaps[index];
+#else
+ oldpmap = GetInstalledColormap(pmap->pScreen);
+#endif
if (pmap != oldpmap)
{
@@ -656,7 +679,11 @@ vfbInstallColormap(ColormapPtr pmap)
if(oldpmap != (ColormapPtr)None)
WalkTree(pmap->pScreen, TellLostMap, (char *)&oldpmap->mid);
/* Install pmap */
+#if XORG < 113
InstalledMaps[index] = pmap;
+#else
+ SetInstalledColormap(pmap->pScreen, pmap);
+#endif
WalkTree(pmap->pScreen, TellGainedMap, (char *)&pmap->mid);
entries = pmap->pVisual->ColormapEntries;
@@ -692,7 +719,11 @@ vfbInstallColormap(ColormapPtr pmap)
static void
vfbUninstallColormap(ColormapPtr pmap)
{
+#if XORG < 113
ColormapPtr curpmap = InstalledMaps[pmap->pScreen->myNum];
+#else
+ ColormapPtr curpmap = GetInstalledColormap(pmap->pScreen);
+#endif
if(pmap == curpmap)
{
@@ -1314,31 +1345,66 @@ static Bool vncRandRInit(ScreenPtr pScreen)
#endif
static Bool
+#if XORG < 113
vfbCloseScreen(int index, ScreenPtr pScreen)
+#else
+vfbCloseScreen(ScreenPtr pScreen)
+#endif
{
+#if XORG < 113
vfbScreenInfoPtr pvfb = &vfbScreens[index];
+#else
+ vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum];
+#endif
int i;
pScreen->CloseScreen = pvfb->closeScreen;
/*
* XXX probably lots of stuff to clean. For now,
- * clear InstalledMaps[] so that server reset works correctly.
+ * clear installed colormaps so that server reset works correctly.
*/
+#if XORG < 113
for (i = 0; i < MAXSCREENS; i++)
InstalledMaps[i] = NULL;
return pScreen->CloseScreen(index, pScreen);
+#else
+ for (i = 0; i < screenInfo.numScreens; i++)
+ SetInstalledColormap(screenInfo.screens[i], NULL);
+
+ /*
+ * fb overwrites miCloseScreen, so do this here
+ */
+ if (pScreen->devPrivate)
+ (*pScreen->DestroyPixmap) ((PixmapPtr) pScreen->devPrivate);
+ pScreen->devPrivate = NULL;
+
+ return pScreen->CloseScreen(pScreen);
+#endif
}
static Bool
+#if XORG < 113
vfbScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
+#else
+vfbScreenInit(ScreenPtr pScreen, int argc, char **argv)
+#endif
{
+#if XORG < 113
vfbScreenInfoPtr pvfb = &vfbScreens[index];
+#else
+ vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum];
+#endif
int dpi;
int ret;
void *pbits;
+#if XORG >= 113
+ if (!dixRegisterPrivateKey(&cmapScrPrivateKeyRec, PRIVATE_SCREEN, 0))
+ return FALSE;
+#endif
+
/* 96 is the default used by most other systems */
dpi = 96;
if (monitorResolution)
@@ -1346,8 +1412,13 @@ vfbScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
pbits = vfbAllocateFramebufferMemory(&pvfb->fb);
if (!pbits) return FALSE;
+#if XORG < 113
vncFbptr[index] = pbits;
vncFbstride[index] = pvfb->fb.paddedWidth;
+#else
+ vncFbptr[pScreen->myNum] = pbits;
+ vncFbstride[pScreen->myNum] = pvfb->fb.paddedWidth;
+#endif
miSetPixmapDepths();