aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Muth <dominik.muth@gmx.de>2016-04-11 22:52:26 +0200
committerDominik Muth <dominik.muth@gmx.de>2016-04-11 22:52:26 +0200
commit292c4f5fb5ea11bdbc9ffd4314f6ee68becc74ce (patch)
treec3bd1769a2d1df9650ad6bebcaebe7b97ea4298a
parentba480dd044abd570f3f9602ce3d57ef9573db4ad (diff)
downloadtigervnc-292c4f5fb5ea11bdbc9ffd4314f6ee68becc74ce.tar.gz
tigervnc-292c4f5fb5ea11bdbc9ffd4314f6ee68becc74ce.zip
xserver: Add support for xorg version 1.18.
xserver118.patch is identical to xserver117.patch by content.
-rw-r--r--unix/xserver/hw/vnc/Input.c4
-rw-r--r--unix/xserver/hw/vnc/xorg-version.h4
-rw-r--r--unix/xserver118.patch137
3 files changed, 143 insertions, 2 deletions
diff --git a/unix/xserver/hw/vnc/Input.c b/unix/xserver/hw/vnc/Input.c
index 4c90a952..55befa75 100644
--- a/unix/xserver/hw/vnc/Input.c
+++ b/unix/xserver/hw/vnc/Input.c
@@ -300,8 +300,10 @@ static inline void pressKey(DeviceIntPtr dev, int kc, Bool down, const char *msg
#if XORG < 111
n = GetKeyboardEvents(eventq, dev, action, kc);
enqueueEvents(dev, n);
-#else
+#elif XORG < 118
QueueKeyboardEvents(dev, action, kc, NULL);
+#else
+ QueueKeyboardEvents(dev, action, kc);
#endif
}
diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h
index 8cc1c860..60610cbd 100644
--- a/unix/xserver/hw/vnc/xorg-version.h
+++ b/unix/xserver/hw/vnc/xorg-version.h
@@ -48,8 +48,10 @@
#define XORG 116
#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (17 * 100000) + (99 * 1000))
#define XORG 117
+#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (18 * 100000) + (99 * 1000))
+#define XORG 118
#else
-#error "X.Org newer than 1.17 is not supported"
+#error "X.Org newer than 1.18 is not supported"
#endif
#endif
diff --git a/unix/xserver118.patch b/unix/xserver118.patch
new file mode 100644
index 00000000..9119b477
--- /dev/null
+++ b/unix/xserver118.patch
@@ -0,0 +1,137 @@
+diff -ur xorg-server.orig/configure.ac xorg-server/configure.ac
+--- xorg-server.orig/configure.ac 2016-04-09 21:28:27.007999965 +0200
++++ xorg-server/configure.ac 2016-04-09 21:28:57.587999860 +0200
+@@ -74,6 +74,7 @@
+ AC_CONFIG_HEADERS(include/version-config.h)
+
+ AM_PROG_AS
++AC_PROG_CXX
+ AC_PROG_LN_S
+ LT_PREREQ([2.2])
+ LT_INIT([disable-static win32-dll])
+@@ -1828,6 +1829,10 @@
+ AC_SUBST([XVFB_SYS_LIBS])
+ fi
+
++dnl Xvnc DDX
++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"])
++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_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
+
+@@ -1863,6 +1868,8 @@
+ 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'
+@@ -2081,7 +2088,6 @@
+ AC_DEFINE(XORG_SERVER, 1, [Building Xorg server])
+ AC_DEFINE(XORGSERVER, 1, [Building Xorg server])
+ AC_DEFINE(XFree86Server, 1, [Building 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])
+@@ -2653,6 +2659,7 @@
+ 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 -ur xorg-server.orig/hw/Makefile.am xorg-server/hw/Makefile.am
+--- xorg-server.orig/hw/Makefile.am 2016-04-09 21:28:27.059999965 +0200
++++ xorg-server/hw/Makefile.am 2016-04-09 21:28:57.587999860 +0200
+@@ -43,7 +43,8 @@
+ $(KDRIVE_SUBDIRS) \
+ $(XQUARTZ_SUBDIRS) \
+ $(XWAYLAND_SUBDIRS) \
+- $(XMIR_SUBDIRS)
++ $(XMIR_SUBDIRS) \
++ vnc
+
+ DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland xmir
+
+diff -ur xorg-server.orig/mi/miinitext.c xorg-server/mi/miinitext.c
+--- xorg-server.orig/mi/miinitext.c 2016-04-09 21:28:27.015999965 +0200
++++ xorg-server/mi/miinitext.c 2016-04-09 21:28:57.587999860 +0200
+@@ -114,6 +114,10 @@
+ #include "micmap.h"
+ #include "globals.h"
+
++#ifdef TIGERVNC
++extern void vncExtensionInit(INITARGS);
++#endif
++
+ /* The following is only a small first step towards run-time
+ * configurable extensions.
+ */
+@@ -238,6 +242,9 @@
+
+ /* List of built-in (statically linked) extensions */
+ static const ExtensionModule staticExtensions[] = {
++#ifdef TIGERVNC
++ {vncExtensionInit, "VNC-EXTENSION", NULL},
++#endif
+ {GEExtensionInit, "Generic Event Extension", &noGEExtension},
+ {ShapeExtensionInit, "SHAPE", NULL},
+ #ifdef MITSHM
+diff -ur xorg-server.orig/os/WaitFor.c xorg-server/os/WaitFor.c
+--- xorg-server.orig/os/WaitFor.c 2016-04-09 21:28:27.071999965 +0200
++++ xorg-server/os/WaitFor.c 2016-04-09 21:28:57.587999860 +0200
+@@ -125,6 +125,9 @@
+ static void CheckAllTimers(void);
+ static volatile OsTimerPtr timers = NULL;
+
++extern void vncWriteBlockHandler(fd_set *fds);
++extern void vncWriteWakeupHandler(int nfds, fd_set *fds);
++
+ /*****************
+ * WaitForSomething:
+ * Make the server suspend until there is
+@@ -150,6 +153,7 @@
+ INT32 timeout = 0;
+ fd_set clientsReadable;
+ fd_set clientsWritable;
++ fd_set socketsWritable;
+ int curclient;
+ int selecterr;
+ static int nready;
+@@ -213,6 +217,9 @@
+ XFD_COPYSET(&AllSockets, &LastSelectMask);
+ }
+
++ FD_ZERO(&socketsWritable);
++ vncWriteBlockHandler(&socketsWritable);
++
+ BlockHandler((void *) &wt, (void *) &LastSelectMask);
+ if (NewOutputPending)
+ FlushAllOutput();
+@@ -224,10 +231,20 @@
+ i = Select(MaxClients, &LastSelectMask, &clientsWritable, NULL, wt);
+ }
+ else {
+- i = Select(MaxClients, &LastSelectMask, NULL, NULL, wt);
++ if (AnyClientsWriteBlocked)
++ XFD_ORSET(&socketsWritable, &ClientsWriteBlocked, &socketsWritable);
++
++ if (XFD_ANYSET(&socketsWritable)) {
++ i = Select(MaxClients, &LastSelectMask, &socketsWritable, NULL, wt);
++ if (AnyClientsWriteBlocked)
++ XFD_ANDSET(&clientsWritable, &socketsWritable, &ClientsWriteBlocked);
++ } else {
++ i = Select(MaxClients, &LastSelectMask, NULL, NULL, wt);
++ }
+ }
+ selecterr = GetErrno();
+ WakeupHandler(i, (void *) &LastSelectMask);
++ vncWriteWakeupHandler(i, &socketsWritable);
+ if (i <= 0) { /* An error or timeout occurred */
+ if (dispatchException)
+ return 0;