From 348791237928aa54acc58bfc9e52a419dcec328d Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Tue, 23 Oct 2018 19:30:51 +0000 Subject: user/tigervnc: add patch to fix BE<->LE connections --- user/tigervnc/APKBUILD | 6 ++++-- user/tigervnc/endian.patch | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 user/tigervnc/endian.patch diff --git a/user/tigervnc/APKBUILD b/user/tigervnc/APKBUILD index eaf175005..9b88fe183 100644 --- a/user/tigervnc/APKBUILD +++ b/user/tigervnc/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: A. Wilcox pkgname=tigervnc pkgver=1.9.0 -pkgrel=0 +pkgrel=1 pkgdesc="High-performance, platform-neutral VNC remote desktop application" url="http://tigervnc.org/" arch="all" @@ -15,6 +15,7 @@ makedepends="cmake fltk-dev fontconfig-dev gnutls-dev intltool subpackages="$pkgname-lang $pkgname-doc" source="tigervnc-$pkgver.tar.gz::https://github.com/TigerVNC/tigervnc/archive/v$pkgver.tar.gz use-intltool.patch + endian.patch " build() { @@ -40,4 +41,5 @@ package() { } sha512sums="333910f567e6b5e4a5a22d898b2d4c3f4b834cb4cc8fc13ff55d31401894c0d5122a127692ec5eb51e412c945ff3ea5b8146f9ab22cbe1e47541e09239ec8c9d tigervnc-1.9.0.tar.gz -5c1cee98b7ba41c7cf121480fdfe16d5ef17c9562ff2ba3ea4e74235161fc63e2e3ed63e788c0aa999610b660b394c1269d6fdcc9716c5563651fd67d723f619 use-intltool.patch" +5c1cee98b7ba41c7cf121480fdfe16d5ef17c9562ff2ba3ea4e74235161fc63e2e3ed63e788c0aa999610b660b394c1269d6fdcc9716c5563651fd67d723f619 use-intltool.patch +189a51a542b368e4db22174d09f5b656848e94577bbf93b2388f54529f1c7c2d32e5b5283551b3fb067ba21f6464f60989e22d4cd11ed3d87d5c931301555b49 endian.patch" diff --git a/user/tigervnc/endian.patch b/user/tigervnc/endian.patch new file mode 100644 index 000000000..e09edf9c5 --- /dev/null +++ b/user/tigervnc/endian.patch @@ -0,0 +1,51 @@ +diff --git a/vncviewer/Surface_X11.cxx b/vncviewer/Surface_X11.cxx +index 3523da3d..6562634d 100644 +--- a/vncviewer/Surface_X11.cxx ++++ b/vncviewer/Surface_X11.cxx +@@ -109,6 +109,7 @@ void Surface::blend(Surface* dst, int src_x, int src_y, int x, int y, int w, int + + void Surface::alloc() + { ++ XRenderPictFormat templ; + XRenderPictFormat* format; + + // Might not be open at this point +@@ -117,7 +118,37 @@ void Surface::alloc() + pixmap = XCreatePixmap(fl_display, XDefaultRootWindow(fl_display), + width(), height(), 32); + +- format = XRenderFindStandardFormat(fl_display, PictStandardARGB32); ++ // Our code assumes a BGRA byte order, regardless of what the endian ++ // of the machine is or the native byte order of XImage, so make sure ++ // we find such a format ++ templ.type = PictTypeDirect; ++ templ.depth = 32; ++#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ++ templ.direct.alpha = 0; ++ templ.direct.red = 8; ++ templ.direct.green = 16; ++ templ.direct.blue = 24; ++#else ++ templ.direct.alpha = 24; ++ templ.direct.red = 16; ++ templ.direct.green = 8; ++ templ.direct.blue = 0; ++#endif ++ templ.direct.alphaMask = 0xff; ++ templ.direct.redMask = 0xff; ++ templ.direct.greenMask = 0xff; ++ templ.direct.blueMask = 0xff; ++ ++ format = XRenderFindFormat(fl_display, PictFormatType | PictFormatDepth | ++ PictFormatRed | PictFormatRedMask | ++ PictFormatGreen | PictFormatGreenMask | ++ PictFormatBlue | PictFormatBlueMask | ++ PictFormatAlpha | PictFormatAlphaMask, ++ &templ, 0); ++ ++ if (!format) ++ throw rdr::Exception("XRenderFindFormat"); ++ + picture = XRenderCreatePicture(fl_display, pixmap, format, 0, NULL); + + visFormat = XRenderFindVisualFormat(fl_display, fl_visual->visual); -- cgit v1.2.3-60-g2f50