aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Gąsior2017-06-03 02:27:11 +0200
committerTomasz Gąsior2017-06-03 02:27:11 +0200
commitcff3d30cbf155624177f7d43213e6f4b18c76b38 (patch)
treee70d85459290a5fc1084c3fc72a830d08d300c0e
parent63045ef08fbcfb406b34d28a3f0433442b392906 (diff)
downloadaur-cff3d30cbf155624177f7d43213e6f4b18c76b38.tar.gz
Package update, new patches.
- File chooser typeahead patch. - Button icons patch. - Menu button popover patch. - Patches contain more code lines.
-rw-r--r--.SRCINFO19
-rw-r--r--PKGBUILD50
-rw-r--r--csd.patch362
-rw-r--r--file-chooser.patch489
-rw-r--r--general.patch66
-rw-r--r--icons.patch75
-rw-r--r--others.patch264
-rw-r--r--print-dialog.patch96
8 files changed, 1259 insertions, 162 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 20cad6d35d96..ad78edc75cd9 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = gtk3-mushrooms
pkgdesc = GTK3 library with my modifications (see README).
pkgver = 3.22.15
- pkgrel = 1
+ pkgrel = 2
url = http://www.gtk.org/
install = gtk3.install
arch = i686
@@ -10,8 +10,6 @@ pkgbase = gtk3-mushrooms
makedepends = gobject-introspection
makedepends = libcanberra
makedepends = gtk-doc
- makedepends = git
- makedepends = colord
makedepends = rest
makedepends = libcups
makedepends = glib2-docs
@@ -29,30 +27,29 @@ pkgbase = gtk3-mushrooms
depends = pango
depends = shared-mime-info
depends = at-spi2-atk
- depends = wayland
depends = libxkbcommon
depends = adwaita-icon-theme
depends = json-glib
depends = librsvg
- depends = wayland-protocols
depends = desktop-file-utils
depends = mesa
- optdepends = libcanberra: gtk3-widget-factory demo
optdepends = gtk3-print-backends: Printing
provides = gtk3=3.22.15
conflicts = gtk3
source = csd.patch
source = file-chooser.patch
+ source = icons.patch
+ source = others.patch
source = print-dialog.patch
- source = general.patch
source = smaller-adwaita.css
source = https://github.com/GNOME/gtk/archive/3.22.15.zip
source = settings.ini
source = gtk-query-immodules-3.0.hook
- sha256sums = 0578c66a82b72dedf2fb5bc9c34c7218f73e40d32aa080ecdc5d4d545434df8a
- sha256sums = cf284c35f6726a9d742bd701dde7541072021b0a02e0edf3dfac0ffce9304b41
- sha256sums = 77754d974a35797aae3c3513bf2a350ea207f8e8c5e02d4a2edbd162a3289e5a
- sha256sums = d551b4d0710f680374298756171ecc2d6047e0660fd575de4e69cfbb2a19cd3d
+ sha256sums = b0b1cb2dc65e91acd473d7c3c966867ef9945ebf376268e41ce870e725e291c2
+ sha256sums = b7d5da21262fe46275131799d3403489e803c8a303b3ee1650e88a4ddb6cae11
+ sha256sums = cfb3121fb174ea8718a0dc184417338c5dfd819237e233d78bf43fb51bb06c91
+ sha256sums = ac119908c6a763ece6114ae3b5cd5d8c232207ce734d975e0ada22379610fc7d
+ sha256sums = be7800734fc59e49c34ee2f806738eba8b606d46ac61bc3f50fa3cc69ae594f0
sha256sums = 1784e29ce5b811ed8673a29a89903751abb8bf68b3793f2e635c99851c165245
sha256sums = c3ab786779a6a74765a56e31aaa0fe9123feee222185f0c3ae94acfb2e61a0dd
sha256sums = 01fc1d81dc82c4a052ac6e25bf9a04e7647267cc3017bc91f9ce3e63e5eb9202
diff --git a/PKGBUILD b/PKGBUILD
index d581d3377868..0fe9e943c81d 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,11 +1,11 @@
# Maintainer: Tomasz Gąsior <tomaszgasior.pl>
-# This file is based on original PKGBUILD of GTK3 package.
+# This file is based on original PKGBUILD of GTK3 package.
# https://git.archlinux.org/svntogit/packages.git/plain/trunk/PKGBUILD?h=packages/gtk3
pkgname=gtk3-mushrooms
pkgver=3.22.15
-pkgrel=1
+pkgrel=2
pkgdesc="GTK3 library with my modifications (see README)."
url="http://www.gtk.org/"
install=gtk3.install
@@ -15,21 +15,21 @@ arch=(i686 x86_64)
license=(LGPL)
depends=(
atk cairo libxcursor libxinerama libxrandr libxi libepoxy gdk-pixbuf2 dconf
- libxcomposite libxdamage pango shared-mime-info at-spi2-atk wayland libxkbcommon
- adwaita-icon-theme json-glib librsvg wayland-protocols desktop-file-utils mesa
+ libxcomposite libxdamage pango shared-mime-info at-spi2-atk libxkbcommon
+ adwaita-icon-theme json-glib librsvg desktop-file-utils mesa
)
optdepends=(
- 'libcanberra: gtk3-widget-factory demo'
'gtk3-print-backends: Printing'
)
makedepends=(
- gobject-introspection libcanberra gtk-doc git colord rest libcups glib2-docs
+ gobject-introspection libcanberra gtk-doc rest libcups glib2-docs
)
source=(
"csd.patch"
"file-chooser.patch"
+ "icons.patch"
+ "others.patch"
"print-dialog.patch"
- "general.patch"
"smaller-adwaita.css"
"https://github.com/GNOME/gtk/archive/$pkgver.zip"
@@ -37,10 +37,11 @@ source=(
"gtk-query-immodules-3.0.hook"
)
sha256sums=(
- "0578c66a82b72dedf2fb5bc9c34c7218f73e40d32aa080ecdc5d4d545434df8a"
- "cf284c35f6726a9d742bd701dde7541072021b0a02e0edf3dfac0ffce9304b41"
- "77754d974a35797aae3c3513bf2a350ea207f8e8c5e02d4a2edbd162a3289e5a"
- "d551b4d0710f680374298756171ecc2d6047e0660fd575de4e69cfbb2a19cd3d"
+ "b0b1cb2dc65e91acd473d7c3c966867ef9945ebf376268e41ce870e725e291c2"
+ "b7d5da21262fe46275131799d3403489e803c8a303b3ee1650e88a4ddb6cae11"
+ "cfb3121fb174ea8718a0dc184417338c5dfd819237e233d78bf43fb51bb06c91"
+ "ac119908c6a763ece6114ae3b5cd5d8c232207ce734d975e0ada22379610fc7d"
+ "be7800734fc59e49c34ee2f806738eba8b606d46ac61bc3f50fa3cc69ae594f0"
"1784e29ce5b811ed8673a29a89903751abb8bf68b3793f2e635c99851c165245"
"c3ab786779a6a74765a56e31aaa0fe9123feee222185f0c3ae94acfb2e61a0dd"
@@ -50,12 +51,13 @@ sha256sums=(
prepare() {
cd "$srcdir/gtk-$pkgver/gtk"
-
+
patch -p 3 -i "$srcdir/csd.patch"
patch -p 3 -i "$srcdir/file-chooser.patch"
+ patch -p 3 -i "$srcdir/icons.patch"
+ patch -p 3 -i "$srcdir/others.patch"
patch -p 3 -i "$srcdir/print-dialog.patch"
- patch -p 3 -i "$srcdir/general.patch"
-
+
cat "$srcdir/smaller-adwaita.css" >> "theme/Adwaita/gtk.css"
cat "$srcdir/smaller-adwaita.css" >> "theme/Adwaita/gtk-dark.css"
@@ -67,21 +69,33 @@ build() {
cd "$srcdir/gtk-$pkgver"
CXX=/bin/false ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
- --disable-schemas-compile --enable-x11-backend --enable-wayland-backend
+ --enable-x11-backend --disable-schemas-compile --disable-gtk-doc-html \
+ --disable-installed-tests --disable-colord --disable-maintainer-mode \
+ --disable-cups --disable-cloudprint --disable-papi --disable-man
#https://bugzilla.gnome.org/show_bug.cgi?id=655517
sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool
- make
+ # Make GTK building faster by skipping tests and examples.
+ IFS=; while read -r line; do
+ if [[ $line = "SUBDIRS = po po-properties \$(SRC_SUBDIRS) docs m4macros build" ]]; then
+ echo "SUBDIRS = po po-properties gdk gtk libgail-util modules m4macros build"
+ else
+ echo $line
+ fi;
+ done < Makefile > Makefile.modified
+ mv Makefile Makefile.original
+ mv Makefile.modified Makefile
+
+ make -j 15
}
package() {
cd "$srcdir/gtk-$pkgver"
- make DESTDIR="$pkgdir" install
+ make -j 15 DESTDIR="$pkgdir" install
install -Dm644 ../settings.ini "$pkgdir/usr/share/gtk-3.0/settings.ini"
install -Dm644 ../gtk-query-immodules-3.0.hook "$pkgdir/usr/share/libalpm/hooks/gtk-query-immodules-3.0.hook"
rm "$pkgdir/usr/bin/gtk-update-icon-cache"
- rm `find "$pkgdir/usr/lib/gtk-3.0/3.0.0/printbackends/"* | grep -v "\-lpr.so" | grep -v "\-file.so"`
}
diff --git a/csd.patch b/csd.patch
index 1f433a9d27fd..45f997c4bb7b 100644
--- a/csd.patch
+++ b/csd.patch
@@ -1,19 +1,135 @@
-diff -U 5 -r -Z -B ./org/gtk/gtkheaderbar.c ./mod/gtk/gtkheaderbar.c
---- ./org/gtk/gtkheaderbar.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtkheaderbar.c 2017-05-11 18:54:47.870268717 +0200
-@@ -264,10 +264,11 @@
- }
+diff -U 25 -r -Z -B ./org/gtk/gtkheaderbar.c ./mod/gtk/gtkheaderbar.c
+--- ./org/gtk/gtkheaderbar.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkheaderbar.c 2017-06-02 03:04:08.330400587 +0200
+@@ -301,51 +301,51 @@
+
+ direction = gtk_widget_get_direction (widget);
+
+ g_object_get (gtk_widget_get_settings (widget),
+ "gtk-shell-shows-app-menu", &shown_by_shell,
+ "gtk-decoration-layout", &layout_desc,
+ NULL);
+
+ if (priv->decoration_layout_set)
+ {
+ g_free (layout_desc);
+ layout_desc = g_strdup (priv->decoration_layout);
+ }
+
+ window = GTK_WINDOW (toplevel);
+
+ if (!shown_by_shell && gtk_window_get_application (window))
+ menu = gtk_application_get_app_menu (gtk_window_get_application (window));
+ else
+ menu = NULL;
+
+ is_sovereign_window = (!gtk_window_get_modal (window) &&
+ gtk_window_get_transient_for (window) == NULL &&
+ gtk_window_get_type_hint (window) == GDK_WINDOW_TYPE_HINT_NORMAL);
+
+- tokens = g_strsplit (layout_desc, ":", 2);
++ tokens = g_strsplit ("menu", ":", 2);
+ if (tokens)
+ {
+ for (i = 0; i < 2; i++)
+ {
+ GtkWidget *box;
+ GtkWidget *separator;
+ int n_children = 0;
+
+ if (tokens[i] == NULL)
+ break;
+ t = g_strsplit (tokens[i], ",", -1);
+
+ separator = gtk_separator_new (GTK_ORIENTATION_VERTICAL);
+ gtk_widget_set_no_show_all (separator, TRUE);
+ gtk_style_context_add_class (gtk_widget_get_style_context (separator), "titlebutton");
+
+ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, priv->spacing);
+
+ for (j = 0; t[j]; j++)
+ {
+ GtkWidget *button = NULL;
+ GtkWidget *image = NULL;
+ AtkObject *accessible;
+
+@@ -362,52 +362,52 @@
+ if (!_gtk_header_bar_update_window_icon (bar, window))
+ {
+ gtk_widget_destroy (button);
+ priv->titlebar_icon = NULL;
+ button = NULL;
+ }
+ }
+ else if (strcmp (t[j], "menu") == 0 &&
+ menu != NULL &&
+ is_sovereign_window)
+ {
+ button = gtk_menu_button_new ();
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), menu);
+ gtk_menu_button_set_use_popover (GTK_MENU_BUTTON (button), TRUE);
+ gtk_style_context_add_class (gtk_widget_get_style_context (button), "titlebutton");
+ gtk_style_context_add_class (gtk_widget_get_style_context (button), "appmenu");
+ image = gtk_image_new ();
+ gtk_container_add (GTK_CONTAINER (button), image);
+ gtk_widget_set_can_focus (button, FALSE);
+ gtk_widget_show_all (button);
+ accessible = gtk_widget_get_accessible (button);
+ if (GTK_IS_ACCESSIBLE (accessible))
+ atk_object_set_name (accessible, _("Application menu"));
+ priv->titlebar_icon = image;
+- if (!_gtk_header_bar_update_window_icon (bar, window))
+- gtk_image_set_from_icon_name (GTK_IMAGE (priv->titlebar_icon), "process-stop-symbolic", GTK_ICON_SIZE_MENU);
++ if (TRUE || !_gtk_header_bar_update_window_icon (bar, window))
++ gtk_image_set_from_icon_name (GTK_IMAGE (priv->titlebar_icon), "view-more-symbolic", GTK_ICON_SIZE_MENU);
+ }
+ else if (strcmp (t[j], "minimize") == 0 &&
+ is_sovereign_window)
+ {
+ button = gtk_button_new ();
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ gtk_style_context_add_class (gtk_widget_get_style_context (button), "titlebutton");
+ gtk_style_context_add_class (gtk_widget_get_style_context (button), "minimize");
+ image = gtk_image_new_from_icon_name ("window-minimize-symbolic", GTK_ICON_SIZE_MENU);
+ g_object_set (image, "use-fallback", TRUE, NULL);
+ gtk_container_add (GTK_CONTAINER (button), image);
+ gtk_widget_set_can_focus (button, FALSE);
+ gtk_widget_show_all (button);
+ g_signal_connect_swapped (button, "clicked",
+ G_CALLBACK (gtk_window_iconify), window);
+ accessible = gtk_widget_get_accessible (button);
+ if (GTK_IS_ACCESSIBLE (accessible))
+ atk_object_set_name (accessible, _("Minimize"));
+ }
+ else if (strcmp (t[j], "maximize") == 0 &&
+ gtk_window_get_resizable (window) &&
+ is_sovereign_window)
+ {
+ const gchar *icon_name;
+ gboolean maximized = gtk_window_is_maximized (window);
+@@ -1262,52 +1262,51 @@
+ * gtk_header_bar_set_title:
+ * @bar: a #GtkHeaderBar
+ * @title: (allow-none): a title, or %NULL
+ *
+ * Sets the title of the #GtkHeaderBar. The title should help a user
+ * identify the current view. A good title should not include the
+ * application name.
+ *
+ * Since: 3.10
+ */
void
- _gtk_header_bar_update_window_buttons (GtkHeaderBar *bar)
+ gtk_header_bar_set_title (GtkHeaderBar *bar,
+ const gchar *title)
{
-+ return;
GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (bar);
- GtkWidget *widget = GTK_WIDGET (bar), *toplevel;
- GtkWindow *window;
- GtkTextDirection direction;
- gchar *layout_desc;
-@@ -1282,12 +1283,11 @@
+ gchar *new_title;
+
+ g_return_if_fail (GTK_IS_HEADER_BAR (bar));
+
+ new_title = g_strdup (title);
g_free (priv->title);
priv->title = new_title;
@@ -27,10 +143,50 @@ diff -U 5 -r -Z -B ./org/gtk/gtkheaderbar.c ./mod/gtk/gtkheaderbar.c
g_object_notify_by_pspec (G_OBJECT (bar), header_bar_props[PROP_TITLE]);
}
-diff -U 5 -r -Z -B ./org/gtk/gtkstylecontext.h ./mod/gtk/gtkstylecontext.h
---- ./org/gtk/gtkstylecontext.h 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtkstylecontext.h 2017-05-11 18:55:14.410270032 +0200
-@@ -816,11 +816,11 @@
+ /**
+ * gtk_header_bar_get_title:
+ * @bar: a #GtkHeaderBar
+ *
+ * Retrieves the title of the header. See gtk_header_bar_set_title().
+ *
+ * Returns: (nullable): the title of the header, or %NULL if none has
+ * been set explicitly. The returned string is owned by the widget
+ * and must not be modified or freed.
+ *
+ * Since: 3.10
+ */
+ const gchar *
+ gtk_header_bar_get_title (GtkHeaderBar *bar)
+ {
+ GtkHeaderBarPrivate *priv = gtk_header_bar_get_instance_private (bar);
+
+ g_return_val_if_fail (GTK_IS_HEADER_BAR (bar), NULL);
+
+ return priv->title;
+diff -U 25 -r -Z -B ./org/gtk/gtkstylecontext.h ./mod/gtk/gtkstylecontext.h
+--- ./org/gtk/gtkstylecontext.h 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkstylecontext.h 2017-06-02 03:04:08.330400587 +0200
+@@ -796,51 +796,51 @@
+ */
+ #define GTK_STYLE_CLASS_TITLEBAR "titlebar"
+
+ /**
+ * GTK_STYLE_CLASS_TITLE:
+ *
+ * A CSS class used for the title label in a titlebar in
+ * a toplevel window.
+ *
+ * Refer to individual widget documentation for used style classes.
+ *
+ * Since: 3.14
+ */
+ #define GTK_STYLE_CLASS_TITLE "title"
+
+ /**
+ * GTK_STYLE_CLASS_SUBTITLE:
+ *
+ * A CSS class used for the subtitle label in a titlebar in
+ * a toplevel window.
*
* Refer to individual widget documentation for used style classes.
*
@@ -43,10 +199,50 @@ diff -U 5 -r -Z -B ./org/gtk/gtkstylecontext.h ./mod/gtk/gtkstylecontext.h
* GTK_STYLE_CLASS_NEEDS_ATTENTION:
*
* A CSS class used when an element needs the user attention,
-diff -U 5 -r -Z -B ./org/gtk/gtkwindow.c ./mod/gtk/gtkwindow.c
---- ./org/gtk/gtkwindow.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtkwindow.c 2017-05-11 18:57:30.303610098 +0200
-@@ -4118,10 +4118,11 @@
+ * for instance a button in a stack switcher corresponding to
+ * a hidden page that changed state.
+ *
+ * Refer to individual widget documentation for used style classes.
+ *
+ * Since: 3.12
+ */
+ #define GTK_STYLE_CLASS_NEEDS_ATTENTION "needs-attention"
+
+ /**
+ * GTK_STYLE_CLASS_SUGGESTED_ACTION:
+ *
+ * A CSS class used when an action (usually a button) is the
+ * primary suggested action in a specific context.
+ *
+ * Refer to individual widget documentation for used style classes.
+ *
+ * Since: 3.12
+ */
+ #define GTK_STYLE_CLASS_SUGGESTED_ACTION "suggested-action"
+diff -U 25 -r -Z -B ./org/gtk/gtkwindow.c ./mod/gtk/gtkwindow.c
+--- ./org/gtk/gtkwindow.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkwindow.c 2017-06-02 03:04:08.333733920 +0200
+@@ -4098,50 +4098,51 @@
+ visual = gdk_screen_get_rgba_visual (screen);
+ if (!visual)
+ return FALSE;
+ }
+ #endif
+
+ #ifdef GDK_WINDOWING_WIN32
+ if (GDK_IS_WIN32_DISPLAY (display))
+ {
+ if (!gdk_screen_is_composited (screen))
+ return FALSE;
+
+ /* We need a visual with alpha */
+ visual = gdk_screen_get_rgba_visual (screen);
+ if (!visual)
+ return FALSE;
+ }
+ #endif
+
+ return TRUE;
}
static void
@@ -58,7 +254,47 @@ diff -U 5 -r -Z -B ./org/gtk/gtkwindow.c ./mod/gtk/gtkwindow.c
GdkVisual *visual;
/* We need a visual with alpha for client shadows */
-@@ -6065,10 +6066,11 @@
+ if (priv->use_client_shadow)
+ {
+ visual = gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget));
+ if (visual != NULL)
+ gtk_widget_set_visual (widget, visual);
+
+ gtk_style_context_add_class (gtk_widget_get_style_context (widget), GTK_STYLE_CLASS_CSD);
+ }
+ else
+ {
+ gtk_style_context_add_class (gtk_widget_get_style_context (widget), "solid-csd");
+ }
+
+ priv->client_decorated = TRUE;
+ }
+
+ static void
+ on_titlebar_title_notify (GtkHeaderBar *titlebar,
+ GParamSpec *pspec,
+ GtkWindow *self)
+@@ -6045,50 +6046,51 @@
+
+ titlebar = gtk_header_bar_new ();
+ g_object_set (titlebar,
+ "title", priv->title ? priv->title : get_default_title (),
+ "has-subtitle", FALSE,
+ "show-close-button", TRUE,
+ NULL);
+ context = gtk_widget_get_style_context (titlebar);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_TITLEBAR);
+ gtk_style_context_add_class (context, "default-decoration");
+
+ return titlebar;
+ }
+
+ void
+ _gtk_window_request_csd (GtkWindow *window)
+ {
+ GtkWindowPrivate *priv = window->priv;
+
+ priv->csd_requested = TRUE;
}
static gboolean
@@ -70,39 +306,75 @@ diff -U 5 -r -Z -B ./org/gtk/gtkwindow.c ./mod/gtk/gtkwindow.c
if (priv->csd_requested)
return TRUE;
-@@ -8999,17 +9001,21 @@
- state = gtk_window_get_state (window);
-
- iconified = (state & GDK_WINDOW_STATE_ICONIFIED) == GDK_WINDOW_STATE_ICONIFIED;
- maximized = priv->maximized && !iconified;
-
-- priv->popup_menu = gtk_menu_new ();
-+ if ( !priv->application || !gtk_application_get_app_menu(priv->application) )
-+ return;
-+ priv->popup_menu = gtk_menu_new_from_model (gtk_application_get_app_menu(priv->application));
- gtk_style_context_add_class (gtk_widget_get_style_context (priv->popup_menu),
- GTK_STYLE_CLASS_CONTEXT_MENU);
-
- gtk_menu_attach_to_widget (GTK_MENU (priv->popup_menu),
- GTK_WIDGET (window),
- popup_menu_detach);
-+ gtk_menu_popup_at_pointer (GTK_MENU (priv->popup_menu), (GdkEvent *) event);
-+ return;
- menuitem = gtk_menu_item_new_with_label (_("Restore"));
+ if (!priv->decorated)
+ return FALSE;
+
+ if (priv->type == GTK_WINDOW_POPUP)
+ return FALSE;
+
+ csd_env = g_getenv ("GTK_CSD");
+
+ #ifdef GDK_WINDOWING_BROADWAY
+ if (GDK_IS_BROADWAY_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
+ return TRUE;
+ #endif
+
+ #ifdef GDK_WINDOWING_WAYLAND
+ if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
+ return TRUE;
+ #endif
+
+ #ifdef GDK_WINDOWING_MIR
+@@ -9071,50 +9073,51 @@
+ if (maximized)
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ gtk_widget_show (menuitem);
+ g_signal_connect (G_OBJECT (menuitem), "activate",
+ G_CALLBACK (ontop_window_clicked), window);
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
+
+ menuitem = gtk_separator_menu_item_new ();
gtk_widget_show (menuitem);
- /* "Restore" means "Unmaximize" or "Unminimize"
- * (yes, some WMs allow window menu to be shown for minimized windows).
-@@ -9091,11 +9097,11 @@
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
+
+ menuitem = gtk_menu_item_new_with_label (_("Close"));
+ gtk_widget_show (menuitem);
+ if (!priv->deletable)
+ gtk_widget_set_sensitive (menuitem, FALSE);
+ g_signal_connect (G_OBJECT (menuitem), "activate",
+ G_CALLBACK (close_window_clicked), window);
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
+ gtk_menu_popup_at_pointer (GTK_MENU (priv->popup_menu), (GdkEvent *) event);
+ }
static void
gtk_window_do_popup (GtkWindow *window,
GdkEventButton *event)
{
-- if (!gdk_window_show_window_menu (_gtk_widget_get_window (GTK_WIDGET (window)),
-+ if (TRUE || !gdk_window_show_window_menu (_gtk_widget_get_window (GTK_WIDGET (window)),
++ return;
+ if (!gdk_window_show_window_menu (_gtk_widget_get_window (GTK_WIDGET (window)),
(GdkEvent *) event))
gtk_window_do_popup_fallback (window, event);
}
/*********************************
+ * Functions related to resizing *
+ *********************************/
+
+ static void
+ geometry_size_to_pixels (GdkGeometry *geometry,
+ guint flags,
+ gint *width,
+ gint *height)
+ {
+ gint base_width = 0;
+ gint base_height = 0;
+ gint min_width = 0;
+ gint min_height = 0;
+ gint width_inc = 1;
+ gint height_inc = 1;
+
+ if (flags & GDK_HINT_BASE_SIZE)
+ {
+ base_width = geometry->base_width;
diff --git a/file-chooser.patch b/file-chooser.patch
index 679ee4583c70..95804f556965 100644
--- a/file-chooser.patch
+++ b/file-chooser.patch
@@ -1,7 +1,83 @@
-diff -U 5 -r -Z -B ./org/gtk/gtkfilechooserwidget.c ./mod/gtk/gtkfilechooserwidget.c
---- ./org/gtk/gtkfilechooserwidget.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtkfilechooserwidget.c 2017-05-11 19:03:17.373627295 +0200
-@@ -2420,11 +2420,11 @@
+diff -U 25 -r -Z -B ./org/gtk/gtkfilechooserdialog.c ./mod/gtk/gtkfilechooserdialog.c
+--- ./org/gtk/gtkfilechooserdialog.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkfilechooserdialog.c 2017-06-02 01:38:38.023479724 +0200
+@@ -472,52 +472,50 @@
+
+ static void
+ setup_search (GtkFileChooserDialog *dialog)
+ {
+ gboolean use_header;
+
+ if (dialog->priv->search_setup)
+ return;
+
+ dialog->priv->search_setup = TRUE;
+
+ g_object_get (dialog, "use-header-bar", &use_header, NULL);
+ if (use_header)
+ {
+ GtkWidget *button;
+ GtkWidget *image;
+ GtkWidget *header;
+
+ button = gtk_toggle_button_new ();
+ gtk_widget_set_focus_on_click (button, FALSE);
+ gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
+ image = gtk_image_new_from_icon_name ("edit-find-symbolic", GTK_ICON_SIZE_MENU);
+ gtk_container_add (GTK_CONTAINER (button), image);
+ gtk_style_context_add_class (gtk_widget_get_style_context (button), "image-button");
+ gtk_style_context_remove_class (gtk_widget_get_style_context (button), "text-button");
+- gtk_widget_show (image);
+- gtk_widget_show (button);
+
+ header = gtk_dialog_get_header_bar (GTK_DIALOG (dialog));
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (header), button);
+
+ g_object_bind_property (button, "active",
+ dialog->priv->widget, "search-mode",
+ G_BINDING_BIDIRECTIONAL);
+ g_object_bind_property (dialog->priv->widget, "subtitle",
+ header, "subtitle",
+ G_BINDING_SYNC_CREATE);
+
+ gtk_container_forall (GTK_CONTAINER (header), add_button, dialog);
+ }
+ }
+
+ static void
+ setup_save_entry (GtkFileChooserDialog *dialog)
+ {
+ gboolean use_header;
+ GtkFileChooserAction action;
+ gboolean need_entry;
+ GtkWidget *header;
+
+ g_object_get (dialog,
+ "use-header-bar", &use_header,
+diff -U 25 -r -Z -B ./org/gtk/gtkfilechooserwidget.c ./mod/gtk/gtkfilechooserwidget.c
+--- ./org/gtk/gtkfilechooserwidget.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkfilechooserwidget.c 2017-06-02 01:38:51.116813706 +0200
+@@ -2400,51 +2400,51 @@
+ }
+
+ /* Callback used when a button is pressed on the file list. We trap button 3 to
+ * bring up a popup menu.
+ */
+ static gboolean
+ list_button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ GtkFileChooserWidget *impl)
+ {
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+ static gboolean in_press = FALSE;
+ GtkTreePath *path;
+ GtkTreeViewColumn *column;
+ GdkDevice *device;
+ gboolean modify, extend, is_touchscreen;
+
+ if (in_press)
+ return FALSE;
+
device = gdk_event_get_source_device ((GdkEvent *) event);
is_touchscreen = gtk_simulate_touchscreen () ||
gdk_device_get_source (device) == GDK_SOURCE_TOUCHSCREEN;
@@ -14,10 +90,207 @@ diff -U 5 -r -Z -B ./org/gtk/gtkfilechooserwidget.c ./mod/gtk/gtkfilechooserwidg
event->button == GDK_BUTTON_PRIMARY &&
gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (priv->browse_files_tree_view),
event->x, event->y,
-diff -U 5 -r -Z -B ./org/gtk/gtkplacessidebar.c ./mod/gtk/gtkplacessidebar.c
---- ./org/gtk/gtkplacessidebar.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtkplacessidebar.c 2017-05-11 19:03:58.446962664 +0200
-@@ -594,10 +594,11 @@
+ &path, &column, NULL, NULL))
+ {
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view));
+ if (gtk_tree_selection_path_is_selected (selection, path))
+ {
+ list_row_activated (GTK_TREE_VIEW (priv->browse_files_tree_view), path, column, impl);
+ gtk_tree_path_free (path);
+ return TRUE;
+ }
+
+ gtk_tree_path_free (path);
+ }
+
+ if (!gdk_event_triggers_context_menu ((GdkEvent *) event))
+ return FALSE;
+
+ in_press = TRUE;
+ gtk_widget_event (priv->browse_files_tree_view, (GdkEvent *) event);
+@@ -2456,51 +2456,50 @@
+ }
+
+ static void
+ long_press_cb (GtkGesture *gesture,
+ gdouble x,
+ gdouble y,
+ GtkFileChooserWidget *impl)
+ {
+ file_list_show_popover (impl, x, y);
+ }
+
+ typedef struct {
+ OperationMode operation_mode;
+ gint general_column;
+ gint model_column;
+ } ColumnMap;
+
+ /* Sets the sort column IDs for the file list; needs to be done whenever we
+ * change the model on the treeview.
+ */
+ static void
+ file_list_set_sort_column_ids (GtkFileChooserWidget *impl)
+ {
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+
+- gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->browse_files_tree_view), -1);
+
+ 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);
+ gtk_tree_view_column_set_sort_column_id (priv->list_size_column, MODEL_COL_SIZE);
+ gtk_tree_view_column_set_sort_column_id (priv->list_location_column, MODEL_COL_LOCATION_TEXT);
+ }
+
+ static gboolean
+ file_list_query_tooltip_cb (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_tip,
+ GtkTooltip *tooltip,
+ gpointer user_data)
+ {
+ GtkFileChooserWidget *impl = user_data;
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GFile *file;
+ gchar *filename;
+
+ if (priv->operation_mode == OPERATION_MODE_BROWSE)
+ return FALSE;
+@@ -3226,50 +3225,52 @@
+ operation_mode_set (GtkFileChooserWidget *impl, OperationMode mode)
+ {
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+ OperationMode old_mode;
+
+ operation_mode_stop (impl, priv->operation_mode);
+
+ old_mode = priv->operation_mode;
+ priv->operation_mode = mode;
+
+ switch (priv->operation_mode)
+ {
+ case OPERATION_MODE_ENTER_LOCATION:
+ operation_mode_set_enter_location (impl);
+ break;
+
+ case OPERATION_MODE_OTHER_LOCATIONS:
+ operation_mode_set_other_locations (impl);
+ break;
+
+ case OPERATION_MODE_BROWSE:
+ operation_mode_set_browse (impl);
+ break;
+
+ case OPERATION_MODE_SEARCH:
++ priv->operation_mode = old_mode;
++ return;
+ operation_mode_set_search (impl);
+ break;
+
+ case OPERATION_MODE_RECENT:
+ operation_mode_set_recent (impl);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ return;
+ }
+
+ if ((old_mode == OPERATION_MODE_SEARCH) != (mode == OPERATION_MODE_SEARCH))
+ g_object_notify (G_OBJECT (impl), "search-mode");
+
+ g_object_notify (G_OBJECT (impl), "subtitle");
+ }
+
+ /* This function is basically a do_all function.
+ *
+ * It sets the visibility on all the widgets based on the current state, and
+ * moves the custom_widget if needed.
+ */
+ static void
+ update_appearance (GtkFileChooserWidget *impl)
+@@ -7497,51 +7498,50 @@
+
+ _gtk_file_system_model_set_filter (priv->recent_model, priv->current_filter);
+ gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (priv->recent_model),
+ recent_sort_func,
+ impl, NULL);
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->recent_model),
+ GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
+ GTK_SORT_DESCENDING);
+ }
+
+ typedef struct
+ {
+ GtkFileChooserWidget *impl;
+ GList *items;
+ } RecentLoadData;
+
+ static void
+ recent_idle_cleanup (gpointer data)
+ {
+ RecentLoadData *load_data = data;
+ GtkFileChooserWidget *impl = load_data->impl;
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+
+ 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_column_set_sort_column_id (priv->list_name_column, -1);
+ gtk_tree_view_column_set_sort_column_id (priv->list_time_column, -1);
+ gtk_tree_view_column_set_sort_column_id (priv->list_size_column, -1);
+ gtk_tree_view_column_set_sort_column_id (priv->list_location_column, -1);
+
+ update_columns (impl, TRUE, _("Accessed"));
+
+ set_busy_cursor (impl, FALSE);
+
+ priv->load_recent_id = 0;
+
+ g_free (load_data);
+ }
+
+ /* Populates the file system model with the GtkRecentInfo* items
+ * in the provided list; frees the items
+ */
+ static void
+ populate_model_with_recent_items (GtkFileChooserWidget *impl,
+ GList *items)
+ {
+ GtkFileChooserWidgetPrivate *priv = impl->priv;
+ gint limit;
+ GList *l;
+diff -U 25 -r -Z -B ./org/gtk/gtkplacessidebar.c ./mod/gtk/gtkplacessidebar.c
+--- ./org/gtk/gtkplacessidebar.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkplacessidebar.c 2017-06-01 23:09:34.146885403 +0200
+@@ -574,50 +574,51 @@
+ g_object_unref (home_dir);
+ g_object_unref (location);
+
+ return res;
+ }
+
+ static void
+ open_home (GtkPlacesSidebar *sidebar)
+ {
+ const gchar *home_path;
+ GFile *home_dir;
+
+ home_path = g_get_home_dir ();
+ if (!home_path)
+ return;
+
+ home_dir = g_file_new_for_path (home_path);
+ emit_open_location (sidebar, home_dir, 0);
+
+ g_object_unref (home_dir);
}
static void
@@ -29,7 +302,47 @@ diff -U 5 -r -Z -B ./org/gtk/gtkplacessidebar.c ./mod/gtk/gtkplacessidebar.c
dirs = NULL;
for (index = 0; index < G_USER_N_DIRECTORIES; index++)
-@@ -1247,11 +1248,11 @@
+ {
+ const gchar *path;
+ GFile *root;
+ GIcon *icon;
+ gchar *name;
+ gchar *mount_uri;
+ gchar *tooltip;
+
+ if (!_gtk_bookmarks_manager_get_is_xdg_dir_builtin (index))
+ continue;
+
+ path = g_get_user_special_dir (index);
+
+ /* XDG resets special dirs to the home directory in case
+ * it's not finiding what it expects. We don't want the home
+ * to be added multiple times in that weird configuration.
+ */
+ if (path == NULL ||
+ path_is_home_dir (path) ||
+ g_list_find_custom (dirs, path, (GCompareFunc) g_strcmp0) != NULL)
+@@ -1227,51 +1228,51 @@
+ tooltip = g_file_get_parse_name (root);
+ add_place (sidebar, PLACES_MOUNTED_VOLUME,
+ SECTION_COMPUTER,
+ name, icon, mount_uri,
+ NULL, NULL, mount, 0, tooltip);
+ g_object_unref (root);
+ g_object_unref (mount);
+ g_object_unref (icon);
+ g_free (name);
+ g_free (mount_uri);
+ g_free (tooltip);
+ }
+ g_list_free (mounts);
+
+ /* add bookmarks */
+ bookmarks = _gtk_bookmarks_manager_list_bookmarks (sidebar->bookmarks_manager);
+
+ for (sl = bookmarks, index = 0; sl; sl = sl->next, index++)
+ {
+ gboolean is_native;
BookmarkQueryClosure *clos;
root = sl->data;
@@ -42,7 +355,47 @@ diff -U 5 -r -Z -B ./org/gtk/gtkplacessidebar.c ./mod/gtk/gtkplacessidebar.c
if (sidebar->local_only && !is_native)
continue;
-@@ -3872,11 +3873,11 @@
+ clos = g_slice_new (BookmarkQueryClosure);
+ clos->sidebar = sidebar;
+ clos->index = index;
+ clos->is_native = is_native;
+ g_file_query_info_async (root,
+ "standard::display-name,standard::symbolic-icon",
+ G_FILE_QUERY_INFO_NONE,
+ G_PRIORITY_DEFAULT,
+ sidebar->cancellable,
+ on_bookmark_query_info_complete,
+ clos);
+ }
+
+ g_slist_free_full (bookmarks, g_object_unref);
+
+ /* Add new bookmark row */
+ new_bookmark_icon = g_themed_icon_new ("bookmark-new-symbolic");
+ sidebar->new_bookmark_row = add_place (sidebar, PLACES_DROP_FEEDBACK,
+ SECTION_BOOKMARKS,
+ _("New bookmark"), new_bookmark_icon, NULL,
+@@ -3852,51 +3853,51 @@
+ gtk_target_list_add_text_targets (sidebar->source_targets, 0);
+
+ g_signal_connect (sidebar->list_box, "motion-notify-event",
+ G_CALLBACK (on_motion_notify_event), sidebar);
+ g_signal_connect (sidebar->list_box, "drag-begin",
+ G_CALLBACK (drag_begin_callback), sidebar);
+ g_signal_connect (sidebar->list_box, "drag-motion",
+ G_CALLBACK (drag_motion_callback), sidebar);
+ g_signal_connect (sidebar->list_box, "drag-data-get",
+ G_CALLBACK (drag_data_get_callback), sidebar);
+ g_signal_connect (sidebar->list_box, "drag-data-received",
+ G_CALLBACK (drag_data_received_callback), sidebar);
+ g_signal_connect (sidebar->list_box, "drag-drop",
+ G_CALLBACK (drag_drop_callback), sidebar);
+ g_signal_connect (sidebar->list_box, "drag-end",
+ G_CALLBACK (drag_end_callback), sidebar);
+ g_signal_connect (sidebar->list_box, "drag-leave",
+ G_CALLBACK (drag_leave_callback), sidebar);
+ sidebar->drag_row = NULL;
+ sidebar->row_placeholder = NULL;
sidebar->dragging_over = FALSE;
sidebar->drag_data_info = DND_UNKNOWN;
@@ -55,10 +408,43 @@ diff -U 5 -r -Z -B ./org/gtk/gtkplacessidebar.c ./mod/gtk/gtkplacessidebar.c
G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
NULL,
"org.freedesktop.hostname1",
-diff -U 5 -r -Z -B ./org/gtk/ui/gtkfilechooserwidget.ui ./mod/gtk/ui/gtkfilechooserwidget.ui
---- ./org/gtk/ui/gtkfilechooserwidget.ui 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/ui/gtkfilechooserwidget.ui 2017-05-11 19:05:40.620301060 +0200
-@@ -14,11 +14,11 @@
+ "/org/freedesktop/hostname1",
+ "org.freedesktop.hostname1",
+ sidebar->hostnamed_cancellable,
+ hostname_proxy_new_cb,
+ sidebar);
+
+ sidebar->drop_state = DROP_STATE_NORMAL;
+
+ /* Don't bother trying to trace this across hierarchy changes... */
+ sidebar->gtk_settings = gtk_settings_get_default ();
+ g_signal_connect (sidebar->gtk_settings, "notify::gtk-shell-shows-desktop",
+ G_CALLBACK (shell_shows_desktop_changed), sidebar);
+ g_object_get (sidebar->gtk_settings, "gtk-shell-shows-desktop", &show_desktop, NULL);
+ sidebar->show_desktop = show_desktop;
+
+ /* populate the sidebar */
+ update_places (sidebar);
+
+ add_actions (sidebar);
+ }
+diff -U 25 -r -Z -B ./org/gtk/ui/gtkfilechooserwidget.ui ./mod/gtk/ui/gtkfilechooserwidget.ui
+--- ./org/gtk/ui/gtkfilechooserwidget.ui 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/ui/gtkfilechooserwidget.ui 2017-06-02 03:00:47.383723964 +0200
+@@ -1,44 +1,45 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <interface domain="gtk30">
+ <!-- interface-requires gtk+ 3.10 -->
+ <!-- interface-requires gtkprivate 3.10 -->
+ <template class="GtkFileChooserWidget" parent="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkBox" id="browse_widgets_box">
+ <property name="visible">1</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkPaned" id="browse_widgets_hpaned">
+ <property name="visible">1</property>
<child>
<object class="GtkPlacesSidebar" id="places_sidebar">
<property name="visible">1</property>
@@ -66,8 +452,83 @@ diff -U 5 -r -Z -B ./org/gtk/ui/gtkfilechooserwidget.ui ./mod/gtk/ui/gtkfilechoo
<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>
<signal name="open-location" handler="places_sidebar_open_location_cb" swapped="no"/>
<signal name="show-error-message" handler="places_sidebar_show_error_message_cb" swapped="no"/>
+ <signal name="show-other-locations-with-flags" handler="places_sidebar_show_other_locations_with_flags_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="resize">0</property>
+ <property name="shrink">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">1</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkRevealer" id="browse_header_revealer">
+ <property name="visible">1</property>
+ <property name="hexpand">1</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">1</property>
+ <property name="name">pathbarbox</property>
+ <property name="orientation">vertical</property>
+@@ -140,51 +141,52 @@
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="list_and_preview_box">
+ <property name="visible">1</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkStack" id="browse_files_stack">
+ <property name="visible">1</property>
+ <property name="transition-type">crossfade</property>
+ <style>
+ <class name="view"/>
+ </style>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">1</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="browse_files_swin">
+ <property name="visible">1</property>
+ <property name="hscrollbar-policy">never</property>
+ <child>
+ <object class="GtkTreeView" id="browse_files_tree_view">
+ <property name="visible">1</property>
+ <property name="has-tooltip">1</property>
+- <property name="enable-search">0</property>
++ <property name="enable-search">1</property>
++ <property name="search-column">0</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="browse_files_tree_view-atkobject">
+ <property name="AtkObject::accessible-name" translatable="yes">Files</property>
+ </object>
+ </child>
+ <signal name="button-press-event" handler="list_button_press_event_cb" swapped="no"/>
+ <signal name="drag-data-received" handler="file_list_drag_data_received_cb" swapped="no"/>
+ <signal name="drag-drop" handler="file_list_drag_drop_cb" swapped="no"/>
+ <signal name="drag-begin" handler="file_list_drag_begin_cb" swapped="no"/>
+ <signal name="drag-motion" handler="file_list_drag_motion_cb" swapped="no"/>
+ <signal name="drag-end" handler="file_list_drag_end_cb" swapped="no"/>
+ <signal name="key-press-event" handler="browse_files_key_press_event_cb" swapped="no"/>
+ <signal name="popup-menu" handler="list_popup_menu_cb" swapped="no"/>
+ <signal name="query-tooltip" handler="file_list_query_tooltip_cb" swapped="no"/>
+ <signal name="row-activated" handler="list_row_activated" swapped="no"/>
+ <signal name="cursor-changed" handler="list_cursor_changed" swapped="no"/>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection2">
+ <signal name="changed" handler="list_selection_changed" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="list_name_column">
+ <property name="title" translatable="yes">Name</property>
+ <property name="resizable">1</property>
diff --git a/general.patch b/general.patch
deleted file mode 100644
index e3f887e574c7..000000000000
--- a/general.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-diff -U 5 -r -Z -B ./org/gtk/gtkscrolledwindow.c ./mod/gtk/gtkscrolledwindow.c
---- ./org/gtk/gtkscrolledwindow.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtkscrolledwindow.c 2017-05-11 19:11:54.443652914 +0200
-@@ -4398,11 +4398,11 @@
- GtkScrolledWindowPrivate *priv = scrolled_window->priv;
- gboolean use_indicators;
-
- use_indicators = priv->overlay_scrolling;
-
-- if (g_strcmp0 (g_getenv ("GTK_OVERLAY_SCROLLING"), "0") == 0)
-+ if (TRUE || g_strcmp0 (g_getenv ("GTK_OVERLAY_SCROLLING"), "0") == 0)
- use_indicators = FALSE;
-
- if (priv->use_indicators != use_indicators)
- {
- priv->use_indicators = use_indicators;
-diff -U 5 -r -Z -B ./org/gtk/gtksettings.c ./mod/gtk/gtksettings.c
---- ./org/gtk/gtksettings.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtksettings.c 2017-05-11 19:12:01.523653266 +0200
-@@ -1721,11 +1721,11 @@
- */
- result = settings_install_property_parser (class,
- g_param_spec_boolean ("gtk-recent-files-enabled",
- P_("Recent Files Enabled"),
- P_("Whether GTK+ remembers recent files"),
-- TRUE,
-+ FALSE,
- GTK_PARAM_READWRITE),
- NULL);
- g_assert (result == PROP_RECENT_FILES_ENABLED);
-
- /**
-diff -U 5 -r -Z -B ./org/gtk/gtkwindow.c ./mod/gtk/gtkwindow.c
---- ./org/gtk/gtkwindow.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtkwindow.c 2017-05-11 19:12:26.660321178 +0200
-@@ -149,11 +149,11 @@
- *
- * GtkWindow adds the .titlebar and .default-decoration style classes to the
- * 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
- * empty container widget, we use NO_CONTENT_CHILD_NAT as natural width/height
- * instead.
-diff -U 5 -r -Z -B ./org/gtk/ui/gtkstatusbar.ui ./mod/gtk/ui/gtkstatusbar.ui
---- ./org/gtk/ui/gtkstatusbar.ui 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/ui/gtkstatusbar.ui 2017-05-11 21:02:41.253982250 +0200
-@@ -3,12 +3,12 @@
- <!-- interface-requires gtk+ 3.10 -->
- <template class="GtkStatusbar" parent="GtkBox">
- <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>
- <property name="shadow-type">none</property>
- <child>
diff --git a/icons.patch b/icons.patch
new file mode 100644
index 000000000000..848d0e21248c
--- /dev/null
+++ b/icons.patch
@@ -0,0 +1,75 @@
+diff -U 25 -r -Z -B ./org/gtk/gtkbutton.c ./mod/gtk/gtkbutton.c
+--- ./org/gtk/gtkbutton.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkbutton.c 2017-06-03 00:58:36.244202195 +0200
+@@ -2149,50 +2149,71 @@
+ for_size,
+ minimum_size, natural_size,
+ minimum_baseline, natural_baseline);
+ }
+
+ /**
+ * gtk_button_set_label:
+ * @button: a #GtkButton
+ * @label: a string
+ *
+ * Sets the text of the label of the button to @str. This text is
+ * also used to select the stock item if gtk_button_set_use_stock()
+ * is used.
+ *
+ * This will also clear any previously set labels.
+ */
+ void
+ gtk_button_set_label (GtkButton *button,
+ const gchar *label)
+ {
+ GtkButtonPrivate *priv;
+ gchar *new_label;
+
+ g_return_if_fail (GTK_IS_BUTTON (button));
+
++ if (!gtk_button_get_image(GTK_BUTTON(button))) {
++ 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)
++ gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_icon_name(use_this_icon,GTK_ICON_SIZE_BUTTON));
++ }
++
+ priv = button->priv;
+
+ new_label = g_strdup (label);
+ g_free (priv->label_text);
+ priv->label_text = new_label;
+
+ gtk_button_construct_child (button);
+
+ g_object_notify_by_pspec (G_OBJECT (button), props[PROP_LABEL]);
+ }
+
+ /**
+ * gtk_button_get_label:
+ * @button: a #GtkButton
+ *
+ * Fetches the text from the label of the button, as set by
+ * gtk_button_set_label(). If the label text has not
+ * been set the return value will be %NULL. This will be the
+ * case if you create an empty button with gtk_button_new() to
+ * use as a container.
+ *
+ * Returns: The text of the label widget. This string is owned
+ * by the widget and must not be modified or freed.
+ */
+ const gchar *
diff --git a/others.patch b/others.patch
new file mode 100644
index 000000000000..6ab483cf82bd
--- /dev/null
+++ b/others.patch
@@ -0,0 +1,264 @@
+diff -U 25 -r -Z -B ./org/gtk/gtkmenubutton.c ./mod/gtk/gtkmenubutton.c
+--- ./org/gtk/gtkmenubutton.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkmenubutton.c 2017-06-02 03:09:05.707081988 +0200
+@@ -801,51 +801,51 @@
+ * actions will be connected as documented for these functions.
+ *
+ * If #GtkMenuButton:popup or #GtkMenuButton:popover are already set,
+ * their content will be lost and replaced by the newly created popup.
+ *
+ * Since: 3.6
+ */
+ void
+ gtk_menu_button_set_menu_model (GtkMenuButton *menu_button,
+ GMenuModel *menu_model)
+ {
+ GtkMenuButtonPrivate *priv;
+
+ g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
+ g_return_if_fail (G_IS_MENU_MODEL (menu_model) || menu_model == NULL);
+
+ priv = menu_button->priv;
+
+ g_object_freeze_notify (G_OBJECT (menu_button));
+
+ if (menu_model)
+ g_object_ref (menu_model);
+
+ if (menu_model)
+ {
+- if (priv->use_popover)
++ if (FALSE && priv->use_popover)
+ {
+ GtkWidget *popover;
+
+ popover = gtk_popover_new_from_model (GTK_WIDGET (menu_button), menu_model);
+ gtk_menu_button_set_popover (menu_button, popover);
+ }
+ else
+ {
+ GtkWidget *menu;
+
+ menu = gtk_menu_new_from_model (menu_model);
+ gtk_widget_show_all (menu);
+ gtk_menu_button_set_popup (menu_button, menu);
+ }
+ }
+ else
+ {
+ gtk_menu_button_set_popup (menu_button, NULL);
+ gtk_menu_button_set_popover (menu_button, NULL);
+ }
+
+ priv->model = menu_model;
+ g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_MENU_MODEL]);
+
+ g_object_thaw_notify (G_OBJECT (menu_button));
+diff -U 25 -r -Z -B ./org/gtk/gtkscrolledwindow.c ./mod/gtk/gtkscrolledwindow.c
+--- ./org/gtk/gtkscrolledwindow.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkscrolledwindow.c 2017-06-02 03:09:05.713748655 +0200
+@@ -4378,51 +4378,51 @@
+ static void
+ gtk_scrolled_window_sync_use_indicators (GtkScrolledWindow *scrolled_window)
+ {
+ GtkScrolledWindowPrivate *priv = scrolled_window->priv;
+
+ if (priv->use_indicators)
+ {
+ setup_indicator (scrolled_window, &priv->hindicator, priv->hscrollbar);
+ setup_indicator (scrolled_window, &priv->vindicator, priv->vscrollbar);
+ }
+ else
+ {
+ remove_indicator (scrolled_window, &priv->hindicator);
+ remove_indicator (scrolled_window, &priv->vindicator);
+ }
+ }
+
+ static void
+ gtk_scrolled_window_update_use_indicators (GtkScrolledWindow *scrolled_window)
+ {
+ GtkScrolledWindowPrivate *priv = scrolled_window->priv;
+ gboolean use_indicators;
+
+ use_indicators = priv->overlay_scrolling;
+
+- if (g_strcmp0 (g_getenv ("GTK_OVERLAY_SCROLLING"), "0") == 0)
++ if (TRUE || g_strcmp0 (g_getenv ("GTK_OVERLAY_SCROLLING"), "0") == 0)
+ use_indicators = FALSE;
+
+ if (priv->use_indicators != use_indicators)
+ {
+ priv->use_indicators = use_indicators;
+
+ if (gtk_widget_get_realized (GTK_WIDGET (scrolled_window)))
+ gtk_scrolled_window_sync_use_indicators (scrolled_window);
+
+ gtk_widget_queue_resize (GTK_WIDGET (scrolled_window));
+ }
+ }
+
+ static void
+ gtk_scrolled_window_realize (GtkWidget *widget)
+ {
+ GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
+ GtkScrolledWindowPrivate *priv = scrolled_window->priv;
+ GdkWindow *window;
+ GtkAllocation allocation;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+diff -U 25 -r -Z -B ./org/gtk/gtksettings.c ./mod/gtk/gtksettings.c
+--- ./org/gtk/gtksettings.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtksettings.c 2017-06-02 03:09:05.713748655 +0200
+@@ -1701,51 +1701,51 @@
+ * 'PRIMARY' clipboard content at the cursor location.
+ *
+ * Since: 3.4
+ */
+ result = settings_install_property_parser (class,
+ g_param_spec_boolean ("gtk-enable-primary-paste",
+ P_("Enable primary paste"),
+ P_("Whether a middle click on a mouse should paste the 'PRIMARY' clipboard content at the cursor location."),
+ TRUE,
+ GTK_PARAM_READWRITE),
+ NULL);
+ g_assert (result == PROP_ENABLE_PRIMARY_PASTE);
+
+ /**
+ * GtkSettings:gtk-recent-files-enabled:
+ *
+ * Whether GTK+ should keep track of items inside the recently used
+ * resources list. If set to %FALSE, the list will always be empty.
+ *
+ * Since: 3.8
+ */
+ result = settings_install_property_parser (class,
+ g_param_spec_boolean ("gtk-recent-files-enabled",
+ P_("Recent Files Enabled"),
+ P_("Whether GTK+ remembers recent files"),
+- TRUE,
++ FALSE,
+ GTK_PARAM_READWRITE),
+ NULL);
+ g_assert (result == PROP_RECENT_FILES_ENABLED);
+
+ /**
+ * GtkSettings:gtk-long-press-time:
+ *
+ * The time for a button or touch press to be considered a "long press".
+ *
+ * Since: 3.14
+ */
+ result = settings_install_property_parser (class,
+ g_param_spec_uint ("gtk-long-press-time",
+ P_("Long press time"),
+ P_("Time for a button/touch press to be considered a long press (in milliseconds)"),
+ 0, G_MAXINT, 500,
+ GTK_PARAM_READWRITE),
+ NULL);
+ g_assert (result == PROP_LONG_PRESS_TIME);
+
+ /**
+ * GtkSettings:gtk-keynav-use-caret:
+ *
+ * Whether GTK+ should make sure that text can be navigated with
+ * a caret, even if it is not editable. This is useful when using
+diff -U 25 -r -Z -B ./org/gtk/gtkwindow.c ./mod/gtk/gtkwindow.c
+--- ./org/gtk/gtkwindow.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtkwindow.c 2017-06-02 03:09:05.717081989 +0200
+@@ -129,51 +129,51 @@
+ *
+ * # CSS nodes
+ *
+ * |[<!-- language="plain" -->
+ * window.background
+ * ├── decoration
+ * ├── <titlebar child>.titlebar [.default-decoration]
+ * ╰── <child>
+ * ]|
+ *
+ * GtkWindow has a main CSS node with name window and style class .background,
+ * and a subnode with name decoration.
+ *
+ * Style classes that are typically used with the main CSS node are .csd (when
+ * client-side decorations are in use), .solid-csd (for client-side decorations
+ * without invisible borders), .ssd (used by mutter when rendering server-side
+ * decorations). GtkWindow also represents window states with the following
+ * style classes on the main node: .tiled, .maximized, .fullscreen. Specialized
+ * types of window often add their own discriminating style classes, such as
+ * .popup or .tooltip.
+ *
+ * GtkWindow adds the .titlebar and .default-decoration style classes to the
+ * 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
+ * empty container widget, we use NO_CONTENT_CHILD_NAT as natural width/height
+ * instead.
+ */
+
+ typedef struct _GtkWindowPopover GtkWindowPopover;
+
+ struct _GtkWindowPopover
+ {
+ GtkWidget *widget;
+ GtkWidget *parent;
+ GdkWindow *window;
+ GtkPositionType pos;
+ cairo_rectangle_int_t rect;
+ gulong unmap_id;
+ guint clamp_allocation : 1;
+ };
+
+ struct _GtkWindowPrivate
+ {
+ GtkMnemonicHash *mnemonic_hash;
+
+ GtkWidget *attach_widget;
+diff -U 25 -r -Z -B ./org/gtk/ui/gtkstatusbar.ui ./mod/gtk/ui/gtkstatusbar.ui
+--- ./org/gtk/ui/gtkstatusbar.ui 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/ui/gtkstatusbar.ui 2017-06-02 03:09:05.720415322 +0200
+@@ -1,34 +1,34 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <interface domain="gtk30">
+ <!-- interface-requires gtk+ 3.10 -->
+ <template class="GtkStatusbar" parent="GtkBox">
+ <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>
+ <property name="shadow-type">none</property>
+ <child>
+ <object class="GtkBox" id="message_area">
+ <property name="visible">1</property>
+ <property name="spacing">4</property>
+ <property name="margin">4</property>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">1</property>
+ <property name="halign">start</property>
+ <property name="valign">center</property>
+ <property name="ellipsize">end</property>
+ <property name="single-line-mode">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label_item"/>
+ </object>
+ <packing>
+ <property name="expand">1</property>
+ </packing>
diff --git a/print-dialog.patch b/print-dialog.patch
index 13895feb16d3..ab7ba621e181 100644
--- a/print-dialog.patch
+++ b/print-dialog.patch
@@ -1,7 +1,27 @@
-diff -U 5 -r -Z -B ./org/gtk/gtksettings.c ./mod/gtk/gtksettings.c
---- ./org/gtk/gtksettings.c 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/gtksettings.c 2017-05-11 19:15:02.096995544 +0200
-@@ -59,11 +59,11 @@
+diff -U 25 -r -Z -B ./org/gtk/gtksettings.c ./mod/gtk/gtksettings.c
+--- ./org/gtk/gtksettings.c 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/gtksettings.c 2017-06-02 03:07:20.300410099 +0200
+@@ -39,51 +39,51 @@
+ #include <pango/pangofc-fontmap.h>
+ #endif
+
+ #ifdef GDK_WINDOWING_WAYLAND
+ #include "wayland/gdkwayland.h"
+ #include <pango/pangofc-fontmap.h>
+ #endif
+
+ #ifdef GDK_WINDOWING_BROADWAY
+ #include "broadway/gdkbroadway.h"
+ #endif
+
+ #ifdef GDK_WINDOWING_QUARTZ
+ #include "quartz/gdkquartz.h"
+ #endif
+
+ #ifdef GDK_WINDOWING_WIN32
+ #include "win32/gdkwin32.h"
+ #endif
+
#include "deprecated/gtkrc.h"
#ifdef GDK_WINDOWING_QUARTZ
@@ -14,10 +34,50 @@ diff -U 5 -r -Z -B ./org/gtk/gtksettings.c ./mod/gtk/gtksettings.c
/**
* SECTION:gtksettings
* @Short_description: Sharing settings between applications
-diff -U 5 -r -Z -B ./org/gtk/ui/gtkprintunixdialog.ui ./mod/gtk/ui/gtkprintunixdialog.ui
---- ./org/gtk/ui/gtkprintunixdialog.ui 2017-05-10 20:57:00.000000000 +0200
-+++ ./mod/gtk/ui/gtkprintunixdialog.ui 2017-05-11 19:16:11.313665640 +0200
-@@ -55,22 +55,22 @@
+ * @Title: Settings
+ *
+ * GtkSettings provide a mechanism to share global settings between
+ * applications.
+ *
+ * On the X window system, this sharing is realized by an
+ * [XSettings](http://www.freedesktop.org/wiki/Specifications/xsettings-spec)
+ * manager that is usually part of the desktop environment, along with
+ * utilities that let the user change these settings. In the absence of
+ * an Xsettings manager, GTK+ reads default values for settings from
+ * `settings.ini` files in
+ * `/etc/gtk-3.0`, `$XDG_CONFIG_DIRS/gtk-3.0`
+ * and `$XDG_CONFIG_HOME/gtk-3.0`.
+ * These files must be valid key files (see #GKeyFile), and have
+ * a section called Settings. Themes can also provide default values
+ * for settings by installing a `settings.ini` file
+ * next to their `gtk.css` file.
+ *
+ * Applications can override system-wide settings by setting the property
+ * of the GtkSettings object with g_object_set(). This should be restricted
+diff -U 25 -r -Z -B ./org/gtk/ui/gtkprintunixdialog.ui ./mod/gtk/ui/gtkprintunixdialog.ui
+--- ./org/gtk/ui/gtkprintunixdialog.ui 2017-05-11 21:09:33.000000000 +0200
++++ ./mod/gtk/ui/gtkprintunixdialog.ui 2017-06-02 03:07:20.303743432 +0200
+@@ -35,62 +35,62 @@
+ <!-- column-name location -->
+ <column type="gchararray"/>
+ <!-- column-name printer -->
+ <column type="GObject"/>
+ </columns>
+ </object>
+ <object class="GtkTreeModelFilter" id="printer_list_filter">
+ <property name="child-model">printer_list</property>
+ </object>
+ <object class="GtkAdjustment" id="scale_spin_adjustment">
+ <property name="lower">1</property>
+ <property name="upper">1000</property>
+ <property name="value">100</property>
+ <property name="step-increment">1</property>
+ </object>
+ <template class="GtkPrintUnixDialog" parent="GtkDialog">
+ <property name="can-focus">False</property>
+ <property name="type-hint">dialog</property>
+ <signal name="notify::page-setup" handler="redraw_page_layout_preview" swapped="no"/>
+ <signal name="response" handler="error_dialogs" swapped="no"/>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="orientation">vertical</property>
@@ -44,3 +104,23 @@ diff -U 5 -r -Z -B ./org/gtk/ui/gtkprintunixdialog.ui ./mod/gtk/ui/gtkprintunixd
<property name="visible">1</property>
<property name="border-width">12</property>
<property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">1</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="printer_swin">
+ <property name="visible">1</property>
+ <property name="can-focus">1</property>
+ <property name="shadow-type">in</property>
+ <child>
+ <object class="GtkTreeView" id="printer_treeview">
+ <property name="visible">1</property>
+ <property name="can-focus">1</property>
+ <property name="model">printer_list_filter</property>
+ <signal name="row-activated" handler="emit_ok_response" swapped="no"/>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection1">
+ <property name="mode">browse</property>