Overview of Changes in 4.19.2, 27-06-2025 ========================================= Note: This release makes GTK rely on the Wayland text protocol for input method support. For compositors without that protocol, you can manually set GTK_IM_MODULE=simple to get back support for X11-style compose sequences and dead keys. * GtkImage: - Change the sizing behavior for paintables. Stop scaling them up * Add g_uri_launcher_can_launch to check if a given uri has a handler * GtkTextView: - Don't use keyboard layout for text direction * GtkIconTheme: - Allow strokes in symbolic icons - Document the symbolic icon format - Add a small parser for symbolic svg files - Convert symbolic svgs to render nodes and rasterize them later - Require librsvg and always support svg - Make it possible to create GtkIconPaintable objects in ui files - Fix search path order to prefer ~/.local/share over /usr/share * GtkVideo: - Port the gstreamer backend to use GskPlay * Resources: - Clean up and simplify all symbolic icons and theme assets, so they can be handled by the built-in svg parser - Stop including png versions of symbolic icons and theme assets * CSS: - Plug a memory leak in the css variables code - Support transition hints for gradients - Support two-position stops for gradients - Pass toplevel edge constraints to css - Support multiple keyframe selectors per block - Reimplement text shadows to match what browsers do * GL: - Support multiplane texture formats * GSK: - Fix some bugs in the path parser - Cache masks for fill and stroke nodes - Fix some corner cases of path semantics to match svg * Deprecations: - Deprecate the remaining pixbuf APIs * Tools: - Add some interactive controls to gtk4-path-tool - Add a command to convert symbolic svgs to nodes - The inspector UI has been improved in some places * Demos: - Fix lighting in the gears GL demo - Use paintables for some icons, so we no longer rely on an icon theme to provide them - Stop hardcoding Cantarell as font in various places - Use paintables instead of themed icons in many places * Build: - Include modules in libgtk - Build with libcups 3 - Use meson 1.8.2 - Require librsvg - Fix the build without memfd_create * Wayland: - Stop handling compose sequences client-side, since the compositor does it - Plug a memory leak in the offloading code - Fix scaling of callback cursors - Update tablet cursors properly * MacOS: - Support window snapping - Better window menu support - Don't build the x11 backend on macos, by default * Windows: - Fix resizing problems with the cairo renderer - Add API for D3D12 textures - Refactor and modernize the WGL support - Fix many msvc warnings - Scale callback cursors - Use D3D11 or D3D12 and DirectComposition. This can be disabled using new GDK_DISABLE values: GDK_DISABLE=d3d11,d3d12,dcomp * Android: - Simplify surface layout * Bugs fixed: - #6519 AtSpiSocket not in gir - #7136 color: transparent; doesn't make emojis transparent (Matthias Clasen) - #7137 text-shadow doesn't work with transparent text (Matthias Clasen) - #7233 `contain_mimetype` can return true for a type that _was_ present in the clipboard but removed leading to `g-io-quark-error` when reading the data - #7277 Support mac os snapping feature - #7427 CSS @keyframes should support multiple animation selectors (Matthias Clasen) - #7450 Wrong behavior of GdkKeymap on macOS (Elisa Pau) - #7524 `Gtk.MapListModel` becomes desynchronized when the original list model is modified (Matthias Clasen) - #7541 Win32: window resize issues (not repainted or wrong direction) with cairo renderer (Benjamin Otte) - #7562 Android: Allocation warning spam when scrolling ScrolledWindow - #7572 path caching fallout (Benjamin Otte, Matthias Clasen) - #7583 macos: Vulkan renderer broken - #7587 Dynamic cursors are incorrectly scaled (PBS, Matthias Clasen) - #7589 Windows vulkan renderer: DestroyWindow failed with code 1400: Invalid window handle. (Benjamin Otte) - #7592 `gtk_accelerator_parse_with_keycode` returns a false positive for parsing (Rubén Muñoz--Bertrand) - #7593 Wayland: The tablet cursor shape does not always changes shape when hovering into a GTK4 application (Matthias Clasen) - #7606 Giant mouse cursor (Matthias Clasen) - #7609 GTK4 symbolic icon display no longer prioritises ~/.local/share/icons over /usr/share/icons (Matthias Clasen) - #7611 Texture.save_to_png does not consider the color state (Matthias Clasen) - #7613 Regression with gtk_snapshot_append_radial_gradient() (Matthias Clasen) - #7617 (atspi): `Parent` property and cache's `GetItems` methods disagree about root's parent. - #7620 Cannot build GTK4 without `memfd_create` (Matthias Clasen) - !7883 Add GdkD3d12Texture (Benjamin Otte) - !8061 Deprecate the last few undeprecated GdkPixbuf apis (Matthias Clasen) - !8080 macos: Add (experimental) Vulkan support (Arjan Molenaar) - !8481 Color representation protocol support (Matthias Clasen) - !8498 macos: Add Window menu as a special case (Arjan Molenaar) - !8501 macos: Fix native window snapping (Arjan Molenaar) - !8522 modules: Let modules be statically linked into libgtk (Florian "sp1rit"​) - !8525 4.19.1 (Matthias Clasen) - !8530 Some more pixbuf work (Matthias Clasen) - !8533 Drop unnecessary includes (Matthias Clasen) - !8534 css: Use different api (Matthias Clasen) - !8535 icons: Fix the fg-only optimization (Matthias Clasen) - !8537 Add gtk_uri_launcher_can_launch - !8538 Bump the openuri portal api (Matthias Clasen) - !8539 gpu: Move function (Benjamin Otte) - !8540 Revert "file filer: Replace an api" (Matthias Clasen) - !8541 Use librsvg for symbolics that we can't parse ourselves - !8542 GDK/Win32: Some more cleanups (Chun-wei Fan) - !8543 Allow overriding (de)serializers (Matthias Clasen) - !8544 node-editor: Help isn't editable (Matthias Clasen) - !8545 Improve the a11y overlay (Matthias Clasen) - !8547 Convert symbolic icons to render nodes (Matthias Clasen) - !8548 path: Fix handling of 'm' (Matthias Clasen) - !8549 path: Fix handling of custom contours (Matthias Clasen) - !8550 icons: Update folder-new-symbolic from Adwaita (Matthias Clasen) - !8551 A bunch of fixes (Benjamin Otte) - !8552 docs: Some updates (Matthias Clasen) - !8553 demos: Simplify the app icons (Matthias Clasen) - !8555 icontheme: Cosmetics (Matthias Clasen) - !8556 wayland: Stop deriving from GtkIMContextSimple (Matthias Clasen) - !8557 path tool: Add some interactive control (Matthias Clasen) - !8558 some win32 fixes (Benjamin Otte) - !8559 win32: Use DirectComposition (Benjamin Otte) - !8560 Document the atspi socket (Matthias Clasen) - !8561 win32 fixes (Benjamin Otte) - !8564 ci: fix the android build ci (Florian "sp1rit"​) - !8565 gtk-demo: Fix the ucd demo (Matthias Clasen) - !8566 android: fix cairo renderer framebuffer format conversion (Florian "sp1rit"​) - !8567 image-tool: Use shared infrastructure (Matthias Clasen) - !8569 gtk-demo: Add a symbolic paintable (Matthias Clasen) - !8570 gtk-demo: Rename a class (Matthias Clasen) - !8571 Split off gtkiconpaintable.h (Matthias Clasen) - !8572 menubutton: Annotate popover type (Sergey Bugaev) - !8573 Allow strokes in symbolic icons - !8575 docs: Document a pitfall of nested ui files (Matthias Clasen) - !8576 Cosmetics (Matthias Clasen) - !8577 Cosmetics (Matthias Clasen) - !8578 icontheme: Drop non_blocking flags (Matthias Clasen) - !8579 android: introduce properties missing from toplevel (Florian "sp1rit"​) - !8580 Implement caching for path fills (Benjamin Otte, Matthias Clasen) - !8581 testsuite: Add a bunch of compare tests (Benjamin Otte) - !8582 memorytexturebuilder: Fix set_color_state annotation (Robert Mader) - !8583 rework GskGpuCache a bit (Benjamin Otte) - !8584 gstreamer: Port to GstPlay (Benjamin Otte) - !8586 ci: Let marge also do the android job (Florian "sp1rit"​) - !8587 Move the node format docs (Matthias Clasen) - !8589 egl: Handle EGL_SWAP_BEHAVIOR and avoid SwapBuffersWithDamage() if whole buffer was damaged (Benjamin Otte) - !8590 Clean up a few more icons (Matthias Clasen) - !8592 node-editor: Redo the zoom ui (Matthias Clasen) - !8593 icons: Simplify some icons (Matthias Clasen) - !8594 Build with libcups 3 - !8597 dmabuf: egl: Skip unknown drm formats (Robert Mader) - !8598 Cache strokes (Matthias Clasen) - !8599 wayland: Plug a memory leak (Matthias Clasen) - !8600 GL: Add multiplane texture support (Benjamin Otte) - !8602 rendernode tool: Add a --dont-move option (Benjamin Otte, Matthias Clasen) - !8603 texturedownloader: Fix annotations (Benjamin Otte) - !8605 CI/MSVC: fix accesskit-c build with non-native Rust toolchain (L. E. Segovia) - !8606 gsk: Prepare for fill and stroke caching (Matthias Clasen) - !8607 docs: Add more details about symbolic icons (Matthias Clasen) - !8608 Make gsk_path_get_bounds() WARN_IF_UNUSED_RESULT (Benjamin Otte) - !8609 Revert 6d15f59fef2330dca2e27 (Matthias Clasen) - !8611 Small icon fixes (Matthias Clasen) - !8613 Add some more path parser tests (Matthias Clasen) - !8617 gpu: Do not use fma() in GLSL shaders (Robert Mader) - !8620 docs: Make warnings more bold (Matthias Clasen) - !8621 rendernodeparser: Make gzipped data consistent (Benjamin Otte) - !8622 Add a test (Matthias Clasen) - !8623 popover: Document parent widget requirements (James Westman) - !8625 widget: Only set tooltip when text has changed (Khalid Abu Shawarib) - !8626 Make the paintable demo use a picture (Matthias Clasen) - !8627 iconhelper: Stop scaling up paintables (Matthias Clasen) - !8628 gpu: Include scale when snapping (Benjamin Otte) - !8629 cssrefvalue: free the value itself (Zander Brown) - !8632 image: Expand docs (Matthias Clasen) - !8633 docs: Use proper admonitions (Matthias Clasen) - !8634 gtk-demo: Drop an accidentally snuck in icon (Matthias Clasen) - !8635 gstreamer: Promote set_caps caps print to info (Robert Mader) - !8636 icons: Apply matrix transforms (Jakub Steiner, Matthias Clasen) - !8637 Clean up and fix rotate gesture icons (Matthias Clasen) - !8638 Guard against window being NULL (Sebastian Wiesner) - !8639 Always allow symbolic svgs (Matthias Clasen) - !8640 Fix supercritical issue in gtk4-demo (Benjamin Otte) - !8641 snapshot: Move a helper (Matthias Clasen) - !8642 More svg rendering and path work (Matthias Clasen) - !8643 Improve symbolic icon handling (Matthias Clasen) - !8644 surface: Add the concept of an "attached context" (Benjamin Otte) - !8645 wayland: More debug spew for color (Matthias Clasen) - !8646 rendernode tool: Tweak the convert command (Matthias Clasen) - !8647 icontheme: Split off gtkiconpaintable.c (Matthias Clasen) - !8648 Try meson 1.8.1 (Matthias Clasen) - !8649 wayland: Add a way to get the text protocol proxy (Matthias Clasen) - !8650 Rename many of the private color apis - !8651 macos: update draw contexts and fix vulkan renderer (Arjan Molenaar) - !8652 Fix name of Activate/Deactivate DBus signal name (Tait Hoyem) - !8653 css: Parse transition hints for linear gradients (Matthias Clasen) - !8655 Implement transition hints for gradients (Matthias Clasen) - !8656 css: Fix a crash (Matthias Clasen) - !8658 gdk: Drop an unused include (Matthias Clasen) - !8659 Fix a ton of warnings due to stricter MSVC compiler flags (Benjamin Otte) - !8660 Update the clipboard on all `WM_CLIPBOARDUPDATE` events even if for the same owner (Doublonmousse) - !8662 android: Simplify surface layouting (Florian "sp1rit"​) - !8663 Cosmetics (Matthias Clasen) - !8664 Fix memory layout initialization (Matthias Clasen) - !8667 ci: Allow the macos job to fail (Matthias Clasen) - !8668 ci: unify towards a shared used meson version (Florian "sp1rit"​) - !8669 Add zoom icons to our fallback set (Matthias Clasen) - !8671 Fix a parsing bug with '<' and '>' (Rubén Muñoz--Bertrand) - !8675 win32: Remove leftover code (Benjamin Otte) - !8676 testsuite: Don't run slow tests in parallel (Benjamin Otte) - !8677 ci: Redo tools tests (Matthias Clasen) - !8679 Replace hardcoded values of Cantarell (Matthias Clasen) - !8680 docs: Add missing docs_url field to the backends documentation (Corentin Noël) - !8683 inspector: Minor ui improvements (Matthias Clasen) - !8684 ci: Slim down our harfbuzz fallback build (Matthias Clasen) - !8686 Update the issue template for crashes (Emmanuele Bassi) - !8688 inspector: Small UI improvements (Matthias Clasen) - !8690 a11y atspi: Report masked password instead of plain one - !8691 gstreamer: Use the actual data size for the texture builder (Robert Mader) - !8692 Pass resizable edge window states on to css (Matthias Clasen) - !8694 Revert "wayland: Fix callback cursor scaling" (Matthias Clasen) - !8695 textview: Use widget direction instead of keyboard direction for neutral text - !8696 gtkmaplistmodel: Make 'model' property writable (Georges Basile Stavracas Neto) - !8697 meson: Disable x11 feature on macos - !8698 gstreamer: Handle non-contiguous sysmem buffers (Robert Mader) - !8699 ci: Don't build broadway on macos (Matthias Clasen) - !8700 Revert "Add gdk_wayland_toplevel_get_xdg_toplevel" - !8702 docs: Add more details (Matthias Clasen) - !8704 widget-factory: Add some a11y error handling (Matthias Clasen) - !8705 When saving textures, preserve color state (Matthias Clasen) - !8707 gtkgstsink.c: Drop g_autoptr() usage (Chun-wei Fan) - !8709 widget-factory: Add some icons (Matthias Clasen) - !8710 inspector: Mark image buttons in ui files (Matthias Clasen) - !8712 button: Try harder to manage style classes (Matthias Clasen) - !8713 Fix corner cases with text alpha (Matthias Clasen) - !8714 gsk: Move color glyph special-casing (Matthias Clasen) - !8715 window: Update set_startup_id documentation to include Wayland (Sebastian Keller) - !8716 Add missing array annotation to GskPathForeachFunc - !8719 Fix gtk_init_check() crash on android (PBS) - !8720 atspiroot: Return proper parent reference (Lukáš Tyrychtr) - !8721 testsuite: Run ttfautohint over our Inter subsets (Matthias Clasen) - !8722 A bunch of general fixes (Benjamin Otte, Matthias Clasen) - !8724 gsk: Don't forget to disable pangos rounding (Matthias Clasen) - !8725 rendernodeparser: Don't abuse Pango structs (Benjamin Otte) * Translation updates: - Catalan (Jordi Mas i Hernandez) - Finnish (Jiri Grönroos) - Georgian (Ekaterine Papava) - German (Christian Kirbach) - Hebrew (Yosef Or Boczko, Yaron Shahrabani) - Interlingua (International Auxiliary Language Association) (Emilio Sepúlveda) - Slovak (Peter Mráz) - Slovenian (Martin) - Turkish (Emin Tufan Çetin) - Uzbek (Baxrom Raxmatov)