From owner-freebsd-ports-bugs@FreeBSD.ORG Sun Jul 28 17:50:00 2013 Return-Path: Delivered-To: freebsd-ports-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id E21018D5 for ; Sun, 28 Jul 2013 17:50:00 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BEC3D237F for ; Sun, 28 Jul 2013 17:50:00 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id r6SHo0Kj035767 for ; Sun, 28 Jul 2013 17:50:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id r6SHo0oN035766; Sun, 28 Jul 2013 17:50:00 GMT (envelope-from gnats) Resent-Date: Sun, 28 Jul 2013 17:50:00 GMT Resent-Message-Id: <201307281750.r6SHo0oN035766@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Koichiro IWAO Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id C8C677E3 for ; Sun, 28 Jul 2013 17:41:26 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from oldred.freebsd.org (oldred.freebsd.org [8.8.178.121]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B37A2234D for ; Sun, 28 Jul 2013 17:41:26 +0000 (UTC) Received: from oldred.freebsd.org ([127.0.1.6]) by oldred.freebsd.org (8.14.5/8.14.7) with ESMTP id r6SHfQoj060164 for ; Sun, 28 Jul 2013 17:41:26 GMT (envelope-from nobody@oldred.freebsd.org) Received: (from nobody@localhost) by oldred.freebsd.org (8.14.5/8.14.5/Submit) id r6SHfQCS060163; Sun, 28 Jul 2013 17:41:26 GMT (envelope-from nobody) Message-Id: <201307281741.r6SHfQCS060163@oldred.freebsd.org> Date: Sun, 28 Jul 2013 17:41:26 GMT From: Koichiro IWAO To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: ports/180911: [maintainer update] net/tigervnc: Update to 1.3.0 X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jul 2013 17:50:00 -0000 >Number: 180911 >Category: ports >Synopsis: [maintainer update] net/tigervnc: Update to 1.3.0 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Sun Jul 28 17:50:00 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Koichiro IWAO >Release: 9.2-PRERELEASE >Organization: >Environment: FreeBSD ports-dev.vmeta.jp 9.2-PRERELEASE FreeBSD 9.2-PRERELEASE #4: Tue Jul 16 01:00:28 JST 2013 root@icepick.vmeta.jp:/usr/obj/usr/src/sys/GENERIC amd64 >Description: - Update to 1.3.0 - release announce is here: http://sourceforge.net/mailarchive/message.php?msg_id=31144665 - Add BUILD_DEPENDS on bash - Adjust CONFIGURE_ARGS for two different versions of xorg - Normalize COMMENT - Remove LICENSE_FILE for standard licenses - Unmark MAKE_JOBS_UNSAFE ---------- It successfully built without MAKE_JOBS_UNSAFE on redports: https://redports.org/buildarchive/20130728124300-41961/ Dear committer, please take care of removal of patches in files directory. >How-To-Repeat: >Fix: Patch attached with submission follows: diff -ruN /usr/ports/net/tigervnc/Makefile net/tigervnc/Makefile --- /usr/ports/net/tigervnc/Makefile 2013-06-25 10:47:06.012435756 +0900 +++ net/tigervnc/Makefile 2013-07-29 02:38:05.948193697 +0900 @@ -2,22 +2,21 @@ # $FreeBSD$ PORTNAME= tigervnc -PORTVERSION= 1.2.0 -PORTREVISION= 3 +PORTVERSION= 1.3.0 CATEGORIES= net x11-servers MASTER_SITES= SF:tigervnc MASTER_SITE_SUBDIR= ${PORTNAME}/${PORTNAME}/${PORTVERSION}/:tigervnc -DISTFILES= ${PORTNAME}-${PORTVERSION}.tar.gz:tigervnc +DISTFILES= ${PORTNAME}-${PORTVERSION}.tar.bz2:tigervnc MAINTAINER= meta+ports@vmeta.jp -COMMENT= TigerVNC is an advanced VNC implementation +COMMENT= High-performance, platform-neutral implementation of VNC LICENSE= GPLv2 -LICENSE_FILE= ${WRKSRC}/LICENCE.TXT PATCH_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/x11-servers/xorg-server:patch BUILD_DEPENDS= ${LOCALBASE}/include/GL/internal/dri_interface.h:${PORTSDIR}/graphics/dri \ - ${LOCALBASE}/libdata/pkgconfig/fontutil.pc:${PORTSDIR}/x11-fonts/font-util + ${LOCALBASE}/libdata/pkgconfig/fontutil.pc:${PORTSDIR}/x11-fonts/font-util \ + bash:${PORTSDIR}/shells/bash # almost equivalent to x11-servers/xorg-server's RUN_DEPENDS= ${LOCALBASE}/share/X11/xkb/rules/base:${PORTSDIR}/x11/xkeyboard-config \ xkbcomp:${PORTSDIR}/x11/xkbcomp @@ -26,8 +25,6 @@ tightvnc-[0-9]* \ vnc-[0-9]* -MAKE_JOBS_UNSAFE= yes - USES= cmake pkgconfig USE_GMAKE= yes USE_GL= gl @@ -114,20 +111,21 @@ --disable-config-dbus --disable-config-hal \ --disable-dri2 --enable-install-libxf86config --enable-glx \ --with-default-font-path="catalogue:${PREFIX}/share/fonts,built-ins" \ - --with-fontdir=${PREFIX}/share/fonts \ --with-xkb-path=${PREFIX}/share/X11/xkb \ --with-xkb-output=/var/lib/xkb \ --with-xkb-bin-directory=${PREFIX}/bin \ --with-serverconfig-path=${PREFIX}/lib/X11 \ --disable-selective-werror +.ifdef WITH_NEW_XORG +CONFIGURE_ARGS+= --with-fontrootdir=${PREFIX}/share/fonts +.else +CONFIGURE_ARGS+= --with-fontdir=${PREFIX}/share/fonts +.endif .include .ifdef WITH_NEW_XORG TIGERVNC_XORG_PATCH_VER= 112 -EXTRA_PATCHES+= ${FILESDIR}/extra-patch-unix_hw_vnc.patch \ - ${FILESDIR}/extra-patch-common_rdr.patch \ - ${FILESDIR}/extra-patch-common_rfb.patch .else TIGERVNC_XORG_PATCH_VER= 17 .endif @@ -146,7 +144,6 @@ @${CP} -R `${XORG_WRKDIR}`/ ${WRKSRC}/unix/xserver/ post-patch: - @${CP} ${FILESDIR}/xserver*.patch ${WRKSRC}/unix/ @cd ${WRKSRC}/unix/xserver/ && ${PATCH} -p1 < ${WRKSRC}/unix/xserver${TIGERVNC_XORG_PATCH_VER}.patch post-configure: @@ -154,7 +151,7 @@ @cd ${WRKSRC}/unix/xserver/ && ${SETENV} ${CONFIGURE_ENV} ./configure ${CONFIGURE_ARGS} post-build: - @cd ${WRKSRC}/unix/xserver/ && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_ARGS} + @cd ${WRKSRC}/unix/xserver/ && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_ARGS} SHELL=${LOCALBASE}/bin/bash post-install: @cd ${WRKSRC}/unix/xserver/hw/vnc/ && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_ARGS} install diff -ruN /usr/ports/net/tigervnc/distinfo net/tigervnc/distinfo --- /usr/ports/net/tigervnc/distinfo 2013-03-25 00:34:16.196629923 +0900 +++ net/tigervnc/distinfo 2013-07-22 13:45:14.856241157 +0900 @@ -1,6 +1,2 @@ -SHA256 (tigervnc-1.2.0.tar.gz) = 6e0910f1ff1681bc8b52e7ea805e586b88b352c88f66e4c2cc31aa39c4a32f53 -SIZE (tigervnc-1.2.0.tar.gz) = 2487050 -SHA256 (xorg-server-1.10.6.tar.bz2) = c4da5a97b6986688efe74bc9bff6a38795977019ac032dd6d787abad32c50682 -SIZE (xorg-server-1.10.6.tar.bz2) = 5406712 -SHA256 (xorg-server-1.7.7.tar.bz2) = 54c4d32bfeb8852adbea3ddae6981f3bc2eadb330124d9b35226c617c01926ff -SIZE (xorg-server-1.7.7.tar.bz2) = 4939257 +SHA256 (tigervnc-1.3.0.tar.bz2) = 61e5a78118c3a4adbc3b3026615a1068aed43839c2ad62815832bbc780f38c5a +SIZE (tigervnc-1.3.0.tar.bz2) = 1069481 diff -ruN /usr/ports/net/tigervnc/files/extra-patch-common_rdr.patch net/tigervnc/files/extra-patch-common_rdr.patch --- /usr/ports/net/tigervnc/files/extra-patch-common_rdr.patch 2013-05-30 10:47:00.868595489 +0900 +++ net/tigervnc/files/extra-patch-common_rdr.patch 1970-01-01 09:00:00.000000000 +0900 @@ -1,214 +0,0 @@ - ---- common/rdr/TLSErrno.h 1970-01-01 09:00:00.000000000 +0900 -+++ common/rdr/TLSErrno.h 2013-05-27 19:09:50.115573000 +0900 -@@ -0,0 +1,46 @@ -+/* Copyright (C) 2012 Pierre Ossman for Cendio AB -+ * -+ * This is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This software is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this software; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, -+ * USA. -+ */ -+ -+#ifndef __RDR_TLSERRNO_H__ -+#define __RDR_TLSERRNO_H__ -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#ifdef HAVE_GNUTLS -+ -+#include -+ -+namespace rdr { -+ -+ static inline void gnutls_errno_helper(gnutls_session session, int _errno) -+ { -+#if defined(HAVE_GNUTLS_SET_ERRNO) -+ gnutls_transport_set_errno(session, _errno); -+#elif defined(HAVE_GNUTLS_SET_GLOBAL_ERRNO) -+ gnutls_transport_set_global_errno(_errno); -+#else -+ errno = _errno; -+#endif -+ } -+}; -+ -+#endif -+ -+#endif - ---- common/rdr/TLSInStream.cxx 2010-09-30 15:25:28.000000000 +0900 -+++ common/rdr/TLSInStream.cxx 2013-05-27 19:09:50.124573000 +0900 -@@ -25,25 +25,22 @@ - #include - #include - #include -+#include - #include - --#ifdef HAVE_OLD_GNUTLS --#define gnutls_transport_set_global_errno(A) do { errno = (A); } while(0) --#endif -- - #ifdef HAVE_GNUTLS - using namespace rdr; - - enum { DEFAULT_BUF_SIZE = 16384 }; - --ssize_t rdr::gnutls_InStream_pull(gnutls_transport_ptr str, void* data, -- size_t size) -+ssize_t TLSInStream::pull(gnutls_transport_ptr str, void* data, size_t size) - { -- InStream* in= (InStream*) str; -+ TLSInStream* self= (TLSInStream*) str; -+ InStream *in = self->in; - - try { - if (!in->check(1, 1, false)) { -- gnutls_transport_set_global_errno(EAGAIN); -+ gnutls_errno_helper(self->session, EAGAIN); - return -1; - } - -@@ -53,7 +50,7 @@ - in->readBytes(data, size); - - } catch (Exception& e) { -- gnutls_transport_set_global_errno(EINVAL); -+ gnutls_errno_helper(self->session, EINVAL); - return -1; - } - -@@ -63,11 +60,19 @@ - TLSInStream::TLSInStream(InStream* _in, gnutls_session _session) - : session(_session), in(_in), bufSize(DEFAULT_BUF_SIZE), offset(0) - { -+ gnutls_transport_ptr recv, send; -+ - ptr = end = start = new U8[bufSize]; -+ -+ gnutls_transport_set_pull_function(session, pull); -+ gnutls_transport_get_ptr2(session, &recv, &send); -+ gnutls_transport_set_ptr2(session, this, send); - } - - TLSInStream::~TLSInStream() - { -+ gnutls_transport_set_pull_function(session, NULL); -+ - delete[] start; - } - - ---- common/rdr/TLSInStream.h 2010-04-23 23:12:18.000000000 +0900 -+++ common/rdr/TLSInStream.h 2013-05-27 19:09:50.086573000 +0900 -@@ -41,6 +41,7 @@ - private: - int overrun(int itemSize, int nItems, bool wait); - int readTLS(U8* buf, int len, bool wait); -+ static ssize_t pull(gnutls_transport_ptr str, void* data, size_t size); - - gnutls_session session; - InStream* in; -@@ -48,9 +49,6 @@ - int offset; - U8* start; - }; -- -- ssize_t gnutls_InStream_pull(gnutls_transport_ptr,void*, size_t); -- - }; - - #endif - ---- common/rdr/TLSOutStream.cxx 2010-09-30 15:25:28.000000000 +0900 -+++ common/rdr/TLSOutStream.cxx 2013-05-27 19:09:50.094576000 +0900 -@@ -25,27 +25,25 @@ - #include - #include - #include -+#include - #include - --#ifdef HAVE_OLD_GNUTLS --#define gnutls_transport_set_global_errno(A) do { errno = (A); } while(0) --#endif -- - #ifdef HAVE_GNUTLS - using namespace rdr; - - enum { DEFAULT_BUF_SIZE = 16384 }; - --ssize_t rdr::gnutls_OutStream_push(gnutls_transport_ptr str, const void* data, -+ssize_t TLSOutStream::push(gnutls_transport_ptr str, const void* data, - size_t size) - { -- OutStream* out = (OutStream*) str; -+ TLSOutStream* self= (TLSOutStream*) str; -+ OutStream *out = self->out; - - try { - out->writeBytes(data, size); - out->flush(); - } catch (Exception& e) { -- gnutls_transport_set_global_errno(EINVAL); -+ gnutls_errno_helper(self->session, EINVAL); - return -1; - } - -@@ -55,8 +53,14 @@ - TLSOutStream::TLSOutStream(OutStream* _out, gnutls_session _session) - : session(_session), out(_out), bufSize(DEFAULT_BUF_SIZE), offset(0) - { -+ gnutls_transport_ptr recv, send; -+ - ptr = start = new U8[bufSize]; - end = start + bufSize; -+ -+ gnutls_transport_set_push_function(session, push); -+ gnutls_transport_get_ptr2(session, &recv, &send); -+ gnutls_transport_set_ptr2(session, recv, this); - } - - TLSOutStream::~TLSOutStream() -@@ -67,6 +71,8 @@ - } catch (Exception&) { - } - #endif -+ gnutls_transport_set_push_function(session, NULL); -+ - delete [] start; - } - - ---- common/rdr/TLSOutStream.h 2010-04-23 23:12:18.000000000 +0900 -+++ common/rdr/TLSOutStream.h 2013-05-27 19:09:50.101573000 +0900 -@@ -43,6 +43,7 @@ - - private: - int writeTLS(const U8* data, int length); -+ static ssize_t push(gnutls_transport_ptr str, const void* data, size_t size); - - gnutls_session session; - OutStream* out; -@@ -50,8 +51,6 @@ - U8* start; - int offset; - }; -- -- ssize_t gnutls_OutStream_push(gnutls_transport_ptr, const void*, size_t); - }; - - #endif diff -ruN /usr/ports/net/tigervnc/files/extra-patch-common_rfb.patch net/tigervnc/files/extra-patch-common_rfb.patch --- /usr/ports/net/tigervnc/files/extra-patch-common_rfb.patch 2013-05-30 10:47:00.868595489 +0900 +++ net/tigervnc/files/extra-patch-common_rfb.patch 1970-01-01 09:00:00.000000000 +0900 @@ -1,259 +0,0 @@ - ---- common/rfb/CConnection.cxx 2011-11-15 00:44:11.000000000 +0900 -+++ common/rfb/CConnection.cxx 2013-05-27 19:09:50.167574000 +0900 -@@ -100,7 +100,7 @@ - char msg[256]; - sprintf(msg,"Server gave unsupported RFB protocol version %d.%d", - cp.majorVersion, cp.minorVersion); -- vlog.error(msg); -+ vlog.error("%s", msg); - state_ = RFBSTATE_INVALID; - throw Exception(msg); - } else if (useProtocol3_3 || cp.beforeVersion(3,7)) { - ---- common/rfb/CMsgReader.cxx 2010-02-10 16:43:02.000000000 +0900 -+++ common/rfb/CMsgReader.cxx 2013-05-27 19:09:50.274574000 +0900 -@@ -100,7 +100,7 @@ - readCopyRect(r); - } else { - -- if (encoding > encodingMax) { -+ if (!Decoder::supported(encoding)) { - fprintf(stderr, "Unknown rect encoding %d\n", encoding); - throw Exception("Unknown rect encoding"); - } - ---- common/rfb/CSecurityTLS.cxx 2011-05-10 17:54:57.000000000 +0900 -+++ common/rfb/CSecurityTLS.cxx 2013-05-27 19:09:50.329576000 +0900 -@@ -72,7 +72,7 @@ - - static void debug_log(int level, const char* str) - { -- vlog_raw.debug(str); -+ vlog_raw.debug("[%d]: %s", level, str); - } - - void CSecurityTLS::initGlobal() -@@ -188,20 +188,20 @@ - throw AuthFailureException("gnutls_set_default_priority failed"); - - setParam(); -- -- gnutls_transport_set_pull_function(session, rdr::gnutls_InStream_pull); -- gnutls_transport_set_push_function(session, rdr::gnutls_OutStream_push); -- gnutls_transport_set_ptr2(session, -- (gnutls_transport_ptr) is, -- (gnutls_transport_ptr) os); - } - -+ rdr::TLSInStream *tlsis = new rdr::TLSInStream(is, session); -+ rdr::TLSOutStream *tlsos = new rdr::TLSOutStream(os, session); -+ - int err; - err = gnutls_handshake(session); -- if (err != GNUTLS_E_SUCCESS && !gnutls_error_is_fatal(err)) -- return false; -- - if (err != GNUTLS_E_SUCCESS) { -+ delete tlsis; -+ delete tlsos; -+ -+ if (!gnutls_error_is_fatal(err)) -+ return false; -+ - vlog.error("TLS Handshake failed: %s\n", gnutls_strerror (err)); - shutdown(false); - throw AuthFailureException("TLS Handshake failed"); -@@ -209,8 +209,7 @@ - - checkSession(); - -- cc->setStreams(fis = new rdr::TLSInStream(is, session), -- fos = new rdr::TLSOutStream(os, session)); -+ cc->setStreams(fis = tlsis, fos = tlsos); - - return true; - } - ---- common/rfb/Decoder.cxx 2010-02-10 16:43:02.000000000 +0900 -+++ common/rfb/Decoder.cxx 2013-05-27 19:09:50.186575000 +0900 -@@ -34,12 +34,12 @@ - - bool Decoder::supported(int encoding) - { -- return encoding <= encodingMax && createFns[encoding]; -+ return encoding >= 0 && encoding <= encodingMax && createFns[encoding]; - } - - Decoder* Decoder::createDecoder(int encoding, CMsgReader* reader) - { -- if (encoding <= encodingMax && createFns[encoding]) -+ if (supported(encoding)) - return (*createFns[encoding])(reader); - return 0; - } - ---- common/rfb/LogWriter.h 2011-02-18 19:54:11.000000000 +0900 -+++ common/rfb/LogWriter.h 2013-05-27 19:09:50.170575000 +0900 -@@ -25,12 +25,18 @@ - #include - #include - -+#ifdef __GNUC__ -+# define __printf_attr(a, b) __attribute__((__format__ (__printf__, a, b))) -+#else -+# define __printf_attr(a, b) -+#endif // __GNUC__ -+ - // Each log writer instance has a unique textual name, - // and is attached to a particular Log instance and - // is assigned a particular log level. - - #define DEF_LOGFUNCTION(name, level) \ -- inline void name(const char* fmt, ...) { \ -+ inline void name(const char* fmt, ...) __printf_attr(2, 3) { \ - if (m_log && (level <= m_level)) { \ - va_list ap; va_start(ap, fmt); \ - m_log->write(level, m_name, fmt, ap);\ -@@ -53,7 +59,7 @@ - void setLevel(int level); - int getLevel(void) { return m_level; } - -- inline void write(int level, const char* format, ...) { -+ inline void write(int level, const char* format, ...) __printf_attr(3, 4) { - if (m_log && (level <= m_level)) { - va_list ap; - va_start(ap, format); - ---- common/rfb/SConnection.cxx 2011-11-15 01:22:23.000000000 +0900 -+++ common/rfb/SConnection.cxx 2013-05-27 19:09:50.208576000 +0900 -@@ -239,7 +239,7 @@ - - void SConnection::throwConnFailedException(const char* msg) - { -- vlog.info(msg); -+ vlog.info("%s", msg); - if (state_ == RFBSTATE_PROTOCOL_VERSION) { - if (cp.majorVersion == 3 && cp.minorVersion == 3) { - os->writeU32(0); - ---- common/rfb/SSecurityTLS.cxx 2011-02-18 19:54:11.000000000 +0900 -+++ common/rfb/SSecurityTLS.cxx 2013-05-27 19:09:50.354575000 +0900 -@@ -49,7 +49,7 @@ - - static void debug_log(int level, const char* str) - { -- vlog.debug(str); -+ vlog.debug("[%d]: %s", level, str); - } - - void SSecurityTLS::initGlobal() -@@ -148,17 +148,19 @@ - throw; - } - -- gnutls_transport_set_pull_function(session,rdr::gnutls_InStream_pull); -- gnutls_transport_set_push_function(session,rdr::gnutls_OutStream_push); -- gnutls_transport_set_ptr2(session, -- (gnutls_transport_ptr)is, -- (gnutls_transport_ptr)os); - os->writeU8(1); - os->flush(); - } - -+ rdr::TLSInStream *tlsis = new rdr::TLSInStream(is, session); -+ rdr::TLSOutStream *tlsos = new rdr::TLSOutStream(os, session); -+ - int err; -- if ((err = gnutls_handshake(session)) != GNUTLS_E_SUCCESS) { -+ err = gnutls_handshake(session); -+ if (err != GNUTLS_E_SUCCESS) { -+ delete tlsis; -+ delete tlsos; -+ - if (!gnutls_error_is_fatal(err)) { - vlog.debug("Deferring completion of TLS handshake: %s", gnutls_strerror(err)); - return false; -@@ -170,8 +172,7 @@ - - vlog.debug("Handshake completed"); - -- sc->setStreams(fis=new rdr::TLSInStream(is,session), -- fos=new rdr::TLSOutStream(os,session)); -+ sc->setStreams(fis = tlsis, fos = tlsos); - - return true; - } - ---- common/rfb/ScreenSet.h 2010-12-01 19:11:20.000000000 +0900 -+++ common/rfb/ScreenSet.h 2013-05-27 19:09:50.103575000 +0900 -@@ -23,6 +23,7 @@ - - #include - -+#include - #include - #include - #include - ---- common/rfb/VNCSConnectionST.cxx 2011-12-21 22:17:54.000000000 +0900 -+++ common/rfb/VNCSConnectionST.cxx 2013-05-27 19:09:50.296574000 +0900 -@@ -66,7 +66,8 @@ - VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s, - bool reverse) - : SConnection(reverse), sock(s), inProcessMessages(false), -- syncFence(false), fenceFlags(0), fenceDataLen(0), fenceData(NULL), -+ pendingSyncFence(false), syncFence(false), fenceFlags(0), -+ fenceDataLen(0), fenceData(NULL), - baseRTT(-1), minRTT(-1), seenCongestion(false), pingCounter(0), - ackedOffset(0), sentOffset(0), congWindow(0), congestionTimer(this), - server(server_), -@@ -156,7 +157,13 @@ - network::TcpSocket::cork(sock->getFd(), true); - - while (getInStream()->checkNoWait(1)) { -+ if (pendingSyncFence) { -+ syncFence = true; -+ pendingSyncFence = false; -+ } -+ - processMsg(); -+ - if (syncFence) { - writer()->writeFence(fenceFlags, fenceDataLen, fenceData); - syncFence = false; -@@ -627,10 +634,7 @@ - { - if (flags & fenceFlagRequest) { - if (flags & fenceFlagSyncNext) { -- if (syncFence) -- vlog.error("Fence trying to synchronise another fence"); -- -- syncFence = true; -+ pendingSyncFence = true; - - fenceFlags = flags & (fenceFlagBlockBefore | fenceFlagBlockAfter | fenceFlagSyncNext); - fenceDataLen = len; -@@ -1083,6 +1087,10 @@ - if (i->width() && i->height()) { - int nUpdateRects = writer()->getNumRects(*i); - if (nUpdateRects == 0 && cp.currentEncoding() == encodingTight) { -+ // With Tight encoding and LastRect support, the client does not -+ // care about the number of rectangles in the update - it will -+ // stop parsing when it encounters a LastRect "rectangle". -+ // In this case, pretend to send 65535 rectangles. - nRects = 0xFFFF; break; - } - else - ---- common/rfb/VNCSConnectionST.h 2011-11-21 00:36:11.000000000 +0900 -+++ common/rfb/VNCSConnectionST.h 2013-05-27 19:09:50.156574000 +0900 -@@ -183,7 +183,7 @@ - - bool inProcessMessages; - -- bool syncFence; -+ bool pendingSyncFence, syncFence; - rdr::U32 fenceFlags; - unsigned fenceDataLen; - char *fenceData; diff -ruN /usr/ports/net/tigervnc/files/extra-patch-unix_hw_vnc.patch net/tigervnc/files/extra-patch-unix_hw_vnc.patch --- /usr/ports/net/tigervnc/files/extra-patch-unix_hw_vnc.patch 2013-05-30 10:47:00.868595489 +0900 +++ net/tigervnc/files/extra-patch-unix_hw_vnc.patch 1970-01-01 09:00:00.000000000 +0900 @@ -1,1806 +0,0 @@ - ---- unix/xserver/hw/vnc/Input.cc 2011-11-08 21:44:10.000000000 +0900 -+++ unix/xserver/hw/vnc/Input.cc 2013-05-27 18:54:41.184574000 +0900 -@@ -82,10 +82,11 @@ - /* 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 @@ - #endif - } - } -+#endif /* XORG < 111 */ - -+#if XORG < 111 - static void enqueueEvents(DeviceIntPtr dev, int n) - { - int i; -@@ -122,6 +125,7 @@ - ); - } - } -+#endif /* XORG < 111 */ - - InputDevice::InputDevice(rfb::VNCServerST *_server) - : server(_server), oldButtonMask(0) -@@ -141,12 +145,17 @@ - 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 @@ - #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::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 @@ - #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 @@ - 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 @@ - 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 @@ - #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 @@ - } - - #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 @@ - 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; - } - ---- unix/xserver/hw/vnc/Makefile.am 2011-10-31 17:14:40.000000000 +0900 -+++ unix/xserver/hw/vnc/Makefile.am 2013-05-27 18:54:41.196574000 +0900 -@@ -63,7 +63,7 @@ - BUILT_SOURCES = $(nodist_Xvnc_SOURCES) - - fb.h: $(top_srcdir)/fb/fb.h -- cat $(top_srcdir)/fb/fb.h | sed -e 's,and,c_and,' -e 's,xor,c_xor,' > $(srcdir)/fb.h -+ cat $(top_srcdir)/fb/fb.h | sed -e 's,and,c_and,g' -e 's,xor,c_xor,g' > $(srcdir)/fb.h - - pixman.h: - for i in ${XSERVERLIBS_CFLAGS}; do \ -@@ -78,4 +78,4 @@ - fi - - fbrop.h: $(top_srcdir)/fb/fbrop.h -- cat $(top_srcdir)/fb/fbrop.h | sed -e 's,and,c_and,' -e 's,xor,c_xor,' > $(srcdir)/fbrop.h -+ cat $(top_srcdir)/fb/fbrop.h | sed -e 's,and,c_and,g' -e 's,xor,c_xor,g' > $(srcdir)/fbrop.h - ---- unix/xserver/hw/vnc/XserverDesktop.cc 2012-01-24 00:54:11.000000000 +0900 -+++ unix/xserver/hw/vnc/XserverDesktop.cc 2013-05-27 18:54:41.203576000 +0900 -@@ -200,6 +200,8 @@ - - void XserverDesktop::setFramebuffer(int w, int h, void* fbptr, int stride) - { -+ ScreenSet layout; -+ - width_ = w; - height_ = h; - -@@ -217,9 +219,98 @@ - data = (rdr::U8*)fbptr; - stride_ = stride; - -- server->setPixelBuffer(this); -+ layout = computeScreenLayout(); -+ -+ server->setPixelBuffer(this, layout); -+} -+ -+void XserverDesktop::refreshScreenLayout() -+{ -+ server->setScreenLayout(computeScreenLayout()); -+} -+ -+ScreenSet XserverDesktop::computeScreenLayout() -+{ -+ ScreenSet layout; -+ -+#ifdef RANDR -+ rrScrPrivPtr rp = rrGetScrPriv(pScreen); -+ OutputIdMap newIdMap; -+ -+ for (int i = 0;i < rp->numOutputs;i++) { -+ RROutputPtr output; -+ RRCrtcPtr crtc; -+ -+ output = rp->outputs[i]; -+ crtc = output->crtc; -+ -+ /* Disabled? */ -+ if ((crtc == NULL) || (crtc->mode == NULL)) -+ continue; -+ -+ /* Known output? */ -+ if (outputIdMap.count(output) == 1) -+ newIdMap[output] = outputIdMap[output]; -+ else { -+ rdr::U32 id; -+ OutputIdMap::const_iterator iter; -+ -+ while (true) { -+ id = rand(); -+ for (iter = outputIdMap.begin();iter != outputIdMap.end();++iter) { -+ if (iter->second == id) -+ break; -+ } -+ if (iter == outputIdMap.end()) -+ break; -+ } -+ -+ newIdMap[output] = id; -+ } -+ -+ layout.add_screen(Screen(newIdMap[output], crtc->x, crtc->y, -+ crtc->mode->mode.width, -+ crtc->mode->mode.height, -+ 0)); -+ } -+ -+ /* Only keep the entries that are currently active */ -+ outputIdMap = newIdMap; -+#endif -+ -+ /* -+ * Make sure we have something to display. Hopefully it's just temporary -+ * that we have no active outputs... -+ */ -+ if (layout.num_screens() == 0) -+ layout.add_screen(Screen(0, 0, 0, pScreen->width, pScreen->height, 0)); -+ -+ return layout; - } - -+#ifdef RANDR -+ -+extern RRModePtr vncRandRModeGet(int width, int height); -+ -+RRModePtr XserverDesktop::findRandRMode(RROutputPtr output, int width, int height) -+{ -+ RRModePtr mode; -+ -+ for (int i = 0;i < output->numModes;i++) { -+ if ((output->modes[i]->mode.width == width) && -+ (output->modes[i]->mode.height == height)) -+ return output->modes[i]; -+ } -+ -+ mode = vncRandRModeGet(width, height); -+ if (mode != NULL) -+ return mode; -+ -+ return NULL; -+} -+ -+#endif -+ - char* XserverDesktop::substitute(const char* varName) - { - if (strcmp(varName, "$$") == 0) { -@@ -727,100 +818,251 @@ - vncClientCutText(str, len); - } - --#ifdef RANDR -+extern RROutputPtr vncRandROutputCreate(ScreenPtr pScreen); -+ - unsigned int XserverDesktop::setScreenLayout(int fb_width, int fb_height, - const rfb::ScreenSet& layout) - { -- int i; -- Bool ret; -- RRScreenSizePtr pSize; -- RROutputPtr output; -- RRModePtr mode; -- -- // Make sure all RandR tables are properly populated --#if XORG == 15 -- ret = RRGetInfo(pScreen); -+#ifndef RANDR -+ return rfb::resultProhibited; - #else -- ret = RRGetInfo(pScreen, FALSE); --#endif -- if (!ret) -- return resultNoResources; -+ int availableOutputs; -+ Bool ret; - -- // Register a new size, or get a reference to the existing one -- pSize = RRRegisterSize(pScreen, fb_width, fb_height, -- pScreen->mmWidth, pScreen->mmHeight); -- if (!pSize) { -- vlog.error("setScreenLayout: Could not get register new resolution"); -- return resultNoResources; -- } -- ret = RRRegisterRate(pScreen, pSize, 60); -- if (!ret) { -- vlog.error("setScreenLayout: Could not register a rate for the resolution"); -- return resultNoResources; -- } -- -- // Then we have to call RRGetInfo again for it to copy the RandR -- // 1.0 information to the 1.2 structures. --#if XORG == 15 -- ret = RRGetInfo(pScreen); --#else -- ret = RRGetInfo(pScreen, FALSE); --#endif -- if (!ret) -- return resultNoResources; -+ rrScrPrivPtr rp = rrGetScrPriv(pScreen); - -- // Go via RandR to set the resolution in order for X11 notifications -- // to be sent out properly. We currently only do RandR 1.0, but Xorg -- // has dropped support for that API. So we have to emulate it via the -- // same method ProcRRSetScreenConfig() uses. -- // -- // FIXME: This will cause setPixelBuffer() to be called, resulting in -- // an unnecessary ExtendedDesktopSize to be sent. -- -- // We'll just reconfigure the first output -- output = RRFirstOutput(pScreen); -- if (!output) { -- vlog.error("setScreenLayout: Could not get first output"); -- return resultNoResources; -- } -- -- // Find first mode with matching size -- mode = NULL; -- for (i = 0;i < output->numModes;i++) { -- if ((output->modes[i]->mode.width == fb_width) && -- (output->modes[i]->mode.height == fb_height)) { -- mode = output->modes[i]; -- break; -+ /* -+ * First check that we don't have any active clone modes. That's just -+ * too messy to deal with. -+ */ -+ for (int i = 0;i < rp->numCrtcs;i++) { -+ if (rp->crtcs[i]->numOutputs > 1) { -+ vlog.error("Clone mode active. Refusing to touch screen layout."); -+ return rfb::resultInvalid; -+ } -+ } -+ -+ /* -+ * Next count how many useful outputs we have... -+ * -+ * This gets slightly complicated because we might need to hook a CRTC -+ * up to the output, but also check that we don't try to use the same -+ * CRTC for multiple outputs. -+ */ -+ std::set usedCrtcs; -+ availableOutputs = 0; -+ for (int i = 0;i < rp->numOutputs;i++) { -+ RROutputPtr output; -+ -+ output = rp->outputs[i]; -+ -+ if (output->crtc != NULL) -+ availableOutputs++; -+ else { -+ for (int j = 0;j < output->numCrtcs;j++) { -+ if (output->crtcs[j]->numOutputs != 0) -+ continue; -+ if (usedCrtcs.count(output->crtcs[j]) != 0) -+ continue; -+ -+ availableOutputs++; -+ usedCrtcs.insert(output->crtcs[j]); -+ -+ break; -+ } - } - } -- if (!mode) { -- vlog.error("setScreenLayout: Could not find a matching mode"); -- return resultNoResources; -+ -+ /* Try to create more outputs if needed... (only works on Xvnc) */ -+ if (layout.num_screens() > availableOutputs) { -+ for (int i = 0;i < (layout.num_screens() - availableOutputs);i++) { -+ RROutputPtr output; -+ output = vncRandROutputCreate(pScreen); -+ if (output == NULL) { -+ vlog.error("Unable to create more screens, as needed by the new client layout."); -+ return rfb::resultInvalid; -+ } -+ } - } - -- // Adjust screen size -- ret = RRScreenSizeSet(pScreen, fb_width, fb_height, -- pScreen->mmWidth, pScreen->mmHeight); -- if (!ret) { -- vlog.error("setScreenLayout: Could not adjust screen size"); -- return resultNoResources; -+ /* First we might need to resize the screen */ -+ if ((fb_width != pScreen->width) || (fb_height != pScreen->height)) { -+ /* Try to retain DPI when we resize */ -+ ret = RRScreenSizeSet(pScreen, fb_width, fb_height, -+ pScreen->mmWidth * fb_width / pScreen->width, -+ pScreen->mmHeight * fb_height / pScreen->height); -+ if (!ret) { -+ vlog.error("Failed to resize screen to %dx%d", fb_width, fb_height); -+ return rfb::resultInvalid; -+ } -+ } -+ -+ /* Next, reconfigure all known outputs, and turn off the other ones */ -+ for (int i = 0;i < rp->numOutputs;i++) { -+ RROutputPtr output; -+ RRCrtcPtr crtc; -+ RRModePtr mode; -+ -+ ScreenSet::const_iterator iter; -+ -+ output = rp->outputs[i]; -+ crtc = output->crtc; -+ -+ /* Known? */ -+ if (outputIdMap.count(output) == 0) -+ continue; -+ -+ /* A known output should have a CRTC, but double check... */ -+ if (crtc == NULL) { -+ vlog.error("Existing output '%s' has unexpectedly been disabled", -+ output->name); -+ continue; -+ } -+ -+ /* Find the corresponding screen... */ -+ for (iter = layout.begin();iter != layout.end();++iter) { -+ if (iter->id == outputIdMap[output]) -+ break; -+ } -+ -+ /* Missing? */ -+ if (iter == layout.end()) { -+ /* Disable and move on... */ -+ ret = RRCrtcSet(crtc, NULL, crtc->x, crtc->y, crtc->rotation, -+ crtc->numOutputs, crtc->outputs); -+ if (!ret) { -+ vlog.error("Failed to disable unused CRTC for output '%s'", -+ output->name); -+ return rfb::resultInvalid; -+ } -+ outputIdMap.erase(output); -+ continue; -+ } -+ -+ /* Need to switch mode? */ -+ if ((crtc->mode->mode.width == iter->dimensions.width()) && -+ (crtc->mode->mode.height == iter->dimensions.height())) -+ mode = crtc->mode; -+ else { -+ mode = findRandRMode(output, iter->dimensions.width(), -+ iter->dimensions.height()); -+ if (mode == NULL) { -+ vlog.error("Failed to find a suitable mode for %dx%d for output '%s'", -+ iter->dimensions.width(), iter->dimensions.height(), -+ output->name); -+ return rfb::resultInvalid; -+ } -+ } -+ -+ /* Reconfigure new mode and position */ -+ ret = RRCrtcSet(crtc, mode, iter->dimensions.tl.x, iter->dimensions.tl.y, -+ crtc->rotation, crtc->numOutputs, crtc->outputs); -+ if (!ret) { -+ vlog.error("Failed to reconfigure output '%s' to %dx%d+%d+%d", -+ output->name, -+ iter->dimensions.width(), iter->dimensions.height(), -+ iter->dimensions.tl.x, iter->dimensions.tl.y); -+ return rfb::resultInvalid; -+ } - } - -- // And then the CRTC -- ret = RRCrtcSet(output->crtc, mode, 0, 0, RR_Rotate_0, 1, &output); -- if (!ret) { -- vlog.error("setScreenLayout: Could not adjust CRTC"); -- return resultNoResources; -+ /* Finally, allocate new outputs for new screens */ -+ ScreenSet::const_iterator iter; -+ for (iter = layout.begin();iter != layout.end();++iter) { -+ OutputIdMap::const_iterator oi; -+ -+ RROutputPtr output; -+ RRCrtcPtr crtc; -+ RRModePtr mode; -+ -+ int i; -+ -+ /* Does this screen have an output already? */ -+ for (oi = outputIdMap.begin();oi != outputIdMap.end();++oi) { -+ if (oi->second == iter->id) -+ break; -+ } -+ -+ if (oi != outputIdMap.end()) -+ continue; -+ -+ /* Find an unused output */ -+ for (i = 0;i < rp->numOutputs;i++) { -+ output = rp->outputs[i]; -+ crtc = output->crtc; -+ -+ /* In use? */ -+ if (outputIdMap.count(output) == 1) -+ continue; -+ -+ /* Need a CRTC? */ -+ if (crtc == NULL) { -+ for (int j = 0;j < output->numCrtcs;j++) { -+ if (output->crtcs[j]->numOutputs != 0) -+ continue; -+ -+ crtc = output->crtcs[j]; -+ break; -+ } -+ -+ /* Couldn't find one... */ -+ if (crtc == NULL) -+ continue; -+ -+ ret = RRCrtcSet(crtc, NULL, 0, 0, RR_Rotate_0, -+ 1, &output); -+ if (!ret) { -+ vlog.error("Failed to associate a CRTC with output '%s'", -+ output->name); -+ return rfb::resultInvalid; -+ } -+ } -+ -+ break; -+ } -+ -+ /* Shouldn't happen */ -+ if (i == rp->numOutputs) -+ return rfb::resultInvalid; -+ -+ mode = findRandRMode(output, iter->dimensions.width(), -+ iter->dimensions.height()); -+ if (mode == NULL) { -+ vlog.error("Failed to find a suitable mode for %dx%d for output '%s'", -+ iter->dimensions.width(), iter->dimensions.height(), -+ output->name); -+ return rfb::resultInvalid; -+ } -+ -+ /* -+ * Make sure we already have an entry for this, or -+ * computeScreenLayout() will think it is a brand new output and -+ * assign it a random id. -+ */ -+ outputIdMap[output] = iter->id; -+ -+ /* Reconfigure new mode and position */ -+ ret = RRCrtcSet(crtc, mode, iter->dimensions.tl.x, iter->dimensions.tl.y, -+ crtc->rotation, crtc->numOutputs, crtc->outputs); -+ if (!ret) { -+ vlog.error("Failed to reconfigure output '%s' to %dx%d+%d+%d", -+ output->name, -+ iter->dimensions.width(), iter->dimensions.height(), -+ iter->dimensions.tl.x, iter->dimensions.tl.y); -+ return rfb::resultInvalid; -+ } - } - -- // RandR 1.0 doesn't carry any screen layout information, so we need -- // to update that manually. This results in another unnecessary -- // ExtendedDesktopSize. -- server->setScreenLayout(layout); -+ /* -+ * Update timestamp for when screen layout was last changed. -+ * This is normally done in the X11 request handlers, which is -+ * why we have to deal with it manually here. -+ */ -+ rp->lastSetTime = currentTime; - -- return resultSuccess; -+ return rfb::resultSuccess; -+#endif - } --#endif // RANDR - - void XserverDesktop::grabRegion(const rfb::Region& region) - { - ---- unix/xserver/hw/vnc/XserverDesktop.h 2012-01-24 00:54:11.000000000 +0900 -+++ unix/xserver/hw/vnc/XserverDesktop.h 2013-05-27 18:54:41.210573000 +0900 -@@ -27,6 +27,8 @@ - #include - #endif - -+#include -+ - #include - #include - #include -@@ -39,6 +41,9 @@ - #define class c_class - #include - #include -+#ifdef RANDR -+#include -+#endif - #undef class - } - -@@ -64,6 +69,7 @@ - void blockUpdates(); - void unblockUpdates(); - void setFramebuffer(int w, int h, void* fbptr, int stride); -+ void refreshScreenLayout(); - void setColormap(ColormapPtr cmap); - void setColourMapEntries(ColormapPtr pColormap, int ndef, xColorItem* pdef); - void bell(); -@@ -101,10 +107,8 @@ - virtual void keyEvent(rdr::U32 key, bool down); - virtual void clientCutText(const char* str, int len); - virtual rfb::Point getFbSize() { return rfb::Point(width(), height()); } --#ifdef RANDR - virtual unsigned int setScreenLayout(int fb_width, int fb_height, - const rfb::ScreenSet& layout); --#endif - - // rfb::PixelBuffer callbacks - virtual void grabRegion(const rfb::Region& r); -@@ -123,6 +127,11 @@ - - private: - void setColourMapEntries(int firstColour, int nColours); -+ rfb::ScreenSet computeScreenLayout(); -+#ifdef RANDR -+ RRModePtr findRandRMode(RROutputPtr output, int width, int height); -+#endif -+ - ScreenPtr pScreen; - InputDevice *inputDevice; - rfb::VNCServerST* server; -@@ -139,5 +148,10 @@ - void* queryConnectId; - rfb::CharArray queryConnectAddress; - rfb::CharArray queryConnectUsername; -+ -+#ifdef RANDR -+ typedef std::map OutputIdMap; -+ OutputIdMap outputIdMap; -+#endif - }; - #endif - ---- unix/xserver/hw/vnc/vncExtInit.cc 2011-11-07 21:51:34.000000000 +0900 -+++ unix/xserver/hw/vnc/vncExtInit.cc 2013-05-27 18:54:41.172575000 +0900 -@@ -59,6 +59,7 @@ - #include "XserverDesktop.h" - #include "vncHooks.h" - #include "vncExtInit.h" -+#include "xorg-version.h" - - extern "C" { - -@@ -449,10 +450,16 @@ - 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 @@ - 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 @@ - 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 @@ - param.buf[stuff->paramLen] = 0; - - xVncExtSetParamReply rep; -- int n; - rep.type = X_Reply; - rep.length = 0; - rep.success = 0; -@@ -603,8 +620,14 @@ - - 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 @@ - - 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 @@ - param.buf[stuff->paramLen] = 0; - - xVncExtGetParamReply rep; -- int n; - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.success = 0; -@@ -646,9 +672,16 @@ - 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 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 @@ - param.buf[stuff->paramLen] = 0; - - xVncExtGetParamDescReply rep; -- int n; - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.success = 0; -@@ -690,9 +726,16 @@ - 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 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 @@ - REQUEST_SIZE_MATCH(xVncExtListParamsReq); - - xVncExtListParamsReply rep; -- int n; - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - -@@ -731,9 +777,16 @@ - 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 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 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 @@ - 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 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 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 @@ - 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 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 @@ - qcTimeout = 0; - - xVncExtGetQueryConnectReply rep; -- int n; - rep.type = X_Reply; - rep.sequenceNumber = client->sequence; - rep.timeout = qcTimeout; -@@ -934,11 +1026,20 @@ - 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 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 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); - } - ---- unix/xserver/hw/vnc/vncHooks.cc 2012-01-24 00:54:11.000000000 +0900 -+++ unix/xserver/hw/vnc/vncHooks.cc 2013-05-27 18:55:18.837574000 +0900 -@@ -84,6 +84,8 @@ - #endif - #ifdef RANDR - RRSetConfigProcPtr RandRSetConfig; -+ RRScreenSetSizeProcPtr RandRScreenSetSize; -+ RRCrtcSetProcPtr RandRCrtcSet; - #endif - } vncHooksScreenRec, *vncHooksScreenPtr; - -@@ -143,6 +145,13 @@ - #ifdef RANDR - static Bool vncHooksRandRSetConfig(ScreenPtr pScreen, Rotation rotation, - int rate, RRScreenSizePtr pSize); -+static Bool vncHooksRandRScreenSetSize(ScreenPtr pScreen, -+ CARD16 width, CARD16 height, -+ CARD32 mmWidth, CARD32 mmHeight); -+static Bool vncHooksRandRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc, -+ RRModePtr mode, int x, int y, -+ Rotation rotation, int numOutputs, -+ RROutputPtr *outputs); - #endif - - // GC "funcs" -@@ -283,6 +292,8 @@ - rp = rrGetScrPriv(pScreen); - if (rp) { - vncHooksScreen->RandRSetConfig = rp->rrSetConfig; -+ vncHooksScreen->RandRScreenSetSize = rp->rrScreenSetSize; -+ vncHooksScreen->RandRCrtcSet = rp->rrCrtcSet; - } - #endif - -@@ -304,7 +315,13 @@ - #endif - #ifdef RANDR - if (rp) { -- rp->rrSetConfig = vncHooksRandRSetConfig; -+ /* Some RandR callbacks are optional */ -+ if (rp->rrSetConfig) -+ rp->rrSetConfig = vncHooksRandRSetConfig; -+ if (rp->rrScreenSetSize) -+ rp->rrScreenSetSize = vncHooksRandRScreenSetSize; -+ if (rp->rrCrtcSet) -+ rp->rrCrtcSet = vncHooksRandRCrtcSet; - } - #endif - -@@ -361,6 +378,8 @@ - rp = rrGetScrPriv(pScreen); - if (rp) { - rp->rrSetConfig = vncHooksScreen->RandRSetConfig; -+ rp->rrScreenSetSize = vncHooksScreen->RandRScreenSetSize; -+ rp->rrCrtcSet = vncHooksScreen->RandRCrtcSet; - } - #endif - -@@ -596,42 +615,106 @@ - - #ifdef RANDR - -+static void vncPreScreenResize(ScreenPtr pScreen) -+{ -+ vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate(pScreen); -+ -+ // We need to prevent the RFB core from accessing the framebuffer -+ // for a while as there might be updates thrown our way inside -+ // the routines that change the screen (i.e. before we have a -+ // pointer to the new framebuffer). -+ vncHooksScreen->desktop->blockUpdates(); -+} -+ -+static void vncPostScreenResize(ScreenPtr pScreen, Bool success) -+{ -+ vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate(pScreen); -+ -+ RegionRec reg; -+ BoxRec box; -+ -+ if (success) { -+ // Let the RFB core know of the new dimensions and framebuffer -+ vncHooksScreen->desktop->setFramebuffer(pScreen->width, pScreen->height, -+ vncFbptr[pScreen->myNum], -+ vncFbstride[pScreen->myNum]); -+ } -+ -+ vncHooksScreen->desktop->unblockUpdates(); -+ -+ if (success) { -+ // Mark entire screen as changed -+ box.x1 = 0; -+ box.y1 = 0; -+ box.x2 = pScreen->width; -+ box.y2 = pScreen->height; -+ REGION_INIT(pScreen, ®, &box, 1); -+ -+ vncHooksScreen->desktop->add_changed(®); -+ } -+} -+ - static Bool vncHooksRandRSetConfig(ScreenPtr pScreen, Rotation rotation, - int rate, RRScreenSizePtr pSize) - { - vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate(pScreen); - rrScrPrivPtr rp = rrGetScrPriv(pScreen); - Bool ret; -- RegionRec reg; -- BoxRec box; - -- // We need to prevent the RFB core from accessing the framebuffer -- // for a while as there might be updates thrown our way inside -- // rrSetConfig (i.e. before we have a pointer to the new framebuffer). -- vncHooksScreen->desktop->blockUpdates(); -+ vncPreScreenResize(pScreen); - - rp->rrSetConfig = vncHooksScreen->RandRSetConfig; - ret = (*rp->rrSetConfig)(pScreen, rotation, rate, pSize); - rp->rrSetConfig = vncHooksRandRSetConfig; - -+ vncPostScreenResize(pScreen, ret); -+ - if (!ret) - return FALSE; - -- // Let the RFB core know of the new dimensions and framebuffer -- vncHooksScreen->desktop->setFramebuffer(pScreen->width, pScreen->height, -- vncFbptr[pScreen->myNum], -- vncFbstride[pScreen->myNum]); -+ return TRUE; -+} - -- vncHooksScreen->desktop->unblockUpdates(); -+static Bool vncHooksRandRScreenSetSize(ScreenPtr pScreen, -+ CARD16 width, CARD16 height, -+ CARD32 mmWidth, CARD32 mmHeight) -+{ -+ vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate(pScreen); -+ rrScrPrivPtr rp = rrGetScrPriv(pScreen); -+ Bool ret; -+ -+ vncPreScreenResize(pScreen); -+ -+ rp->rrScreenSetSize = vncHooksScreen->RandRScreenSetSize; -+ ret = (*rp->rrScreenSetSize)(pScreen, width, height, mmWidth, mmHeight); -+ rp->rrScreenSetSize = vncHooksRandRScreenSetSize; -+ -+ vncPostScreenResize(pScreen, ret); -+ -+ if (!ret) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+static Bool vncHooksRandRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc, -+ RRModePtr mode, int x, int y, -+ Rotation rotation, int num_outputs, -+ RROutputPtr *outputs) -+{ -+ vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate(pScreen); -+ rrScrPrivPtr rp = rrGetScrPriv(pScreen); -+ Bool ret; - -- // Mark entire screen as changed -- box.x1 = 0; -- box.y1 = 0; -- box.x2 = pScreen->width; -- box.y2 = pScreen->height; -- REGION_INIT(pScreen, ®, &box, 1); -+ rp->rrCrtcSet = vncHooksScreen->RandRCrtcSet; -+ ret = (*rp->rrCrtcSet)(pScreen, crtc, mode, x, y, rotation, -+ num_outputs, outputs); -+ rp->rrCrtcSet = vncHooksRandRCrtcSet; - -- vncHooksScreen->desktop->add_changed(®); -+ if (!ret) -+ return FALSE; -+ -+ vncHooksScreen->desktop->refreshScreenLayout(); - - return TRUE; - } -@@ -667,7 +750,7 @@ - }; - - --// ValidateGC - wrap the "ops" if a viewable window -+// ValidateGC - wrap the "ops" if a viewable window OR the screen pixmap - - static void vncHooksValidateGC(GCPtr pGC, unsigned long changes, - DrawablePtr pDrawable) -@@ -679,7 +762,9 @@ - (*pGC->funcs->ValidateGC) (pGC, changes, pDrawable); - - u.vncHooksGC->wrappedOps = 0; -- if (pDrawable->type == DRAWABLE_WINDOW && ((WindowPtr) pDrawable)->viewable) { -+ if ((pDrawable->type == DRAWABLE_WINDOW && -+ ((WindowPtr) pDrawable)->viewable) || -+ (pDrawable == &pGC->pScreen->GetScreenPixmap(pGC->pScreen)->drawable)) { - u.vncHooksGC->wrappedOps = pGC->ops; - DBGPRINT((stderr,"vncHooksValidateGC: wrapped GC ops\n")); - } -@@ -750,7 +835,7 @@ - DBGPRINT((stderr,"vncHooks" #name " called\n")); - - --// FillSpans - changed region is the whole of borderClip. This is pessimistic, -+// FillSpans - assume the entire clip region is damaged. This is pessimistic, - // but I believe this function is rarely used so it doesn't matter. - - static void vncHooksFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit, -@@ -759,14 +844,18 @@ - { - GC_OP_UNWRAPPER(pDrawable, pGC, FillSpans); - -- RegionHelper changed(pScreen, &((WindowPtr)pDrawable)->borderClip); -+ RegionHelper changed(pScreen, pGC->pCompositeClip); -+ -+ if (pDrawable->type == DRAWABLE_WINDOW) -+ REGION_INTERSECT(pScreen, changed.reg, changed.reg, -+ &((WindowPtr)pDrawable)->borderClip); - - (*pGC->ops->FillSpans) (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); - - vncHooksScreen->desktop->add_changed(changed.reg); - } - --// SetSpans - changed region is the whole of borderClip. This is pessimistic, -+// SetSpans - assume the entire clip region is damaged. This is pessimistic, - // but I believe this function is rarely used so it doesn't matter. - - static void vncHooksSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *psrc, -@@ -775,7 +864,11 @@ - { - GC_OP_UNWRAPPER(pDrawable, pGC, SetSpans); - -- RegionHelper changed(pScreen, &((WindowPtr)pDrawable)->borderClip); -+ RegionHelper changed(pScreen, pGC->pCompositeClip); -+ -+ if (pDrawable->type == DRAWABLE_WINDOW) -+ REGION_INTERSECT(pScreen, changed.reg, changed.reg, -+ &((WindowPtr)pDrawable)->borderClip); - - (*pGC->ops->SetSpans) (pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted); - -@@ -827,16 +920,23 @@ - - RegionHelper src(pScreen); - -- if ((pSrc->type == DRAWABLE_WINDOW) && (pSrc->pScreen == pScreen)) { -+ // The source of the data has to be something that's on screen. -+ // This means either a window, or the screen pixmap. -+ if ((pSrc->pScreen == pScreen) && -+ ((pSrc->type == DRAWABLE_WINDOW) || -+ (pSrc == &pScreen->GetScreenPixmap(pScreen)->drawable))) { - box.x1 = srcx + pSrc->x; - box.y1 = srcy + pSrc->y; - box.x2 = box.x1 + w; - box.y2 = box.y1 + h; - - src.init(&box, 0); -- if (REGION_NOTEMPTY(pScreen, &((WindowPtr)pSrc)->clipList)) { -- REGION_INTERSECT(pScreen, src.reg, src.reg, &((WindowPtr)pSrc)->clipList); -+ -+ if ((pSrc->type == DRAWABLE_WINDOW) && -+ REGION_NOTEMPTY(pScreen, &((WindowPtr)pSrc)->clipList)) { -+ REGION_INTERSECT(pScreen, src.reg, src.reg, &((WindowPtr)pSrc)->clipList); - } -+ - REGION_TRANSLATE(pScreen, src.reg, - dstx + pDst->x - srcx - pSrc->x, - dsty + pDst->y - srcy - pSrc->y); - ---- unix/xserver/hw/vnc/xf86vncModule.cc 2010-04-23 22:55:10.000000000 +0900 -+++ unix/xserver/hw/vnc/xf86vncModule.cc 2013-05-27 18:54:41.207573000 +0900 -@@ -25,6 +25,10 @@ - #include - #include - #include -+#include -+#include -+ -+#include "xorg-version.h" - - extern "C" { - #define class c_class -@@ -33,6 +37,9 @@ - #define new c_new - #include "xf86.h" - #include "xf86Module.h" -+#ifdef RANDR -+#include "randrstr.h" -+#endif /* RANDR */ - #undef class - #undef private - #undef bool -@@ -89,7 +96,12 @@ - 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); - } -@@ -98,3 +110,13 @@ - vncExtensionInit(); - } - } -+ -+RRModePtr vncRandRModeGet(int width, int height) -+{ -+ return NULL; -+} -+ -+RROutputPtr vncRandROutputCreate(ScreenPtr pScreen) -+{ -+ return NULL; -+} - ---- unix/xserver/hw/vnc/xorg-version.h 2010-12-09 01:05:48.000000000 +0900 -+++ unix/xserver/hw/vnc/xorg-version.h 2013-05-27 18:54:41.193575000 +0900 -@@ -36,6 +36,10 @@ - #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 -+#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 - ---- unix/xserver/hw/vnc/xvnc.cc 2012-03-10 05:34:29.000000000 +0900 -+++ unix/xserver/hw/vnc/xvnc.cc 2013-05-27 18:54:41.182576000 +0900 -@@ -96,7 +96,7 @@ - #define Xfree free - #endif - --#define XVNCVERSION "TigerVNC 1.2.0" -+#define XVNCVERSION "TigerVNC 1.2.80" - #define XVNCCOPYRIGHT ("Copyright (C) 1999-2011 TigerVNC Team and many others (see README.txt)\n" \ - "See http://www.tigervnc.org for information on TigerVNC.\n") - -@@ -229,7 +229,11 @@ - } - #endif - -+#if XORG < 111 - void ddxGiveUp() -+#else -+void ddxGiveUp(enum ExitCode error) -+#endif - { - int i; - -@@ -239,9 +243,17 @@ - } - - 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 @@ - { - 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); - } - } -@@ -859,45 +876,8 @@ - - static Bool vncRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) - { -- Bool ret, gotCurrent = FALSE; -- int i; -- -- const int widths[] = { 1920, 1920, 1600, 1680, 1400, 1360, 1280, 1280, 1280, 1280, 1024, 800, 640 }; -- const int heights[] = { 1200, 1080, 1200, 1050, 1050, 768, 1024, 960, 800, 720, 768, 600, 480 }; -- -- for (i = 0;i < sizeof(widths)/sizeof(*widths);i++) { -- RRScreenSizePtr pSize; -- -- pSize = RRRegisterSize(pScreen, widths[i], heights[i], -- pScreen->mmWidth, pScreen->mmHeight); -- if (!pSize) -- return FALSE; -- -- ret = RRRegisterRate(pScreen, pSize, 60); -- if (!ret) -- return FALSE; -- -- if ((widths[i] == pScreen->width) && (heights[i] == pScreen->height)) { -- RRSetCurrentConfig(pScreen, RR_Rotate_0, 60, pSize); -- gotCurrent = TRUE; -- } -- } -- -- if (!gotCurrent) { -- RRScreenSizePtr pSize; -- -- pSize = RRRegisterSize(pScreen, pScreen->width, pScreen->height, -- pScreen->mmWidth, pScreen->mmHeight); -- if (!pSize) -- return FALSE; -- -- RRRegisterRate(pScreen, pSize, 60); -- -- RRSetCurrentConfig(pScreen, RR_Rotate_0, 60, pSize); -- } -- -- *rotations = RR_Rotate_0; -- -+ // We update all information right away, so there is nothing to -+ // do here. - return TRUE; - } - -@@ -1050,16 +1030,19 @@ - FlushAllOutput (); - } - --static Bool vncRandRSetConfig (ScreenPtr pScreen, Rotation rotation, -- int rate, RRScreenSizePtr pSize) -+RRModePtr vncRandRModeGet(int width, int height); -+ -+static Bool vncRandRScreenSetSize(ScreenPtr pScreen, -+ CARD16 width, CARD16 height, -+ CARD32 mmWidth, CARD32 mmHeight) - { - vfbScreenInfoPtr pvfb = &vfbScreens[pScreen->myNum]; - vfbFramebufferInfo fb; -+ rrScrPrivPtr rp = rrGetScrPriv(pScreen); - PixmapPtr rootPixmap = pScreen->GetScreenPixmap(pScreen); - void *pbits; - Bool ret; - int oldwidth, oldheight, oldmmWidth, oldmmHeight; -- int dpix, dpiy; - - /* Prevent updates while we fiddle */ - xf86SetRootClip(pScreen, FALSE); -@@ -1070,17 +1053,11 @@ - oldmmWidth = pScreen->mmWidth; - oldmmHeight = pScreen->mmHeight; - -- /* Compute the current DPI (for use later) */ -- dpix = (pScreen->width * 254 + pScreen->mmWidth * 5) / (pScreen->mmWidth * 10); -- dpiy = (pScreen->height * 254 + pScreen->mmHeight * 5) / (pScreen->mmHeight * 10); -- - /* Then set the new dimensions */ -- pScreen->width = pSize->width; -- pScreen->height = pSize->height; -- -- /* Try to keep the same DPI as we do not have a physical screen */ -- pScreen->mmWidth = (pScreen->width * 254 + dpix * 5) / (dpix * 10); -- pScreen->mmHeight = (pScreen->height * 254 + dpiy * 5) / (dpiy * 10); -+ pScreen->width = width; -+ pScreen->height = height; -+ pScreen->mmWidth = mmWidth; -+ pScreen->mmHeight = mmHeight; - - /* Allocate a new framebuffer */ - memset(&fb, 0, sizeof(vfbFramebufferInfo)); -@@ -1130,6 +1107,207 @@ - /* Restore ability to update screen, now with new dimensions */ - xf86SetRootClip(pScreen, TRUE); - -+ /* -+ * Let RandR know we changed something (it doesn't assume that -+ * TRUE means something changed for some reason...). -+ */ -+ RRScreenSizeNotify(pScreen); -+ -+ /* Crop all CRTCs to the new screen */ -+ for (int i = 0;i < rp->numCrtcs;i++) { -+ RRCrtcPtr crtc; -+ RRModePtr mode; -+ -+ crtc = rp->crtcs[i]; -+ -+ /* Disabled? */ -+ if (crtc->mode == NULL) -+ continue; -+ -+ /* Fully inside? */ -+ if ((crtc->x + crtc->mode->mode.width <= width) && -+ (crtc->y + crtc->mode->mode.height <= height)) -+ continue; -+ -+ /* Fully outside? */ -+ if ((crtc->x >= width) || (crtc->y >= height)) { -+ /* Disable it */ -+ ret = RRCrtcNotify(crtc, NULL, crtc->x, crtc->y, crtc->rotation, -+#if XORG >= 16 -+ NULL, -+#endif -+ crtc->numOutputs, crtc->outputs); -+ if (!ret) -+ ErrorF("Warning: Unable to disable CRTC that is outside of new screen dimensions"); -+ continue; -+ } -+ -+ /* Just needs to be resized */ -+ mode = vncRandRModeGet(width - crtc->x, height - crtc->y); -+ if (mode == NULL) { -+ ErrorF("Warning: Unable to create custom mode for %dx%d", -+ width - crtc->x, height - crtc->y); -+ continue; -+ } -+ -+ ret = RRCrtcNotify(crtc, mode, crtc->x, crtc->y, crtc->rotation, -+#if XORG >= 16 -+ NULL, -+#endif -+ crtc->numOutputs, crtc->outputs); -+ RRModeDestroy(mode); -+ if (!ret) -+ ErrorF("Warning: Unable to crop CRTC to new screen dimensions"); -+ } -+ -+ return TRUE; -+} -+ -+static Bool vncRandRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc, RRModePtr mode, -+ int x, int y, Rotation rotation, int num_outputs, -+ RROutputPtr *outputs) -+{ -+ Bool ret; -+ -+ /* Let RandR know we approve, and let it update its internal state */ -+ ret = RRCrtcNotify(crtc, mode, x, y, rotation, -+#if XORG >= 16 -+ NULL, -+#endif -+ num_outputs, outputs); -+ if (!ret) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+static Bool vncRandROutputValidateMode(ScreenPtr pScreen, -+ RROutputPtr output, RRModePtr mode) -+{ -+ /* We have no hardware so any mode works */ -+ return TRUE; -+} -+ -+static void vncRandRModeDestroy(ScreenPtr pScreen, RRModePtr mode) -+{ -+ /* We haven't allocated anything so nothing to destroy */ -+} -+ -+static const int vncRandRWidths[] = { 1920, 1920, 1600, 1680, 1400, 1360, 1280, 1280, 1280, 1280, 1024, 800, 640 }; -+static const int vncRandRHeights[] = { 1200, 1080, 1200, 1050, 1050, 768, 1024, 960, 800, 720, 768, 600, 480 }; -+ -+static int vncRandRIndex = 0; -+ -+/* This is a global symbol since XserverDesktop also uses it */ -+RRModePtr vncRandRModeGet(int width, int height) -+{ -+ xRRModeInfo modeInfo; -+ char name[100]; -+ RRModePtr mode; -+ -+ memset(&modeInfo, 0, sizeof(modeInfo)); -+ sprintf(name, "%dx%d", width, height); -+ -+ modeInfo.width = width; -+ modeInfo.height = height; -+ modeInfo.hTotal = width; -+ modeInfo.vTotal = height; -+ modeInfo.dotClock = ((CARD32)width * (CARD32)height * 60); -+ modeInfo.nameLength = strlen(name); -+ mode = RRModeGet(&modeInfo, name); -+ if (mode == NULL) -+ return NULL; -+ -+ return mode; -+} -+ -+static RRCrtcPtr vncRandRCrtcCreate(ScreenPtr pScreen) -+{ -+ RRCrtcPtr crtc; -+ RROutputPtr output; -+ RRModePtr mode; -+ char name[100]; -+ -+ /* First we create the CRTC... */ -+ crtc = RRCrtcCreate(pScreen, NULL); -+ -+ /* We don't actually support gamma, but xrandr complains when it is missing */ -+ RRCrtcGammaSetSize (crtc, 256); -+ -+ /* Then we create a dummy output for it... */ -+ sprintf(name, "VNC-%d", vncRandRIndex); -+ vncRandRIndex++; -+ -+ output = RROutputCreate(pScreen, name, strlen(name), NULL); -+ -+ RROutputSetCrtcs(output, &crtc, 1); -+ RROutputSetConnection(output, RR_Connected); -+ -+ /* Make sure the CRTC has this output set */ -+ RRCrtcNotify(crtc, NULL, 0, 0, RR_Rotate_0, -+#if XORG >= 16 -+ NULL, -+#endif -+ 1, &output); -+ -+ /* Populate a list of default modes */ -+ RRModePtr modes[sizeof(vncRandRWidths)/sizeof(*vncRandRWidths)]; -+ int num_modes; -+ -+ num_modes = 0; -+ for (int i = 0;i < sizeof(vncRandRWidths)/sizeof(*vncRandRWidths);i++) { -+ mode = vncRandRModeGet(vncRandRWidths[i], vncRandRHeights[i]); -+ if (mode != NULL) { -+ modes[num_modes] = mode; -+ num_modes++; -+ } -+ } -+ -+ RROutputSetModes(output, modes, num_modes, 0); -+ -+ return crtc; -+} -+ -+/* Used from XserverDesktop when it needs more outputs... */ -+RROutputPtr vncRandROutputCreate(ScreenPtr pScreen) -+{ -+ RRCrtcPtr crtc; -+ -+ crtc = vncRandRCrtcCreate(pScreen); -+ if (crtc == NULL) -+ return NULL; -+ -+ return crtc->outputs[0]; -+} -+ -+static Bool vncRandRInit(ScreenPtr pScreen) -+{ -+ RRCrtcPtr crtc; -+ RRModePtr mode; -+ -+ if (!RRInit()) -+ return FALSE; -+ -+ /* These are completely arbitrary */ -+ RRScreenSetSizeRange(pScreen, 32, 32, 32768, 32768); -+ -+ /* -+ * Start with a single CRTC with a single output. More will be -+ * allocated as needed... -+ */ -+ crtc = vncRandRCrtcCreate(pScreen); -+ -+ /* Make sure the current screen size is the active mode */ -+ mode = vncRandRModeGet(pScreen->width, pScreen->height); -+ if (mode == NULL) -+ return FALSE; -+ -+ RRCrtcNotify(crtc, mode, 0, 0, RR_Rotate_0, -+#if XORG >= 16 -+ NULL, -+#endif -+ crtc->numOutputs, crtc->outputs); -+ - return TRUE; - } - -@@ -1291,8 +1469,16 @@ - if (!ret) return FALSE; - - rp = rrGetScrPriv(pScreen); -+ - rp->rrGetInfo = vncRandRGetInfo; -- rp->rrSetConfig = vncRandRSetConfig; -+ rp->rrSetConfig = NULL; -+ rp->rrScreenSetSize = vncRandRScreenSetSize; -+ rp->rrCrtcSet = vncRandRCrtcSet; -+ rp->rrOutputValidateMode = vncRandROutputValidateMode; -+ rp->rrModeDestroy = vncRandRModeDestroy; -+ -+ ret = vncRandRInit(pScreen); -+ if (!ret) return FALSE; - #endif - - diff -ruN /usr/ports/net/tigervnc/files/patch-CMakeLists.txt net/tigervnc/files/patch-CMakeLists.txt --- /usr/ports/net/tigervnc/files/patch-CMakeLists.txt 2013-03-25 00:34:16.197629637 +0900 +++ net/tigervnc/files/patch-CMakeLists.txt 2013-07-23 14:55:25.705248759 +0900 @@ -1,68 +1,11 @@ ---- CMakeLists.txt.orig 2012-03-10 05:34:29.000000000 +0900 -+++ CMakeLists.txt 2012-10-25 19:02:36.642061425 +0900 -@@ -237,6 +237,7 @@ - endif() - - # Check for FLTK -+if(ENABLE_VIEWER) - set(FLTK_SKIP_FLUID TRUE) - set(FLTK_SKIP_OPENGL TRUE) - set(FLTK_SKIP_IMAGES TRUE) -@@ -282,44 +283,7 @@ - set(CMAKE_REQUIRED_LIBRARIES) - endif() - --option(USE_INCLUDED_FLTK -- "Force the use of the FLTK library bundled with the TigerVNC source") --if(NOT FLTK_FOUND OR NOT HAVE_FLTK_DEAD_KEYS OR NOT HAVE_FLTK_CLIPBOARD -- OR NOT HAVE_FLTK_MEDIAKEYS OR NOT HAVE_FLTK_FULLSCREEN -- OR NOT HAVE_FLTK_CURSOR) -- set(USE_INCLUDED_FLTK 1) --endif() --if(USE_INCLUDED_FLTK) -- # Check that we have the proper dependencies -- if(UNIX AND NOT APPLE) -- if(NOT X11_Xft_FOUND) -- message(FATAL_ERROR "Xft headers/libraries not found (needed by FLTK.)") -- endif() -- if(NOT X11_Xinerama_FOUND) -- message(FATAL_ERROR "Xinerama headers/libraries not found (needed by FLTK.)") -- endif() -- if(NOT X11_Xfixes_FOUND) -- message(FATAL_ERROR "Xfixes headers/libraries not found (needed by FLTK.)") -- endif() -- if(NOT X11_Xcursor_FOUND) -- message(FATAL_ERROR "Xcursor headers/libraries not found (needed by FLTK.)") -- endif() -- endif() -- -- set(HAVE_FLTK_DEAD_KEYS 1) -- set(HAVE_FLTK_CLIPBOARD 1) -- set(HAVE_FLTK_MEDIAKEYS 1) -- set(HAVE_FLTK_FULLSCREEN 1) -- set(HAVE_FLTK_CURSOR 1) -- set(FLTK_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/common/fltk) -- set(FLTK_LIBRARIES) -- if(APPLE) -- set(FLTK_LIBRARIES "-framework Carbon -framework Cocoa -framework ApplicationServices") -- elseif(NOT WIN32) -- set(FLTK_LIBRARIES "-ldl") -- endif() -- message(STATUS "Using included FLTK library") --endif() -+endif() # ENABLE_VIEWER - - # Check for GNUTLS library - option(ENABLE_GNUTLS "Enable protocol encryption and advanced authentication" ON) -@@ -409,7 +373,10 @@ - if(ENABLE_NLS) - add_subdirectory(po) - endif() --add_subdirectory(vncviewer) -+ -+if(ENABLE_VIEWER) -+ add_subdirectory(vncviewer) -+endif() - - include(cmake/BuildPackages.cmake) +--- CMakeLists.txt.orig 2013-07-21 16:21:37.028241067 +0000 ++++ CMakeLists.txt 2013-07-21 16:21:59.310260222 +0000 +@@ -26,7 +26,7 @@ + # Installation paths + set(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin") + set(DATA_DIR "${CMAKE_INSTALL_PREFIX}/share") +-set(MAN_DIR "${DATA_DIR}/man") ++set(MAN_DIR "${CMAKE_INSTALL_PREFIX}/man") + set(LOCALE_DIR "${DATA_DIR}/locale") + set(DOC_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/${CMAKE_PROJECT_NAME}-${VERSION}") diff -ruN /usr/ports/net/tigervnc/files/patch-hw-vnc-off-by-one-error net/tigervnc/files/patch-hw-vnc-off-by-one-error --- /usr/ports/net/tigervnc/files/patch-hw-vnc-off-by-one-error 1970-01-01 09:00:00.000000000 +0900 +++ net/tigervnc/files/patch-hw-vnc-off-by-one-error 2013-07-22 13:45:16.429239667 +0900 @@ -0,0 +1,65 @@ +--- unix/xserver/hw/vnc/vncHooks.cc.orig 2013-07-01 12:41:24.000000000 +0000 ++++ unix/xserver/hw/vnc/vncHooks.cc 2013-07-20 13:38:14.424240970 +0000 +@@ -119,7 +119,7 @@ + + // screen functions + +-#if XORG < 112 ++#if XORG <= 112 + static Bool vncHooksCloseScreen(int i, ScreenPtr pScreen); + #else + static Bool vncHooksCloseScreen(ScreenPtr pScreen); +@@ -140,7 +140,7 @@ + DeviceIntPtr pDev, + #endif + ScreenPtr pScreen, CursorPtr cursor); +-#if XORG < 112 ++#if XORG <= 112 + static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, + pointer pReadmask); + #else +@@ -367,7 +367,7 @@ + // CloseScreen - unwrap the screen functions and call the original CloseScreen + // function + +-#if XORG < 112 ++#if XORG <= 112 + static Bool vncHooksCloseScreen(int i, ScreenPtr pScreen_) + #else + static Bool vncHooksCloseScreen(ScreenPtr pScreen_) +@@ -405,7 +405,7 @@ + + DBGPRINT((stderr,"vncHooksCloseScreen: unwrapped screen functions\n")); + +-#if XORG < 112 ++#if XORG <= 112 + return (*pScreen->CloseScreen)(i, pScreen); + #else + return (*pScreen->CloseScreen)(pScreen); +@@ -574,7 +574,7 @@ + // BlockHandler - ignore any changes during the block handler - it's likely + // these are just drawing the cursor. + +-#if XORG < 112 ++#if XORG <= 112 + static void vncHooksBlockHandler(int i, pointer blockData, pointer pTimeout, + pointer pReadmask) + #else +@@ -582,7 +582,7 @@ + pointer pReadmask) + #endif + { +-#if XORG < 112 ++#if XORG <= 112 + SCREEN_UNWRAP(screenInfo.screens[i], BlockHandler); + #else + SCREEN_UNWRAP(pScreen_, BlockHandler); +@@ -590,7 +590,7 @@ + + vncHooksScreen->desktop->ignoreHooks(true); + +-#if XORG < 112 ++#if XORG <= 112 + (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask); + #else + (*pScreen->BlockHandler) (pScreen, pTimeout, pReadmask); diff -ruN /usr/ports/net/tigervnc/files/patch-hw_vnc_Makefile.am net/tigervnc/files/patch-hw_vnc_Makefile.am --- /usr/ports/net/tigervnc/files/patch-hw_vnc_Makefile.am 2013-03-25 00:34:16.197629637 +0900 +++ net/tigervnc/files/patch-hw_vnc_Makefile.am 1970-01-01 09:00:00.000000000 +0900 @@ -1,11 +0,0 @@ ---- unix/xserver/hw/vnc/Makefile.am.orig 2012-04-26 00:10:38.000000000 +0900 -+++ unix/xserver/hw/vnc/Makefile.am 2012-05-27 14:48:07.000000000 +0900 -@@ -67,7 +67,7 @@ - - pixman.h: - for i in ${XSERVERLIBS_CFLAGS}; do \ -- if [[ "$$i" =~ "pixman" ]]; then \ -+ if [ "$$i" = "pixman" ]; then \ - PIXMANINCDIR=`echo $$i | sed s/-I//g`; \ - fi; \ - done; \ diff -ruN /usr/ports/net/tigervnc/files/xserver112.patch net/tigervnc/files/xserver112.patch --- /usr/ports/net/tigervnc/files/xserver112.patch 2013-05-30 10:47:00.868595489 +0900 +++ net/tigervnc/files/xserver112.patch 1970-01-01 09:00:00.000000000 +0900 @@ -1,91 +0,0 @@ -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) >Release-Note: >Audit-Trail: >Unformatted: