temp/gtk4.0: fork from alpine to fix bug in PinePhone (MR 3122)

Add hack to prevent GTK4 apps to be unusable in the PinePhone.

Fixes #1510
Upstream issue https://gitlab.gnome.org/GNOME/gtk/-/issues/4763

A good solution will take a bit more time but is an on-going process
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4687

[ci:skip-build]: already built successfully in CI
This commit is contained in:
Pablo Correa Gómez 2022-05-08 20:45:04 +02:00 committed by Oliver Smith
parent e822fde276
commit 72075de4e0
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
5 changed files with 165 additions and 0 deletions

129
temp/gtk4.0/APKBUILD Normal file
View file

@ -0,0 +1,129 @@
# Forked from Alpine to apply patch to fix PinePhone
# Disabled docs and broadway backend
pkgname=gtk4.0
pkgver=9999
_pkgver=4.6.3
pkgrel=0
pkgdesc="The GTK Toolkit (v4)"
url="https://www.gtk.org/"
install="$pkgname.post-install $pkgname.post-upgrade $pkgname.post-deinstall"
arch="all !s390x !riscv64" # blocked by polkit -> colord
options="!check" # Test suite is known to fail upstream
license="LGPL-2.1-or-later"
subpackages="$pkgname-demo $pkgname-dev $pkgname-lang $pkgname-dbg"
depends="shared-mime-info gtk-update-icon-cache"
depends_dev="
atk-dev
gdk-pixbuf-dev
glib-dev
libepoxy-dev
libxext-dev
libxi-dev
libxinerama-dev
wayland-protocols
wayland-libs-client
wayland-libs-cursor
libxkbcommon-dev
vulkan-headers
"
makedepends="
$depends_dev
perl
cups-dev
expat-dev
gettext-dev
gnutls-dev
gobject-introspection-dev
libice-dev
tiff-dev
zlib-dev
at-spi2-atk-dev
cairo-dev
fontconfig-dev
pango-dev
wayland-dev
libx11-dev
libxcomposite-dev
libxcursor-dev
libxdamage-dev
libxfixes-dev
libxrandr-dev
meson
iso-codes-dev
vulkan-loader-dev
sassc
colord-dev
gstreamer-dev
gst-plugins-bad-dev
gtk-doc>=1.33
gi-docgen
py3-docutils
graphene-dev
"
source="https://download.gnome.org/sources/gtk/${_pkgver%.*}/gtk-$_pkgver.tar.xz
gdk-hack-context-realize.patch
"
builddir="$srcdir/gtk-$_pkgver"
build() {
# We don't run tests and they currently fail to build
abuild-meson \
-Dgtk_doc=false \
-Dbroadway-backend=false \
-Dman-pages=false \
-Dbuild-tests=false \
. output
meson compile ${JOBS:+-j ${JOBS}} -C output
}
package() {
DESTDIR="$pkgdir" meson install --no-rebuild -C output
# use gtk-update-icon-cache from gtk+2.0 for now. The icon cache is forward
# compatible so this is fine.
# do the same for gtk4-update-icon-cache
rm -f "$pkgdir"/usr/bin/gtk-update-icon-cache
rm -f "$pkgdir"/usr/bin/gtk4-update-icon-cache
rm -f "$pkgdir"/usr/share/man/man1/gtk-update-icon-cache.1
}
demo() {
pkgdesc="$pkgdesc (demonstration application)"
amove \
usr/bin/gtk4-demo \
usr/bin/gtk4-demo-application \
usr/bin/gtk4-icon-browser \
usr/bin/gtk4-print-editor \
usr/bin/gtk4-widget-factory \
usr/share/applications/org.gtk.Demo4.desktop \
usr/share/applications/org.gtk.IconBrowser4.desktop \
usr/share/applications/org.gtk.PrintEditor4.desktop \
usr/share/applications/org.gtk.WidgetFactory4.desktop \
usr/share/glib-2.0/schemas/org.gtk.Demo4.gschema.xml \
usr/share/gtk-4.0/gtk4builder.rng \
usr/share/icons
}
dev() {
default_dev
amove \
usr/bin/gtk4-builder-tool \
usr/bin/gtk4-encode-symbolic-svg \
usr/bin/gtk4-query-settings \
usr/share/gtk-4.0/valgrind
}
lang() {
default_lang
# These are some localized emoji labels.
amove usr/share/gtk-4.0/emoji
}
sha512sums="
0e96b39a8171ccefc24808d1af8af8e3cbcc9b403c1bdfd85778ed2e824c93e3687b7baa1237b05fa35181d300eacfd6cc9f79c7a6eef70b365991f0a2769f71 gtk-4.6.3.tar.xz
e0ab58ad4ad1ce73ac6f038144a8de0326d41c764f91d4b91864efcfff548d7a1ba1318b9c4b276821e72d8612a0677533914fd5870a1a9f2db483a4b43bff5d gdk-hack-context-realize.patch
"

View file

@ -0,0 +1,27 @@
This is a hack to solve some crashes for GTK4 apps in the pinephone
by dirty fixing an upstream bug[1]. The real fix will take longer and
will not be trivial to backport[2]. In the meanwhile, we force a GLES
context if it is allowed and the shared context is also using GLES,
to avoid the creation of a GL context with wrong version. Hopefully,
this should not have additional side-effects for other devices.
[1] https://gitlab.gnome.org/GNOME/gtk/-/issues/4763
[2] https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4687
diff --git i/gdk/gdkglcontext.c w/gdk/gdkglcontext.c
index 3869b14da0..57a3661492 100644
--- i/gdk/gdkglcontext.c
+++ w/gdk/gdkglcontext.c
@@ -280,6 +280,11 @@ gdk_gl_context_real_realize (GdkGLContext *context,
G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
if (share != NULL)
- gdk_gl_context_get_required_version (share, &major, &minor);
+ {
+ gdk_gl_context_get_required_version (share, &major, &minor);
+ if (gdk_gl_context_get_use_es (share) &&
+ gdk_gl_context_is_api_allowed (context, GDK_GL_API_GLES, NULL))
+ gdk_gl_context_set_allowed_apis (context, GDK_GL_API_GLES);
+ }
else
gdk_gl_context_get_required_version (context, &major, &minor);

View file

@ -0,0 +1,3 @@
#!/bin/sh
rm -f etc/gtk-4.0/gdk-pixbuf.loaders

View file

@ -0,0 +1,5 @@
#!/bin/sh
mkdir -p etc/gtk-4.0
usr/bin/gdk-pixbuf-query-loaders > etc/gtk-4.0/gdk-pixbuf.loaders

View file

@ -0,0 +1 @@
gtk4.0.post-install