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

Bug#1107830: marked as done (unblock: gtk4/4.18.6+ds-2)



Your message dated Tue, 17 Jun 2025 11:29:08 +0000
with message-id <E1uRUV2-004AXN-27@respighi.debian.org>
and subject line unblock gtk4
has caused the Debian Bug report #1107830,
regarding unblock: gtk4/4.18.6+ds-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
1107830: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1107830
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: gtk4@packages.debian.org
Control: affects -1 + src:gtk4
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package gtk4

[ Reason ]
New upstream bugfix release

[ Impact ]
Several bug fixes, including crashes.

[ Tests ]
My GNOME desktop continues to work normally (tried various apps 
such as GNOME Software, GNOME Settings, Nautilus).

The test suite still passes at build-time and as an autopkgtest, 
including new test coverage for the gsk/gskpathparser.c changes.

[ Risks ]
Key package, central to our default desktop environment.

This particular upstream has not always been as strict as we would like 
about bugfix-only changes in micro releases, but in this case the 
changes seem to be narrowly-targeted. The noisiest changes that affect 
production code are those in gsk/gskpathparser.c, which fix parsing of 
some SVG symbolic icons; there is new test coverage for these in 
testsuite/gsk/path-special-cases.c.

The change in gtk/a11y/gtkatspicontext.c is to fix AT-SPI spec compliance, 
but could conceivably cause accessibility tools to regress if they were 
relying on the previous, non-spec-compliant D-Bus signal names 
"activate" and "deactivate" (D-Bus signal names are case-sensitive, and 
the correct names start with a capital letter).

The changes in gtk/gtkimcontextwayland.c and gtk/inspector/ are noisier 
than I would normally expect for a stable release, but are only relevant 
when using GTK's built-in "inspector" debugging tool (press Ctrl+Shift+I 
while running a GTK 4 app), and are inactive in normal use of GTK.

Changes in demos/ do not affect production code, only gtk-4-examples.

Changes in gdk/macos/ are not compiled in Debian.

