summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathon Fernyhough2019-11-26 10:27:59 +0000
committerJonathon Fernyhough2019-11-26 10:27:59 +0000
commita8c986ca8838690e7a20699f27ce7c21542d522b (patch)
treea4c92da0a87bb9994b6910a02ba539e792dda7cf
downloadaur-a8c986ca8838690e7a20699f27ce7c21542d522b.tar.gz
Initial commit
-rw-r--r--.SRCINFO174
-rw-r--r--.gitignore7
-rw-r--r--PKGBUILD180
-rw-r--r--README.md54
-rw-r--r--appearance__buttons-menus-icons.patch57
-rw-r--r--appearance__disable-backdrop.patch13
-rw-r--r--appearance__file-chooser.patch29
-rw-r--r--appearance__message-dialogs.patch149
-rw-r--r--appearance__print-dialog.patch51
-rw-r--r--appearance__smaller-statusbar.patch15
-rw-r--r--csd__clean-headerbar.patch82
-rw-r--r--csd__disabled-by-default.patch19
-rw-r--r--csd__server-side-shadow.patch13
-rw-r--r--file-chooser__places-sidebar.patch62
-rw-r--r--file-chooser__typeahead.patch59
-rw-r--r--fixes__atk-bridge-errors.patch15
-rw-r--r--fixes__labels-wrapping.patch19
-rw-r--r--fixes__too-large-menu-covers-bar.disabled-patch21
-rw-r--r--gtk3.install3
-rw-r--r--other__default-settings.patch39
-rw-r--r--other__hide-insert-emoji.patch28
-rw-r--r--other__mnemonics-delay.patch13
-rw-r--r--popovers__color-chooser.patch22
-rw-r--r--popovers__file-chooser-list.patch61
-rw-r--r--popovers__places-sidebar.patch146
-rw-r--r--series20
-rw-r--r--smaller-adwaita.css98
27 files changed, 1449 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..ac95cb3bdc75
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,174 @@
+pkgbase = gtk3-classic
+ pkgdesc = GTK3 patched for classic desktops like XFCE or MATE. Please see README.
+ pkgver = 3.24.12
+ pkgrel = 1
+ url = https://github.com/krumelmonster/gtk3-mushrooms
+ install = gtk3.install
+ arch = x86_64
+ license = LGPL
+ makedepends = gobject-introspection
+ makedepends = libcanberra
+ makedepends = gtk-doc
+ makedepends = sassc
+ makedepends = libcups
+ makedepends = meson
+ makedepends = quilt
+ makedepends = atk
+ makedepends = cairo
+ makedepends = libxcursor
+ makedepends = libxinerama
+ makedepends = libxrandr
+ makedepends = libxi
+ makedepends = libepoxy
+ makedepends = gdk-pixbuf2
+ makedepends = fribidi
+ makedepends = libxcomposite
+ makedepends = libxdamage
+ makedepends = pango
+ makedepends = shared-mime-info
+ makedepends = at-spi2-atk
+ makedepends = wayland
+ makedepends = libxkbcommon
+ makedepends = json-glib
+ makedepends = librsvg
+ makedepends = wayland-protocols
+ makedepends = desktop-file-utils
+ makedepends = mesa
+ makedepends = gtk-update-icon-cache
+ makedepends = adwaita-icon-theme
+ makedepends = cantarell-fonts
+ makedepends = lib32-atk
+ makedepends = lib32-cairo
+ makedepends = lib32-libxcursor
+ makedepends = lib32-libxinerama
+ makedepends = lib32-libxrandr
+ makedepends = lib32-libxi
+ makedepends = lib32-libepoxy
+ makedepends = lib32-gdk-pixbuf2
+ makedepends = lib32-fribidi
+ makedepends = lib32-libxcomposite
+ makedepends = lib32-libxdamage
+ makedepends = lib32-pango
+ makedepends = lib32-at-spi2-atk
+ makedepends = lib32-wayland
+ makedepends = lib32-libxkbcommon
+ makedepends = lib32-json-glib
+ makedepends = lib32-librsvg
+ makedepends = lib32-mesa
+ makedepends = lib32-libcups
+ makedepends = lib32-krb5
+ makedepends = lib32-e2fsprogs
+ provides = gtk3=3.24.12
+ provides = gtk3-mushrooms=3.24.12
+ provides = gtk3-print-backends
+ conflicts = gtk3
+ conflicts = gtk3-print-backends
+ source = series
+ source = appearance__buttons-menus-icons.patch
+ source = appearance__disable-backdrop.patch
+ source = appearance__file-chooser.patch
+ source = appearance__message-dialogs.patch
+ source = appearance__print-dialog.patch
+ source = appearance__smaller-statusbar.patch
+ source = csd__clean-headerbar.patch
+ source = csd__disabled-by-default.patch
+ source = csd__server-side-shadow.patch
+ source = file-chooser__places-sidebar.patch
+ source = file-chooser__typeahead.patch
+ source = fixes__atk-bridge-errors.patch
+ source = fixes__labels-wrapping.patch
+ source = fixes__too-large-menu-covers-bar.disabled-patch
+ source = other__default-settings.patch
+ source = other__hide-insert-emoji.patch
+ source = other__mnemonics-delay.patch
+ source = popovers__color-chooser.patch
+ source = popovers__file-chooser-list.patch
+ source = popovers__places-sidebar.patch
+ source = smaller-adwaita.css
+ source = https://download.gnome.org/sources/gtk+/3.24/gtk+-3.24.12.tar.xz
+ source = settings.ini::https://git.archlinux.org/svntogit/packages.git/plain/trunk/settings.ini?h=packages/gtk3&id=70ed1d42b78a46147731604341db44186798780f
+ source = gtk-query-immodules-3.0.hook::https://git.archlinux.org/svntogit/packages.git/plain/trunk/gtk-query-immodules-3.0.hook?h=packages/gtk3&id=70ed1d42b78a46147731604341db44186798780f
+ source = README.md
+ sha256sums = 4935ec23cbd0150bd479fc457861d3a665354509c3ff933997827c7141c8657c
+ sha256sums = 728075255a559f0ec2cbde78c0fdcb9bdaa6859f21cdd8e0070595233822029e
+ sha256sums = 795f745545a7d0c899c27d0832e15a1376f6e34fa1ef9c2ceada5f7f575cbb79
+ sha256sums = 8ead5c4a6fbad9b1fbf81bf67ed2e1b8a8ce8d25d459c0fff9372937963b4f95
+ sha256sums = 78f4086512d3bac999b62651b952412aa5270d7822c88e9c14900f53a93b42f4
+ sha256sums = 768e6b45dd1c21f035c714d49e4d41ac082833054ac83060b601dbdae6a890dc
+ sha256sums = b1922fc4e99691ebaa4c0becc1f6fd6bcfe286f4451c946c4bec51c352b04e61
+ sha256sums = 4803ff9b5a279516db5c099b1ffb18860906ce5bbcace16a8021e8cce7859c81
+ sha256sums = 554772d3f8bf7232d1bbbf724d83a0e1e21c2e404721e6c9dfd4a4e4c3372a42
+ sha256sums = 14e98ac6b7a54653ee550a855b928f6f47645710ca5ebc7593d27953a28b115a
+ sha256sums = fcf825d83ef4ff58440e6f0f6ba0fcd75069777ca8c82c7f6c427dc911e44374
+ sha256sums = 150fa6b5e95a65ff22f80b58dadc683b6e69abe6dad4f1d8389451329df35a1e
+ sha256sums = 85854e99c0c52ebccc7ee9a8e70cbbe04ea892c85290195a11a551bb1a096b2f
+ sha256sums = 2b1d2f8791ca9b0e46f8a33e8ef5e266995f9914fd43792471a34073565650bc
+ sha256sums = 701b57eb831345fa89ce88105d1b43d61de144bfc613f33dbb027c526a101985
+ sha256sums = 98b0815e5f5610adaa0c192e2860efb77678d37ae095a88869c17397f8ce9b60
+ sha256sums = 2a6541d70fe85fc0044e754423c6813c307a80ec5aa5a58df77acb8181f1ff81
+ sha256sums = e930370d96697981cbf13af18f36f2146c3e2279ae3d59b8a5837410c99c8ef8
+ sha256sums = 73e832b83e51aed6f662d7b7ee60ae471b3d28796250cbd40ec3a32c49b89831
+ sha256sums = ddd05293726f3c87db96662c1ffa2ac5a33e00f7dc198be4cd483ed559e94be8
+ sha256sums = 22a092521ea7e156d4532e6c6aaddba5fe51b6ca91345665e7369cef56ac2e1c
+ sha256sums = ba93f62e249f2713dbfe6c82de1be4ac655264d6407ed3dc5e05323027520f31
+ sha256sums = 1384eba5614fed160044ae0d32369e3df7b4f517b03f4b1f24d383e528f4be83
+ sha256sums = 01fc1d81dc82c4a052ac6e25bf9a04e7647267cc3017bc91f9ce3e63e5eb9202
+ sha256sums = de46e5514ff39a7a65e01e485e874775ab1c0ad20b8e94ada43f4a6af1370845
+ sha256sums = 1d2e3c41c7de03a31d717b09e053c88cbaca2ae74eefd982549c49de81c21ada
+
+pkgname = gtk3-classic
+ depends = atk
+ depends = cairo
+ depends = libxcursor
+ depends = libxinerama
+ depends = libxrandr
+ depends = libxi
+ depends = libepoxy
+ depends = gdk-pixbuf2
+ depends = fribidi
+ depends = libxcomposite
+ depends = libxdamage
+ depends = pango
+ depends = shared-mime-info
+ depends = at-spi2-atk
+ depends = wayland
+ depends = libxkbcommon
+ depends = json-glib
+ depends = librsvg
+ depends = wayland-protocols
+ depends = desktop-file-utils
+ depends = mesa
+ depends = gtk-update-icon-cache
+ optdepends = libcups: printers in printing dialog
+ optdepends = dconf: default GSettings backend
+ optdepends = libcanberra: sounds events
+ optdepends = adwaita-icon-theme: default icon theme
+ optdepends = cantarell-fonts: default font
+
+pkgname = lib32-gtk3-classic
+ pkgdesc = GTK3 patched for classic desktops like XFCE or MATE. (32-bit)
+ depends = lib32-atk
+ depends = lib32-cairo
+ depends = lib32-libxcursor
+ depends = lib32-libxinerama
+ depends = lib32-libxrandr
+ depends = lib32-libxi
+ depends = lib32-libepoxy
+ depends = lib32-gdk-pixbuf2
+ depends = lib32-fribidi
+ depends = lib32-libxcomposite
+ depends = lib32-libxdamage
+ depends = lib32-pango
+ depends = lib32-at-spi2-atk
+ depends = lib32-wayland
+ depends = lib32-libxkbcommon
+ depends = lib32-json-glib
+ depends = lib32-librsvg
+ depends = lib32-mesa
+ depends = lib32-libcups
+ depends = lib32-krb5
+ depends = lib32-e2fsprogs
+ depends = gtk3-classic>=3.24.12
+ provides = lib32-gtk3=3.24.12
+ conflicts = lib32-gtk3
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..88906de3a62b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+pkg
+src
+*.tar.xz
+*.tar.gz
+gtk-query-immodules-3.0.hook
+settings.ini
+*._patch
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..c71967e51f8c
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,180 @@
+# Maintainer: Jonathon Fernyhough <jonathon_at manjaro+dot_org>
+# Upstream maintainer: krumelmonster <krumelmonster@zoho.com>
+# Contributor: Tomasz Gąsior <tomaszgasior.pl>
+
+# This file is based on original PKGBUILD of GTK3 package.
+# https://git.archlinux.org/svntogit/packages.git/plain/trunk/PKGBUILD?h=packages/gtk3
+
+__arch_pkg_commit="70ed1d42b78a46147731604341db44186798780f"
+
+pkgbase=gtk3-classic
+pkgname=($pkgbase lib32-$pkgbase)
+pkgver=3.24.12
+pkgrel=1
+pkgdesc="GTK3 patched for classic desktops like XFCE or MATE. Please see README."
+url="https://github.com/krumelmonster/gtk3-mushrooms"
+conflicts=(gtk3 gtk3-print-backends)
+provides=(gtk3=$pkgver gtk3-mushrooms=$pkgver gtk3-print-backends)
+arch=(x86_64)
+license=(LGPL)
+makedepends=(
+ gobject-introspection libcanberra gtk-doc sassc libcups meson quilt
+
+ atk cairo libxcursor libxinerama libxrandr libxi libepoxy gdk-pixbuf2 fribidi
+ libxcomposite libxdamage pango shared-mime-info at-spi2-atk wayland libxkbcommon
+ json-glib librsvg wayland-protocols desktop-file-utils mesa gtk-update-icon-cache
+ adwaita-icon-theme cantarell-fonts
+
+ lib32-atk lib32-cairo lib32-libxcursor lib32-libxinerama lib32-libxrandr lib32-libxi
+ lib32-libepoxy lib32-gdk-pixbuf2 lib32-fribidi lib32-libxcomposite lib32-libxdamage
+ lib32-pango lib32-at-spi2-atk lib32-wayland lib32-libxkbcommon lib32-json-glib
+ lib32-librsvg lib32-mesa lib32-libcups lib32-krb5 lib32-e2fsprogs
+)
+install=gtk3.install
+source=(
+ # Patch files.
+ series
+ appearance__buttons-menus-icons.patch
+ appearance__disable-backdrop.patch
+ appearance__file-chooser.patch
+ appearance__message-dialogs.patch
+ appearance__print-dialog.patch
+ appearance__smaller-statusbar.patch
+ csd__clean-headerbar.patch
+ csd__disabled-by-default.patch
+ csd__server-side-shadow.patch
+ file-chooser__places-sidebar.patch
+ file-chooser__typeahead.patch
+ fixes__atk-bridge-errors.patch
+ fixes__labels-wrapping.patch
+ fixes__too-large-menu-covers-bar.disabled-patch
+ other__default-settings.patch
+ other__hide-insert-emoji.patch
+ other__mnemonics-delay.patch
+ popovers__color-chooser.patch
+ popovers__file-chooser-list.patch
+ popovers__places-sidebar.patch
+
+ # Theme CSS stylesheet.
+ smaller-adwaita.css
+
+ # GTK source code.
+ "https://download.gnome.org/sources/gtk+/${pkgver%.*}/gtk+-$pkgver.tar.xz"
+
+ # Arch Linux package files.
+ "settings.ini::https://git.archlinux.org/svntogit/packages.git/plain/trunk/settings.ini?h=packages/gtk3&id=$__arch_pkg_commit"
+ "gtk-query-immodules-3.0.hook::https://git.archlinux.org/svntogit/packages.git/plain/trunk/gtk-query-immodules-3.0.hook?h=packages/gtk3&id=$__arch_pkg_commit"
+
+ README.md
+)
+sha256sums=('4935ec23cbd0150bd479fc457861d3a665354509c3ff933997827c7141c8657c'
+ '728075255a559f0ec2cbde78c0fdcb9bdaa6859f21cdd8e0070595233822029e'
+ '795f745545a7d0c899c27d0832e15a1376f6e34fa1ef9c2ceada5f7f575cbb79'
+ '8ead5c4a6fbad9b1fbf81bf67ed2e1b8a8ce8d25d459c0fff9372937963b4f95'
+ '78f4086512d3bac999b62651b952412aa5270d7822c88e9c14900f53a93b42f4'
+ '768e6b45dd1c21f035c714d49e4d41ac082833054ac83060b601dbdae6a890dc'
+ 'b1922fc4e99691ebaa4c0becc1f6fd6bcfe286f4451c946c4bec51c352b04e61'
+ '4803ff9b5a279516db5c099b1ffb18860906ce5bbcace16a8021e8cce7859c81'
+ '554772d3f8bf7232d1bbbf724d83a0e1e21c2e404721e6c9dfd4a4e4c3372a42'
+ '14e98ac6b7a54653ee550a855b928f6f47645710ca5ebc7593d27953a28b115a'
+ 'fcf825d83ef4ff58440e6f0f6ba0fcd75069777ca8c82c7f6c427dc911e44374'
+ '150fa6b5e95a65ff22f80b58dadc683b6e69abe6dad4f1d8389451329df35a1e'
+ '85854e99c0c52ebccc7ee9a8e70cbbe04ea892c85290195a11a551bb1a096b2f'
+ '2b1d2f8791ca9b0e46f8a33e8ef5e266995f9914fd43792471a34073565650bc'
+ '701b57eb831345fa89ce88105d1b43d61de144bfc613f33dbb027c526a101985'
+ '98b0815e5f5610adaa0c192e2860efb77678d37ae095a88869c17397f8ce9b60'
+ '2a6541d70fe85fc0044e754423c6813c307a80ec5aa5a58df77acb8181f1ff81'
+ 'e930370d96697981cbf13af18f36f2146c3e2279ae3d59b8a5837410c99c8ef8'
+ '73e832b83e51aed6f662d7b7ee60ae471b3d28796250cbd40ec3a32c49b89831'
+ 'ddd05293726f3c87db96662c1ffa2ac5a33e00f7dc198be4cd483ed559e94be8'
+ '22a092521ea7e156d4532e6c6aaddba5fe51b6ca91345665e7369cef56ac2e1c'
+ 'ba93f62e249f2713dbfe6c82de1be4ac655264d6407ed3dc5e05323027520f31'
+ '1384eba5614fed160044ae0d32369e3df7b4f517b03f4b1f24d383e528f4be83'
+ '01fc1d81dc82c4a052ac6e25bf9a04e7647267cc3017bc91f9ce3e63e5eb9202'
+ 'de46e5514ff39a7a65e01e485e874775ab1c0ad20b8e94ada43f4a6af1370845'
+ '1d2e3c41c7de03a31d717b09e053c88cbaca2ae74eefd982549c49de81c21ada')
+
+prepare()
+{
+ QUILT_PATCHES=. quilt push -av
+
+ cat "$srcdir/smaller-adwaita.css" | tee -a "$srcdir"/gtk+-"$pkgver"/gtk/theme/Adwaita/gtk-contained{,-dark}.css > /dev/null
+}
+
+build()
+{
+ CFLAGS+=" -DG_ENABLE_DEBUG -DG_DISABLE_CAST_CHECKS"
+
+ # 64-bit
+ arch-meson gtk+-$pkgver build \
+ -D broadway_backend=true \
+ -D colord=no \
+ -D demos=true \
+ -D examples=false \
+ -D tests=false \
+ -D installed_tests=false
+ ninja -C build
+
+ # 32-bit
+ export PKG_CONFIG_LIBDIR="/usr/lib32/pkgconfig"
+ export PKG_CONFIG_PATH="/usr/share/pkgconfig"
+
+ CFLAGS+=" -m32"
+ CXXFLAGS+=" -m32"
+ LDFLAGS+=" -m32"
+
+ linux32 arch-meson gtk+-$pkgver build32 \
+ -D broadway_backend=true \
+ -D colord=no \
+ -D demos=false \
+ -D examples=false \
+ -D tests=false \
+ -D installed_tests=false \
+ -D libdir=/usr/lib32
+ linux32 ninja -C build32
+}
+
+package_gtk3-classic()
+{
+ depends=(
+ atk cairo libxcursor libxinerama libxrandr libxi libepoxy gdk-pixbuf2 fribidi
+ libxcomposite libxdamage pango shared-mime-info at-spi2-atk wayland libxkbcommon
+ json-glib librsvg wayland-protocols desktop-file-utils mesa gtk-update-icon-cache
+ )
+ optdepends=(
+ 'libcups: printers in printing dialog'
+ 'dconf: default GSettings backend'
+ 'libcanberra: sounds events'
+ 'adwaita-icon-theme: default icon theme'
+ 'cantarell-fonts: default font'
+ )
+
+ DESTDIR="$pkgdir" meson install -C build
+
+ install -Dt "$pkgdir/usr/share/gtk-3.0" -m644 settings.ini
+ install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 gtk-query-immodules-3.0.hook
+
+ rm "$pkgdir/usr/bin/gtk-update-icon-cache"
+
+ install -Dm644 "$srcdir"/README.md "$pkgdir/usr/share/gtk-3.0/README.md"
+ sed -i 's/mushrooms/classic/g' "$pkgdir/usr/share/gtk-3.0/README.md"
+}
+
+package_lib32-gtk3-classic()
+{
+ pkgdesc="GTK3 patched for classic desktops like XFCE or MATE. (32-bit)"
+ depends=(
+ lib32-atk lib32-cairo lib32-libxcursor lib32-libxinerama lib32-libxrandr lib32-libxi
+ lib32-libepoxy lib32-gdk-pixbuf2 lib32-fribidi lib32-libxcomposite lib32-libxdamage
+ lib32-pango lib32-at-spi2-atk lib32-wayland lib32-libxkbcommon lib32-json-glib
+ lib32-librsvg lib32-mesa lib32-libcups lib32-krb5 lib32-e2fsprogs
+ "gtk3-classic>=$pkgver"
+ )
+ conflicts=("lib32-gtk3")
+ provides=("lib32-gtk3=$pkgver")
+
+ DESTDIR="$pkgdir" linux32 meson install -C build32
+
+ rm -fr "$pkgdir"/etc
+ rm -fr "$pkgdir"/usr/{bin,share,include}
+}
diff --git a/README.md b/README.md
new file mode 100644
index 000000000000..48c5912d4d6b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,54 @@
+gtk3-mushrooms
+===
+
+This is a set of patches for GTK3 library that makes it better for me and maybe for you too. ;-) I haven't wide knowledge about programming in C, so quality of this patches can be not good. But it works! See list of patches below.
+
+This package is based on official GTK3 package from Arch Linux. In my version library is compiled without documentation and example applications. Using this package with GNOME desktop is not recommended. It's for classic GTK-based environments like MATE or XFCE.
+
+Client Side Decorations (only on Xorg)
+---
+
+* CSDs are totally disabled by default. All windows are decorated only by window manager. You can enable CSDs by setting `GTK_CSD=0` environment variable (or `GTK_CSD=1` to force CSDs on each GTK3 window).
+* Client side shadows of windows, menus and tooltips are disabled by default. You can enable shadows by setting `GTK_CSD=1` environment variable.
+* Minimize, maximize and close buttons, window title and subtitle are removed from headerbar. Subtitle is added to native titlebar.
+
+File chooser
+---
+
+* Typeahead feature is restored. Recursive file search will not be ran automatically when you start typing. You can still search recursively by Left Alt + S shortcut. See https://gitlab.gnome.org/GNOME/gtk/issues/839.
+* "Other locations" button is removed from places sidebar. All mounted devices and drives are accessible directly. "Networks" button is added for browsing network shares.
+* Trash and XDG user directories (like Pictures, Downloads, Documents) are removed from places sidebar. You can add it as bookmarks.
+* File system button in places sidebar is labeled as "File System" instead of "Computer".
+
+Appearance
+---
+
+* Message dialogs have traditional appearance with left-aligned texts and right-aligned buttons.
+* Some GTK stock icons on buttons and context menus are restored. You can see it in GTK internal dialogs and in some applications.
+* Regular colorized icons instead of symbolic icons are used in file chooser dialog.
+* Appearance of print dialog is less "gnomish", natural margins are restored.
+* Backdrop CSS state is disabled. Inactive windows don't look differently. You can restore backdrop state by setting `GTK_CSD=1` environment variable.
+* Status bars are smaller regardless of used theme.
+* File chooser dialog, places sidebar and color chooser dialog use classic menu as context menu instead of popover.
+
+
+Default settings
+---
+
+* Scrollbars are always visible. You can enable invisible scrollbars by `GTK_OVERLAY_SCROLLING=1` environment variable.
+* Current working directory is opened by default in file chooser dialog instead of section with recently used files.
+* Atril instead of Evince is set as default previewer in printing dialog.
+
+Other
+---
+
+* Delay before showing mnemonics is removed. You don't have to wait when you press Left Alt button.
+* "Insert emoji" context menu item of entry fields is hidden. You can restore it by setting `GTKM_INSERT_EMOJI` environment variable.
+* Default Adwaita theme has smaller controls (buttons, fields, tabs, etc.).
+
+Fixes
+---
+
+* ~~Menu bars are not covered by too high popup menus. See https://gitlab.gnome.org/GNOME/gtk/issues/1016.~~
+* Labels are wrapped similarly to GTK2. This patch fixes too wide windows in applications improperly ported from GTK2.
+* Errors in console output caused by integration with Accessibility Toolkit are hidden. See https://unix.stackexchange.com/questions/230238.
diff --git a/appearance__buttons-menus-icons.patch b/appearance__buttons-menus-icons.patch
new file mode 100644
index 000000000000..5e59fc476c59
--- /dev/null
+++ b/appearance__buttons-menus-icons.patch
@@ -0,0 +1,57 @@
+Index: src/gtk+-3.24.12/gtk/gtkbutton.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkbutton.c
++++ src/gtk+-3.24.12/gtk/gtkbutton.c
+@@ -2164,6 +2164,27 @@ gtk_button_set_label (GtkButton *butto
+ g_return_if_fail (GTK_IS_BUTTON (button));
+
+ priv = button->priv;
++ if (priv->image == NULL)
++ {
++ gchar *use_this_icon = NULL;
++ if (g_strcmp0 (label, _("_Select")) == 0 || g_strcmp0 (label, _("_OK")) == 0) use_this_icon = "gtk-ok";
++ else if (g_strcmp0 (label, _("_Cancel")) == 0) use_this_icon = "gtk-cancel";
++ else if (g_strcmp0 (label, _("_Close")) == 0) use_this_icon = "gtk-close";
++ else if (g_strcmp0 (label, _("_Yes")) == 0) use_this_icon = "gtk-yes";
++ else if (g_strcmp0 (label, _("_No")) == 0) use_this_icon = "gtk-no";
++ else if (g_strcmp0 (label, _("_Print")) == 0) use_this_icon = "gtk-print";
++ else if (g_strcmp0 (label, _("Pre_view")) == 0) use_this_icon = "gtk-print-preview";
++ else if (g_strcmp0 (label, _("_Open")) == 0) use_this_icon = "gtk-open";
++ else if (g_strcmp0 (label, _("_Save")) == 0) use_this_icon = "gtk-save";
++ else if (g_strcmp0 (label, _("_Apply")) == 0) use_this_icon = "gtk-apply";
++ else if (g_strcmp0 (label, _("_Stop")) == 0) use_this_icon = "gtk-stop";
++ else if (g_strcmp0 (label, _("_Delete")) == 0) use_this_icon = "gtk-delete";
++ else if (g_strcmp0 (label, _("_Remove")) == 0) use_this_icon = "gtk-remove";
++ else if (g_strcmp0 (label, _("_Add")) == 0) use_this_icon = "gtk-add";
++ else if (g_strcmp0 (label, _("_Help")) == 0) use_this_icon = "gtk-help";
++ if (use_this_icon)
++ g_object_set (button, "image", gtk_image_new_from_icon_name (use_this_icon, GTK_ICON_SIZE_BUTTON), NULL);
++ }
+
+ new_label = g_strdup (label);
+ g_free (priv->label_text);
+Index: src/gtk+-3.24.12/gtk/gtkmenuitem.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkmenuitem.c
++++ src/gtk+-3.24.12/gtk/gtkmenuitem.c
+@@ -1010,6 +1010,20 @@ gtk_menu_item_new_with_label (const gcha
+ GtkWidget*
+ gtk_menu_item_new_with_mnemonic (const gchar *label)
+ {
++ gchar *use_this_icon = NULL;
++ if (g_strcmp0 (label, _("Copy _Link Address")) == 0 || g_strcmp0 (label, _("_Copy")) == 0
++ || g_strcmp0 (label, _("Copy URL")) == 0) use_this_icon = "gtk-copy";
++ else if (g_strcmp0 (label, _("Cu_t")) == 0) use_this_icon = "gtk-cut";
++ else if (g_strcmp0 (label, _("_Paste")) == 0) use_this_icon = "gtk-paste";
++ else if (g_strcmp0 (label, _("_Delete")) == 0) use_this_icon = "gtk-delete";
++ else if (g_strcmp0 (label, _("Select _All")) == 0) use_this_icon = "gtk-select-all";
++ else if (g_strcmp0 (label, _("_Open Link")) == 0) use_this_icon = "gtk-jump-to";
++ if (use_this_icon)
++ return g_object_new (GTK_TYPE_IMAGE_MENU_ITEM,
++ "use-underline", TRUE,
++ "label", label,
++ "image", gtk_image_new_from_icon_name (use_this_icon, GTK_ICON_SIZE_MENU),
++ NULL);
+ return g_object_new (GTK_TYPE_MENU_ITEM,
+ "use-underline", TRUE,
+ "label", label,
diff --git a/appearance__disable-backdrop.patch b/appearance__disable-backdrop.patch
new file mode 100644
index 000000000000..cbcdf61729a6
--- /dev/null
+++ b/appearance__disable-backdrop.patch
@@ -0,0 +1,13 @@
+Index: src/gtk+-3.24.12/gtk/gtkwindow.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkwindow.c
++++ src/gtk+-3.24.12/gtk/gtkwindow.c
+@@ -8004,7 +8004,7 @@ gtk_window_state_event (GtkWidget
+ GtkWindow *window = GTK_WINDOW (widget);
+ GtkWindowPrivate *priv = window->priv;
+
+- if (event->changed_mask & GDK_WINDOW_STATE_FOCUSED)
++ if ((event->changed_mask & GDK_WINDOW_STATE_FOCUSED) && priv->client_decorated)
+ ensure_state_flag_backdrop (widget);
+
+ if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN)
diff --git a/appearance__file-chooser.patch b/appearance__file-chooser.patch
new file mode 100644
index 000000000000..a7455454d6b9
--- /dev/null
+++ b/appearance__file-chooser.patch
@@ -0,0 +1,29 @@
+Index: src/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
++++ src/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
+@@ -78,6 +78,7 @@
+ #include "gtkseparator.h"
+ #include "gtkmodelbutton.h"
+ #include "gtkgesturelongpress.h"
++#include "gtkcssprovider.h"
+
+ #include <cairo-gobject.h>
+
+@@ -8797,6 +8798,16 @@ post_process_ui (GtkFileChooserWidget *i
+ gtk_popover_set_relative_to (GTK_POPOVER (impl->priv->rename_file_popover), impl->priv->browse_files_tree_view);
+
+ add_actions (impl);
++ static gboolean style_added = FALSE;
++ if (!style_added)
++ {
++ style_added = TRUE;
++ GtkCssProvider *provider = gtk_css_provider_new ();
++ gtk_css_provider_load_from_data (provider,
++ "filechooser .sidebar-icon, filechooser .path-bar, filechooser .path-bar + button { opacity: 1; -gtk-icon-style: regular; }", -1, NULL);
++ gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (GTK_WIDGET (impl)),
++ GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
++ }
+ }
+
+ void
diff --git a/appearance__message-dialogs.patch b/appearance__message-dialogs.patch
new file mode 100644
index 000000000000..9f94d4f8a2fb
--- /dev/null
+++ b/appearance__message-dialogs.patch
@@ -0,0 +1,149 @@
+Index: src/gtk+-3.24.12/gtk/gtkdialog.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkdialog.c
++++ src/gtk+-3.24.12/gtk/gtkdialog.c
+@@ -700,12 +700,12 @@ update_spacings (GtkDialog *dialog)
+
+ /* don't set spacing when buttons are linked */
+ if (gtk_button_box_get_layout (GTK_BUTTON_BOX (priv->action_area)) != GTK_BUTTONBOX_EXPAND)
+- gtk_box_set_spacing (GTK_BOX (priv->action_area), button_spacing);
++ gtk_box_set_spacing (GTK_BOX (priv->action_area), (button_spacing == 0) ? 6 : button_spacing);
+
+ if (!_gtk_container_get_border_width_set (GTK_CONTAINER (priv->action_area)))
+ {
+ gtk_container_set_border_width (GTK_CONTAINER (priv->action_area),
+- action_area_border);
++ (action_area_border == 0) ? 5 : action_area_border);
+ _gtk_container_set_border_width_set (GTK_CONTAINER (priv->action_area), FALSE);
+ }
+ }
+Index: src/gtk+-3.24.12/gtk/gtkmessagedialog.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkmessagedialog.c
++++ src/gtk+-3.24.12/gtk/gtkmessagedialog.c
+@@ -37,6 +37,7 @@
+ #include "gtkintl.h"
+ #include "gtkprivate.h"
+ #include "gtktypebuiltins.h"
++#include "gtkcssprovider.h"
+
+ /**
+ * SECTION:gtkmessagedialog
+@@ -327,7 +328,17 @@ gtk_message_dialog_init (GtkMessageDialo
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
+ G_GNUC_END_IGNORE_DEPRECATIONS
+- gtk_button_box_set_layout (GTK_BUTTON_BOX (action_area), GTK_BUTTONBOX_EXPAND);
++ static gboolean style_added = FALSE;
++ if (!style_added)
++ {
++ style_added = TRUE;
++ GtkCssProvider *provider = gtk_css_provider_new ();
++ gtk_css_provider_load_from_data (provider,
++ "messagedialog > *, messagedialog buttonbox.dialog-action-area, messagedialog box.dialog-action-box { margin: 0; margin-top: 0; padding: 0; }",
++ -1, NULL);
++ gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (GTK_WIDGET (dialog)),
++ GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
++ }
+
+ settings = gtk_widget_get_settings (GTK_WIDGET (dialog));
+ g_object_get (settings, "gtk-keynav-use-caret", &use_caret, NULL);
+@@ -372,6 +383,7 @@ setup_type (GtkMessageDialog *dialog,
+ {
+ GtkMessageDialogPrivate *priv = dialog->priv;
+ const gchar *name = NULL;
++ const gchar *icon = NULL;
+ AtkObject *atk_obj;
+
+ if (priv->message_type == type)
+@@ -383,18 +395,22 @@ setup_type (GtkMessageDialog *dialog,
+ {
+ case GTK_MESSAGE_INFO:
+ name = _("Information");
++ icon = "gtk-dialog-info";
+ break;
+
+ case GTK_MESSAGE_QUESTION:
+ name = _("Question");
++ icon = "gtk-dialog-question";
+ break;
+
+ case GTK_MESSAGE_WARNING:
+ name = _("Warning");
++ icon = "gtk-dialog-warning";
+ break;
+
+ case GTK_MESSAGE_ERROR:
+ name = _("Error");
++ icon = "gtk-dialog-error";
+ break;
+
+ case GTK_MESSAGE_OTHER:
+@@ -405,6 +421,12 @@ setup_type (GtkMessageDialog *dialog,
+ break;
+ }
+
++ if (icon)
++ {
++ GtkWidget *image = gtk_image_new_from_icon_name (icon, GTK_ICON_SIZE_DIALOG);
++ g_object_set (image, "visible", TRUE, NULL);
++ g_object_set (dialog, "image", image, NULL);
++ }
+ atk_obj = gtk_widget_get_accessible (GTK_WIDGET (dialog));
+ if (GTK_IS_ACCESSIBLE (atk_obj))
+ {
+Index: src/gtk+-3.24.12/gtk/ui/gtkmessagedialog.ui
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/ui/gtkmessagedialog.ui
++++ src/gtk+-3.24.12/gtk/ui/gtkmessagedialog.ui
+@@ -6,6 +6,7 @@
+ <property name="resizable">0</property>
+ <property name="type-hint">dialog</property>
+ <property name="skip-taskbar-hint">1</property>
++ <property name="border-width">5</property>
+ <child internal-child="headerbar">
+ <object class="GtkHeaderBar" id="headerbar1">
+ <property name="visible">1</property>
+@@ -14,23 +15,25 @@
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="orientation">vertical</property>
+- <property name="spacing">20</property>
+- <property name="border-width">0</property>
++ <property name="spacing">8</property>
++ <property name="border-width">2</property>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="visible">1</property>
+- <property name="margin-start">30</property>
+- <property name="margin-end">30</property>
+- <property name="spacing">30</property>
++ <property name="margin-start">2</property>
++ <property name="margin-end">2</property>
++ <property name="spacing">12</property>
++ <property name="border-width">5</property>
+ <child>
+ <object class="GtkBox" id="message_area">
+ <property name="visible">1</property>
+ <property name="orientation">vertical</property>
+- <property name="spacing">10</property>
++ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">1</property>
+- <property name="halign">center</property>
++ <property name="halign">start</property>
++ <property name="xalign">0</property>
+ <property name="valign">start</property>
+ <property name="wrap">1</property>
+ <property name="max-width-chars">60</property>
+@@ -43,7 +46,8 @@
+ <object class="GtkLabel" id="secondary_label">
+ <property name="no-show-all">1</property>
+ <property name="margin-bottom">2</property>
+- <property name="halign">center</property>
++ <property name="halign">start</property>
++ <property name="xalign">0</property>
+ <property name="valign">start</property>
+ <property name="wrap">1</property>
+ <property name="max-width-chars">60</property>
diff --git a/appearance__print-dialog.patch b/appearance__print-dialog.patch
new file mode 100644
index 000000000000..fc656cc82ba1
--- /dev/null
+++ b/appearance__print-dialog.patch
@@ -0,0 +1,51 @@
+Index: src/gtk+-3.24.12/gtk/gtkprintunixdialog.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkprintunixdialog.c
++++ src/gtk+-3.24.12/gtk/gtkprintunixdialog.c
+@@ -750,6 +750,11 @@ gtk_print_unix_dialog_init (GtkPrintUnix
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+ widget = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+ gtk_widget_set_sensitive (widget, FALSE);
++ GtkCssProvider *provider = gtk_css_provider_new ();
++ gtk_css_provider_load_from_data (provider, ".dialog-action-box { margin: 0; }", -1, NULL);
++ GtkStyleContext *context = gtk_widget_get_style_context (gtk_widget_get_parent (gtk_dialog_get_action_area (GTK_DIALOG (dialog))));
++ gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
++ gtk_style_context_save (context);
+
+ /* Treeview auxiliary functions need to be setup here */
+ gtk_tree_model_filter_set_visible_func (priv->printer_list_filter,
+Index: src/gtk+-3.24.12/gtk/ui/gtkprintunixdialog.ui
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/ui/gtkprintunixdialog.ui
++++ src/gtk+-3.24.12/gtk/ui/gtkprintunixdialog.ui
+@@ -48,6 +48,7 @@
+ <property name="step-increment">1</property>
+ </object>
+ <template class="GtkPrintUnixDialog" parent="GtkDialog">
++ <property name="border-width">5</property>
+ <property name="can-focus">False</property>
+ <property name="type-hint">dialog</property>
+ <signal name="notify::page-setup" handler="redraw_page_layout_preview" swapped="no"/>
+@@ -56,19 +57,19 @@
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+- <property name="border-width">0</property>
++ <property name="border-width">2</property>
+ <style>
+- <class name="view"/>
+ </style>
+ <child>
+ <object class="GtkBox" id="box1">
++ <property name="border-width">5</property>
+ <property name="visible">1</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkNotebook" id="notebook">
+ <property name="visible">1</property>
+ <property name="can-focus">1</property>
+- <property name="show-border">0</property>
++ <property name="show-border">1</property>
+ <child>
+ <object class="GtkBox" id="general_main_box">
+ <property name="visible">1</property>
diff --git a/appearance__smaller-statusbar.patch b/appearance__smaller-statusbar.patch
new file mode 100644
index 000000000000..65d61951380d
--- /dev/null
+++ b/appearance__smaller-statusbar.patch
@@ -0,0 +1,15 @@
+Index: src/gtk+-3.24.12/gtk/ui/gtkstatusbar.ui
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/ui/gtkstatusbar.ui
++++ src/gtk+-3.24.12/gtk/ui/gtkstatusbar.ui
+@@ -5,8 +5,8 @@
+ <property name="spacing">2</property>
+ <property name="margin-start">10</property>
+ <property name="margin-end">10</property>
+- <property name="margin-top">6</property>
+- <property name="margin-bottom">6</property>
++ <property name="margin-top">1</property>
++ <property name="margin-bottom">1</property>
+ <child>
+ <object class="GtkFrame" id="frame">
+ <property name="visible">1</property>
diff --git a/csd__clean-headerbar.patch b/csd__clean-headerbar.patch
new file mode 100644
index 000000000000..f44344964c68
--- /dev/null
+++ b/csd__clean-headerbar.patch
@@ -0,0 +1,82 @@
+Index: src/gtk+-3.24.12/gtk/gtkheaderbar.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkheaderbar.c
++++ src/gtk+-3.24.12/gtk/gtkheaderbar.c
+@@ -300,6 +300,27 @@ _gtk_header_bar_update_window_buttons (G
+
+ priv->titlebar_icon = NULL;
+
++ gboolean csd_cleaned_headerbar = (!gtk_style_context_has_class (gtk_widget_get_style_context (toplevel), "csd") &&
++ !gtk_style_context_has_class (gtk_widget_get_style_context (toplevel), "solid-csd"));
++ if (csd_cleaned_headerbar)
++ {
++ if (priv->label_box != NULL)
++ {
++ priv->label_box = NULL;
++ priv->title_label = NULL;
++ priv->subtitle_label = NULL;
++ }
++ static gboolean style_added = FALSE;
++ if (!style_added)
++ {
++ style_added = TRUE;
++ GtkCssProvider *provider = gtk_css_provider_new ();
++ gtk_css_provider_load_from_data (provider,
++ "headerbar, .titlebar { border-radius: 0; border-top: 0; box-shadow: none; }", -1, NULL);
++ gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (widget),
++ GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
++ }
++ }
+ if (!priv->shows_wm_decorations)
+ return;
+
+@@ -327,6 +348,8 @@ _gtk_header_bar_update_window_buttons (G
+ gtk_window_get_transient_for (window) == NULL &&
+ gtk_window_get_type_hint (window) == GDK_WINDOW_TYPE_HINT_NORMAL);
+
++ if (csd_cleaned_headerbar)
++ layout_desc = strstr (layout_desc, "menu") ? g_strdup ("menu") : g_strdup ("");
+ tokens = g_strsplit (layout_desc, ":", 2);
+ if (tokens)
+ {
+@@ -391,9 +414,9 @@ _gtk_header_bar_update_window_buttons (G
+ atk_object_set_name (accessible, _("Application menu"));
+
+ priv->titlebar_icon = image;
+- if (!_gtk_header_bar_update_window_icon (bar, window))
++ if (csd_cleaned_headerbar || !_gtk_header_bar_update_window_icon (bar, window))
+ gtk_image_set_from_icon_name (GTK_IMAGE (priv->titlebar_icon),
+- "application-x-executable-symbolic", GTK_ICON_SIZE_MENU);
++ "pan-down-symbolic", GTK_ICON_SIZE_MENU);
+ }
+ else if (strcmp (t[j], "minimize") == 0 &&
+ is_sovereign_window)
+@@ -1361,6 +1384,7 @@ gtk_header_bar_set_subtitle (GtkHeaderBa
+ gtk_widget_set_visible (priv->subtitle_sizing_label, priv->has_subtitle || (priv->subtitle && priv->subtitle[0]));
+
+ g_object_notify_by_pspec (G_OBJECT (bar), header_bar_props[PROP_SUBTITLE]);
++ g_object_notify_by_pspec (G_OBJECT (bar), header_bar_props[PROP_TITLE]);
+ }
+
+ /**
+Index: src/gtk+-3.24.12/gtk/gtkwindow.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkwindow.c
++++ src/gtk+-3.24.12/gtk/gtkwindow.c
+@@ -4168,6 +4168,8 @@ on_titlebar_title_notify (GtkHeaderBar *
+ const gchar *title;
+
+ title = gtk_header_bar_get_title (titlebar);
++ if (gtk_header_bar_get_subtitle (titlebar))
++ title = g_strconcat (title, " — ", gtk_header_bar_get_subtitle (titlebar), NULL);
+ gtk_window_set_title_internal (self, title, FALSE);
+ }
+
+@@ -9353,6 +9355,7 @@ static void
+ gtk_window_do_popup (GtkWindow *window,
+ GdkEventButton *event)
+ {
++ if (!window->priv->client_decorated) return;
+ if (!gdk_window_show_window_menu (_gtk_widget_get_window (GTK_WIDGET (window)),
+ (GdkEvent *) event))
+ gtk_window_do_popup_fallback (window, event);
diff --git a/csd__disabled-by-default.patch b/csd__disabled-by-default.patch
new file mode 100644
index 000000000000..c45b0d991980
--- /dev/null
+++ b/csd__disabled-by-default.patch
@@ -0,0 +1,19 @@
+Index: src/gtk+-3.24.12/gtk/gtkwindow.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkwindow.c
++++ src/gtk+-3.24.12/gtk/gtkwindow.c
+@@ -4158,6 +4158,14 @@ gtk_window_enable_csd (GtkWindow *window
+ }
+
+ priv->client_decorated = TRUE;
++#ifdef GDK_WINDOWING_X11
++ if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (widget)) && g_getenv("GTK_CSD") == FALSE)
++ {
++ gtk_style_context_remove_class (gtk_widget_get_style_context (widget), GTK_STYLE_CLASS_CSD);
++ gtk_style_context_remove_class (gtk_widget_get_style_context (widget), "solid-csd");
++ priv->client_decorated = FALSE;
++ }
++#endif
+ }
+
+ static void
diff --git a/csd__server-side-shadow.patch b/csd__server-side-shadow.patch
new file mode 100644
index 000000000000..38e3c8715bd3
--- /dev/null
+++ b/csd__server-side-shadow.patch
@@ -0,0 +1,13 @@
+Index: src/gtk+-3.24.12/gtk/gtkwindow.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkwindow.c
++++ src/gtk+-3.24.12/gtk/gtkwindow.c
+@@ -4107,6 +4107,8 @@ gtk_window_supports_client_shadow (GtkWi
+ #ifdef GDK_WINDOWING_X11
+ if (GDK_IS_X11_DISPLAY (display))
+ {
++ if (g_strcmp0 (g_getenv ("GTK_CSD"), "1") != 0)
++ return FALSE;
+ if (!gdk_screen_is_composited (screen))
+ return FALSE;
+
diff --git a/file-chooser__places-sidebar.patch b/file-chooser__places-sidebar.patch
new file mode 100644
index 000000000000..1ba2798bbdfc
--- /dev/null
+++ b/file-chooser__places-sidebar.patch
@@ -0,0 +1,62 @@
+Index: src/gtk+-3.24.12/gtk/gtkplacessidebar.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkplacessidebar.c
++++ src/gtk+-3.24.12/gtk/gtkplacessidebar.c
+@@ -633,6 +633,7 @@ open_home (GtkPlacesSidebar *sidebar)
+ static void
+ add_special_dirs (GtkPlacesSidebar *sidebar)
+ {
++ return;
+ GList *dirs;
+ gint index;
+
+@@ -1427,8 +1428,6 @@ update_places (GtkPlacesSidebar *sidebar
+ root = sl->data;
+ is_native = g_file_is_native (root);
+
+- if (_gtk_bookmarks_manager_get_is_builtin (sidebar->bookmarks_manager, root))
+- continue;
+
+ if (sidebar->local_only && !is_native)
+ continue;
+@@ -1536,6 +1535,17 @@ update_places (GtkPlacesSidebar *sidebar
+
+ g_object_unref (start_icon);
+ }
++ else if (!sidebar->local_only)
++ {
++ start_icon = g_themed_icon_new_with_default_fallbacks (ICON_NAME_NETWORK);
++
++ add_place (sidebar, PLACES_BUILT_IN,
++ SECTION_OTHER_LOCATIONS,
++ _("Networks"), start_icon, NULL, "network:///",
++ NULL, NULL, NULL, NULL, 0, _("Show other locations"));
++
++ g_object_unref (start_icon);
++ }
+
+ gtk_widget_show_all (GTK_WIDGET (sidebar));
+ /* We want this hidden by default, but need to do it after the show_all call */
+@@ -4155,7 +4165,7 @@ gtk_places_sidebar_init (GtkPlacesSideba
+
+ gtk_container_add (GTK_CONTAINER (sidebar), sidebar->list_box);
+
+- sidebar->hostname = g_strdup (_("Computer"));
++ sidebar->hostname = g_strdup (_("File System"));
+ sidebar->hostnamed_cancellable = g_cancellable_new ();
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+Index: src/gtk+-3.24.12/gtk/ui/gtkfilechooserwidget.ui
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/ui/gtkfilechooserwidget.ui
++++ src/gtk+-3.24.12/gtk/ui/gtkfilechooserwidget.ui
+@@ -16,7 +16,8 @@
+ <property name="visible">1</property>
+ <property name="hscrollbar-policy">never</property>
+ <property name="local-only">1</property>
+- <property name="show-other-locations">1</property>
++ <property name="show-other-locations">0</property>
++ <property name="show-trash">0</property>
+ <style>
+ <class name="sidebar"/>
+ </style>
diff --git a/file-chooser__typeahead.patch b/file-chooser__typeahead.patch
new file mode 100644
index 000000000000..a6062e6d6918
--- /dev/null
+++ b/file-chooser__typeahead.patch
@@ -0,0 +1,59 @@
+Index: src/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
++++ src/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
+@@ -1419,7 +1419,7 @@ gtk_file_chooser_widget_key_press_event
+ return TRUE;
+ }
+ }
+- else if (gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event))
++ else if (FALSE && gtk_search_entry_handle_event (GTK_SEARCH_ENTRY (priv->search_entry), (GdkEvent *)event))
+ {
+ if (priv->operation_mode != OPERATION_MODE_SEARCH)
+ operation_mode_set (impl, OPERATION_MODE_SEARCH);
+@@ -2477,7 +2477,7 @@ file_list_set_sort_column_ids (GtkFileCh
+ {
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+
+- gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1);
++ gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), 0);
+
+ gtk_tree_view_column_set_sort_column_id (priv->list_name_column, MODEL_COL_NAME);
+ gtk_tree_view_column_set_sort_column_id (priv->list_time_column, MODEL_COL_TIME);
+@@ -7319,8 +7319,6 @@ search_engine_hits_added_cb (GtkSearchEn
+ GFile *file;
+ gboolean select = FALSE;
+
+- if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (impl->priv->search_model), NULL) == 0)
+- select = TRUE;
+
+ files = NULL;
+ files_with_info = NULL;
+@@ -7664,7 +7662,7 @@ recent_idle_cleanup (gpointer data)
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->browse_files_tree_view),
+ GTK_TREE_MODEL (priv->recent_model));
+- gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1);
++ gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), 0);
+
+ gtk_tree_view_column_set_sort_column_id (priv->list_name_column, -1);
+ gtk_tree_view_column_set_sort_column_id (priv->list_time_column, -1);
+@@ -8617,10 +8615,6 @@ gtk_file_chooser_widget_class_init (GtkF
+ "search-shortcut",
+ 0);
+ gtk_binding_entry_add_signal (binding_set,
+- GDK_KEY_f, GDK_CONTROL_MASK,
+- "search-shortcut",
+- 0);
+- gtk_binding_entry_add_signal (binding_set,
+ GDK_KEY_r, GDK_MOD1_MASK,
+ "recent-shortcut",
+ 0);
+@@ -8741,6 +8735,7 @@ post_process_ui (GtkFileChooserWidget *i
+ g_object_set_data (G_OBJECT (impl->priv->browse_files_tree_view), I_("GtkFileChooserWidget"), impl);
+
+ /* Setup file list treeview */
++ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (impl->priv->browse_files_tree_view), TRUE);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->priv->browse_files_tree_view));
+ gtk_tree_selection_set_select_function (selection,
+ list_select_func,
diff --git a/fixes__atk-bridge-errors.patch b/fixes__atk-bridge-errors.patch
new file mode 100644
index 000000000000..7096a939aebb
--- /dev/null
+++ b/fixes__atk-bridge-errors.patch
@@ -0,0 +1,15 @@
+Index: src/gtk+-3.24.12/gtk/a11y/gtkaccessibility.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/a11y/gtkaccessibility.c
++++ src/gtk+-3.24.12/gtk/a11y/gtkaccessibility.c
+@@ -989,7 +989,10 @@ _gtk_accessibility_init (void)
+ do_window_event_initialization ();
+
+ #ifdef GDK_WINDOWING_X11
++ GLogWriterOutput mushrooms_null_writer () { return G_LOG_WRITER_HANDLED; }
++ g_log_set_writer_func (mushrooms_null_writer, NULL, NULL);
+ atk_bridge_adaptor_init (NULL, NULL);
++ g_log_set_writer_func (g_log_writer_default, NULL, NULL);
+ #endif
+
+ atk_misc_instance = g_object_new (GTK_TYPE_MISC_IMPL, NULL);
diff --git a/fixes__labels-wrapping.patch b/fixes__labels-wrapping.patch
new file mode 100644
index 000000000000..893edfa9bf31
--- /dev/null
+++ b/fixes__labels-wrapping.patch
@@ -0,0 +1,19 @@
+Index: src/gtk+-3.24.12/gtk/gtklabel.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtklabel.c
++++ src/gtk+-3.24.12/gtk/gtklabel.c
+@@ -3685,6 +3685,14 @@ gtk_label_get_preferred_layout_size (Gtk
+ GtkLabelPrivate *priv = label->priv;
+ PangoLayout *layout;
+ gint char_pixels;
++ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (label));
++ if (GTK_IS_WINDOW (toplevel))
++ {
++ gint default_window_width;
++ gtk_window_get_default_size (GTK_WINDOW (toplevel), &default_window_width, NULL);
++ if (default_window_width == -1 && priv->max_width_chars == -1 && priv->ellipsize == PANGO_ELLIPSIZE_NONE)
++ priv->max_width_chars = 56;
++ }
+
+ /* "width-chars" Hard-coded minimum width:
+ * - minimum size should be MAX (width-chars, strlen ("..."));
diff --git a/fixes__too-large-menu-covers-bar.disabled-patch b/fixes__too-large-menu-covers-bar.disabled-patch
new file mode 100644
index 000000000000..cede3d037640
--- /dev/null
+++ b/fixes__too-large-menu-covers-bar.disabled-patch
@@ -0,0 +1,21 @@
+diff --color -U 5 -r -Z -B gtk/gtkmenu.c gtk/gtkmenu.c
+--- src/gtk+-3.24.12/gtk/gtkmenu.c 2018-01-31 18:37:18.000000000 +0100
++++ src/gtk+-3.24.12/gtk/gtkmenu.c 2018-07-16 23:43:51.061469725 +0200
+@@ -1393,10 +1393,17 @@
+ const GdkRectangle *final_rect,
+ gboolean flipped_x,
+ gboolean flipped_y,
+ GtkMenu *menu)
+ {
++ if (GTK_IS_MENU_ITEM (menu->priv->widget) && GTK_IS_MENU_BAR (gtk_widget_get_parent (menu->priv->widget))
++ && flipped_rect != NULL && final_rect != NULL && !flipped_y && flipped_rect->y > final_rect->y)
++ {
++ gint new_height = final_rect->height - (flipped_rect->y - final_rect->y);
++ if (new_height > 200)
++ gdk_window_move_resize (window, final_rect->x, flipped_rect->y, final_rect->width, new_height);
++ }
+ g_signal_emit (menu,
+ menu_signals[POPPED_UP],
+ 0,
+ flipped_rect,
+ final_rect,
diff --git a/gtk3.install b/gtk3.install
new file mode 100644
index 000000000000..c0c44539de6f
--- /dev/null
+++ b/gtk3.install
@@ -0,0 +1,3 @@
+pre_remove() {
+ rm -f /usr/lib/gtk-3.0/3.0.0/immodules.cache
+}
diff --git a/other__default-settings.patch b/other__default-settings.patch
new file mode 100644
index 000000000000..7ce6f37a0cca
--- /dev/null
+++ b/other__default-settings.patch
@@ -0,0 +1,39 @@
+Index: src/gtk+-3.24.12/gtk/gtkscrolledwindow.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkscrolledwindow.c
++++ src/gtk+-3.24.12/gtk/gtkscrolledwindow.c
+@@ -4448,7 +4448,7 @@ gtk_scrolled_window_update_use_indicator
+
+ use_indicators = overlay_scrolling && priv->overlay_scrolling;
+
+- if (g_strcmp0 (g_getenv ("GTK_OVERLAY_SCROLLING"), "0") == 0)
++ if (g_strcmp0 (g_getenv ("GTK_OVERLAY_SCROLLING"), "1") != 0)
+ use_indicators = FALSE;
+
+ if (priv->use_indicators != use_indicators)
+Index: src/gtk+-3.24.12/gtk/gtksettings.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtksettings.c
++++ src/gtk+-3.24.12/gtk/gtksettings.c
+@@ -61,7 +61,7 @@
+ #ifdef GDK_WINDOWING_QUARTZ
+ #define PRINT_PREVIEW_COMMAND "open -a /Applications/Preview.app %f"
+ #else
+-#define PRINT_PREVIEW_COMMAND "evince --unlink-tempfile --preview --print-settings %s %f"
++#define PRINT_PREVIEW_COMMAND "atril --unlink-tempfile --preview --print-settings %s %f"
+ #endif
+
+ /**
+Index: src/gtk+-3.24.12/gtk/org.gtk.Settings.FileChooser.gschema.xml
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/org.gtk.Settings.FileChooser.gschema.xml
++++ src/gtk+-3.24.12/gtk/org.gtk.Settings.FileChooser.gschema.xml
+@@ -133,7 +133,7 @@
+ </description>
+ </key>
+ <key name='startup-mode' enum='org.gtk.Settings.FileChooser.StartupMode'>
+- <default>'recent'</default>
++ <default>'cwd'</default>
+ <summary>Startup mode</summary>
+ <description>
+ Either "recent" or "cwd"; controls whether the file chooser
diff --git a/other__hide-insert-emoji.patch b/other__hide-insert-emoji.patch
new file mode 100644
index 000000000000..e790cec053a7
--- /dev/null
+++ b/other__hide-insert-emoji.patch
@@ -0,0 +1,28 @@
+Index: src/gtk+-3.24.12/gtk/gtkentry.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkentry.c
++++ src/gtk+-3.24.12/gtk/gtkentry.c
+@@ -9619,7 +9619,8 @@ popup_targets_received (GtkClipboard
+ g_signal_connect_swapped (menuitem, "activate",
+ G_CALLBACK (gtk_entry_insert_emoji), entry);
+ gtk_widget_show (menuitem);
+- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
++ if (g_getenv ("GTKM_INSERT_EMOJI") != FALSE)
++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ }
+
+ g_signal_emit (entry, signals[POPULATE_POPUP], 0, menu);
+Index: src/gtk+-3.24.12/gtk/gtktextview.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtktextview.c
++++ src/gtk+-3.24.12/gtk/gtktextview.c
+@@ -9537,7 +9537,8 @@ popup_targets_received (GtkClipboard
+ g_signal_connect_swapped (menuitem, "activate",
+ G_CALLBACK (gtk_text_view_insert_emoji), text_view);
+ gtk_widget_show (menuitem);
+- gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
++ if (g_getenv ("GTKM_INSERT_EMOJI") != FALSE)
++ gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
+ }
+
+ g_signal_emit (text_view, signals[POPULATE_POPUP],
diff --git a/other__mnemonics-delay.patch b/other__mnemonics-delay.patch
new file mode 100644
index 000000000000..3ff2a8a6aa1b
--- /dev/null
+++ b/other__mnemonics-delay.patch
@@ -0,0 +1,13 @@
+Index: src/gtk+-3.24.12/gtk/gtkwindow.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkwindow.c
++++ src/gtk+-3.24.12/gtk/gtkwindow.c
+@@ -147,7 +147,7 @@
+ * widget that is added as a titlebar child.
+ */
+
+-#define MNEMONICS_DELAY 300 /* ms */
++#define MNEMONICS_DELAY 0 /* ms */
+ #define NO_CONTENT_CHILD_NAT 200
+ /* In case the content (excluding header bar and shadows) of the window
+ * would be empty, either because there is no visible child widget or only an
diff --git a/popovers__color-chooser.patch b/popovers__color-chooser.patch
new file mode 100644
index 000000000000..0eb812a8da21
--- /dev/null
+++ b/popovers__color-chooser.patch
@@ -0,0 +1,22 @@
+Index: src/gtk+-3.24.12/gtk/gtkcolorswatch.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkcolorswatch.c
++++ src/gtk+-3.24.12/gtk/gtkcolorswatch.c
+@@ -349,6 +349,17 @@ do_popup (GtkColorSwatch *swatch)
+ {
+ if (swatch->priv->popover == NULL)
+ {
++ GtkWidget *item;
++ swatch->priv->popover = gtk_menu_new ();
++ item = gtk_menu_item_new_with_mnemonic (_ ("C_ustomize"));
++ g_signal_connect_swapped (item, "activate", G_CALLBACK (emit_customize), swatch);
++ gtk_widget_set_visible (GTK_WIDGET (item), TRUE);
++ gtk_menu_shell_append (GTK_MENU_SHELL (swatch->priv->popover), item);
++ }
++ gtk_menu_popup_at_pointer (GTK_MENU (swatch->priv->popover), NULL);
++ return;
++ if (swatch->priv->popover == NULL)
++ {
+ GtkWidget *box;
+ GtkWidget *item;
+
diff --git a/popovers__file-chooser-list.patch b/popovers__file-chooser-list.patch
new file mode 100644
index 000000000000..200e2216c3ae
--- /dev/null
+++ b/popovers__file-chooser-list.patch
@@ -0,0 +1,61 @@
+Index: src/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
++++ src/gtk+-3.24.12/gtk/gtkfilechooserwidget.c
+@@ -29,6 +29,7 @@
+ #include "gtkcellrendererpixbuf.h"
+ #include "gtkcellrenderertext.h"
+ #include "gtkcheckmenuitem.h"
++#include "deprecated/gtkimagemenuitem.h"
+ #include "gtkclipboard.h"
+ #include "gtkcomboboxtext.h"
+ #include "gtkdragsource.h"
+@@ -2268,6 +2269,10 @@ append_separator (GtkWidget *box)
+ {
+ GtkWidget *separator;
+
++ separator = gtk_separator_menu_item_new ();
++ gtk_widget_set_visible (GTK_WIDGET (separator), TRUE);
++ gtk_menu_shell_append (GTK_MENU_SHELL (box), separator);
++ return separator;
+ separator = g_object_new (GTK_TYPE_SEPARATOR,
+ "orientation", GTK_ORIENTATION_HORIZONTAL,
+ "visible", TRUE,
+@@ -2289,6 +2294,14 @@ add_button (GtkWidget *box,
+ {
+ GtkWidget *item;
+
++ if (g_str_match_string ("toggle", action, TRUE))
++ item = gtk_check_menu_item_new_with_mnemonic (label);
++ else
++ item = gtk_image_menu_item_new_with_mnemonic (label);
++ g_object_set (G_OBJECT (item), "action-name", action, NULL);
++ gtk_widget_set_visible (GTK_WIDGET (item), TRUE);
++ gtk_menu_shell_append (GTK_MENU_SHELL (box), item);
++ return item;
+ item = g_object_new (GTK_TYPE_MODEL_BUTTON,
+ "visible", TRUE,
+ "action-name", action,
+@@ -2313,6 +2326,9 @@ file_list_build_popover (GtkFileChooserW
+ g_object_set (box, "margin", 10, NULL);
+ gtk_widget_show (box);
+ gtk_container_add (GTK_CONTAINER (priv->browse_files_popover), box);
++ priv->browse_files_popover = gtk_menu_new ();
++ gtk_menu_attach_to_widget (GTK_MENU (priv->browse_files_popover), GTK_WIDGET (priv->browse_files_tree_view), NULL);
++ box = priv->browse_files_popover;
+
+ priv->visit_file_item = add_button (box, _("_Visit File"), "item.visit");
+ priv->open_folder_item = add_button (box, _("_Open With File Manager"), "item.open");
+@@ -2329,6 +2345,12 @@ file_list_build_popover (GtkFileChooserW
+ priv->type_column_item = add_button (box, _("Show T_ype Column"), "item.toggle-show-type");
+ priv->show_time_item = add_button (box, _("Show _Time"), "item.toggle-show-time");
+ priv->sort_directories_item = add_button (box, _("Sort _Folders before Files"), "item.toggle-sort-dirs-first");
++ g_object_set (priv->visit_file_item, "image", gtk_image_new_from_icon_name ("gtk-jump-to", GTK_ICON_SIZE_MENU), NULL);
++ g_object_set (priv->open_folder_item, "image", gtk_image_new_from_icon_name ("gtk-open", GTK_ICON_SIZE_MENU), NULL);
++ g_object_set (priv->copy_file_location_item, "image", gtk_image_new_from_icon_name ("gtk-copy", GTK_ICON_SIZE_MENU), NULL);
++ g_object_set (priv->add_shortcut_item, "image", gtk_image_new_from_icon_name ("gtk-add", GTK_ICON_SIZE_MENU), NULL);
++ g_object_set (priv->delete_file_item, "image", gtk_image_new_from_icon_name ("gtk-delete", GTK_ICON_SIZE_MENU), NULL);
++ g_object_set (priv->trash_file_item, "image", gtk_image_new_from_icon_name ("user-trash-full",GTK_ICON_SIZE_MENU), NULL);
+ }
+
+ /* Updates the popover for the file list, creating it if necessary */
diff --git a/popovers__places-sidebar.patch b/popovers__places-sidebar.patch
new file mode 100644
index 000000000000..ab96b0a5fce5
--- /dev/null
+++ b/popovers__places-sidebar.patch
@@ -0,0 +1,146 @@
+Index: src/gtk+-3.24.12/gtk/gtkplacessidebar.c
+===================================================================
+--- src.orig/gtk+-3.24.12/gtk/gtkplacessidebar.c
++++ src/gtk+-3.24.12/gtk/gtkplacessidebar.c
+@@ -64,6 +64,7 @@
+ #include "gtkgesturelongpress.h"
+ #include "gtkbox.h"
+ #include "gtkmodelbutton.h"
++#include "deprecated/gtkimagemenuitem.h"
+
+ /**
+ * SECTION:gtkplacessidebar
+@@ -2341,32 +2342,32 @@ check_popover_sensitivity (GtkSidebarRow
+ gtk_widget_set_visible (data->stop_item, show_stop);
+
+ /* Adjust start/stop items to reflect the type of the drive */
+- g_object_set (data->start_item, "text", _("_Start"), NULL);
+- g_object_set (data->stop_item, "text", _("_Stop"), NULL);
++ g_object_set (data->start_item, "label", _("_Start"), "use_underline", TRUE, NULL);
++ g_object_set (data->stop_item, "label", _("_Stop"), "use_underline", TRUE, NULL);
+ if ((show_start || show_stop) && drive != NULL)
+ {
+ switch (g_drive_get_start_stop_type (drive))
+ {
+ case G_DRIVE_START_STOP_TYPE_SHUTDOWN:
+ /* start() for type G_DRIVE_START_STOP_TYPE_SHUTDOWN is normally not used */
+- g_object_set (data->start_item, "text", _("_Power On"), NULL);
+- g_object_set (data->stop_item, "text", _("_Safely Remove Drive"), NULL);
++ g_object_set (data->start_item, "label", _("_Power On"), "use_underline", TRUE, NULL);
++ g_object_set (data->stop_item, "label", _("_Safely Remove Drive"), "use_underline", TRUE, NULL);
+ break;
+
+ case G_DRIVE_START_STOP_TYPE_NETWORK:
+- g_object_set (data->start_item, "text", _("_Connect Drive"), NULL);
+- g_object_set (data->stop_item, "text", _("_Disconnect Drive"), NULL);
++ g_object_set (data->start_item, "label", _("_Connect Drive"), "use_underline", TRUE, NULL);
++ g_object_set (data->stop_item, "label", _("_Disconnect Drive"), "use_underline", TRUE, NULL);
+ break;
+
+ case G_DRIVE_START_STOP_TYPE_MULTIDISK:
+- g_object_set (data->start_item, "text", _("_Start Multi-disk Device"), NULL);
+- g_object_set (data->stop_item, "text", _("_Stop Multi-disk Device"), NULL);
++ g_object_set (data->start_item, "label", _("_Start Multi-disk Device"), "use_underline", TRUE, NULL);
++ g_object_set (data->stop_item, "label", _("_Stop Multi-disk Device"), "use_underline", TRUE, NULL);
+ break;
+
+ case G_DRIVE_START_STOP_TYPE_PASSWORD:
+ /* stop() for type G_DRIVE_START_STOP_TYPE_PASSWORD is normally not used */
+- g_object_set (data->start_item, "text", _("_Unlock Device"), NULL);
+- g_object_set (data->stop_item, "text", _("_Lock Device"), NULL);
++ g_object_set (data->start_item, "label", _("_Unlock Device"), "use_underline", TRUE, NULL);
++ g_object_set (data->stop_item, "label", _("_Lock Device"), "use_underline", TRUE, NULL);
+ break;
+
+ default:
+@@ -3559,6 +3560,13 @@ append_separator (GtkWidget *box)
+ {
+ GtkWidget *separator;
+
++ if (GTK_IS_MENU (box))
++ {
++ separator = gtk_separator_menu_item_new();
++ gtk_widget_set_visible(GTK_WIDGET(separator), TRUE);
++ gtk_menu_shell_append(GTK_MENU_SHELL(box), separator);
++ return separator;
++ }
+ separator = g_object_new (GTK_TYPE_SEPARATOR,
+ "orientation", GTK_ORIENTATION_HORIZONTAL,
+ "visible", TRUE,
+@@ -3577,6 +3585,14 @@ add_button (GtkWidget *box,
+ {
+ GtkWidget *item;
+
++ if (GTK_IS_MENU (box))
++ {
++ item = gtk_image_menu_item_new_with_mnemonic(label);
++ g_object_set(G_OBJECT(item), "action-name", action, NULL);
++ gtk_widget_set_visible(GTK_WIDGET(item), TRUE);
++ gtk_menu_shell_append(GTK_MENU_SHELL(box), item);
++ return item;
++ }
+ item = g_object_new (GTK_TYPE_MODEL_BUTTON,
+ "visible", TRUE,
+ "action-name", action,
+@@ -3594,6 +3610,17 @@ add_open_button (GtkWidget *box
+ {
+ GtkWidget *item;
+
++ if (GTK_IS_MENU (box))
++ {
++ item = gtk_image_menu_item_new_with_mnemonic (label);
++ g_object_set(G_OBJECT (item),
++ "action-name", flags == GTK_PLACES_OPEN_NORMAL ? "row.open" : "row.open-other",
++ "action-target", g_variant_new_int32 (flags),
++ NULL);
++ gtk_widget_set_visible (GTK_WIDGET (item), TRUE);
++ gtk_menu_shell_append (GTK_MENU_SHELL (box), item);
++ return item;
++ }
+ item = g_object_new (GTK_TYPE_MODEL_BUTTON,
+ "visible", TRUE,
+ "action-name", flags == GTK_PLACES_OPEN_NORMAL ? "row.open" : "row.open-other",
+@@ -3699,6 +3726,13 @@ create_row_popover (GtkPlacesSidebar *si
+ g_object_set (box, "margin", 10, NULL);
+ gtk_widget_show (box);
+ gtk_container_add (GTK_CONTAINER (sidebar->popover), box);
++ if (!sidebar->populate_all)
++ {
++ sidebar->popover = gtk_menu_new ();
++ g_signal_connect (sidebar->popover, "destroy", G_CALLBACK (on_row_popover_destroy), sidebar);
++ gtk_menu_attach_to_widget (GTK_MENU (sidebar->popover), GTK_WIDGET (sidebar), NULL);
++ box = sidebar->popover;
++ }
+
+ add_open_button (box, _("_Open"), GTK_PLACES_OPEN_NORMAL);
+
+@@ -3722,6 +3756,15 @@ create_row_popover (GtkPlacesSidebar *si
+ data.rescan_item = add_button (box, _("_Detect Media"), "row.rescan");
+ data.start_item = add_button (box, _("_Start"), "row.start");
+ data.stop_item = add_button (box, _("_Stop"), "row.stop");
++ if (!sidebar->populate_all)
++ {
++ g_object_set (
++ g_list_first (gtk_container_get_children (GTK_CONTAINER (box)))->data,
++ "image", gtk_image_new_from_icon_name ("gtk-open", GTK_ICON_SIZE_MENU), NULL
++ );
++ g_object_set (data.remove_item, "image", gtk_image_new_from_icon_name("gtk-remove",GTK_ICON_SIZE_MENU), NULL);
++ g_object_set (data.add_shortcut_item, "image", gtk_image_new_from_icon_name("gtk-add", GTK_ICON_SIZE_MENU), NULL);
++ }
+
+ /* Update everything! */
+ check_popover_sensitivity (row, &data);
+@@ -3765,6 +3808,13 @@ show_row_popover (GtkSidebarRow *row)
+ gtk_widget_destroy (sidebar->popover);
+
+ create_row_popover (sidebar, row);
++ if (GTK_IS_MENU (sidebar->popover))
++ {
++ sidebar->context_row = row;
++ gtk_menu_popup_at_pointer (GTK_MENU (sidebar->popover), NULL);
++ g_object_unref (sidebar);
++ return;
++ }
+
+ gtk_popover_set_relative_to (GTK_POPOVER (sidebar->popover), GTK_WIDGET (row));
+
diff --git a/series b/series
new file mode 100644
index 000000000000..fc430c001aaa
--- /dev/null
+++ b/series
@@ -0,0 +1,20 @@
+appearance__buttons-menus-icons.patch
+appearance__disable-backdrop.patch
+appearance__file-chooser.patch
+appearance__message-dialogs.patch
+appearance__print-dialog.patch
+appearance__smaller-statusbar.patch
+csd__clean-headerbar.patch
+csd__disabled-by-default.patch
+csd__server-side-shadow.patch
+file-chooser__places-sidebar.patch
+file-chooser__typeahead.patch
+fixes__atk-bridge-errors.patch
+fixes__labels-wrapping.patch
+#fixes__too-large-menu-covers-bar.patch
+other__default-settings.patch
+other__hide-insert-emoji.patch
+other__mnemonics-delay.patch
+popovers__color-chooser.patch
+popovers__file-chooser-list.patch
+popovers__places-sidebar.patch
diff --git a/smaller-adwaita.css b/smaller-adwaita.css
new file mode 100644
index 000000000000..fade5f322622
--- /dev/null
+++ b/smaller-adwaita.css
@@ -0,0 +1,98 @@
+
+/* GTK3-mushrooms */
+button,
+button.titlebutton,
+button.image-button,
+button.text-button,
+button.image-button.text-button,
+.stack-switcher > button.text-button {
+ padding: 3px 6px;
+ min-height: 20px;
+ min-width: 0;
+}
+.stack-switcher > button.text-button {
+ min-width: 80px;
+}
+button.text-button.image-button label {
+ padding: 0 2px;
+}
+notebook > header.top tab,
+notebook > header.bottom tab {
+ padding: 0 5px;
+}
+notebook > header.left tab,
+notebook > header.right tab {
+ padding: 0 8px;
+}
+notebook tab button {
+ padding: 0px;
+ min-height: 15px;
+}
+entry,
+spinbutton:not(.vertical) {
+ min-height: 26px;
+}
+treeview button {
+ padding: 0 7px;
+ min-height: 23px;
+}
+progressbar.horizontal trough,
+progressbar.horizontal progress,
+progressbar.vertical trough,
+progressbar.vertical progress,
+levelbar trough {
+ min-height: 9px;
+ min-width: 9px;
+}
+scale {
+ padding: 10px 0;
+}
+headerbar, switch slider {
+ min-height: 0;
+}
+popover:not(.emoji-picker) > *:not(grid) {
+ margin: -3px;
+}
+tooltip * {
+ padding: 0px;
+}
+placessidebar row {
+ min-height: 29px;
+}
+placessidebar row button.sidebar-button {
+ min-height: 20px;
+ min-width: 20px;
+ padding: 0;
+}
+filechooser > box.search-bar, filechooser > box:last-child {
+ border-bottom: 1px solid alpha(#000, 0.15);
+}
+filechooser > actionbar > revealer > box {
+ border-top: 1px solid alpha(#000, 0.15);
+}
+* {
+ -GtkDialog-action-area-border: 5;
+}
+messagedialog > box {
+ padding: 7px;
+}
+messagedialog buttonbox {
+ margin-top: -17px;
+}
+menu, .menu, .context-menu, tooltip {
+ border-radius: 0;
+}
+.background:not(.csd):not(.solid-csd) .titlebar:not(.default-decoration),
+.background:not(.csd):not(.solid-csd) .titlebar:not(.default-decoration) headerbar {
+ background: inherit;
+}
+entry undershoot.left,
+entry undershoot.right,
+spinbutton:not(.vertical) undershoot.left,
+spinbutton:not(.vertical) undershoot.right,
+scrolledwindow undershoot.left,
+scrolledwindow undershoot.right,
+scrolledwindow undershoot.top,
+scrolledwindow undershoot.bottom {
+ background-image: none;
+} \ No newline at end of file