Control: tags -1 confirmed moreinfo On 2021-05-02 14:13:56 +0100, Simon McVittie wrote: > Package: release.debian.org > Severity: normal > User: release.debian.org@packages.debian.org > Usertags: unblock > X-Debbugs-Cc: debian-gtk-gnome@lists.debian.org, debian-boot@lists.debian.org > > I'd like to update gtk+3.0 in bullseye to pick up an assortment of fixes > from upstream. Exactly *which* fixes is something I'm happy to discuss: > I've prepared a candidate package with a reasonable set. Does this > look acceptable? The patches look reasonable to me, so please go ahead and remove the moreinfo tag once the new version is available in unstable. Cheers > > unblock gtk+3.0/3.24.24-4 > > [ Reason ] > Backport various targeted fixes from upstream 3.24.25 up to 3.24.29, > avoiding lower-impact and higher-regression-risk parts (notably avoiding > theme and input-method changes, which have been more problematic). > > [ Impact ] > Most of the changes here are about avoiding infrequent crashes, such > as LP: #1911036 which can happen during drag-and-drop when using the > proprietary NVIDIA driver. Please let me know if you need more information > on the impact of any of the crash fixes. > > d/p/x11-Be-quiet-on-exit-by-default.patch silences warnings when a > GTK application exits in response to the X11 server going away. These > warnings go to the system log and create a lot of log noise at the > end of an X11 session (at which time they are completely harmless), > or if Xorg or Xwayland crashes (in which case we want users to report > the Xorg/Xwayland crash as a bug, rather than getting distracted by all > their GTK apps exiting and misinterpreting the log as implying that an > app crash is the root cause). > > d/p/gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch fixes a > resource leak. > > Fixing LP: #1919404 fixes visual appearance of a specific GNOME Shell > extension (and anything else with similar behaviour) on HiDPI displays. > > d/p/fontchooser-Fix-some-since-annotations.patch is low-impact but also > low-risk; it corrects API documentation. > > d/p/placesview-Open-location-even-if-mount-was-not-found.patch fixes > a regression in Nautilus v40 (not in bullseye), and perhaps other > file managers. With the gvfs backends for SMB (Samba, CIFS, Windows > Networking), the intention is that smb://192.168.1.1/ lists the shares > on 192.168.1.1 and smb://192.168.1.1/music displays a specific share, > but displaying smb://192.168.1.1/ was not possible. The version of nautilus > in bullseye is unaffected by this bug. > > [ Tests ] > Most of the upstream unit tests are run at build-time and as autopkgtests. > Some tests that are known-broken upstream or are particularly sensitive > to implementation details of other packages are skipped. > > Manual testing: I use GNOME daily, and have been using the newer upstream > releases in experimental, from which these changes were backported. I've > now switched to this proposed version to get it some more testing. Some > of the fixes here are also used in Ubuntu. > > I have a machine with the NVIDIA driver which exhibits the warnings > silenced by d/p/x11-Be-quiet-on-exit-by-default.patch during session > logout, and I confirm that the patch does successfully silence them. > > I have not attempted to reproduce the various crashes. > > [ Risks ] > This is obviously an important key package that lots of things depend on. > Technically it also has a udeb, although I'm fairly sure d-i is still > using GTK 2 and so the udeb is not actually used for anything yet. > > The changes are targeted and simple (avoiding NULL dereferences and that > sort of thing). > > I'm not particularly attached to any of the specific fixes here, and > I'm happy to drop them or postpone them to bullseye-pu if the release > team consider them to be an unacceptable risk. I don't think any of the > changes have dependencies between them, so we can keep or drop any > particular change as needed. > > [ Checklist ] > [x] all changes are documented in the d/changelog > [x] I reviewed all changes and I approve them > [x] attach debdiff against the package in testing > diffstat for gtk+3.0-3.24.24 gtk+3.0-3.24.24 > > changelog | 43 + > patches/Fix-a-possible-crash-in-gtk_show_uri.patch | 27 + > patches/Wayland-ignore-touch-tablet-events-on-destroyed-surfaces.patch | 241 ++++++++++ > patches/cssshadowvalue-Apply-device-scale-to-the-offset-when-blur.patch | 30 + > patches/fontchooser-Fix-some-since-annotations.patch | 44 + > patches/gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch | 23 > patches/label-Skip-updating-link-state-if-we-have-no-layout.patch | 31 + > patches/placesview-Open-location-even-if-mount-was-not-found.patch | 46 + > patches/scale-Fix-sporadic-criticals.patch | 52 ++ > patches/series | 11 > patches/updateiconcache-Sort-list-of-entries.patch | 1 > patches/x11-Be-quiet-on-exit-by-default.patch | 49 ++ > patches/x11-Don-t-beep-on-untrusted-displays.patch | 42 + > patches/x11-dnd-Ignore-XErrors-from-the-COW.patch | 36 + > 14 files changed, 676 insertions(+) > > diff -Nru gtk+3.0-3.24.24/debian/changelog gtk+3.0-3.24.24/debian/changelog > --- gtk+3.0-3.24.24/debian/changelog 2021-02-22 17:51:13.000000000 +0000 > +++ gtk+3.0-3.24.24/debian/changelog 2021-05-02 12:34:12.000000000 +0100 > @@ -1,3 +1,46 @@ > +gtk+3.0 (3.24.24-4) unstable; urgency=medium > + > + * Add various patches from upstream 3.24.25 to 3.24.29, mostly > + crash fixes: > + - d/p/gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch: > + Fix a memory leak when a Cairo error occurs > + - d/p/Wayland-ignore-touch-tablet-events-on-destroyed-surfaces.patch: > + Fix crashes if input events are received on a recently-closed window > + or menu > + - d/p/label-Skip-updating-link-state-if-we-have-no-layout.patch: > + Fix crash if a GtkLabel's activate-link handler changes the > + label's markup > + - d/p/x11-dnd-Ignore-XErrors-from-the-COW.patch: > + Adds a missing error trap to prevent crashes in X11 drag & drop. > + The X11 functions called here cannot normally fail, but it seems > + they can fail in certain configurations of the NVIDIA proprietary > + driver. (LP: #1911036) > + - d/p/cssshadowvalue-Apply-device-scale-to-the-offset-when-blur.patch: > + Apply scale factor to blurred shadows. > + In particular this makes the desktop-icons-ng GNOME Shell extension, > + as used in Ubuntu 21.04, display correctly on HiDPI displays. > + (LP: #1919404) > + - d/p/scale-Fix-sporadic-criticals.patch: > + Fix a possible crash due to use-after-free > + - d/p/fontchooser-Fix-some-since-annotations.patch: > + Correct documentation > + - d/p/x11-Be-quiet-on-exit-by-default.patch: > + Don't spam the system log when disconnected from the X11 display > + - d/p/Fix-a-possible-crash-in-gtk_show_uri.patch: > + Don't crash if asked to display a URI that doesn't have a useful > + basename > + - d/p/x11-Don-t-beep-on-untrusted-displays.patch: > + Don't beep if connected to an X11 display that distrusts the > + application (ssh -X -oForwardX11Trusted=no), which can result in a > + fatal error > + - d/p/placesview-Open-location-even-if-mount-was-not-found.patch: > + Fix inability to display SMB server's list of shares > + (e.g. smb://192.168.1.1/) in Nautilus > + * d/p/updateiconcache-Sort-list-of-entries.patch: > + Mark as applied upstream to GTK 3 as well as to GTK 4 > + > + -- Simon McVittie <smcv@debian.org> Sun, 02 May 2021 12:34:12 +0100 > + > gtk+3.0 (3.24.24-3) unstable; urgency=medium > > * d/patches: Backport font settings bug fixes recommended by upstream > diff -Nru gtk+3.0-3.24.24/debian/patches/cssshadowvalue-Apply-device-scale-to-the-offset-when-blur.patch gtk+3.0-3.24.24/debian/patches/cssshadowvalue-Apply-device-scale-to-the-offset-when-blur.patch > --- gtk+3.0-3.24.24/debian/patches/cssshadowvalue-Apply-device-scale-to-the-offset-when-blur.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/cssshadowvalue-Apply-device-scale-to-the-offset-when-blur.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,30 @@ > +From: Daniel van Vugt <daniel.van.vugt@canonical.com> > +Date: Wed, 24 Mar 2021 18:28:25 +0800 > +Subject: cssshadowvalue: Apply device scale to the offset when blurring text > + > +Although the surface already has the device scale set, that doesn't > +apply to the offset which is in raw device units. So we need to scale > +the device offset explicitly. > + > +Bug: https://gitlab.com/rastersoft/desktop-icons-ng/-/issues/119 > +Origin: upstream, 3.24.28, commit:86da4e0c97ec037cd80edc783c7804268a0d2fc8 > +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell-extension-desktop-icons-ng/+bug/1919404 > +--- > + gtk/gtkcssshadowvalue.c | 4 +++- > + 1 file changed, 3 insertions(+), 1 deletion(-) > + > +diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c > +index 864bdef..3c0d977 100644 > +--- a/gtk/gtkcssshadowvalue.c > ++++ b/gtk/gtkcssshadowvalue.c > +@@ -485,7 +485,9 @@ make_blurred_pango_surface (cairo_t *existing_cr, > + x_scale * (ink_rect.width + 2 * clip_radius), > + y_scale * (ink_rect.height + 2 * clip_radius)); > + cairo_surface_set_device_scale (surface, x_scale, y_scale); > +- cairo_surface_set_device_offset (surface, -ink_rect.x + clip_radius, -ink_rect.y + clip_radius); > ++ cairo_surface_set_device_offset (surface, > ++ x_scale * (-ink_rect.x + clip_radius), > ++ y_scale * (-ink_rect.y + clip_radius)); > + cr = cairo_create (surface); > + cairo_move_to (cr, 0, 0); > + _gtk_pango_fill_layout (cr, layout); > diff -Nru gtk+3.0-3.24.24/debian/patches/Fix-a-possible-crash-in-gtk_show_uri.patch gtk+3.0-3.24.24/debian/patches/Fix-a-possible-crash-in-gtk_show_uri.patch > --- gtk+3.0-3.24.24/debian/patches/Fix-a-possible-crash-in-gtk_show_uri.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/Fix-a-possible-crash-in-gtk_show_uri.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,27 @@ > +From: Matthias Clasen <mclasen@redhat.com> > +Date: Mon, 19 Apr 2021 16:39:53 -0400 > +Subject: Fix a possible crash in gtk_show_uri > + > +g_file_get_basename can return NULL. > +Deal with it somehow. > + > +Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3883 > +Origin: upstream, 3.24.29, commit:536da7a15c > +--- > + gdk/x11/gdkapplaunchcontext-x11.c | 3 +++ > + 1 file changed, 3 insertions(+) > + > +diff --git a/gdk/x11/gdkapplaunchcontext-x11.c b/gdk/x11/gdkapplaunchcontext-x11.c > +index 8051229..2341bb2 100644 > +--- a/gdk/x11/gdkapplaunchcontext-x11.c > ++++ b/gdk/x11/gdkapplaunchcontext-x11.c > +@@ -45,6 +45,9 @@ get_display_name (GFile *file, > + if (name == NULL) > + { > + name = g_file_get_basename (file); > ++ if (name == NULL) > ++ name = g_file_get_uri (file); > ++ > + if (!g_utf8_validate (name, -1, NULL)) > + { > + tmp = name; > diff -Nru gtk+3.0-3.24.24/debian/patches/fontchooser-Fix-some-since-annotations.patch gtk+3.0-3.24.24/debian/patches/fontchooser-Fix-some-since-annotations.patch > --- gtk+3.0-3.24.24/debian/patches/fontchooser-Fix-some-since-annotations.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/fontchooser-Fix-some-since-annotations.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,44 @@ > +From: Matthias Clasen <mclasen@redhat.com> > +Date: Sun, 11 Apr 2021 23:22:46 -0400 > +Subject: fontchooser: Fix some since annotations > + > +The "level", "font-features" and "language" were annotated > +with the wrong version. > + > +Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/1830 > +Origin: upstream, 3.24.29, commit:3fb5890e695243916773b7b7b0891caf25958fb3 > +--- > + gtk/gtkfontchooser.c | 6 +++--- > + 1 file changed, 3 insertions(+), 3 deletions(-) > + > +diff --git a/gtk/gtkfontchooser.c b/gtk/gtkfontchooser.c > +index 16df10b..576bc2e 100644 > +--- a/gtk/gtkfontchooser.c > ++++ b/gtk/gtkfontchooser.c > +@@ -110,7 +110,7 @@ gtk_font_chooser_default_init (GtkFontChooserInterface *iface) > + * > + * The level of granularity to offer for selecting fonts. > + * > +- * Since: 3.22.30 > ++ * Since: 3.24.1 > + */ > + g_object_interface_install_property > + (iface, > +@@ -129,7 +129,7 @@ gtk_font_chooser_default_init (GtkFontChooserInterface *iface) > + * The selected font features, in a format that is compatible with > + * CSS and with Pango attributes. > + * > +- * Since: 3.22.30 > ++ * Since: 3.24.1 > + */ > + g_object_interface_install_property > + (iface, > +@@ -146,7 +146,7 @@ gtk_font_chooser_default_init (GtkFontChooserInterface *iface) > + * selected, in a format that is compatible with CSS and with Pango > + * attributes. > + * > +- * Since: 3.22.30 > ++ * Since: 3.24.1 > + */ > + g_object_interface_install_property > + (iface, > diff -Nru gtk+3.0-3.24.24/debian/patches/gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch gtk+3.0-3.24.24/debian/patches/gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch > --- gtk+3.0-3.24.24/debian/patches/gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,23 @@ > +From: Adrien Plazas <kekun.plazas@laposte.net> > +Date: Mon, 14 Dec 2020 13:39:42 +0100 > +Subject: gdkpixbuf-drawable: Free the pixbuf on Cairo error > + > +This avoids leaking the pixbuf. > + > +Origin: upstream, 3.24.25, commit:c4f8eb7ec998f1200a5e662e00bad04acf0eb0ea > +--- > + gdk/gdkpixbuf-drawable.c | 1 + > + 1 file changed, 1 insertion(+) > + > +diff --git a/gdk/gdkpixbuf-drawable.c b/gdk/gdkpixbuf-drawable.c > +index d2c142a..603c8ff 100644 > +--- a/gdk/gdkpixbuf-drawable.c > ++++ b/gdk/gdkpixbuf-drawable.c > +@@ -288,6 +288,7 @@ gdk_pixbuf_get_from_surface (cairo_surface_t *surface, > + if (cairo_surface_status (surface) || dest == NULL) > + { > + cairo_surface_destroy (surface); > ++ g_clear_object (&dest); > + return NULL; > + } > + > diff -Nru gtk+3.0-3.24.24/debian/patches/label-Skip-updating-link-state-if-we-have-no-layout.patch gtk+3.0-3.24.24/debian/patches/label-Skip-updating-link-state-if-we-have-no-layout.patch > --- gtk+3.0-3.24.24/debian/patches/label-Skip-updating-link-state-if-we-have-no-layout.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/label-Skip-updating-link-state-if-we-have-no-layout.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,31 @@ > +From: =?utf-8?q?Timm_B=C3=A4der?= <mail@baedert.org> > +Date: Fri, 11 Jan 2019 17:46:12 +0100 > +Subject: label: Skip updating link state if we have no layout > + > +This can happen whenever the ::activate-link handler sets different > +markup on the label, causing all links to be recreated. In this case, > +the GtkLabelLink* passed to emit_activate_link is garbage after the > +g_signal_emit call and we shouldn't try to do anything with it. > + > +Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/1498 > +Origin: upstream, 3.24.27, commit:bfe0f7dd4dbc37048e111caafdd9b5f555bd8d16 > +--- > + gtk/gtklabel.c | 5 +++++ > + 1 file changed, 5 insertions(+) > + > +diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c > +index 1a2453f..4bb92fd 100644 > +--- a/gtk/gtklabel.c > ++++ b/gtk/gtklabel.c > +@@ -6755,6 +6755,11 @@ emit_activate_link (GtkLabel *label, > + GtkStateFlags state; > + > + g_signal_emit (label, signals[ACTIVATE_LINK], 0, link->uri, &handled); > ++ > ++ /* signal handler might have invalidated the layout */ > ++ if (!priv->layout) > ++ return; > ++ > + if (handled && priv->track_links && !link->visited && > + priv->select_info && priv->select_info->links) > + { > diff -Nru gtk+3.0-3.24.24/debian/patches/placesview-Open-location-even-if-mount-was-not-found.patch gtk+3.0-3.24.24/debian/patches/placesview-Open-location-even-if-mount-was-not-found.patch > --- gtk+3.0-3.24.24/debian/patches/placesview-Open-location-even-if-mount-was-not-found.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/placesview-Open-location-even-if-mount-was-not-found.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,46 @@ > +From: Ondrej Holy <oholy@redhat.com> > +Date: Tue, 13 Apr 2021 15:55:19 +0200 > +Subject: placesview: Open location even if mount was not found > + > +Some locations have to be mounted, but their mounts are not user-visible > +(e.g. smb-browse). Though this is maybe a bit weird, it is how it works > +for years. The problem is that the commit 267ea755, which tries to get the > +default location for opening, caused regression as it doesn't expect such > +possibility. Before this commit, such locations were opened without any > +issue, but nothing happens currently after clicking to "Connect" except of > +clearing the "Connect to Server" entry. Let's fallback to the original > +location if the mount was not found to fix this regression. > + > +Bug: https://gitlab.gnome.org/GNOME/nautilus/-/issues/1811 > +Origin: upstream, 3.24.29, commit:4fe7b3ec25a1a82e0682963a26bbe642072b4fa0 > +--- > + gtk/gtkplacesview.c | 9 +++++++++ > + 1 file changed, 9 insertions(+) > + > +diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c > +index 62eb5d09..89f7ace 100644 > +--- a/gtk/gtkplacesview.c > ++++ b/gtk/gtkplacesview.c > +@@ -1267,6 +1267,11 @@ server_mount_ready_cb (GObject *source_file, > + GMount *mount; > + GFile *root; > + > ++ /* > ++ * If the mount is not found at this point, it is probably user- > ++ * invisible, which happens e.g for smb-browse, but the location > ++ * should be opened anyway... > ++ */ > + mount = g_file_find_enclosing_mount (location, priv->cancellable, NULL); > + if (mount) > + { > +@@ -1277,6 +1282,10 @@ server_mount_ready_cb (GObject *source_file, > + g_object_unref (root); > + g_object_unref (mount); > + } > ++ else > ++ { > ++ emit_open_location (view, location, priv->open_flags); > ++ } > + } > + } > + > diff -Nru gtk+3.0-3.24.24/debian/patches/scale-Fix-sporadic-criticals.patch gtk+3.0-3.24.24/debian/patches/scale-Fix-sporadic-criticals.patch > --- gtk+3.0-3.24.24/debian/patches/scale-Fix-sporadic-criticals.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/scale-Fix-sporadic-criticals.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,52 @@ > +From: Matthias Clasen <mclasen@redhat.com> > +Date: Sat, 10 Apr 2021 10:07:55 -0400 > +Subject: scale: Fix sporadic criticals > + > +gtk_css_node_update_layout_attributes can cause us to > +free priv->layout, and then bad things happen. Therefore, > +we must call that function on a new layout *before* setting > +priv->layout. > + > +Origin: upstream, 3.24.29, commit:eaabc3722eb65b726da3ff1184061b7a66499740 > +--- > + gtk/gtkscale.c | 17 ++++++++++------- > + 1 file changed, 10 insertions(+), 7 deletions(-) > + > +diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c > +index ea30a8c..529fb3d 100644 > +--- a/gtk/gtkscale.c > ++++ b/gtk/gtkscale.c > +@@ -2020,23 +2020,26 @@ gtk_scale_get_layout (GtkScale *scale) > + > + if (!priv->layout && priv->draw_value) > + { > ++ PangoLayout *layout; > + int min_layout_width; > + > +- priv->layout = gtk_widget_create_pango_layout (GTK_WIDGET (scale), NULL); > +- gtk_css_node_update_layout_attributes (gtk_css_gadget_get_node (priv->value_gadget), priv->layout); > +- > ++ layout = gtk_widget_create_pango_layout (GTK_WIDGET (scale), NULL); > ++ gtk_css_node_update_layout_attributes (gtk_css_gadget_get_node (priv->value_gadget), layout); > + gtk_css_gadget_get_preferred_size (priv->value_gadget, > + GTK_ORIENTATION_HORIZONTAL, -1, > + &min_layout_width, NULL, > + NULL, NULL); > +- pango_layout_set_width (priv->layout, min_layout_width * PANGO_SCALE); > ++ > ++ pango_layout_set_width (layout, min_layout_width * PANGO_SCALE); > + > + if (priv->value_pos == GTK_POS_LEFT) > +- pango_layout_set_alignment (priv->layout, PANGO_ALIGN_RIGHT); > ++ pango_layout_set_alignment (layout, PANGO_ALIGN_RIGHT); > + else if (priv->value_pos == GTK_POS_RIGHT) > +- pango_layout_set_alignment (priv->layout, PANGO_ALIGN_LEFT); > ++ pango_layout_set_alignment (layout, PANGO_ALIGN_LEFT); > + else > +- pango_layout_set_alignment (priv->layout, PANGO_ALIGN_CENTER); > ++ pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER); > ++ > ++ priv->layout = layout; > + } > + > + if (priv->draw_value) > diff -Nru gtk+3.0-3.24.24/debian/patches/series gtk+3.0-3.24.24/debian/patches/series > --- gtk+3.0-3.24.24/debian/patches/series 2021-02-22 17:51:13.000000000 +0000 > +++ gtk+3.0-3.24.24/debian/patches/series 2021-05-02 12:34:12.000000000 +0100 > @@ -1,6 +1,17 @@ > +gdkpixbuf-drawable-Free-the-pixbuf-on-Cairo-error.patch > +Wayland-ignore-touch-tablet-events-on-destroyed-surfaces.patch > gdk-wayland-Mark-matched-settings-from-the-portal-as-vali.patch > gdk-wayland-Look-for-font-settings-recursively.patch > +label-Skip-updating-link-state-if-we-have-no-layout.patch > updateiconcache-Sort-list-of-entries.patch > +x11-dnd-Ignore-XErrors-from-the-COW.patch > +cssshadowvalue-Apply-device-scale-to-the-offset-when-blur.patch > +scale-Fix-sporadic-criticals.patch > +fontchooser-Fix-some-since-annotations.patch > +x11-Be-quiet-on-exit-by-default.patch > +Fix-a-possible-crash-in-gtk_show_uri.patch > +x11-Don-t-beep-on-untrusted-displays.patch > +placesview-Open-location-even-if-mount-was-not-found.patch > gdk-Don-t-distribute-generated-files-in-tarballs.patch > gtk-Really-don-t-distribute-built-files.patch > demos-examples-tests-Don-t-distribute-built-files.patch > diff -Nru gtk+3.0-3.24.24/debian/patches/updateiconcache-Sort-list-of-entries.patch gtk+3.0-3.24.24/debian/patches/updateiconcache-Sort-list-of-entries.patch > --- gtk+3.0-3.24.24/debian/patches/updateiconcache-Sort-list-of-entries.patch 2021-02-22 17:51:13.000000000 +0000 > +++ gtk+3.0-3.24.24/debian/patches/updateiconcache-Sort-list-of-entries.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -9,6 +9,7 @@ > > Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/297 > Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=953105 > +Applied-upstream: 3.24.28, commit:850768270f86f060ad317933b629593f6fdd08be > Applied-upstream: 3.96.0, commit:b364827a5b99e3b02862f36be4c03826e72aefba > --- > gtk/updateiconcache.c | 9 +++++++++ > diff -Nru gtk+3.0-3.24.24/debian/patches/Wayland-ignore-touch-tablet-events-on-destroyed-surfaces.patch gtk+3.0-3.24.24/debian/patches/Wayland-ignore-touch-tablet-events-on-destroyed-surfaces.patch > --- gtk+3.0-3.24.24/debian/patches/Wayland-ignore-touch-tablet-events-on-destroyed-surfaces.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/Wayland-ignore-touch-tablet-events-on-destroyed-surfaces.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,241 @@ > +From: wisp3rwind <wisp3rwind@posteo.eu> > +Date: Wed, 11 Nov 2020 10:12:26 +0100 > +Subject: Wayland: ignore touch/tablet events on destroyed surfaces > + > +When destroying a wl_surface (e.g. when a window or menu is closed), the > +surface may continue to exist in the compositor slightly longer than on > +the client side. In that case, the surface can still receive input > +events, which need to be ignored gracefully. > +In particular, this prevents segfaulting on wl_surface_get_user_data() > +in that situation. > + > +Reported in > +https://gitlab.gnome.org/GNOME/gtk/-/issues/3296 > + > +The same issue for pointers/keyboards was reported in > +https://bugzilla.gnome.org/show_bug.cgi?id=693338 > + > +and fixed with in > +bfd7137ffbcbd8caa531d7a47d799fefb6605a5a > +3625f17857328ae7e7aa43340f29efa56575a7b0 > +a8fc099a725543649fe3aab76943c14bdcd860fc > + > +Origin: upstream, 3.24.25, commit:19a740e277d3beb4ae05f30389c0792286d3e096 > +--- > + gdk/wayland/gdkdevice-wayland.c | 81 +++++++++++++++++++++++++++++++++-------- > + 1 file changed, 66 insertions(+), 15 deletions(-) > + > +diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c > +index c5b273e..ff05760 100644 > +--- a/gdk/wayland/gdkdevice-wayland.c > ++++ b/gdk/wayland/gdkdevice-wayland.c > +@@ -2506,6 +2506,9 @@ touch_handle_down (void *data, > + > + _gdk_wayland_display_update_serial (display, serial); > + > ++ if (!wl_surface) > ++ return; > ++ > + touch = gdk_wayland_seat_add_touch (seat, id, wl_surface); > + touch->x = wl_fixed_to_double (x); > + touch->y = wl_fixed_to_double (y); > +@@ -2541,6 +2544,9 @@ touch_handle_up (void *data, > + _gdk_wayland_display_update_serial (display, serial); > + > + touch = gdk_wayland_seat_get_touch (seat, id); > ++ if (!touch) > ++ return; > ++ > + event = _create_touch_event (seat, touch, GDK_TOUCH_END, time); > + > + GDK_NOTE (EVENTS, > +@@ -2567,6 +2573,9 @@ touch_handle_motion (void *data, > + GdkEvent *event; > + > + touch = gdk_wayland_seat_get_touch (seat, id); > ++ if (!touch) > ++ return; > ++ > + touch->x = wl_fixed_to_double (x); > + touch->y = wl_fixed_to_double (y); > + > +@@ -3680,19 +3689,21 @@ tablet_tool_handle_proximity_in (void *data, > + struct zwp_tablet_tool_v2 *wp_tablet_tool, > + uint32_t serial, > + struct zwp_tablet_v2 *wp_tablet, > +- struct wl_surface *surface) > ++ struct wl_surface *wl_surface) > + { > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = zwp_tablet_v2_get_user_data (wp_tablet); > + GdkWaylandSeat *seat = GDK_WAYLAND_SEAT (tablet->seat); > + GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (seat->display); > +- GdkWindow *window = wl_surface_get_user_data (surface); > ++ GdkWindow *window; > + GdkEvent *event; > + > +- if (!surface) > +- return; > ++ if (!wl_surface) > ++ return; > ++ > ++ window = wl_surface_get_user_data (wl_surface); > + if (!GDK_IS_WINDOW (window)) > +- return; > ++ return; > + > + tool->current_tablet = tablet; > + tablet->current_tool = tool; > +@@ -3731,6 +3742,9 @@ tablet_tool_handle_proximity_out (void *data, > + GdkWaylandSeat *seat = GDK_WAYLAND_SEAT (tool->seat); > + #endif > + > ++ if (!tablet) > ++ return; > ++ > + GDK_NOTE (EVENTS, > + g_message ("proximity out, seat %p, tool %d", seat, > + gdk_device_tool_get_tool_type (tool->tool))); > +@@ -3787,7 +3801,7 @@ tablet_tool_handle_down (void *data, > + GdkWaylandSeat *seat = GDK_WAYLAND_SEAT (tool->seat); > + GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (seat->display); > + > +- if (!tablet->pointer_info.focus) > ++ if (!tablet || !tablet->pointer_info.focus) > + return; > + > + _gdk_wayland_display_update_serial (display_wayland, serial); > +@@ -3804,7 +3818,7 @@ tablet_tool_handle_up (void *data, > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = tool->current_tablet; > + > +- if (!tablet->pointer_info.focus) > ++ if (!tablet || !tablet->pointer_info.focus) > + return; > + > + tablet_create_button_event_frame (tablet, GDK_BUTTON_RELEASE, GDK_BUTTON_PRIMARY); > +@@ -3823,6 +3837,9 @@ tablet_tool_handle_motion (void *data, > + GdkWaylandDisplay *display = GDK_WAYLAND_DISPLAY (seat->display); > + GdkEvent *event; > + > ++ if (!tablet) > ++ return; > ++ > + tablet->pointer_info.surface_x = wl_fixed_to_double (sx); > + tablet->pointer_info.surface_y = wl_fixed_to_double (sy); > + > +@@ -3855,7 +3872,12 @@ tablet_tool_handle_pressure (void *data, > + { > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = tool->current_tablet; > +- gint axis_index = tablet->axis_indices[GDK_AXIS_PRESSURE]; > ++ gint axis_index; > ++ > ++ if (!tablet) > ++ return; > ++ > ++ axis_index = tablet->axis_indices[GDK_AXIS_PRESSURE]; > + > + _gdk_device_translate_axis (tablet->current_device, axis_index, > + pressure, &tablet->axes[axis_index]); > +@@ -3872,7 +3894,12 @@ tablet_tool_handle_distance (void *data, > + { > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = tool->current_tablet; > +- gint axis_index = tablet->axis_indices[GDK_AXIS_DISTANCE]; > ++ gint axis_index; > ++ > ++ if (!tablet) > ++ return; > ++ > ++ axis_index = tablet->axis_indices[GDK_AXIS_DISTANCE]; > + > + _gdk_device_translate_axis (tablet->current_device, axis_index, > + distance, &tablet->axes[axis_index]); > +@@ -3890,8 +3917,14 @@ tablet_tool_handle_tilt (void *data, > + { > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = tool->current_tablet; > +- gint xtilt_axis_index = tablet->axis_indices[GDK_AXIS_XTILT]; > +- gint ytilt_axis_index = tablet->axis_indices[GDK_AXIS_YTILT]; > ++ gint xtilt_axis_index; > ++ gint ytilt_axis_index; > ++ > ++ if (!tablet) > ++ return; > ++ > ++ xtilt_axis_index = tablet->axis_indices[GDK_AXIS_XTILT]; > ++ ytilt_axis_index = tablet->axis_indices[GDK_AXIS_YTILT]; > + > + _gdk_device_translate_axis (tablet->current_device, xtilt_axis_index, > + wl_fixed_to_double (xtilt), > +@@ -3918,7 +3951,7 @@ tablet_tool_handle_button (void *data, > + GdkEventType evtype; > + guint n_button; > + > +- if (!tablet->pointer_info.focus) > ++ if (!tablet || !tablet->pointer_info.focus) > + return; > + > + tablet->pointer_info.press_serial = serial; > +@@ -3949,7 +3982,12 @@ tablet_tool_handle_rotation (void *data, > + { > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = tool->current_tablet; > +- gint axis_index = tablet->axis_indices[GDK_AXIS_ROTATION]; > ++ gint axis_index; > ++ > ++ if (!tablet) > ++ return; > ++ > ++ axis_index = tablet->axis_indices[GDK_AXIS_ROTATION]; > + > + _gdk_device_translate_axis (tablet->current_device, axis_index, > + wl_fixed_to_double (degrees), > +@@ -3968,7 +4006,12 @@ tablet_tool_handle_slider (void *data, > + { > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = tool->current_tablet; > +- gint axis_index = tablet->axis_indices[GDK_AXIS_SLIDER]; > ++ gint axis_index; > ++ > ++ if (!tablet) > ++ return; > ++ > ++ axis_index = tablet->axis_indices[GDK_AXIS_SLIDER]; > + > + _gdk_device_translate_axis (tablet->current_device, axis_index, > + position, &tablet->axes[axis_index]); > +@@ -3986,9 +4029,12 @@ tablet_tool_handle_wheel (void *data, > + { > + GdkWaylandTabletToolData *tool = data; > + GdkWaylandTabletData *tablet = tool->current_tablet; > +- GdkWaylandSeat *seat = GDK_WAYLAND_SEAT (tablet->seat); > ++ GdkWaylandSeat *seat; > + GdkEvent *event; > + > ++ if (!tablet) > ++ return; > ++ > + GDK_NOTE (EVENTS, > + g_message ("tablet tool %d wheel %d/%d", > + gdk_device_tool_get_tool_type (tool->tool), degrees, clicks)); > +@@ -3996,6 +4042,8 @@ tablet_tool_handle_wheel (void *data, > + if (clicks == 0) > + return; > + > ++ seat = GDK_WAYLAND_SEAT (tablet->seat); > ++ > + /* Send smooth event */ > + event = create_scroll_event (seat, &tablet->pointer_info, > + tablet->master, tablet->current_device, FALSE); > +@@ -4021,6 +4069,9 @@ tablet_tool_handle_frame (void *data, > + GdkWaylandTabletData *tablet = tool->current_tablet; > + GdkEvent *frame_event; > + > ++ if (!tablet) > ++ return; > ++ > + GDK_NOTE (EVENTS, > + g_message ("tablet frame, time %d", time)); > + > diff -Nru gtk+3.0-3.24.24/debian/patches/x11-Be-quiet-on-exit-by-default.patch gtk+3.0-3.24.24/debian/patches/x11-Be-quiet-on-exit-by-default.patch > --- gtk+3.0-3.24.24/debian/patches/x11-Be-quiet-on-exit-by-default.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/x11-Be-quiet-on-exit-by-default.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,49 @@ > +From: Matthias Clasen <mclasen@redhat.com> > +Date: Tue, 13 Apr 2021 14:10:27 -0400 > +Subject: x11: Be quiet on exit by default > + > +The condition we check for to catch X servers going away > +may not be accurate anymore, and the warning shows up in > +logs, causing customers to be concerned. So, be quiet by > +default, unless the user explicitly asked for a message. > + > +Origin: upstream, 3.24.29, commit:c3503fcc84eec0bcf857cc744580aa9a4d5dc7eb > +--- > + gdk/x11/gdkmain-x11.c | 23 ++++++----------------- > + 1 file changed, 6 insertions(+), 17 deletions(-) > + > +diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c > +index 64c7cb4..cd877ce 100644 > +--- a/gdk/x11/gdkmain-x11.c > ++++ b/gdk/x11/gdkmain-x11.c > +@@ -240,24 +240,13 @@ gdk_x_io_error (Display *display) > + /* This is basically modelled after the code in XLib. We need > + * an explicit error handler here, so we can disable our atexit() > + * which would otherwise cause a nice segfault. > +- * We fprintf(stderr, instead of g_warning() because g_warning() > +- * could possibly be redirected to a dialog > ++ * We g_debug() instead of g_warning(), because g_warning() > ++ * could possibly be redirected to the log > + */ > +- if (errno == EPIPE) > +- { > +- g_message ("The application '%s' lost its connection to the display %s;\n" > +- "most likely the X server was shut down or you killed/destroyed\n" > +- "the application.\n", > +- g_get_prgname (), > +- display ? DisplayString (display) : gdk_get_display_arg_name ()); > +- } > +- else > +- { > +- g_message ("%s: Fatal IO error %d (%s) on X server %s.\n", > +- g_get_prgname (), > +- errno, g_strerror (errno), > +- display ? DisplayString (display) : gdk_get_display_arg_name ()); > +- } > ++ g_debug ("%s: Fatal IO error %d (%s) on X server %s.\n", > ++ g_get_prgname (), > ++ errno, g_strerror (errno), > ++ display ? DisplayString (display) : gdk_get_display_arg_name ()); > + > + _exit (1); > + } > diff -Nru gtk+3.0-3.24.24/debian/patches/x11-dnd-Ignore-XErrors-from-the-COW.patch gtk+3.0-3.24.24/debian/patches/x11-dnd-Ignore-XErrors-from-the-COW.patch > --- gtk+3.0-3.24.24/debian/patches/x11-dnd-Ignore-XErrors-from-the-COW.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/x11-dnd-Ignore-XErrors-from-the-COW.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,36 @@ > +From: Olivier Fourdan <ofourdan@redhat.com> > +Date: Mon, 22 Mar 2021 15:19:33 +0100 > +Subject: x11/dnd: Ignore XErrors from the COW > + > +The DnD code for X11 adds the composite overlay window (aka COW) to the > +cache. > + > +Yet the X11 requests to get and release the COW may trigger XErrors that > +we ought to ignore otherwise the client will abort. > + > +Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3715 > +Bug-Ubuntu: https://launchpad.net/bugs/1911036 > +Origin: upstream, 3.24.28, commit:39db78470452cf0b1a7d1ee196de3f20eea85d33 > +--- > + gdk/x11/gdkdnd-x11.c | 2 ++ > + 1 file changed, 2 insertions(+) > + > +diff --git a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c > +index e07fa10..113d0a8 100644 > +--- a/gdk/x11/gdkdnd-x11.c > ++++ b/gdk/x11/gdkdnd-x11.c > +@@ -634,12 +634,14 @@ gdk_window_cache_new (GdkScreen *screen) > + */ > + if (gdk_screen_is_composited (screen)) > + { > ++ gdk_x11_display_error_trap_push (GDK_X11_SCREEN (screen)->display); > + cow = XCompositeGetOverlayWindow (xdisplay, GDK_WINDOW_XID (root_window)); > + gdk_window_cache_add (result, cow, 0, 0, > + gdk_x11_screen_get_width (screen) * GDK_X11_SCREEN(screen)->window_scale, > + gdk_x11_screen_get_height (screen) * GDK_X11_SCREEN(screen)->window_scale, > + TRUE); > + XCompositeReleaseOverlayWindow (xdisplay, GDK_WINDOW_XID (root_window)); > ++ gdk_x11_display_error_trap_pop_ignored (GDK_X11_SCREEN (screen)->display); > + } > + #endif > + > diff -Nru gtk+3.0-3.24.24/debian/patches/x11-Don-t-beep-on-untrusted-displays.patch gtk+3.0-3.24.24/debian/patches/x11-Don-t-beep-on-untrusted-displays.patch > --- gtk+3.0-3.24.24/debian/patches/x11-Don-t-beep-on-untrusted-displays.patch 1970-01-01 01:00:00.000000000 +0100 > +++ gtk+3.0-3.24.24/debian/patches/x11-Don-t-beep-on-untrusted-displays.patch 2021-05-02 12:34:12.000000000 +0100 > @@ -0,0 +1,42 @@ > +From: Matthias Clasen <mclasen@redhat.com> > +Date: Tue, 20 Apr 2021 20:55:21 -0400 > +Subject: x11: Don't beep on untrusted displays > + > +This can trigger BadAccess, and we don't > +want that. > + > +Bug: https://gitlab.gnome.org/GNOME/gtk/-/issues/3862 > +Origin: upstream, 3.24.29, commit:9c84f7645e487558cf44e5489d0face8cac3314d > +--- > + gdk/x11/gdkdisplay-x11.c | 3 +++ > + gdk/x11/gdkwindow-x11.c | 3 +++ > + 2 files changed, 6 insertions(+) > + > +diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c > +index 817944e..7e08f47 100644 > +--- a/gdk/x11/gdkdisplay-x11.c > ++++ b/gdk/x11/gdkdisplay-x11.c > +@@ -1964,6 +1964,9 @@ _gdk_x11_display_update_grab_info_ungrab (GdkDisplay *display, > + static void > + gdk_x11_display_beep (GdkDisplay *display) > + { > ++ if (!GDK_X11_DISPLAY (display)->trusted_client) > ++ return; > ++ > + #ifdef HAVE_XKB > + XkbBell (GDK_DISPLAY_XDISPLAY (display), None, 0, None); > + #else > +diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c > +index 38ff91d..721d9bb 100644 > +--- a/gdk/x11/gdkwindow-x11.c > ++++ b/gdk/x11/gdkwindow-x11.c > +@@ -5472,6 +5472,9 @@ gdk_x11_window_beep (GdkWindow *window) > + > + display = GDK_WINDOW_DISPLAY (window); > + > ++ if (!GDK_X11_DISPLAY (display)->trusted_client) > ++ return FALSE; > ++ > + #ifdef HAVE_XKB > + if (GDK_X11_DISPLAY (display)->use_xkb) > + { -- Sebastian Ramacher
Attachment:
signature.asc
Description: PGP signature