[ 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
      (lightly filtered to exclude translations and irrelevant changes)

unblock gtk4/4.18.6+ds-2
debdiff *.dsc | filterdiff -p1 -x.gitlab-ci.yml -x'po/*.po' -x'subprojects/pango/*'

diff -Nru gtk4-4.18.5+ds/debian/changelog gtk4-4.18.6+ds/debian/changelog
--- gtk4-4.18.5+ds/debian/changelog	2025-05-04 15:39:45.000000000 +0100
+++ gtk4-4.18.6+ds/debian/changelog	2025-06-15 10:37:29.000000000 +0100
@@ -1,3 +1,62 @@
+gtk4 (4.18.6+ds-2) unstable; urgency=medium
+
+  * Add packaging changes to previous changelog entry that were
+    accidentally left undocumented in the previous upload
+
+ -- Simon McVittie <smcv@debian.org>  Sun, 15 Jun 2025 10:37:29 +0100
+
+gtk4 (4.18.6+ds-1) unstable; urgency=medium
+
+  * New upstream bugfix release
+    - In the cups printer driver, fix NULL-termination on arrays of choices,
+      avoiding a possible crash
+      (gtk!8595 upstream)
+    - Fix a crash caused by using uninitialized memory in GtkCssKeyframes
+      (gtk!8656 upstream)
+    - Fix a memory leak in GtkCssValue
+      (gtk!8629 upstream)
+    - Avoid a warning when gtk_application_inhibit() is called with
+      GTK_APPLICATION_INHIBIT_IDLE and no window
+      (gtk!8638 upstream)
+    - Fix names of Activate, Deactivate window events to match AT-SPI spec
+      (gtk!8652 upstream)
+    - Render symbolic SVG icons more correctly by improving the parser
+      for the path mini-language, and improve related test coverage
+      (gtk#7575, gtk!8548, gtk!8549, gtk!8642 upstream)
+    - Under Wayland, delay destruction of the event queue until after
+      everything has been detached from it
+      (gtk!8481 upstream)
+    - Simplify gdk_memory_texture_builder_set_color_state() by not handling
+      a NULL state that was already checked for
+      (gtk!8582 upstream)
+    - Improve the "inspector" debugging tool:
+      + show more environment variables
+      + show the text protocol
+      + centre-align accessibility errors
+      + report an error if buttons are too small
+      + make warnings not wrap too much
+      + remove incorrect early-returns
+    - Improve examples:
+      + In gtkgears fix lighting
+      + In gtk-demo, add missing accessibility properties
+      + In gtk-demo, fix a regression in the ucd demo
+      + In node-editor, make the help non-editable
+    - Documentation updates
+    - Translation updates: ca, de, fi, he, sk
+    - Upstream CI changes not relevant to Debian
+    - macOS-specific changes not relevant to Debian
+    - Minor updates in vendored pango subproject, not relevant to Debian
+      (we use libpango1.0-dev instead)
+  * d/libgtk-4-1.bug-control: Add known out-of-tree IM modules to
+    Package-Status.
+    There are considerably fewer of these than GTK 3 modules, because
+    GTK 4 does not support arbitrary GTK_MODULES, but they could still be
+    involved in crashes; so it seems wise to diagnose them as "packages
+    libgtk-4-1 is related to" in bug reports.
+  * d/libgtk-4-doc.links: Remove unused, dangling symlinks to GLib docs
+
+ -- Simon McVittie <smcv@debian.org>  Sat, 14 Jun 2025 14:06:01 +0100
+
 gtk4 (4.18.5+ds-1) unstable; urgency=medium
 
   [ Jeremy Bícha ]
diff -Nru gtk4-4.18.5+ds/debian/libgtk-4-1.bug-control gtk4-4.18.6+ds/debian/libgtk-4-1.bug-control
--- gtk4-4.18.5+ds/debian/libgtk-4-1.bug-control	1970-01-01 01:00:00.000000000 +0100
+++ gtk4-4.18.6+ds/debian/libgtk-4-1.bug-control	2025-06-15 10:37:29.000000000 +0100
@@ -0,0 +1 @@
+Package-Status: fcitx5-frontend-gtk4 ibus-gtk4 scim-gtk-immodule
diff -Nru gtk4-4.18.5+ds/debian/libgtk-4-doc.links gtk4-4.18.6+ds/debian/libgtk-4-doc.links
--- gtk4-4.18.5+ds/debian/libgtk-4-doc.links	2025-05-04 15:39:45.000000000 +0100
+++ gtk4-4.18.6+ds/debian/libgtk-4-doc.links	2025-06-15 10:37:29.000000000 +0100
@@ -8,7 +8,3 @@
 usr/share/doc/${env:DOC_PKG}/gsk4 usr/share/devhelp/books/gsk4
 usr/share/doc/${env:DOC_PKG}/gtk4 usr/share/doc/${env:DEV_PKG}/gtk4
 usr/share/doc/${env:DOC_PKG}/gtk4 usr/share/devhelp/books/gtk4
-usr/share/doc/libglib2.0-doc/glib usr/share/doc/${env:DEV_PKG}/glib
-usr/share/doc/libglib2.0-doc/glib usr/share/doc/${env:DOC_PKG}/glib
-usr/share/doc/libglib2.0-doc/gobject usr/share/doc/${env:DEV_PKG}/gobject
-usr/share/doc/libglib2.0-doc/gobject usr/share/doc/${env:DOC_PKG}/gobject
diff -Nru gtk4-4.18.5+ds/demos/gtk-demo/demotaggedentry.c gtk4-4.18.6+ds/demos/gtk-demo/demotaggedentry.c
--- gtk4-4.18.5+ds/demos/gtk-demo/demotaggedentry.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/demos/gtk-demo/demotaggedentry.c	2025-06-09 21:44:13.000000000 +0100
@@ -60,6 +60,11 @@
   gtk_style_context_add_provider_for_display (gdk_display_get_default (),
                                               GTK_STYLE_PROVIDER (provider),
                                               800);
+
+  gtk_accessible_update_property (GTK_ACCESSIBLE (entry),
+                                  GTK_ACCESSIBLE_PROPERTY_LABEL, "Tagged Entry",
+                                  -1);
+
   g_object_unref (provider);
 }
 
@@ -421,7 +426,11 @@
       GtkWidget *image;
 
       image = gtk_image_new_from_icon_name ("window-close-symbolic");
+      g_object_set (image, "accessible-role", GTK_ACCESSIBLE_ROLE_PRESENTATION, NULL);
       tag->button = gtk_button_new ();
+      gtk_accessible_update_property (GTK_ACCESSIBLE (tag->button),
+                                      GTK_ACCESSIBLE_PROPERTY_LABEL, "Close",
+                                      -1);
       gtk_button_set_child (GTK_BUTTON (tag->button), image);
       gtk_widget_set_halign (tag->button, GTK_ALIGN_CENTER);
       gtk_widget_set_valign (tag->button, GTK_ALIGN_CENTER);
diff -Nru gtk4-4.18.5+ds/demos/gtk-demo/gtkgears.c gtk4-4.18.6+ds/demos/gtk-demo/gtkgears.c
--- gtk4-4.18.5+ds/demos/gtk-demo/gtkgears.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/demos/gtk-demo/gtkgears.c	2025-06-09 21:44:13.000000000 +0100
@@ -677,8 +677,8 @@
 "\n"
 "    // Multiply the diffuse value by the vertex color (which is fixed in this case)\n"
 "    // to get the actual color that we will use to draw this vertex with\n"
-"    float diffuse = max(dot(N, L), 0.0);\n"
-"    Color = diffuse * MaterialColor;\n"
+"    float diffuse = (dot(N, L) + 1.0) * 0.5;\n"
+"    Color = vec4(diffuse * MaterialColor.rgb, 1.0);\n"
 "\n"
 "    // Transform the position to clip coordinates\n"
 "    gl_Position = ModelViewProjectionMatrix * vec4(position, 1.0);\n"
@@ -715,8 +715,8 @@
 "\n"
 "    // Multiply the diffuse value by the vertex color (which is fixed in this case)\n"
 "    // to get the actual color that we will use to draw this vertex with\n"
-"    float diffuse = max(dot(N, L), 0.0);\n"
-"    Color = diffuse * MaterialColor;\n"
+"    float diffuse = (dot(N, L) + 1.0) * 0.5;\n"
+"    Color = vec4(diffuse * MaterialColor.rgb, 1.0);\n"
 "\n"
 "    // Transform the position to clip coordinates\n"
 "    gl_Position = ModelViewProjectionMatrix * vec4(position, 1.0);\n"
diff -Nru gtk4-4.18.5+ds/demos/gtk-demo/listview_ucd.c gtk4-4.18.6+ds/demos/gtk-demo/listview_ucd.c
--- gtk4-4.18.5+ds/demos/gtk-demo/listview_ucd.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/demos/gtk-demo/listview_ucd.c	2025-06-09 21:44:13.000000000 +0100
@@ -255,7 +255,7 @@
   if (g_unichar_isprint (codepoint))
     g_unichar_to_utf8 (codepoint, buffer);
 
-  gtk_inscription_set_text (GTK_INSCRIPTION (label), buffer);
+  gtk_label_set_text (GTK_LABEL (label), buffer);
 }
 
 GtkWidget *
