Skip to content

New post! #322

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 173 additions & 0 deletions _posts/2025-07-15-new-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
---
layout: post
author: gtk-rs developers
title: New Release
categories: [front, crates]
date: 2025-07-15 16:00:00 +0000
---

For the interested ones, here is the list of the merged pull requests:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should have some paragraph at the top that lists

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gtk4-rs 0.10 and gtk-rs-core 0.21 were just released in time for the GNOME 49 release. This release features support for all the new APIs that were added during the GNOME 49 development cycle, and in addition contains some bindings API cleanups. There were very few breaking API changes.

As usual, this release happened in sync with other bindings for GObject-based libraries: libadwaita 0.8, gstreamer 0.24, gst-plugins-rs 0.14 and various others maintained in the GNOME Rust group.

The next API breaking release is planned for summer 2026 for GNOME 51, and in the meantime non-breaking bugfix releases will be released together with any new APIs that are added in the GNOME 50 development cycle.

Please test the new version and report any bugs you find!


[gtk4-rs](https://github.com/gtk-rs/gtk4-rs):

* [ci/docs: Don't use all-features](https://github.com/gtk-rs/gtk4-rs/pull/2098)
* [gtk: Change disable\_portals() assertion to non-initialized](https://github.com/gtk-rs/gtk4-rs/pull/2075)
* [fix doc: disappear `#` from hidden line](https://github.com/gtk-rs/gtk4-rs/pull/2059)
* [fix(event\_controller): set\_static\_name UAF fixed, name now has static lifetime](https://github.com/gtk-rs/gtk4-rs/pull/2056)
* [Update container image to libadwaita 1.7](https://github.com/gtk-rs/gtk4-rs/pull/2047)
* [Improve texture builder APIs](https://github.com/gtk-rs/gtk4-rs/pull/2046)
* [Fix broken link to the "ListBox: StringList with Sorter" example.](https://github.com/gtk-rs/gtk4-rs/pull/2034)
* [gtk: add gnome\_48 features](https://github.com/gtk-rs/gtk4-rs/pull/2033)
* [femtovg area : scale by the scale factor to fill the screen](https://github.com/gtk-rs/gtk4-rs/pull/2031)
* [Adjust install of `ashpd` to avoid `tokio`](https://github.com/gtk-rs/gtk4-rs/pull/2026)
* [ci: Use cairo as a renderer](https://github.com/gtk-rs/gtk4-rs/pull/1975)
* [gtk: don't leak snapshots](https://github.com/gtk-rs/gtk4-rs/pull/1971)
* [Update per latest gir/gir-files](https://github.com/gtk-rs/gtk4-rs/pull/1939)
* [gdk4-macos: manually implement native\_window method](https://github.com/gtk-rs/gtk4-rs/pull/1938)
* [gdk: Generate MemoryTextureBuilder](https://github.com/gtk-rs/gtk4-rs/pull/1916)
* [Update to femtovg 0.11 and glow 0.15](https://github.com/gtk-rs/gtk4-rs/pull/1915)
* [add gdk4-macos bindings](https://github.com/gtk-rs/gtk4-rs/pull/1909)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Worth highlighting this one

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New gdk4-macos crate

In addition to the already existing gdk4-wayland, gdk4-win32 and gdk4-x11 there is also a separate crate now for the GDK macOS APIs. This gives access to macOS native types that are used internally by GDK/GTK and allows interoperability with other macOS APIs.

* [Update gir files](https://github.com/gtk-rs/gtk4-rs/pull/1907)
* [Fix callback userdata mutability](https://github.com/gtk-rs/gtk4-rs/pull/1902)
* [ Fix new beta clippy warnings ](https://github.com/gtk-rs/gtk4-rs/pull/1895)
* [book: Add link to Chinese translation](https://github.com/gtk-rs/gtk4-rs/pull/1894)
* [accessible\_value: Fix errormessage relation layout](https://github.com/gtk-rs/gtk4-rs/pull/1887)
* [template\_child: Implement PropertyGet for TemplateChild](https://github.com/gtk-rs/gtk4-rs/pull/1886)
* [Add interface bounds to Impls](https://github.com/gtk-rs/gtk4-rs/pull/1883)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one (and the corresponding one in gtk-rs-core that landed earlier) is a notable breaking change. We could go with something like:

Interface bounds on the glib::wrapper macro

It is now a hard requirement to specify all @implements directives for all interfaces that are implemented by the class, even for interfaces that are implemented by parents of the class. This ensures internal consistency between the public rust interface and the gobject world, resolving a soundness issue.

* [Regenerate with latest gir / gir-files](https://github.com/gtk-rs/gtk4-rs/pull/1882)
* [gtk/templates: Add missing traits for TemplateChild](https://github.com/gtk-rs/gtk4-rs/pull/1870)
* [gtk: Implementable implementation for AccessibleText](https://github.com/gtk-rs/gtk4-rs/pull/1789)

[gtk-rs-core](https://github.com/gtk-rs/gtk-rs-core):

* [gio: add methods for returning and propagating boolean and int in/from a `Task`](https://github.com/gtk-rs/gtk-rs-core/pull/1762)
* [Allow specifying a default via `Default` in a field within `Properties`](https://github.com/gtk-rs/gtk-rs-core/pull/1761)
* [gio: update doc links in `DBusMethodInvocation`](https://github.com/gtk-rs/gtk-rs-core/pull/1760)
* [glib: Fully transfer ownership in `<Value as From<Vec<GString>>>::from`](https://github.com/gtk-rs/gtk-rs-core/pull/1759)
* [gdk-pixbuf: Add v2\_44 version feature](https://github.com/gtk-rs/gtk-rs-core/pull/1755)
* [Add cargo feature for quartz surface](https://github.com/gtk-rs/gtk-rs-core/pull/1753)
* [image: Disabe gdk-pixbuf thumbnailer](https://github.com/gtk-rs/gtk-rs-core/pull/1751)
* [image: Disable docs for gdk-pixbuf as well](https://github.com/gtk-rs/gtk-rs-core/pull/1750)
* [Fix new nightly warning about confusing lifetime flows](https://github.com/gtk-rs/gtk-rs-core/pull/1743)
* [Add gio::FileEnumerator subclass](https://github.com/gtk-rs/gtk-rs-core/pull/1740)
* [glib: Make sure that empty `glib::StrV` / `glib::PtrSlice` returns a valid pointer](https://github.com/gtk-rs/gtk-rs-core/pull/1734)
* [Document requirement for explicit default in `Enum` properties](https://github.com/gtk-rs/gtk-rs-core/pull/1732)
* [Add gio::Vfs subclass](https://github.com/gtk-rs/gtk-rs-core/pull/1726)
* [Add gio::FileMonitor subclass](https://github.com/gtk-rs/gtk-rs-core/pull/1725)
* [Use std::io::Error::other() instead of new()](https://github.com/gtk-rs/gtk-rs-core/pull/1724)
* [cairo: Fix some typos in Error Display impl](https://github.com/gtk-rs/gtk-rs-core/pull/1715)
* [Implement gio::File::set\_attribute](https://github.com/gtk-rs/gtk-rs-core/pull/1713)
* [glib: Implement Deref/DerefMut for ThreadGuard](https://github.com/gtk-rs/gtk-rs-core/pull/1711)
* [gobject: Work around wrongly added v2\_82 feature](https://github.com/gtk-rs/gtk-rs-core/pull/1710)
* [Wrap IntoFuture around Cancellable::future](https://github.com/gtk-rs/gtk-rs-core/pull/1709)
* [Derive Debug and Clone for variant DictEntry](https://github.com/gtk-rs/gtk-rs-core/pull/1708)
* [CI image fixes](https://github.com/gtk-rs/gtk-rs-core/pull/1707)
* [ignore typ typo](https://github.com/gtk-rs/gtk-rs-core/pull/1701)
* [gio: Use `OwnedSocket` / `BorrowedSocket` for Windows APIs on GSocket](https://github.com/gtk-rs/gtk-rs-core/pull/1699)
* [ Port some functions to safe-io: pt II](https://github.com/gtk-rs/gtk-rs-core/pull/1696)
* [gio: Return `glib::ExitCode` from `gio::Application` signal handlers](https://github.com/gtk-rs/gtk-rs-core/pull/1694)
* [pango: Implement `pango\_shape()` bindings manually and ignore `pango\_…](https://github.com/gtk-rs/gtk-rs-core/pull/1693)
* [glib: Add From<AsRef<str>> impl for GStringPtr](https://github.com/gtk-rs/gtk-rs-core/pull/1688)
* [Port some functions to safe-io: pt I](https://github.com/gtk-rs/gtk-rs-core/pull/1687)
* [Fix bug in bindings of pango::shape\_full and pango::shape\_with\_flags](https://github.com/gtk-rs/gtk-rs-core/pull/1681)
* [glib: Add bindings for `g\_intern\_string()` and `g\_intern\_static\_string()` to `GStr`](https://github.com/gtk-rs/gtk-rs-core/pull/1669)
* [Remove unsafe interface requirement for into ptr conversion](https://github.com/gtk-rs/gtk-rs-core/pull/1666)
* [Re-export CancelledHandlerId](https://github.com/gtk-rs/gtk-rs-core/pull/1652)
* [ci: Add an automated update job](https://github.com/gtk-rs/gtk-rs-core/pull/1650)
* [gio: Use manual env: &\[OsString\] parameter for SubprocessLauncher::set\_environ](https://github.com/gtk-rs/gtk-rs-core/pull/1642)
* [glib: Implement ToGlibContainerFromSlice for CStr and CString](https://github.com/gtk-rs/gtk-rs-core/pull/1641)
* [pango: Add bindings for `Font::languages()`](https://github.com/gtk-rs/gtk-rs-core/pull/1639)
* [Expose dbus\_register and dbus\_unregister vfuncs](https://github.com/gtk-rs/gtk-rs-core/pull/1634)
* [glib: Fix expected compiler error text for Rust 1.84](https://github.com/gtk-rs/gtk-rs-core/pull/1631)
* [Fix some new clippy warnings](https://github.com/gtk-rs/gtk-rs-core/pull/1623)
* [glib: Remove SendWeakRef::new() because implementation is unsound](https://github.com/gtk-rs/gtk-rs-core/pull/1621)
* [gio: Fix order of arguments to g\_dbus\_connection\_register\_object\_with\_closures()](https://github.com/gtk-rs/gtk-rs-core/pull/1616)
* [glib: `unix\_fd\_add\_full` and `unix\_fd\_add\_local\_full`](https://github.com/gtk-rs/gtk-rs-core/pull/1614)
* [Fix incorrect documentation](https://github.com/gtk-rs/gtk-rs-core/pull/1610)
* [gio: Only provide UNIX mount compat API on UNIX platforms](https://github.com/gtk-rs/gtk-rs-core/pull/1605)
* [Operator overloads for Graphene](https://github.com/gtk-rs/gtk-rs-core/pull/1604)
* [Update gir-files / gir](https://github.com/gtk-rs/gtk-rs-core/pull/1602)
* [gio: Work around GLib memory leak in g\_dbus\_connection\_register\_objec…](https://github.com/gtk-rs/gtk-rs-core/pull/1600)
* [gio: Export `RegistrationBuilder` from the crate root](https://github.com/gtk-rs/gtk-rs-core/pull/1598)
* [windows: use a range for windows-rs dependency ](https://github.com/gtk-rs/gtk-rs-core/pull/1595)
* [gio: manually implement content\_type\_guess](https://github.com/gtk-rs/gtk-rs-core/pull/1591)
* [Generate all the missing Gio bindings](https://github.com/gtk-rs/gtk-rs-core/pull/1587)
* [gio: Fix nullability of various DBus method call related parameters](https://github.com/gtk-rs/gtk-rs-core/pull/1584)
* [Fix / silence various new Rust 1.83 clippy warnings](https://github.com/gtk-rs/gtk-rs-core/pull/1582)
* [Signal/accumulator](https://github.com/gtk-rs/gtk-rs-core/pull/1581)
* [Update gir files](https://github.com/gtk-rs/gtk-rs-core/pull/1576)
* [glib: Remove `SignalClassHandlerToken` from default class handler](https://github.com/gtk-rs/gtk-rs-core/pull/1575)
* [glib: Add `Bytes::into\_data() and `Bytes::from\_bytes()` bindings](https://github.com/gtk-rs/gtk-rs-core/pull/1573)
* [Update gir files](https://github.com/gtk-rs/gtk-rs-core/pull/1572)
* [Fix callback userdata mutability](https://github.com/gtk-rs/gtk-rs-core/pull/1566)
* [glib: Remove type parameter from `Object::has\_property()` and add separate `has\_property\_with\_type()` and check for subtypes](https://github.com/gtk-rs/gtk-rs-core/pull/1565)
* [pango: Fix `LayoutLine::x\_ranges()` bindings](https://github.com/gtk-rs/gtk-rs-core/pull/1564)
* [Fix clippy beta warnings](https://github.com/gtk-rs/gtk-rs-core/pull/1561)
* [glib-macros: Derived boxed types are not TransparentPtrType but `TransparentType`](https://github.com/gtk-rs/gtk-rs-core/pull/1559)
* [Add some quality-of-life gdbus helpers](https://github.com/gtk-rs/gtk-rs-core/pull/1558)
* [glib: Add unimplemented diagnostic to IsA linking to the wrapper macro](https://github.com/gtk-rs/gtk-rs-core/pull/1552)
* [gio: Add interface bounds to ApplicationImpl](https://github.com/gtk-rs/gtk-rs-core/pull/1551)
* [Regenerate with latest gir / gir-files](https://github.com/gtk-rs/gtk-rs-core/pull/1550)
* [Copy docs to getter in Properties macro](https://github.com/gtk-rs/gtk-rs-core/pull/1490)

All this was possible thanks to the [gtk-rs/gir](https://github.com/gtk-rs/gir) project as well:

* [parser: Ignore doc-version](https://github.com/gtk-rs/gir/pull/1660)
* [Remove unnecessary parenthesis around closure trait object type](https://github.com/gtk-rs/gir/pull/1659)
* [Handle `bool` ctype as C99 bool too](https://github.com/gtk-rs/gir/pull/1654)
* [Add support for configuring cfg\_condition on signals and properties](https://github.com/gtk-rs/gir/pull/1652)
* [parser: Ignore doc:format attribute](https://github.com/gtk-rs/gir/pull/1645)
* [Clippy warning](https://github.com/gtk-rs/gir/pull/1644)
* [Address clippy warning](https://github.com/gtk-rs/gir/pull/1640)
* [codegen: Run cargo clippy --fix](https://github.com/gtk-rs/gir/pull/1636)
* [Improved the documentation for derive clauses in API configuration](https://github.com/gtk-rs/gir/pull/1632)
* [signals: work-around ObjectType shadowing](https://github.com/gtk-rs/gir/pull/1627)
* [Fix clippy 1.83 warning](https://github.com/gtk-rs/gir/pull/1621)
* [Don't cast callbacks as `&Box<T>` but use `&T` instead to make clippy happy](https://github.com/gtk-rs/gir/pull/1619)
* [Don't cast callbacks as `&Box<T>` but use `&T` instead to make clippy…](https://github.com/gtk-rs/gir/pull/1618)
* [Fix reference / non-reference mismatches for functions with multiple …](https://github.com/gtk-rs/gir/pull/1617)
* [codegen/traits: Add missing guards for Eq/Ord traits](https://github.com/gtk-rs/gir/pull/1616)
* [fix userdata mutability for FnMut callbacks](https://github.com/gtk-rs/gir/pull/1614)
* [generator.py: Restore pre-building `gir` with build/progress output](https://github.com/gtk-rs/gir/pull/1613)
* [analysis: Support more target dependant types](https://github.com/gtk-rs/gir/pull/1612)
* [Fix new beta clippy warnings](https://github.com/gtk-rs/gir/pull/1611)
* [codegen/object: Check for generate\_safety\_asserts when generating builders](https://github.com/gtk-rs/gir/pull/1608)

Thanks to all of our contributors for their (awesome!) work on this release:

* [@A6GibKm](https://github.com/A6GibKm)
* [@AbuShawarib](https://github.com/AbuShawarib)
* [@BiagioFesta](https://github.com/BiagioFesta)
* [@bilelmoussaoui](https://github.com/bilelmoussaoui)
* [@BiswajitThakur](https://github.com/BiswajitThakur)
* [@carlosmn](https://github.com/carlosmn)
* [@charlesrocket](https://github.com/charlesrocket)
* [@davidmhewitt](https://github.com/davidmhewitt)
* [@Doods0](https://github.com/Doods0)
* [@dottorblaster](https://github.com/dottorblaster)
* [@Doublonmousse](https://github.com/Doublonmousse)
* [@fbrouille](https://github.com/fbrouille)
* [@felinira](https://github.com/felinira)
* [@fengalin](https://github.com/fengalin)
* [@Hawk777](https://github.com/Hawk777)
* [@Hofer-Julian](https://github.com/Hofer-Julian)
* [@jgcodes2020](https://github.com/jgcodes2020)
* [@Jwashton](https://github.com/Jwashton)
* [@LeoSchae](https://github.com/LeoSchae)
* [@MarijnS95](https://github.com/MarijnS95)
* [@Mstrodl](https://github.com/Mstrodl)
* [@nacho](https://github.com/nacho)
* [@nozwock](https://github.com/nozwock)
* [@ogios](https://github.com/ogios)
* [@otaxhu](https://github.com/otaxhu)
* [@pbor](https://github.com/pbor)
* [@pjungkamp](https://github.com/pjungkamp)
* [@quo](https://github.com/quo)
* [@sdroege](https://github.com/sdroege)
* [@sophie-h](https://github.com/sophie-h)
* [@swsnr](https://github.com/swsnr)
* [@wezm](https://github.com/wezm)
* [@xanathar](https://github.com/xanathar)
* [@Ytsejam76](https://github.com/Ytsejam76)
* [@yvt](https://github.com/yvt)
* [@ZanderBrown](https://github.com/ZanderBrown)
Loading