diff -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/vncHooks.cc tigervnc-1.2.0/unix/xserver/hw/vnc/vncHooks.cc --- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/vncHooks.cc 2012-01-23 16:54:11.000000000 +0100 +++ tigervnc-1.2.0/unix/xserver/hw/vnc/vncHooks.cc 2012-09-06 18:53:26.392282102 +0200 @@ -116,7 +116,11 @@ // 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); @@ -133,8 +137,13 @@ 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, @@ -335,7 +344,11 @@ // 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); @@ -366,7 +379,11 @@ 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" @@ -531,14 +548,27 @@ // 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 -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xf86vncModule.cc tigervnc-1.2.0/unix/xserver/hw/vnc/xf86vncModule.cc --- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xf86vncModule.cc 2012-09-06 18:52:54.668284962 +0200 +++ tigervnc-1.2.0/unix/xserver/hw/vnc/xf86vncModule.cc 2012-09-06 18:53:26.393282091 +0200 @@ -53,8 +53,10 @@ { vncExtensionInitWithParams, "VNC", +#if XORG < 112 NULL, NULL, +#endif NULL }; diff -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xorg-version.h tigervnc-1.2.0/unix/xserver/hw/vnc/xorg-version.h --- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xorg-version.h 2012-09-06 18:52:54.669284923 +0200 +++ tigervnc-1.2.0/unix/xserver/hw/vnc/xorg-version.h 2012-09-06 18:53:26.393282091 +0200 @@ -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 -ur tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xvnc.cc tigervnc-1.2.0/unix/xserver/hw/vnc/xvnc.cc --- tigervnc-1.2.0.orig/unix/xserver/hw/vnc/xvnc.cc 2012-09-06 18:52:51.896283812 +0200 +++ tigervnc-1.2.0/unix/xserver/hw/vnc/xvnc.cc 2012-09-06 18:59:25.784263082 +0200 @@ -285,7 +285,11 @@ } void +#if XORG < 113 OsVendorFatalError() +#else +OsVendorFatalError(const char *f, va_list args) +#endif { } @@ -626,14 +630,25 @@ } #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 @@ 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 @@ 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 @@ static void vfbUninstallColormap(ColormapPtr pmap) { +#if XORG < 113 ColormapPtr curpmap = InstalledMaps[pmap->pScreen->myNum]; +#else + ColormapPtr curpmap = GetInstalledColormap(pmap->pScreen); +#endif if(pmap == curpmap) { @@ -1153,31 +1184,66 @@ #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) @@ -1185,8 +1251,13 @@ 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();