[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#987947: unblock (pre-approval): gtk+3.0/3.24.24-4



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


Reply to: