summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--user/tigervnc/APKBUILD6
-rw-r--r--user/tigervnc/endian.patch51
2 files changed, 55 insertions, 2 deletions
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 <awilfox@adelielinux.org>
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);