Overview of Changes in 4.21.5, 30-01-2026 ========================================= * Early adopters have run into some problems with the state saving APIs that were introduced earlier this cycle, so they have been temporarily removed. We plan to reintroduce state saving early in the next cycle. * gsk: - All of the shader glue code is now autogenerated - Gradients can be interpolated in CSS (i.e. premultiplied) or SVG style (non-premultiplied) - Profiling support has been added (shown as 'heat maps' in the inspector) * svg: - Filters operate in linear RGB (unless overwritten) - Many correctness fixes - The librsvg dependency has been dropped, since GTK can now render svg images natively * css: - SVG filters can be used via data urls * Bugs fixed: - #6870 Feature Request: Add an "accessible ID" property to GtkAccessible (Michael Weghorn) - #7078 Memory leak with cairo renderer + wayland GDK backend (Matthias Clasen) - #7703 `g_file_copy` crashes if one of src/dest is `GdkAndroidContentFile` and the other is not (Florian "sp1rit"​) - #7957 Gtk.NeverTrigger() throws assertion error - #7964 MacOS: closing a GtkWindow with native window controls does not restore mouse events to other windows - #7968 Crash in Drag Controller on a Finalizing Widget (Sergey Bugaev) - #7970 File descriptors overflow in gtk4 applications, causing application crash (Matthias Clasen) - #7972 gsk_transform_invert doesn't do as advertised (Matthias Clasen) - #7979 gsk_path_builder_add_circle segmentation fault (stackoverflow ?) (Matthias Clasen) - !7890 openuriportal: Use get_startup_notify_id directly (Maximiliano Sandoval) - !9264 Redo GtkAspectFrame (Sergey Bugaev) - !9273 application: Support application inhibition and session-end detection on win32 (g.willems) - !9284 gdk/wayland: Map stylus buttons for BTN_BACK and BTN_FORWARD (Peter Hutterer) - !9321 Redo vertex attribute handling / draw call autogeneration (Benjamin Otte) - !9332 docs: Clarify gtk_widget_get_template_child widget_type parameter (badcel) - !9333 Drop the librsvg dependency (Matthias Clasen) - !9338 ci: Cleanups (Matthias Clasen) - !9339 svg: Add the color attribute (Matthias Clasen) - !9340 svg: Handle font-weight and -size fully (Matthias Clasen) - !9341 gdk: Parse hsl colors more correctly (Matthias Clasen) - !9342 Drop some purposeless empty files (Sergey Bugaev) - !9343 Let GdkArray use g_free_sized (Sergey Bugaev) - !9346 Miscellaneous svg fixes (Matthias Clasen) - !9347 split off some more nodes (Matthias Clasen) - !9348 Revert "tests: Set the win_subsystem where needed" (g.willems) - !9349 gsk: Split off shadow drawing (Matthias Clasen) - !9351 Revert "ci: Allow vs2019 to fail" (Matthias Clasen) - !9352 displacementnode: Fix copy/paste error (Benjamin Otte) - !9354 macos: Determine location of native window controls reliably (Arjan Molenaar) - !9355 svg: Accumulated gradient fixes (Matthias Clasen) - !9360 Support color-interpolation (Matthias Clasen) - !9361 Handle zero-length gradients (Benjamin Otte) - !9362 a11y: Introduce accessible ID (Michael Weghorn) - !9363 svg fixes (Matthias Clasen) - !9367 gsk: Add unpremultiplied gradient interpolation (Matthias Clasen) - !9368 gdk: Fix compile error due to macro ordering (Benjamin Otte) - !9369 textview: Mark return value of gtk_text_view_get_extra_menu() as nullable (Sebastian Dröge) - !9370 css: Support filter urls (Matthias Clasen) - !9372 rendernodeparser: Escape debug message strings properly (Benjamin Otte) - !9374 gsk: Use GdkColorChannel for component transfer (Matthias Clasen) - !9375 text: Remove cursor blinking when not sensitive (Emmanuele Bassi) - !9376 Add rendernode performance monitoring (Benjamin Otte) - !9377 gsk: Make arithmetic match svg implementations (Matthias Clasen) - !9378 Do linear arithmetic compositing (Matthias Clasen) - !9381 application: Rework host app portal registration (Adrian Vovk) - !9382 gsk: Add a color state to component transfer nodes (Matthias Clasen) - !9383 ci: Update macOS runner (René de Hesselle) - !9384 build: Remove objcopy resource build (Benjamin Otte) - !9386 ci: Update the Fedora image (Matthias Clasen) - !9389 ci: Add a gnomeos build (Matthias Clasen) - !9391 main: Fix an annotation (Sergey Bugaev) - !9392 Misc memleak fixes (Matthias Clasen) - !9393 Test node serialization (Matthias Clasen) - !9395 application: Drop public save/restore API (Adrian Vovk) - !9396 gtkcalendar: Add tooltips to the control buttons (Lukáš Tyrychtr) - !9398 testsuite: Try to fix testutils build (Matthias Clasen) - !9399 shortcuttrigger: Make GtkNeverTrigger a GObject singleton (Sergey Bugaev) - !9401 gsk: Set flags on nodes (Matthias Clasen) - !9404 gtkatspicontext: Make sure that the ATs do not have a cached expanded state (Lukáš Tyrychtr) - !9405 svg: Try harder to resolve attributeName (Matthias Clasen) - !9406 gsk: Do not include GSK_PREAMBLE in final shader (Florian "sp1rit"​) * Translation updates: - Georgian (Ekaterine Papava) - Kazakh (Baurzhan Muftakhidinov) - Russian (Artur S0)