summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Tkac <atkac@redhat.com>2012-08-28 12:41:44 +0000
committerAdam Tkac <atkac@redhat.com>2012-08-28 12:41:44 +0000
commitff8112326b8a074913dba6c2b313ad1729328bdd (patch)
treeac5aa4b703ae4b5fcb45526cb589519fbbfcad0a
parent3d75911a551fab492ceb71506f85ffbae993b3b7 (diff)
downloadtigervnc-ff8112326b8a074913dba6c2b313ad1729328bdd.tar.gz
tigervnc-ff8112326b8a074913dba6c2b313ad1729328bdd.zip
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
-rw-r--r--unix/xserver/hw/vnc/Input.cc61
-rw-r--r--unix/xserver/hw/vnc/xorg-version.h2
-rw-r--r--unix/xserver/hw/vnc/xvnc.cc17
-rw-r--r--unix/xserver111.patch91
4 files changed, 161 insertions, 10 deletions
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();