diff -Nru gtk4-4.18.5+ds/demos/node-editor/help-window.ui gtk4-4.18.6+ds/demos/node-editor/help-window.ui
--- gtk4-4.18.5+ds/demos/node-editor/help-window.ui	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/demos/node-editor/help-window.ui	2025-06-09 21:44:13.000000000 +0100
@@ -14,6 +14,7 @@
             <property name="top-margin">20</property>
             <property name="bottom-margin">20</property>
             <property name="monospace">1</property>
+            <property name="editable">0</property>
             <property name="buffer">
               <object class="GtkTextBuffer" id="buffer"/>
             </property>
diff -Nru gtk4-4.18.5+ds/gdk/gdkmemorytexturebuilder.c gtk4-4.18.6+ds/gdk/gdkmemorytexturebuilder.c
--- gtk4-4.18.5+ds/gdk/gdkmemorytexturebuilder.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gdk/gdkmemorytexturebuilder.c	2025-06-09 21:44:13.000000000 +0100
@@ -397,7 +397,7 @@
 /**
  * gdk_memory_texture_builder_set_color_state:
  * @self: a `GdkMemoryTextureBuilder`
- * @color_state: (nullable): The colorstate describing the data
+ * @color_state: The colorstate describing the data
  *
  * Sets the colorstate describing the data.
  *
@@ -417,9 +417,7 @@
     return;
 
   g_clear_pointer (&self->color_state, gdk_color_state_unref);
-  self->color_state = color_state;
-  if (color_state)
-    gdk_color_state_ref (color_state);
+  self->color_state = gdk_color_state_ref (color_state);
 
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_COLOR_STATE]);
 }
diff -Nru gtk4-4.18.5+ds/gdk/macos/gdkmacoskeymap.c gtk4-4.18.6+ds/gdk/macos/gdkmacoskeymap.c
--- gtk4-4.18.5+ds/gdk/macos/gdkmacoskeymap.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gdk/macos/gdkmacoskeymap.c	2025-06-09 21:44:13.000000000 +0100
@@ -338,8 +338,6 @@
 
       if (p[3] == p[2])
         p[3] = 0;
-      if (p[2] == p[1])
-        p[2] = 0;
       if (p[1] == p[0])
         p[1] = 0;
       if (p[0] == p[2] &&
@@ -582,7 +580,7 @@
   if (hardware_keycode < 0 || hardware_keycode >= NUM_KEYCODES)
     return FALSE;
 
-  tmp_keyval = translate_keysym (hardware_keycode, group, state, level, effective_group);
+  tmp_keyval = translate_keysym (hardware_keycode, group, state, effective_group, level);
 
   /* Check if modifiers modify the keyval */
   if (consumed_modifiers)
diff -Nru gtk4-4.18.5+ds/gdk/wayland/gdksubsurface-wayland.c gtk4-4.18.6+ds/gdk/wayland/gdksubsurface-wayland.c
--- gtk4-4.18.5+ds/gdk/wayland/gdksubsurface-wayland.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gdk/wayland/gdksubsurface-wayland.c	2025-06-09 21:44:13.000000000 +0100
@@ -190,7 +190,6 @@
     gdk_wayland_display_dispatch_queue (GDK_DISPLAY (display), event_queue);
 
   zwp_linux_buffer_params_v1_destroy (params);
-  wl_event_queue_destroy (event_queue);
 
   buffer = cd.buffer;
 
@@ -204,6 +203,8 @@
       listener->release (data, NULL);
     }
 
+  wl_event_queue_destroy (event_queue);
+
   return buffer;
 }
 
