From c6c4b7e4570d3ae7eab68445c99cc44b8a403de3 Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Tue, 28 Aug 2012 13:32:19 +0000 Subject: [PATCH] Add support for X.Org 1.12.X git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4979 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- unix/xserver/hw/vnc/vncExtInit.cc | 142 ++++++++++++++++++++++++--- unix/xserver/hw/vnc/xf86vncModule.cc | 9 +- unix/xserver/hw/vnc/xorg-version.h | 2 + unix/xserver112.patch | 91 +++++++++++++++++ 4 files changed, 227 insertions(+), 17 deletions(-) create mode 100644 unix/xserver112.patch diff --git a/unix/xserver/hw/vnc/vncExtInit.cc b/unix/xserver/hw/vnc/vncExtInit.cc index 7d865ed1..898d2f64 100644 --- a/unix/xserver/hw/vnc/vncExtInit.cc +++ b/unix/xserver/hw/vnc/vncExtInit.cc @@ -59,6 +59,7 @@ extern "C" { #include "XserverDesktop.h" #include "vncHooks.h" #include "vncExtInit.h" +#include "xorg-version.h" extern "C" { @@ -449,10 +450,16 @@ void vncClientCutText(const char* str, int len) ev.window = cur->window; ev.time = GetTimeInMillis(); if (cur->client->swapped) { +#if XORG < 112 int n; swaps(&ev.sequenceNumber, n); swapl(&ev.window, n); swapl(&ev.time, n); +#else + swaps(&ev.sequenceNumber); + swapl(&ev.window); + swapl(&ev.time); +#endif } WriteToClient(cur->client, sizeof(xVncExtClientCutTextNotifyEvent), (char *)&ev); @@ -495,9 +502,14 @@ void vncQueryConnect(XserverDesktop* desktop, void* opaqueId) ev.sequenceNumber = cur->client->sequence; ev.window = cur->window; if (cur->client->swapped) { +#if XORG < 112 int n; swaps(&ev.sequenceNumber, n); swapl(&ev.window, n); +#else + swaps(&ev.sequenceNumber); + swapl(&ev.window); +#endif } WriteToClient(cur->client, sizeof(xVncExtQueryConnectNotifyEvent), (char *)&ev); @@ -538,10 +550,16 @@ static void SendSelectionChangeEvent(Atom selection) ev.window = cur->window; ev.selection = selection; if (cur->client->swapped) { +#if XORG < 112 int n; swaps(&ev.sequenceNumber, n); swapl(&ev.window, n); swapl(&ev.selection, n); +#else + swaps(&ev.sequenceNumber); + swapl(&ev.window); + swapl(&ev.selection); +#endif } WriteToClient(cur->client, sizeof(xVncExtSelectionChangeNotifyEvent), (char *)&ev); @@ -562,7 +580,6 @@ static int ProcVncExtSetParam(ClientPtr client) param.buf[stuff->paramLen] = 0; xVncExtSetParamReply rep; - int n; rep.type = X_Reply; rep.length = 0; rep.success = 0; @@ -603,8 +620,14 @@ static int ProcVncExtSetParam(ClientPtr client) deny: if (client->swapped) { +#if XORG < 112 + int n; swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); +#else + swaps(&rep.sequenceNumber); + swapl(&rep.length); +#endif } WriteToClient(client, sizeof(xVncExtSetParamReply), (char *)&rep); return (client->noClientException); @@ -612,9 +635,13 @@ deny: static int SProcVncExtSetParam(ClientPtr client) { - register char n; REQUEST(xVncExtSetParamReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_AT_LEAST_SIZE(xVncExtSetParamReq); return ProcVncExtSetParam(client); } @@ -628,7 +655,6 @@ static int ProcVncExtGetParam(ClientPtr client) param.buf[stuff->paramLen] = 0; xVncExtGetParamReply rep; - int n; rep.type = X_Reply; rep.sequenceNumber = client->sequence; rep.success = 0; @@ -646,9 +672,16 @@ static int ProcVncExtGetParam(ClientPtr client) rep.length = (len + 3) >> 2; rep.valueLen = len; if (client->swapped) { +#if XORG < 112 + int n; swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swaps(&rep.valueLen, n); +#else + swaps(&rep.sequenceNumber); + swapl(&rep.length); + swaps(&rep.valueLen); +#endif } WriteToClient(client, sizeof(xVncExtGetParamReply), (char *)&rep); if (value) @@ -659,9 +692,13 @@ static int ProcVncExtGetParam(ClientPtr client) static int SProcVncExtGetParam(ClientPtr client) { - register char n; REQUEST(xVncExtGetParamReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_AT_LEAST_SIZE(xVncExtGetParamReq); return ProcVncExtGetParam(client); } @@ -675,7 +712,6 @@ static int ProcVncExtGetParamDesc(ClientPtr client) param.buf[stuff->paramLen] = 0; xVncExtGetParamDescReply rep; - int n; rep.type = X_Reply; rep.sequenceNumber = client->sequence; rep.success = 0; @@ -690,9 +726,16 @@ static int ProcVncExtGetParamDesc(ClientPtr client) rep.length = (len + 3) >> 2; rep.descLen = len; if (client->swapped) { +#if XORG < 112 + int n; swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swaps(&rep.descLen, n); +#else + swaps(&rep.sequenceNumber); + swapl(&rep.length); + swaps(&rep.descLen); +#endif } WriteToClient(client, sizeof(xVncExtGetParamDescReply), (char *)&rep); if (desc) @@ -702,9 +745,13 @@ static int ProcVncExtGetParamDesc(ClientPtr client) static int SProcVncExtGetParamDesc(ClientPtr client) { - register char n; REQUEST(xVncExtGetParamDescReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_AT_LEAST_SIZE(xVncExtGetParamDescReq); return ProcVncExtGetParamDesc(client); } @@ -715,7 +762,6 @@ static int ProcVncExtListParams(ClientPtr client) REQUEST_SIZE_MATCH(xVncExtListParamsReq); xVncExtListParamsReply rep; - int n; rep.type = X_Reply; rep.sequenceNumber = client->sequence; @@ -731,9 +777,16 @@ static int ProcVncExtListParams(ClientPtr client) rep.length = (len + 3) >> 2; rep.nParams = nParams; if (client->swapped) { +#if XORG < 112 + int n; swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swaps(&rep.nParams, n); +#else + swaps(&rep.sequenceNumber); + swapl(&rep.length); + swaps(&rep.nParams); +#endif } WriteToClient(client, sizeof(xVncExtListParamsReply), (char *)&rep); rdr::U8* data = new rdr::U8[len]; @@ -753,9 +806,13 @@ static int ProcVncExtListParams(ClientPtr client) static int SProcVncExtListParams(ClientPtr client) { - register char n; REQUEST(xVncExtListParamsReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_SIZE_MATCH(xVncExtListParamsReq); return ProcVncExtListParams(client); } @@ -778,11 +835,19 @@ static int ProcVncExtSetServerCutText(ClientPtr client) static int SProcVncExtSetServerCutText(ClientPtr client) { - register char n; REQUEST(xVncExtSetServerCutTextReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_AT_LEAST_SIZE(xVncExtSetServerCutTextReq); +#if XORG < 112 swapl(&stuff->textLen, n); +#else + swapl(&stuff->textLen); +#endif return ProcVncExtSetServerCutText(client); } @@ -792,15 +857,21 @@ static int ProcVncExtGetClientCutText(ClientPtr client) REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq); xVncExtGetClientCutTextReply rep; - int n; rep.type = X_Reply; rep.length = (clientCutTextLen + 3) >> 2; rep.sequenceNumber = client->sequence; rep.textLen = clientCutTextLen; if (client->swapped) { +#if XORG < 112 + int n; swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swapl(&rep.textLen, n); +#else + swaps(&rep.sequenceNumber); + swapl(&rep.length); + swapl(&rep.textLen); +#endif } WriteToClient(client, sizeof(xVncExtGetClientCutTextReply), (char *)&rep); if (clientCutText) @@ -810,9 +881,13 @@ static int ProcVncExtGetClientCutText(ClientPtr client) static int SProcVncExtGetClientCutText(ClientPtr client) { - register char n; REQUEST(xVncExtGetClientCutTextReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_SIZE_MATCH(xVncExtGetClientCutTextReq); return ProcVncExtGetClientCutText(client); } @@ -842,12 +917,21 @@ static int ProcVncExtSelectInput(ClientPtr client) static int SProcVncExtSelectInput(ClientPtr client) { - register char n; REQUEST(xVncExtSelectInputReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_SIZE_MATCH(xVncExtSelectInputReq); +#if XORG < 112 swapl(&stuff->window, n); swapl(&stuff->mask, n); +#else + swapl(&stuff->window); + swapl(&stuff->mask); +#endif return ProcVncExtSelectInput(client); } @@ -893,9 +977,14 @@ static int ProcVncExtConnect(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; if (client->swapped) { +#if XORG < 112 int n; swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); +#else + swaps(&rep.sequenceNumber); + swapl(&rep.length); +#endif } WriteToClient(client, sizeof(xVncExtConnectReply), (char *)&rep); return (client->noClientException); @@ -903,9 +992,13 @@ static int ProcVncExtConnect(ClientPtr client) static int SProcVncExtConnect(ClientPtr client) { - register char n; REQUEST(xVncExtConnectReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_AT_LEAST_SIZE(xVncExtConnectReq); return ProcVncExtConnect(client); } @@ -925,7 +1018,6 @@ static int ProcVncExtGetQueryConnect(ClientPtr client) qcTimeout = 0; xVncExtGetQueryConnectReply rep; - int n; rep.type = X_Reply; rep.sequenceNumber = client->sequence; rep.timeout = qcTimeout; @@ -934,11 +1026,20 @@ static int ProcVncExtGetQueryConnect(ClientPtr client) rep.opaqueId = (CARD32)(long)queryConnectId; rep.length = (rep.userLen + rep.addrLen + 3) >> 2; if (client->swapped) { +#if XORG < 112 + int n; swaps(&rep.sequenceNumber, n); swapl(&rep.userLen, n); swapl(&rep.addrLen, n); swapl(&rep.timeout, n); swapl(&rep.opaqueId, n); +#else + swaps(&rep.sequenceNumber); + swapl(&rep.userLen); + swapl(&rep.addrLen); + swapl(&rep.timeout); + swapl(&rep.opaqueId); +#endif } WriteToClient(client, sizeof(xVncExtGetQueryConnectReply), (char *)&rep); if (qcTimeout) @@ -950,9 +1051,13 @@ static int ProcVncExtGetQueryConnect(ClientPtr client) static int SProcVncExtGetQueryConnect(ClientPtr client) { - register char n; REQUEST(xVncExtGetQueryConnectReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); +#else + swaps(&stuff->length); +#endif REQUEST_SIZE_MATCH(xVncExtGetQueryConnectReq); return ProcVncExtGetQueryConnect(client); } @@ -977,10 +1082,15 @@ static int ProcVncExtApproveConnect(ClientPtr client) static int SProcVncExtApproveConnect(ClientPtr client) { - register char n; REQUEST(xVncExtApproveConnectReq); +#if XORG < 112 + register char n; swaps(&stuff->length, n); swapl(&stuff->opaqueId, n); +#else + swaps(&stuff->length); + swapl(&stuff->opaqueId); +#endif REQUEST_SIZE_MATCH(xVncExtApproveConnectReq); return ProcVncExtApproveConnect(client); } diff --git a/unix/xserver/hw/vnc/xf86vncModule.cc b/unix/xserver/hw/vnc/xf86vncModule.cc index 547ab06f..b1ab2756 100644 --- a/unix/xserver/hw/vnc/xf86vncModule.cc +++ b/unix/xserver/hw/vnc/xf86vncModule.cc @@ -28,6 +28,8 @@ #include #include +#include "xorg-version.h" + extern "C" { #define class c_class #define private c_private @@ -94,7 +96,12 @@ static void vncExtensionInitWithParams(INITARGS) ScrnInfoPtr pScrn = xf86Screens[scr]; for (ParameterIterator i(Configuration::global()); i.param; i.next()) { - char* val = xf86FindOptionValue(pScrn->options, i.param->getName()); + const char *val; +#if XORG < 112 + val = xf86FindOptionValue(pScrn->options, i.param->getName()); +#else + val = xf86FindOptionValue((XF86OptionPtr)pScrn->options, i.param->getName()); +#endif if (val) i.param->setParam(val); } diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h index 3b6a689f..9a2db937 100644 --- a/unix/xserver/hw/vnc/xorg-version.h +++ b/unix/xserver/hw/vnc/xorg-version.h @@ -38,6 +38,8 @@ #define XORG 110 #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (11 * 100000) + (99 * 1000)) #define XORG 111 +#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (12 * 100000) + (99 * 1000)) +#define XORG 112 #else #error "X.Org newer than 1.10 is not supported" #endif diff --git a/unix/xserver112.patch b/unix/xserver112.patch new file mode 100644 index 00000000..712889ce --- /dev/null +++ b/unix/xserver112.patch @@ -0,0 +1,91 @@ +diff -up xserver/configure.ac.vnc xserver/configure.ac +--- xserver/configure.ac.vnc 2012-08-28 15:01:35.142325880 +0200 ++++ xserver/configure.ac 2012-08-28 15:02:06.292300682 +0200 +@@ -30,7 +30,6 @@ AC_INIT([xorg-server], 1.12.4, [https:// + RELEASE_DATE="2012-08-27" + AC_CONFIG_SRCDIR([Makefile.am]) + AM_INIT_AUTOMAKE([foreign dist-bzip2]) +-AM_MAINTAINER_MODE + + # Require xorg-macros minimum of 1.14 for XORG_COMPILER_BRAND in XORG_DEFAULT_OPTIONS + m4_ifndef([XORG_MACROS_VERSION], +@@ -72,6 +71,7 @@ dnl forcing an entire recompile.x + AC_CONFIG_HEADERS(include/version-config.h) + + AM_PROG_AS ++AC_PROG_CXX + AC_PROG_LN_S + AC_LIBTOOL_WIN32_DLL + AC_DISABLE_STATIC +@@ -1493,6 +1493,10 @@ if test "x$XVFB" = xyes; then + AC_SUBST([XVFB_SYS_LIBS]) + fi + ++dnl Xvnc DDX ++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XEXT_INC $FB_INC $MI_INC $RENDER_INC $RANDR_INC"]) ++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"]) ++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"]) + + dnl Xnest DDX + +@@ -1527,6 +1531,8 @@ if test "x$XORG" = xauto; then + fi + AC_MSG_RESULT([$XORG]) + ++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) ++ + if test "x$XORG" = xyes; then + XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' + XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' +@@ -1743,7 +1749,6 @@ if test "x$XORG" = xyes; then + AC_DEFINE(XORGSERVER, 1, [Building Xorg server]) + AC_DEFINE(XFree86Server, 1, [Building XFree86 server]) + AC_DEFINE(XFree86LOADER, 1, [Building loadable XFree86 server]) +- AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) + AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs]) + AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions]) + AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server]) +@@ -2209,6 +2214,7 @@ hw/dmx/Makefile + hw/dmx/man/Makefile + hw/vfb/Makefile + hw/vfb/man/Makefile ++hw/vnc/Makefile + hw/xnest/Makefile + hw/xnest/man/Makefile + hw/xwin/Makefile +diff -up xserver/hw/Makefile.am.vnc xserver/hw/Makefile.am +--- xserver/hw/Makefile.am.vnc 2012-08-28 15:01:35.225325813 +0200 ++++ xserver/hw/Makefile.am 2012-08-28 15:02:06.292300682 +0200 +@@ -33,7 +33,8 @@ SUBDIRS = \ + $(XNEST_SUBDIRS) \ + $(DMX_SUBDIRS) \ + $(KDRIVE_SUBDIRS) \ +- $(XQUARTZ_SUBDIRS) ++ $(XQUARTZ_SUBDIRS) \ ++ vnc + + DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive + +diff -up xserver/mi/miinitext.c.vnc xserver/mi/miinitext.c +--- xserver/mi/miinitext.c.vnc 2012-08-28 15:01:35.311325743 +0200 ++++ xserver/mi/miinitext.c 2012-08-28 15:02:06.293300681 +0200 +@@ -266,6 +266,9 @@ extern void DamageExtensionInit(INITARGS + extern void CompositeExtensionInit(INITARGS); + #endif + extern void GEExtensionInit(INITARGS); ++#ifdef TIGERVNC ++extern void vncExtensionInit(INITARGS); ++#endif + + /* The following is only a small first step towards run-time + * configurable extensions. +@@ -449,6 +452,9 @@ InitExtensions(int argc, char *argv[]) + if (!noXFree86BigfontExtension) + XFree86BigfontExtensionInit(); + #endif ++#ifdef TIGERVNC ++ vncExtensionInit(); ++#endif + #if !defined(NO_HW_ONLY_EXTS) + #if defined(XF86VIDMODE) + if (!noXFree86VidModeExtension) -- 2.39.5