From ff8112326b8a074913dba6c2b313ad1729328bdd Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Tue, 28 Aug 2012 12:41:44 +0000 Subject: [PATCH] Add Support for X.Org 1.11.X git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4978 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- unix/xserver/hw/vnc/Input.cc | 61 ++++++++++++++++---- unix/xserver/hw/vnc/xorg-version.h | 2 + unix/xserver/hw/vnc/xvnc.cc | 17 ++++++ unix/xserver111.patch | 91 ++++++++++++++++++++++++++++++ 4 files changed, 161 insertions(+), 10 deletions(-) create mode 100644 unix/xserver111.patch diff --git a/unix/xserver/hw/vnc/Input.cc b/unix/xserver/hw/vnc/Input.cc index 7247eae8..9b32648b 100644 --- a/unix/xserver/hw/vnc/Input.cc +++ b/unix/xserver/hw/vnc/Input.cc @@ -82,10 +82,11 @@ static KeyCode KeysymToKeycode(KeySymsPtr keymap, KeySym ks, int* col); /* Event queue is shared between all devices. */ #if XORG == 15 static xEvent *eventq = NULL; -#else +#elif XORG < 111 static EventList *eventq = NULL; #endif +#if XORG < 111 static void initEventq(void) { /* eventq is never free()-ed because it exists during server life. */ @@ -100,7 +101,9 @@ static void initEventq(void) #endif } } +#endif /* XORG < 111 */ +#if XORG < 111 static void enqueueEvents(DeviceIntPtr dev, int n) { int i; @@ -122,6 +125,7 @@ static void enqueueEvents(DeviceIntPtr dev, int n) ); } } +#endif /* XORG < 111 */ InputDevice::InputDevice(rfb::VNCServerST *_server) : server(_server), oldButtonMask(0) @@ -141,12 +145,17 @@ InputDevice::InputDevice(rfb::VNCServerST *_server) keyboardProc, TRUE); RegisterKeyboardDevice(keyboardDev); #endif +#if XORG < 111 initEventq(); +#endif } void InputDevice::PointerButtonAction(int buttonMask) { - int i, n; + int i; +#if XORG < 111 + int n; +#endif #if XORG >= 110 ValuatorMask mask; #endif @@ -160,13 +169,17 @@ void InputDevice::PointerButtonAction(int buttonMask) #if XORG < 110 n = GetPointerEvents(eventq, pointerDev, action, i + 1, POINTER_RELATIVE, 0, 0, NULL); -#else + enqueueEvents(pointerDev, n); +#elif XORG < 111 valuator_mask_set_range(&mask, 0, 0, NULL); n = GetPointerEvents(eventq, pointerDev, action, i + 1, POINTER_RELATIVE, &mask); -#endif enqueueEvents(pointerDev, n); - +#else + valuator_mask_set_range(&mask, 0, 0, NULL); + QueuePointerEvents(pointerDev, action, i + 1, + POINTER_RELATIVE, &mask); +#endif } } @@ -175,7 +188,10 @@ void InputDevice::PointerButtonAction(int buttonMask) void InputDevice::PointerMove(const rfb::Point &pos) { - int n, valuators[2]; + int valuators[2]; +#if XORG < 111 + int n; +#endif #if XORG >= 110 ValuatorMask mask; #endif @@ -190,12 +206,16 @@ void InputDevice::PointerMove(const rfb::Point &pos) #if XORG < 110 n = GetPointerEvents(eventq, pointerDev, MotionNotify, 0, POINTER_ABSOLUTE, 0, 2, valuators); -#else + enqueueEvents(pointerDev, n); +#elif XORG < 111 valuator_mask_set_range(&mask, 0, 2, valuators); n = GetPointerEvents(eventq, pointerDev, MotionNotify, 0, POINTER_ABSOLUTE, &mask); -#endif enqueueEvents(pointerDev, n); +#else + valuator_mask_set_range(&mask, 0, 2, valuators); + QueuePointerEvents(pointerDev, MotionNotify, 0, POINTER_ABSOLUTE, &mask); +#endif cursorPos = pos; } @@ -298,14 +318,20 @@ void InputDevice::initInputDevice(void) static inline void pressKey(DeviceIntPtr dev, int kc, bool down, const char *msg) { int action; +#if XORG < 111 unsigned int n; +#endif if (msg != NULL) vlog.debug("%s %d %s", msg, kc, down ? "down" : "up"); action = down ? KeyPress : KeyRelease; - n = GetKeyboardEvents(eventq, dev, action, kc); +#if XORG < 111 + n = GetKeyboardEvents(eventq, dev, action, kc, NULL); enqueueEvents(dev, n); +#else + QueueKeyboardEvents(dev, action, kc, NULL); +#endif } #define IS_PRESSED(keyc, keycode) \ @@ -340,8 +366,11 @@ public: int state, maxKeysPerMod, keycode; #if XORG >= 17 KeyCode *modmap = NULL; - +#if XORG >= 111 + state = XkbStateFieldFromRec(&dev->master->key->xkbInfo->state); +#else /* XORG >= 111 */ state = XkbStateFieldFromRec(&dev->u.master->key->xkbInfo->state); +#endif /* XORG >= 111 */ #else KeyClassPtr keyc = dev->key; state = keyc->state; @@ -379,7 +408,11 @@ public: #if XORG >= 17 KeyCode *modmap = NULL; +#if XORG >= 111 + keyc = dev->master->key; +#else /* XORG >= 111 */ keyc = dev->u.master->key; +#endif /* XORG >= 111 */ state = XkbStateFieldFromRec(&keyc->xkbInfo->state); #else keyc = dev->key; @@ -595,7 +628,11 @@ void InputDevice::keyEvent(rdr::U32 keysym, bool down) } #if XORG >= 17 +#if XORG >= 111 + keyc = keyboardDev->master->key; +#else /* XORG >= 111 */ keyc = keyboardDev->u.master->key; +#endif /* XORG >= 111 */ keymap = XkbGetCoreMap(keyboardDev); if (!keymap) { @@ -752,7 +789,11 @@ ModeSwitchFound: XkbApplyMappingChange(keyboardDev, keymap, minKeyCode, maxKeyCode - minKeyCode + 1, NULL, serverClient); +#if XORG >= 111 + XkbCopyDeviceKeymap(keyboardDev->master, keyboardDev); +#else XkbCopyDeviceKeymap(keyboardDev->u.master, keyboardDev); +#endif #endif /* XORG < 17 */ break; } diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h index 9493e5be..3b6a689f 100644 --- a/unix/xserver/hw/vnc/xorg-version.h +++ b/unix/xserver/hw/vnc/xorg-version.h @@ -36,6 +36,8 @@ #define XORG 19 #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (10 * 100000) + (99 * 1000)) #define XORG 110 +#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (11 * 100000) + (99 * 1000)) +#define XORG 111 #else #error "X.Org newer than 1.10 is not supported" #endif diff --git a/unix/xserver/hw/vnc/xvnc.cc b/unix/xserver/hw/vnc/xvnc.cc index 4a69d752..fcf7deb5 100644 --- a/unix/xserver/hw/vnc/xvnc.cc +++ b/unix/xserver/hw/vnc/xvnc.cc @@ -229,7 +229,11 @@ Bool DPMSSupported() } #endif +#if XORG < 111 void ddxGiveUp() +#else +void ddxGiveUp(enum ExitCode error) +#endif { int i; @@ -239,9 +243,17 @@ void ddxGiveUp() } void +#if XORG < 111 AbortDDX() +#else +AbortDDX(enum ExitCode error) +#endif { +#if XORG < 111 ddxGiveUp(); +#else + ddxGiveUp(error); +#endif } #ifdef __DARWIN__ @@ -686,8 +698,13 @@ vfbUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { +#if XORG < 111 curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, RT_COLORMAP); +#else + dixLookupResourceByType((pointer *) &curpmap, pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, DixUnknownAccess); +#endif (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/unix/xserver111.patch b/unix/xserver111.patch new file mode 100644 index 00000000..03e0d6d9 --- /dev/null +++ b/unix/xserver111.patch @@ -0,0 +1,91 @@ +diff -up xserver/configure.ac.vnc xserver/configure.ac +--- xserver/configure.ac.vnc 2012-08-28 14:08:11.523694314 +0200 ++++ xserver/configure.ac 2012-08-28 14:08:59.122696574 +0200 +@@ -30,7 +30,6 @@ AC_INIT([xorg-server], 1.11.4, [https:// + RELEASE_DATE="2012-01-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 +@@ -1476,6 +1476,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 + +@@ -1514,6 +1518,8 @@ xorg_bus_linuxpci=no + xorg_bus_bsdpci=no + xorg_bus_sparc=no + ++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' +@@ -1750,7 +1756,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]) +@@ -2217,6 +2222,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 14:08:12.554694327 +0200 ++++ xserver/hw/Makefile.am 2012-08-28 14:08:59.123696574 +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 14:08:13.063694337 +0200 ++++ xserver/mi/miinitext.c 2012-08-28 14:08:59.123696574 +0200 +@@ -263,6 +263,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. +@@ -433,6 +436,9 @@ InitExtensions(int argc, char *argv[]) + #ifdef XF86BIGFONT + if (!noXFree86BigfontExtension) XFree86BigfontExtensionInit(); + #endif ++#ifdef TIGERVNC ++ vncExtensionInit(); ++#endif + #if !defined(NO_HW_ONLY_EXTS) + #if defined(XF86VIDMODE) + if (!noXFree86VidModeExtension) XFree86VidModeExtensionInit(); -- 2.39.5