diff -Nru gtk4-4.18.5+ds/gsk/gskpathparser.c gtk4-4.18.6+ds/gsk/gskpathparser.c
--- gtk4-4.18.5+ds/gsk/gskpathparser.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gsk/gskpathparser.c	2025-06-09 21:44:13.000000000 +0100
@@ -392,9 +392,9 @@
 gsk_path_parse (const char *string)
 {
   GskPathBuilder *builder;
-  double x, y;
+  double x, y; /* current point */
   double prev_x1, prev_y1;
-  double path_x, path_y;
+  double path_x, path_y; /* start point of the current subpath */
   const char *p;
   char cmd;
   char prev_cmd;
@@ -444,39 +444,47 @@
             /* Look for special contours */
             if (parse_rectangle (&p, &x1, &y1, &w, &h))
               {
-                gsk_path_builder_add_rect (builder, &GRAPHENE_RECT_INIT (x1, y1, w, h));
-                if (_strchr ("zZX", prev_cmd))
+                if (cmd == 'm')
                   {
-                    path_x = x1;
-                    path_y = y1;
+                    x1 += x;
+                    y1 += y;
                   }
+                gsk_path_builder_add_rect (builder, &GRAPHENE_RECT_INIT (x1, y1, w, h));
+                path_x = x1;
+                path_y = y1;
 
+                cmd = 'z';
                 x = x1;
                 y = y1;
               }
             else if (parse_circle (&p, &x1, &y1, &r))
               {
-                gsk_path_builder_add_circle (builder, &GRAPHENE_POINT_INIT (x1, y1), r);
-
-                if (_strchr ("zZX", prev_cmd))
+                if (cmd == 'm')
                   {
-                    path_x = x1 + r;
-                    path_y = y1;
+                    x1 += x;
+                    y1 += y;
                   }
+                gsk_path_builder_add_circle (builder, &GRAPHENE_POINT_INIT (x1, y1), r);
+                path_x = x1 + r;
+                path_y = y1;
 
+                cmd = 'z';
                 x = x1 + r;
                 y = y1;
               }
             else if (parse_rounded_rect (&p, &rr))
               {
-                gsk_path_builder_add_rounded_rect (builder, &rr);
-
-                if (_strchr ("zZX", prev_cmd))
+                if (cmd == 'm')
                   {
-                    path_x = rr.bounds.origin.x + rr.corner[GSK_CORNER_TOP_LEFT].width;
-                    path_y = rr.bounds.origin.y;
+                    rr.bounds.origin.x += x;
+                    rr.bounds.origin.y += y;
                   }
+                gsk_path_builder_add_rounded_rect (builder, &rr);
+
+                path_x = rr.bounds.origin.x + rr.corner[GSK_CORNER_TOP_LEFT].width;
+                path_y = rr.bounds.origin.y;
 
+                cmd = 'Z';
                 x = rr.bounds.origin.x + rr.corner[GSK_CORNER_TOP_LEFT].width;
                 y = rr.bounds.origin.y;
               }
@@ -493,11 +501,8 @@
                 else
                   {
                     gsk_path_builder_move_to (builder, x1, y1);
-                    if (_strchr ("zZX", prev_cmd))
-                      {
-                        path_x = x1;
-                        path_y = y1;
-                      }
+                    path_x = x1;
+                    path_y = y1;
                   }
 
                 x = x1;
@@ -747,7 +752,7 @@
                     y2 += y;
                   }
                 if (_strchr ("zZ", prev_cmd))
-                  { 
+                  {
                     gsk_path_builder_move_to (builder, x, y);
                     path_x = x;
                     path_y = y;
diff -Nru gtk4-4.18.5+ds/gtk/a11y/gtkatspicontext.c gtk4-4.18.6+ds/gtk/a11y/gtkatspicontext.c
--- gtk4-4.18.5+ds/gtk/a11y/gtkatspicontext.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/a11y/gtkatspicontext.c	2025-06-09 21:44:13.000000000 +0100
@@ -1258,9 +1258,9 @@
       if (gtk_accessible_get_accessible_role (accessible) == GTK_ACCESSIBLE_ROLE_WINDOW)
         {
           if (state)
-            emit_window_event (self, "activate");
+            emit_window_event (self, "Activate");
           else
-            emit_window_event (self, "deactivate");
+            emit_window_event (self, "Deactivate");
         }
     }
 }
diff -Nru gtk4-4.18.5+ds/gtk/gtkapplication-wayland.c gtk4-4.18.6+ds/gtk/gtkapplication-wayland.c
--- gtk4-4.18.5+ds/gtk/gtkapplication-wayland.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkapplication-wayland.c	2025-06-09 21:44:13.000000000 +0100
@@ -156,7 +156,7 @@
   inhibitor->flags = flags;
   wayland->inhibitors = g_slist_prepend (wayland->inhibitors, inhibitor);
 
-  if (flags & GTK_APPLICATION_INHIBIT_IDLE && impl->application == gtk_window_get_application (window))
+  if (flags & GTK_APPLICATION_INHIBIT_IDLE && window && impl->application == gtk_window_get_application (window))
     {
       surface = gtk_native_get_surface (GTK_NATIVE (window));
       if (GDK_IS_WAYLAND_TOPLEVEL (surface))
diff -Nru gtk4-4.18.5+ds/gtk/gtkbuilderlistitemfactory.c gtk4-4.18.6+ds/gtk/gtkbuilderlistitemfactory.c
--- gtk4-4.18.5+ds/gtk/gtkbuilderlistitemfactory.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkbuilderlistitemfactory.c	2025-06-09 21:44:13.000000000 +0100
@@ -55,6 +55,11 @@
  *     </template>
  *   </interface>
  * ```
+ *
+ * A common approach is to embed such templates as CDATA marked sections into
+ * a surrounding UI file. Note that if you use this approach, extracting
+ * translatable strings with xgettext will not work for strings inside the
+ * marked section.
  */
 
 struct _GtkBuilderListItemFactory
diff -Nru gtk4-4.18.5+ds/gtk/gtkcsskeyframes.c gtk4-4.18.6+ds/gtk/gtkcsskeyframes.c
--- gtk4-4.18.5+ds/gtk/gtkcsskeyframes.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkcsskeyframes.c	2025-06-09 21:44:13.000000000 +0100
@@ -131,7 +131,10 @@
     }
 
   if (keyframes->variables)
-    keyframes->variables = g_realloc (keyframes->variables, sizeof (GtkCssVariableSet *) * keyframes->n_keyframes);
+    {
+      keyframes->variables = g_realloc (keyframes->variables, sizeof (GtkCssVariableSet *) * keyframes->n_keyframes);
+      keyframes->variables[keyframes->n_keyframes - 1] = NULL;
+    }
 
   return k;
 }
diff -Nru gtk4-4.18.5+ds/gtk/gtkcssreferencevalue.c gtk4-4.18.6+ds/gtk/gtkcssreferencevalue.c
--- gtk4-4.18.5+ds/gtk/gtkcssreferencevalue.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkcssreferencevalue.c	2025-06-09 21:44:13.000000000 +0100
@@ -59,6 +59,7 @@
   gtk_css_variable_value_unref (value->value);
   if (value->file)
     g_object_unref (value->file);
+  g_free (value);
 }
 
 static ResolveResult
diff -Nru gtk4-4.18.5+ds/gtk/gtkicontheme.c gtk4-4.18.6+ds/gtk/gtkicontheme.c
--- gtk4-4.18.5+ds/gtk/gtkicontheme.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkicontheme.c	2025-06-09 21:44:13.000000000 +0100
@@ -3674,17 +3674,14 @@
 
 /**
  * gtk_icon_paintable_is_symbolic: (get-property is-symbolic)
- * @self: a `GtkIconPaintable`
+ * @self: an icon paintable
  *
  * Checks if the icon is symbolic or not.
  *
  * This currently uses only the file name and not the file contents
  * for determining this. This behaviour may change in the future.
  *
- * Note that to render a symbolic `GtkIconPaintable` properly (with
- * recoloring), you have to set its icon name on a `GtkImage`.
- *
- * Returns: %TRUE if the icon is symbolic, %FALSE otherwise
+ * Returns: true if the icon is symbolic, false otherwise
  */
 gboolean
 gtk_icon_paintable_is_symbolic (GtkIconPaintable *icon)
diff -Nru gtk4-4.18.5+ds/gtk/gtkimcontextwayland.c gtk4-4.18.6+ds/gtk/gtkimcontextwayland.c
--- gtk4-4.18.5+ds/gtk/gtkimcontextwayland.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkimcontextwayland.c	2025-06-09 21:44:13.000000000 +0100
@@ -127,6 +127,19 @@
   return global;
 }
 
+struct wl_proxy *
+gtk_im_context_wayland_get_text_protocol (GdkDisplay *display)
+{
+  GtkIMContextWaylandGlobal *global;
+
+  global = gtk_im_context_wayland_global_get (display);
+
+  if (!global)
+    return NULL;
+
+  return (struct wl_proxy *) global->text_input;
+}
+
 static void
 notify_im_change (GtkIMContextWayland                 *context,
                   enum zwp_text_input_v3_change_cause  cause)
@@ -732,7 +745,7 @@
   g_free (global);
 }
 
-static GtkIMContextWaylandGlobal *
+GtkIMContextWaylandGlobal *
 gtk_im_context_wayland_global_get (GdkDisplay *display)
 {
   GtkIMContextWaylandGlobal *global;
diff -Nru gtk4-4.18.5+ds/gtk/gtkimcontextwayland.h gtk4-4.18.6+ds/gtk/gtkimcontextwayland.h
--- gtk4-4.18.5+ds/gtk/gtkimcontextwayland.h	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkimcontextwayland.h	2025-06-09 21:44:13.000000000 +0100
@@ -18,10 +18,16 @@
 #pragma once
 
 #include <gtk/gtk.h>
+#include <glib-object.h>
+#include <gdk/gdkdisplay.h>
+#include <wayland-client-protocol.h>
 
 G_BEGIN_DECLS
 
 GType         gtk_im_context_wayland_get_type (void) G_GNUC_CONST;
 
+struct wl_proxy *gtk_im_context_wayland_get_text_protocol (GdkDisplay *display);
+
+
 G_END_DECLS
 
diff -Nru gtk4-4.18.5+ds/gtk/gtkpopover.c gtk4-4.18.6+ds/gtk/gtkpopover.c
--- gtk4-4.18.5+ds/gtk/gtkpopover.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/gtkpopover.c	2025-06-09 21:44:13.000000000 +0100
@@ -29,12 +29,17 @@
  * </picture>
  *
  * It is primarily meant to provide context-dependent information
- * or options. Popovers are attached to a parent widget. By default,
- * they point to the whole widget area, although this behavior can be
- * changed with [method@Gtk.Popover.set_pointing_to].
+ * or options. Popovers are attached to a parent widget. The parent widget
+ * must support popover children, as [class@Gtk.MenuButton] and
+ * [class@Gtk.PopoverMenuBar] do. If you want to make a custom widget that
+ * has an attached popover, you need to call [method@Gtk.Popover.present]
+ * in your [vfunc@Gtk.Widget.size_allocate] vfunc, in order to update the
+ * positioning of the popover.
  *
  * The position of a popover relative to the widget it is attached to
- * can also be changed with [method@Gtk.Popover.set_position]
+ * can also be changed with [method@Gtk.Popover.set_position]. By default,
+ * it points to the whole widget area, but it can be made to point to
+ * a specific area using [method@Gtk.Popover.set_pointing_to].
  *
  * By default, `GtkPopover` performs a grab, in order to ensure input
  * events get redirected to it while it is shown, and also so the popover
diff -Nru gtk4-4.18.5+ds/gtk/inspector/a11yoverlay.c gtk4-4.18.6+ds/gtk/inspector/a11yoverlay.c
--- gtk4-4.18.5+ds/gtk/inspector/a11yoverlay.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/inspector/a11yoverlay.c	2025-06-09 21:44:13.000000000 +0100
@@ -142,14 +142,10 @@
   switch (gtk_accessible_role_get_naming (role))
     {
     case GTK_ACCESSIBLE_NAME_ALLOWED:
-      return FIX_SEVERITY_GOOD;
+      break;
 
     case GTK_ACCESSIBLE_NAME_REQUIRED:
-      if (label_set)
-        {
-          return FIX_SEVERITY_GOOD;
-        }
-      else
+      if (!label_set)
         {
           if (gtk_accessible_role_supports_name_from_author (role))
             {
@@ -162,10 +158,6 @@
 
                   return FIX_SEVERITY_ERROR;
                 }
-              else
-                {
-                  return FIX_SEVERITY_GOOD;
-                }
             }
           else
             {
@@ -183,18 +175,10 @@
 
           return FIX_SEVERITY_ERROR;
         }
-      else
-        {
-          return FIX_SEVERITY_GOOD;
-        }
       break;
 
     case GTK_ACCESSIBLE_NAME_RECOMMENDED:
-      if (label_set)
-        {
-          return FIX_SEVERITY_GOOD;
-        }
-      else
+      if (!label_set)
         {
           *hint = g_strdup_printf ("label recommended for %s", role_name);
 
@@ -203,11 +187,7 @@
       break;
 
     case GTK_ACCESSIBLE_NAME_NOT_RECOMMENDED:
-      if (!label_set)
-        {
-          return FIX_SEVERITY_GOOD;
-        }
-      else
+      if (label_set)
         {
           *hint = g_strdup_printf ("label not recommended for %s", role_name);
 
@@ -307,6 +287,23 @@
       return FIX_SEVERITY_ERROR;
     }
 
+  if (role == GTK_ACCESSIBLE_ROLE_BUTTON)
+    {
+      GtkAccessible *accessible = gtk_at_context_get_accessible (context);
+
+      if (GTK_IS_WIDGET (accessible))
+        {
+          int width = gtk_widget_get_width (GTK_WIDGET (accessible));
+          int height = gtk_widget_get_height (GTK_WIDGET (accessible));
+
+          if (width < 24 || height < 24)
+            {
+              *hint = g_strdup_printf ("Button is too small: %dx%d", width, height);
+              return FIX_SEVERITY_ERROR;
+            }
+        }
+    }
+
   return FIX_SEVERITY_GOOD;
 }
 
@@ -328,6 +325,19 @@
 }
 
 static void
+center_over_within (graphene_rect_t       *rect,
+                    const graphene_rect_t *over,
+                    const graphene_rect_t *within)
+{
+  graphene_point_t center;
+
+  graphene_rect_get_center (over, &center);
+
+  rect->origin.x = CLAMP (center.x - 0.5 * rect->size.width, within->origin.x, within->origin.x + within->size.width - rect->size.width);
+  rect->origin.y = CLAMP (center.y - 0.5 * rect->size.height, within->origin.y, within->origin.y + within->size.height - rect->size.height);
+}
+
+static void
 recurse_child_widgets (GtkA11yOverlay *self,
                        GtkWidget      *widget,
                        GtkSnapshot    *snapshot)
@@ -363,6 +373,7 @@
 
       if (hint)
         {
+          int toplevel_width, toplevel_height;
           PangoLayout *layout;
           PangoRectangle extents;
           GdkRGBA black = { 0, 0, 0, 1 };
@@ -373,11 +384,18 @@
             { 0, 0, 0, 1 },
             { 0, 0, 0, 1 },
           };
+          GtkNative *native;
+          graphene_rect_t over, within, bounds;
+          gboolean ret G_GNUC_UNUSED;
+
+          native = gtk_widget_get_native (widget);
+          toplevel_width = gtk_widget_get_width (GTK_WIDGET (native));
+          toplevel_height = gtk_widget_get_height (GTK_WIDGET (native));
 
           gtk_snapshot_save (snapshot);
 
           layout = gtk_widget_create_pango_layout (widget, hint);
-          pango_layout_set_width (layout, width * PANGO_SCALE);
+          pango_layout_set_width (layout, toplevel_width * PANGO_SCALE);
 
           pango_layout_get_pixel_extents (layout, NULL, &extents);
 
@@ -386,18 +404,29 @@
           extents.width += 10;
           extents.height += 10;
 
+          ret = gtk_widget_compute_point (widget, GTK_WIDGET (native), &GRAPHENE_POINT_INIT (0, 0), &over.origin);
+          over.size.width = width;
+          over.size.height = height;
+
+          graphene_rect_init (&within, 0, 0, toplevel_width, toplevel_height);
+
+          graphene_rect_init (&bounds, 0, 0, extents.width, extents.height);
+          center_over_within (&bounds, &over, &within);
+
           color.alpha = 0.8f;
 
-          gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (0.5 * (width - extents.width), 0.5 * (height - extents.height)));
+          gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (bounds.origin.x - over.origin.x,
+                                                                  bounds.origin.y - over.origin.y));
 
           gtk_snapshot_append_border (snapshot,
-                                       &GSK_ROUNDED_RECT_INIT (extents.x, extents.y,
+                                       &GSK_ROUNDED_RECT_INIT (0, 0,
                                                                extents.width, extents.height),
                                       widths, colors);
           gtk_snapshot_append_color (snapshot, &color,
-                                     &GRAPHENE_RECT_INIT (extents.x, extents.y,
+                                     &GRAPHENE_RECT_INIT (0, 0,
                                                           extents.width, extents.height));
 
+          gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (5, 5));
           gtk_snapshot_append_layout (snapshot, layout, &black);
           g_object_unref (layout);
 
diff -Nru gtk4-4.18.5+ds/gtk/inspector/general.c gtk4-4.18.6+ds/gtk/inspector/general.c
--- gtk4-4.18.5+ds/gtk/inspector/general.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/gtk/inspector/general.c	2025-06-09 21:44:13.000000000 +0100
@@ -71,6 +71,7 @@
 #include <xkbcommon/xkbcommon.h>
 #include "wayland/gdkdisplay-wayland.h"
 #include "wayland/gdkwaylandcolor-private.h"
+#include "gtk/gtkimcontextwayland.h"
 #endif
 
 #ifdef GDK_WINDOWING_BROADWAY
@@ -1170,12 +1171,15 @@
   "LANGUAGE",
   "LC_ALL",
   "LC_CTYPE",
+  "LIBGL_ALWAYS_SOFTWARE",
   "LPDEST",
+  "MESA_VK_DEVICE_SELECT",
   "PANGOCAIRO_BACKEND",
   "PANGO_LANGUAGE",
   "PRINTER",
   "SECMEM_FORCE_FALLBACK",
   "WAYLAND_DISPLAY",
+  "XDG_ACTIVATION_TOKEN",
   "XDG_DATA_HOME",
   "XDG_DATA_DIRS",
   "XDG_RUNTIME_DIR",
@@ -1308,6 +1312,7 @@
       append_wayland_protocol_row (gen, d->color ? gdk_wayland_color_get_color_manager (d->color) : NULL);
       append_wayland_protocol_row (gen, (struct wl_proxy *)d->system_bell);
       append_wayland_protocol_row (gen, (struct wl_proxy *)d->cursor_shape);
+      append_wayland_protocol_row (gen, gtk_im_context_wayland_get_text_protocol (display));
     }
 }
 
@@ -1348,6 +1353,8 @@
       append_wayland_protocol (string, (struct wl_proxy *)d->single_pixel_buffer, &count);
       append_wayland_protocol (string, d->color ? gdk_wayland_color_get_color_manager (d->color) : NULL, &count);
       append_wayland_protocol (string, (struct wl_proxy *)d->system_bell, &count);
+      append_wayland_protocol (string, (struct wl_proxy *)d->cursor_shape, &count);
+      append_wayland_protocol (string , gtk_im_context_wayland_get_text_protocol (display), &count);
 
       g_string_append (string, " |\n");
     }
diff -Nru gtk4-4.18.5+ds/meson.build gtk4-4.18.6+ds/meson.build
--- gtk4-4.18.5+ds/meson.build	2025-06-15 12:17:47.000000000 +0100
+++ gtk4-4.18.6+ds/meson.build	2025-06-15 12:17:49.000000000 +0100
@@ -1,5 +1,5 @@
 project('gtk', 'c',
-        version: '4.18.5',
+        version: '4.18.6',
         default_options: [
           'buildtype=debugoptimized',
           'warning_level=1',
diff -Nru gtk4-4.18.5+ds/modules/printbackends/gtkprintbackendcups.c gtk4-4.18.6+ds/modules/printbackends/gtkprintbackendcups.c
--- gtk4-4.18.5+ds/modules/printbackends/gtkprintbackendcups.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/modules/printbackends/gtkprintbackendcups.c	2025-06-09 21:44:13.000000000 +0100
@@ -5603,8 +5603,8 @@
 
       length = g_list_length (ipp_choices);
 
-      choices = g_new0 (char *, length);
-      choices_display = g_new0 (char *, length);
+      choices = g_new0 (char *, length + 1);
+      choices_display = g_new0 (char *, length + 1);
 
       i = 0;
       for (iter = ipp_choices; iter != NULL; iter = iter->next)
diff -Nru gtk4-4.18.5+ds/NEWS gtk4-4.18.6+ds/NEWS
--- gtk4-4.18.5+ds/NEWS	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/NEWS	2025-06-09 21:44:13.000000000 +0100
@@ -1,3 +1,22 @@
+Overview of Changes in 4.18.6, 09-06-2025
+=========================================
+
+* Bugs fixed:
+  - #7450 Wrong behavior of GdkKeymap on macOS (Elisa Pau)
+  - !8528 4.18.5 (Matthias Clasen)
+  - !8595 cups: NULL-terminate array of choices (Marek Kasik)
+  - !8610 Fix the android build (Florian "sp1rit"​)
+  - !8657 icontheme: Load the missing image icon from the theme (Sebastian
+    Wiesner, Benjamin Otte, Robert Mader, Zander Brown, James Westman, Tait
+    Hoyem, Matthias Clasen)
+
+* Translation updates:
+  - Catalan (Jordi Mas i Hernandez)
+  - Finnish (Jiri Grönroos)
+  - German (Christian Kirbach)
+  - Hebrew (Yaron Shahrabani)
+  - Slovak (Peter Mráz)
+
 Overview of Changes in 4.18.5, 03-05-2025
 =========================================
 
diff -Nru gtk4-4.18.5+ds/testsuite/gsk/path-special-cases.c gtk4-4.18.6+ds/testsuite/gsk/path-special-cases.c
--- gtk4-4.18.5+ds/testsuite/gsk/path-special-cases.c	2025-05-03 18:27:58.000000000 +0100
+++ gtk4-4.18.6+ds/testsuite/gsk/path-special-cases.c	2025-06-09 21:44:13.000000000 +0100
@@ -225,6 +225,39 @@
     { "M 10 20, M 10 20", NULL },
     { "M 10 20, M 10 20", NULL },
     { "M 10 20, ", NULL },
+
+    /* The following are not part of the rsvg tests */
+
+    // an icon that was triggering broken handling of 'm'
+    // Note that the output here is using 'M' to ensure the expected rendering
+    { "M 4 1 c -1.660156 0 -3 1.339844 -3 3 v 8 c 0 1.660156 1.339844 3 3 3 h 8 c 1.660156 0 3 -1.339844 3 -3 v -8 c 0 -1.660156 -1.339844 -3 -3 -3 z m 0 6 h 8 v 2 h -8 z m 0 0", "m 4 1 c -1.660156 0 -3 1.339844 -3 3 v 8 c 0 1.660156 1.339844 3 3 3 h 8 c 1.660156 0 3 -1.339844 3 -3 v -8 c 0 -1.660156 -1.339844 -3 -3 -3 z M 4 7 h 8 v 2 h -8 z m 0 0" },
+    // another icon that was triggering broken handling of custom contours
+    // Note that the output here is using 'M' to ensure the expected rendering
+    { "m 2 0 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "m 8 0 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "m -8 2 h 3 v 3 h -3 z "
+      "m 8 0 h 3 v 3 h -3 z "
+      "m -8 6 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "m 8 0 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "m -8 2 h 3 v 3 h -3 z "
+      "m 8 0 h 3 v 3 h -3 z",
+
+      "M 2 0 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "M 10 0 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "M 2 2 h 3 v 3 h -3 z "
+      "M 10 2 h 3 v 3 h -3 z "
+      "M 2 8 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "M 10 8 c -1.089844 0 -2 0.910156 -2 2 v 3 c 0 1.089844 0.910156 2 2 2 h 3 c 1.089844 0 2 -0.910156 2 -2 v -3 c 0 -1.089844 -0.910156 -2 -2 -2 z "
+      "M 2 10 h 3 v 3 h -3 z "
+      "M 10 10 h 3 v 3 h -3 z" },
+    // omitted commands
+    { "M 10 10 20 30 z", "M 10 10 L 20 30 z" },
+    { "M 10 10 c 1 2 3 4 5 6 4 2 1 0 2 2 z",
+      "M 10 10 c 1 2 3 4 5 6 c 4 2 1 0 2 2 z" },
+    { "M 1 2 A 1 2 3 1 16 7 1 2 3 1 16 7", "path" },
+    // unclosed subpath
+    { "M 10 10 20 30 20 10 10 10 M 40 40 50 50 50 40 Z m 20 0 h 4 v 4 h -4 z",
+      "M 10 10 20 30 20 10 10 10 M 40 40 50 50 50 40 Z M 60 40 h 4 v 4 h -4 z" },
   };
   int i;
 

--- End Message ---
--- Begin Message ---
Unblocked.

--- End Message ---

Reply to: