<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>gtk-rs blog</title>
    <description>Rust bindings for GTK and GLib-based libraries
</description>
    <link>https://gtk-rs.org/</link>
    <atom:link href="https://gtk-rs.org/blog/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Tue, 27 Jan 2026 06:50:28 +0000</pubDate>
    <lastBuildDate>Tue, 27 Jan 2026 06:50:28 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>New Release</title>
        <description>&lt;p&gt;gtk4-rs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.9&lt;/code&gt; and gtk-rs-core &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.20&lt;/code&gt; were just freshly released, just in time
for also being included in the GNOME 47 release.&lt;/p&gt;

&lt;p&gt;This release is again relatively small, mostly providing bindings to new APIs
and improvements to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::clone!&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::closure!&lt;/code&gt; macros to work
better with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cargo fmt&lt;/code&gt; and rust-analyzer.&lt;/p&gt;

&lt;p&gt;As usual, at the same time gstreamer-rs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.23&lt;/code&gt; and gst-plugins-rs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.13&lt;/code&gt;,
libadwaita &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.7&lt;/code&gt; and other related crates got a new release compatible with
the new gtk4-rs and gtk-rs-core releases and their own set of changes.&lt;/p&gt;

&lt;h3 id=&quot;gtk-rs-core&quot;&gt;gtk-rs-core&lt;/h3&gt;

&lt;h4 id=&quot;new-syntax-for-glibclone-and-glibclosure&quot;&gt;New syntax for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::clone!&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::closure!&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;The syntax for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone!&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;closure!&lt;/code&gt; macros was updated to look more
like valid Rust code, and as a side effect it is also handled correctly by
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cargo fmt&lt;/code&gt;, rust-analyzer and other tooling now.&lt;/p&gt;

&lt;p&gt;The old syntax is still supported but will give a deprecation warning.&lt;/p&gt;

&lt;p&gt;To get an idea of the change, what previously looked like:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;clone!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;strong&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;weak&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;obj: {}, v: {}, x: {}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;would now look like this:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;clone!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;#[strong(rename_to&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;obj)]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;#[weak]&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;#[upgrade_or]&lt;/span&gt;
    &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nd&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;obj: {}, v: {}, x: {}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Check the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.20/docs/glib/macro.clone.html&quot;&gt;documentation&lt;/a&gt; for more details about the new syntax.&lt;/p&gt;

&lt;h4 id=&quot;glib-282-apis&quot;&gt;GLib 2.82 APIs&lt;/h4&gt;

&lt;p&gt;New GLib and GIO 2.82 APIs are supported with this release. GLib 2.56 is still
the minimum version supported by the bindings.&lt;/p&gt;

&lt;h4 id=&quot;trait-re-organization-for-defining-new-gobject-interfaces&quot;&gt;Trait re-organization for defining new GObject interfaces&lt;/h4&gt;

&lt;p&gt;The traits for defining new GObject interfaces were slightly re-organized to
make them more similar with the ones for defining new GObjects.&lt;/p&gt;

&lt;p&gt;Previously one would write:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;#[derive(Clone,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;Copy)]&lt;/span&gt;
&lt;span class=&quot;nd&quot;&gt;#[repr(C)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gobject_ffi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GTypeInterface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nd&quot;&gt;#[glib::object_interface]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;unsafe&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectInterface&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;static&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;MyStaticInterface&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This would now become:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;#[derive(Clone,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;Copy)]&lt;/span&gt;
&lt;span class=&quot;nd&quot;&gt;#[repr(C)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterfaceClass&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gobject_ffi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GTypeInterface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;unsafe&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;InterfaceStruct&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterfaceClass&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;enum&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;

&lt;span class=&quot;nd&quot;&gt;#[glib::object_interface]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectInterface&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterface&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;static&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;MyStaticInterface&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Interface&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyStaticInterfaceClass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;While it is a bit more code, this is almost the same as for GObjects now.&lt;/p&gt;

&lt;h4 id=&quot;safer-borrowing-of-gobjects-and-other-types-from-ffi-code&quot;&gt;Safer borrowing of GObjects and other types from FFI code&lt;/h4&gt;

&lt;p&gt;It is possible to directly borrow GObjects and other types in FFI code without
additional refcounting or copying. In previous releases the API for that was
completely based on pointers, which allowed to accidentally create dangling
pointers without the compiler being able to help.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ffi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GObject&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;from_glib_ptr_borrow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// At this point `obj` is pointing at a stack frame that does not exist anymore&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Starting with this release, a reference to a pointer is used instead to avoid
this from happening. The above code would not compile anymore. Previously the
lifetime of the returned object would be arbitrary, now it is bound strictly
to the lifetime of the pointer.&lt;/p&gt;

&lt;p&gt;Code using this API likely does not need any changes unless the code was
previously wrong.&lt;/p&gt;

&lt;h3 id=&quot;gtk4-rs&quot;&gt;gtk4-rs&lt;/h3&gt;

&lt;h4 id=&quot;gtk-416-apis&quot;&gt;GTK 4.16 APIs&lt;/h4&gt;

&lt;p&gt;New GTK 4.16 APIs are supported with this release. GTK 4.0 is still the
minimum version supported by the bindings.&lt;/p&gt;

&lt;h3 id=&quot;changes&quot;&gt;Changes&lt;/h3&gt;

&lt;p&gt;For the interested ones, here is the list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1773&quot;&gt;Update to new clone! macro syntax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1769&quot;&gt;book: Fix typo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1763&quot;&gt;Remove unnecessary upcast from examples/squeezer_bin/main.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1762&quot;&gt;typos: Ignore versions.txt file&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1761&quot;&gt;examples/squeezer_bin: Mark properties as writable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1760&quot;&gt;Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SqueezerBin::size\_allocate()&lt;/code&gt; in example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1758&quot;&gt;Stop renaming ffi crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1755&quot;&gt;custom_orientable: Fix interface property override&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1750&quot;&gt;gtk: Implement Downgrade for TemplateChild&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1742&quot;&gt;Update list_widgets.md&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1733&quot;&gt;examples: Support GL &amp;gt;= 3.1 and GLES &amp;gt;= 3.0 in the glium example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1725&quot;&gt;Update link for Cogitri/Health to World/Health&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1719&quot;&gt;Simplify reading file contents to a String&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1708&quot;&gt;macros: Drop anyhow dependency&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1707&quot;&gt;Fix typo in todo_1.md&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1705&quot;&gt;gtk4: Manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GraphicsOffload&lt;/code&gt; constructor for now&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1704&quot;&gt;gtk4: Require GDK 4.14 when enabling the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v4\_14&lt;/code&gt; feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1688&quot;&gt;macros: Drop macro-proc-error and upgrade syn to 2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1687&quot;&gt;dockerfile: Update libadwaita to 1.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1675&quot;&gt;docs: fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Path&lt;/code&gt; setting on windows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1672&quot;&gt;Correctly handle &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GError\*\*&lt;/code&gt; out parameters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1663&quot;&gt;Replace simple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl Debug&lt;/code&gt; with derived &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Debug&lt;/code&gt; in tokio example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1644&quot;&gt;Simplify library configuration step for Windows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1455&quot;&gt;docs: Run on our container image&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1454&quot;&gt;gio: Add a method to get a stream of incoming connections to SocketListener&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1451&quot;&gt;glib: Add support for registering GTypes with name conflicts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1449&quot;&gt;glib: Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TypeData&lt;/code&gt; struct fields private&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1443&quot;&gt;glib-macros: Don’t produce unnecessary braces in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone!(async move { x })&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1440&quot;&gt;Update to system-deps 7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1438&quot;&gt;glib-macros: Fix unit return in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;closure!()&lt;/code&gt; macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1432&quot;&gt;strv: add From implementation from a String array&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1431&quot;&gt;Derive TransparentPtrType trait for Boxed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1429&quot;&gt;gio: Properly export Win32InputStream / Win32OutputStream traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1424&quot;&gt;Update &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone!&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;closure!&lt;/code&gt; macro to new syntax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1423&quot;&gt;Stop renaming ffi crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1422&quot;&gt;gio: remove Send + Sync requirements from DBusConnection::register_ob…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1419&quot;&gt;spell fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1417&quot;&gt;gio: make DBusConnection::register_object take optional clousures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1413&quot;&gt;glib: Add unsafe &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::into\_send\_value()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1411&quot;&gt;glib: Improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ValueArray&lt;/code&gt; API, add tests and assertions for invalid …&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1410&quot;&gt;glib: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MatchInfo::next()&lt;/code&gt; handling of returning &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FALSE&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1406&quot;&gt;glib/functions: add compute_checksum_for_string&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1400&quot;&gt;glib: Add bindings for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g\_value\_set\_static\_string()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1395&quot;&gt;docs: Fix broken links / cleanup README&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1388&quot;&gt;glib: Implement Sync for ThreadGuard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1387&quot;&gt;glib: Only implement Send on JoinHandle if the result is Send&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1384&quot;&gt;glib: Decouple ObjectInterface impl from interface class struct&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1383&quot;&gt;glib: Add missing Send bound to the output type of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spawn\_from\_within()&lt;/code&gt; future&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1379&quot;&gt;glib-macros: Refactor parsing code of object_subclass/object_interface&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1378&quot;&gt;examples: Add example for custom class structs and virtual methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1377&quot;&gt;ObjectBuilder: add property_if(), property_if_some(), property_from_iter() \&amp;amp; property_if_not_empty()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1376&quot;&gt;glib: Don’t use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g\_object\_list\_properties()&lt;/code&gt; for setting properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1375&quot;&gt;glib: Use a reference to a pointer of correct mutability for from_glib_ptr_borrow()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1372&quot;&gt;glib: Re-add and rename manual Win32 API additions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1370&quot;&gt;glib-macros/properties: Allow structs with no properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1369&quot;&gt;glib::wrapper: Add docs for impls generated by the wrapper macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1361&quot;&gt;glib-sys: Add missing includes in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;manual.h&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1360&quot;&gt;glib-sys: fix struct size mismatches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1355&quot;&gt;glib: Freeze property notifications while setting multiple properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1352&quot;&gt;glib-macros: Improve error message when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Properties&lt;/code&gt; struct doesn’t have at least one &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#\[property(…)\]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1344&quot;&gt;docs: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;construct&lt;/code&gt; attribute for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Properties&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1343&quot;&gt;glib: fix UB in VariantStrIter::impl_get&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1337&quot;&gt;glib: Don’t misuse &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;slice::get\_unchecked()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1331&quot;&gt;gio: correctly free argument list items&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1329&quot;&gt;glib: Optimize string collation bindings a bit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1328&quot;&gt;glib: Drop the main context future return value sender on finalize&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1325&quot;&gt;pango: add some missing AttrInt constructors.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1323&quot;&gt;glib: Embed docs for ParamSpec types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1321&quot;&gt;glib: Requires Upgrade on Downgrade::Weak type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1316&quot;&gt;macros: allow to specify #[default] for glib::flags&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1312&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Quark::from\_static\_str()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1311&quot;&gt;docs: Move metadata back to packages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1310&quot;&gt;cairo: Fix version of the v1_18 feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1304&quot;&gt;Document values of Continue and Break&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1584&quot;&gt;Minor cleanup to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;is\_some\_and(...)&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map\_or(false, ...)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1583&quot;&gt;Update to system-deps 7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1576&quot;&gt;More docs improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1575&quot;&gt;codegen: Handle mangled types names&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1574&quot;&gt;members: drop useless alias config&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1573&quot;&gt;Various properties fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1572&quot;&gt;codegen: Avoid double alias on badly annotated fn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1571&quot;&gt;Use getter and setter annotations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1570&quot;&gt;Support finish-func annotation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1569&quot;&gt;codegen: Stop renaming ffi crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1568&quot;&gt;Use final annotation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1562&quot;&gt;Add support for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libc::time\_t&lt;/code&gt; and related types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1547&quot;&gt;Revert Automatically assume that win32_ and unix_ should use the related cfg&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1546&quot;&gt;Correctly generate cfg condition for ABI tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1545&quot;&gt;Generate cfgs with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;update\_cfgs&lt;/code&gt; on enums as well&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/A6GibKm&quot;&gt;@A6GibKm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alatiera&quot;&gt;@alatiera&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/amyspark&quot;&gt;@amyspark&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/carlosmn&quot;&gt;@carlosmn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/DaKnig&quot;&gt;@DaKnig&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/decathorpe&quot;&gt;@decathorpe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ellnix&quot;&gt;@ellnix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/enaut&quot;&gt;@enaut&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/exi&quot;&gt;@exi&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felinira&quot;&gt;@felinira&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fengalin&quot;&gt;@fengalin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liushuyu&quot;&gt;@liushuyu&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/marcinjahn&quot;&gt;@marcinjahn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/misson20000&quot;&gt;@misson20000&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mjgarton&quot;&gt;@mjgarton&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mokurin000&quot;&gt;@mokurin000&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mtilda&quot;&gt;@mtilda&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nazar-pc&quot;&gt;@nazar-pc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pbor&quot;&gt;@pbor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pranjalkole&quot;&gt;@pranjalkole&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vhakulinen&quot;&gt;@vhakulinen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/woelfman&quot;&gt;@woelfman&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ystreet&quot;&gt;@ystreet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zecakeh&quot;&gt;@zecakeh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Wed, 17 Jul 2024 09:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2024/07/17/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2024/07/17/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>New Release</title>
        <description>&lt;p&gt;This is the blog post release for gtk4-rs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.8&lt;/code&gt; and gtk-rs-core &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.19&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Although this release happened a few months ago, we finally had time to finish this release blog post!&lt;/p&gt;

&lt;p&gt;This is a smaller release than usual, bringing some nice quality of life improvements.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;h3 id=&quot;gtk3&quot;&gt;gtk3&lt;/h3&gt;

&lt;p&gt;Support for gtk3-rs crates was dropped. No more updates will be done on it. If you didn’t yet, please migrate to gtk4-rs.&lt;/p&gt;

&lt;h3 id=&quot;gtk-rs-core&quot;&gt;gtk-rs-core&lt;/h3&gt;

&lt;h4 id=&quot;removal-of-glib-channels&quot;&gt;Removal of glib channels&lt;/h4&gt;

&lt;p&gt;In this release the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::MainContext::channel()&lt;/code&gt; function was removed, together with the corresponding sender/receiver types. In many cases this API has led to overly complicated code in applications because people tried to develop state machines via callbacks, instead of simply making use of async Rust for that purpose.&lt;/p&gt;

&lt;p&gt;Instead of using the main context channel, the new way of passing values between other threads and the main thread is by using any of the many async channel implementations. Examples for this are the &lt;a href=&quot;https://docs.rs/async-channel&quot;&gt;async-channel&lt;/a&gt; crate, the MPSC channels from tokio or async-std, the task/thread join handles of both, the &lt;a href=&quot;https://docs.rs/flume&quot;&gt;flume&lt;/a&gt; crate, …&lt;/p&gt;

&lt;p&gt;For example, the following code:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sender&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;receiver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;MainContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Priority&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DEFAULT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;receiver&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.attach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;MainContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()),&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;do_things&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;sender&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.send&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyMessage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Could be rewritten like this with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;async-channel&lt;/code&gt; crate:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sender&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;receiver&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;async_channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;unbounded&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;MainContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.spawn_local&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Ok&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;receiver&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.recv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.await&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;do_things&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;sender&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.send_blocking&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyMessage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.expect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Channel closed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;removal-of-re-exported-once_cell-crate-use-stdcelloncecell--stdsynconcelock&quot;&gt;Removal of re-exported once_cell crate, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::cell::OnceCell&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::sync::OnceLock&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;If you need lazy initialization then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;once_cell::sync::Lazy&lt;/code&gt; is still useful until &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LazyCell&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LazyLock&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std&lt;/code&gt; are finalized.&lt;/p&gt;

&lt;h4 id=&quot;re-organized-traits-in-glib&quot;&gt;Re-organized traits in glib&lt;/h4&gt;

&lt;p&gt;If you get a compiler error because of missing traits, usually the solution would be to make sure that the prelude of the crates (e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::prelude::*&lt;/code&gt;) is imported.&lt;/p&gt;

&lt;h4 id=&quot;dynamic-types-support&quot;&gt;Dynamic types support&lt;/h4&gt;

&lt;p&gt;Let’s say you want to create a plugin to add some features or to customize some application. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object_class_dynamic&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object_interface_dynamic &lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;enum_dynamic &lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flags_dynamic &lt;/code&gt; are macro helper attributes to make your types dynamic.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-Rust&quot;&gt;// My object types
#[derive(Default)]
pub struct MyType;

#[glib::object_subclass]
#[object_subclass_dynamic]
impl ObjectSubclass for MyType { ... }

// My interfaces
pub struct MyInterface {
    parent: glib::gobject_ffi::GTypeInterface,
}

#[glib::object_interface]
#[object_interface_dynamic]
unsafe impl ObjectInterface for MyInterface { ... }

// My enums
#[derive(Debug, Copy, Clone, PartialEq, Eq, glib::Enum)]
#[enum_type(name = &quot;MyModuleEnum&quot;)]
#[enum_dynamic]
enum MyModuleEnum { ... }

// My flags
#[glib::flags(name = &quot;MyFlags&quot;)]
#[flags_dynamic]
enum MyFlags { ... }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Your plugin code has to implement the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TypePlugin&lt;/code&gt; interface or to extend the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TypeModule&lt;/code&gt; type in order to register or unregister your dynamic types when the module (or plugin) is loaded or unloaded.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-Rust&quot;&gt;#[derive(Default)]
pub struct MyModule;

#[glib::object_subclass]
impl ObjectSubclass for MyModule { ... }

impl ObjectImpl for MyModule {}

impl TypePluginImpl for MyModule {}

impl TypeModuleImpl for MyModule {
    fn load(&amp;amp;self) -&amp;gt; bool {
        // registers my plugin types as dynamic types.
        let my_module = self.obj();
        let type_module: &amp;amp;glib::TypeModule = my_module.upcast_ref();
        MyInterface::on_implementation_load(type_module)
            &amp;amp;&amp;amp; MyType::on_implementation_load(type_module)
            &amp;amp;&amp;amp; MyEnum::on_implementation_load(type_module)
            &amp;amp;&amp;amp; MyFlags::on_implementation_load(type_module)
    }

    fn unload(&amp;amp;self) {
        // marks my plugin types as unregistered.
        let my_module = self.obj();
        let type_module: &amp;amp;glib::TypeModule = my_module.upcast_ref();
        MyFlags::on_implementation_unload(type_module);
        MyEnum::on_implementation_unload(type_module);
        MyType::on_implementation_unload(type_module);
        MyInterface::on_implementation_unload(type_module);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By default dynamic types are registered when  the system loads your plugin. In some cases, it could be useful to postpone the registration of a dynamic type on the first use. This can be done by setting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lazy_registration = true&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-Rust&quot;&gt;// My object types
#[derive(Default)]
pub struct MyType;

#[glib::object_subclass]
#[object_subclass_dynamic(lazy_registration = true)]
impl ObjectSubclass for MyType { ... }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For more complex cases, see the documentation &lt;a href=&quot;https://docs.rs/glib/latest/glib/attr.object_subclass.html&quot;&gt;glib::object_subclass&lt;/a&gt;, &lt;a href=&quot;https://docs.rs/glib/latest/glib/attr.object_interface.html&quot;&gt;glib::object_interface&lt;/a&gt;, &lt;a href=&quot;https://docs.rs/glib/latest/glib/derive.Enum.html&quot;&gt;glib::Enum&lt;/a&gt;, &lt;a href=&quot;https://docs.rs/glib/latest/glib/attr.flags.html&quot;&gt;glib::flags&lt;/a&gt;, &lt;a href=&quot;https://docs.rs/glib/latest/glib/subclass/type_module/trait.TypeModuleImpl.html&quot;&gt;glib::subclass::type_module::TypeModuleImpl&lt;/a&gt; and &lt;a href=&quot;https://docs.rs/glib/latest/glib/subclass/type_plugin/trait.TypePluginImpl.html&quot;&gt;glib::subclass::type_plugin::TypePluginImpl&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;gtk4-rs&quot;&gt;gtk4-rs&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;GTK 4.14 APIs support&lt;/li&gt;
  &lt;li&gt;Support &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TemplateChild&amp;lt;T&amp;gt;&lt;/code&gt; usage with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Properties&lt;/code&gt; macro, allowing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TemplateChild&amp;lt;T&amp;gt;&lt;/code&gt; to be used as properties&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1591&quot;&gt;gtk: Don’t propagate unused argument&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1589&quot;&gt;examples: Add example for About Dialog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1588&quot;&gt;gtk::show_about_dialog: Set hide_on_close&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1587&quot;&gt;Regen with ffi workspacecs usage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1584&quot;&gt;Add missing installation step for Windows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1582&quot;&gt;book: Use const consistently&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1581&quot;&gt;book: Less usage of once_cell&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1580&quot;&gt;Get rid of once_cell&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1579&quot;&gt;Use cargo workspace features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1578&quot;&gt;Examples: async request no blocking main thread&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1576&quot;&gt;CI: add a cargo deny job&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1571&quot;&gt;Revert “book: Go back to 4_8 for now”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1570&quot;&gt;examples: Add a menubar one&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1569&quot;&gt;examples: Add a gtk::Scale&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1568&quot;&gt;Various fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1566&quot;&gt;image: Use modern way of publishing the container&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1563&quot;&gt;print_job: fix send() closure&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1559&quot;&gt;book: Fix link to GVariant docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1550&quot;&gt;docs: fix composite template internal_child -&amp;gt; internal&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1546&quot;&gt;Add clarification around creating tokio runtime&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1536&quot;&gt;book: Move to libadwaita 1.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1534&quot;&gt;book: Add setuptools installation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1533&quot;&gt;book: Use new API spawn_future_local&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1531&quot;&gt;docker: Move to libadwaita 1.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1529&quot;&gt;book: Move to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;install_action&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1525&quot;&gt;Migrate listings to action group&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1522&quot;&gt;book: Use bounded channels instead of unbounded&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1521&quot;&gt;book: Move to async-channel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1518&quot;&gt;book: Disable playground globally&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1517&quot;&gt;book: Split book workflow in two&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1515&quot;&gt;examples: various cleanups &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1514&quot;&gt;Examples: Dialog’s response signal handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1513&quot;&gt;examples: Clean up, modernize and simplify virtual methods example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1512&quot;&gt; gtk: Use glib enums instead of bools where it makes sense &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1511&quot;&gt;book: Extend main loop chapter with async section&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1510&quot;&gt;book: Rename action to correct name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1509&quot;&gt;examples: Only require GTK 4.10 for the examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1504&quot;&gt;book: Fix typo in memory management chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1501&quot;&gt;book: Run separate jobs for check and deploy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1499&quot;&gt;book: Check links with lychee&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1495&quot;&gt;gtk: Implement HasParamSpec for TemplateChild&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1492&quot;&gt;Regenerate with latest gir&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1486&quot;&gt;book: Add missing steps for installation in windows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1483&quot;&gt;gdk: Simplify RGBA builder code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1482&quot;&gt;gsk: Add builder for Stroke&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1476&quot;&gt;gdk: Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GdkCairoContextExt::set_source_{rgba =&amp;amp;gt; color}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1472&quot;&gt;book: Add missing snippet for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new_task&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1470&quot;&gt;book: Move to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::cell::OnceCell&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1468&quot;&gt;gdk: Make RGBA::new const and add with_* constructors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1463&quot;&gt;Add new Path APIs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1459&quot;&gt;book: Extend memory management chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1454&quot;&gt;Untangle docsrs attribute from features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1452&quot;&gt;Impl Write on text buffers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1450&quot;&gt;gdk: Add missing Clipboard::set&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1434&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;derived_properties&lt;/code&gt; macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1433&quot;&gt; Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::spawn_blocking&lt;/code&gt; instead of thread::spawn &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1431&quot;&gt;gtk: Add a GNOME 45 feature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1297&quot;&gt;Use workspace features for ffi types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1296&quot;&gt;Use cargo workspace features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1289&quot;&gt;Replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;once_cell&lt;/code&gt; usage with std::sync::OnceLock&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1288&quot;&gt;Replace usage of macro &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;proc_macro_error&lt;/code&gt; with explicit propagation of  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;syn::Result&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1279&quot;&gt;glib: Mark panicky &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoxedAnyObject&lt;/code&gt; methods as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;track_caller&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1271&quot;&gt;add support of flags registered as dynamic types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1256&quot;&gt;Fix concurrency issues&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1255&quot;&gt;Refactor macros to register dynamic types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1241&quot;&gt;macros: generate GlibPtrDefault when deriving Boxed and SharedBoxed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1239&quot;&gt;gio: return NULL from spawn_blocking’s underlying gtask&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1238&quot;&gt;gio: Don’t wrongly cast DataInputStream byte arrays to a const pointer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1233&quot;&gt;Simplify pointer casts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1230&quot;&gt;glib: Remove deprecated paramspec constructors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1226&quot;&gt;Windows-specific API bindings that use Windows types were migrated from the unmaintained &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;winapi&lt;/code&gt; crate to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window-sys&lt;/code&gt;. This might need changes for users of these APIs and require them to migrate too.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1225&quot;&gt;Matchinfo lifetime&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1221&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cargo.lock&lt;/code&gt; to git tracking&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1220&quot;&gt;Add support of enums as dynamic types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1218&quot;&gt;gio: fix UnixSocketAddress constructor with a path&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1216&quot;&gt;glib: Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MainContext::channel()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1210&quot;&gt;glib: Allow variable expansion in format strings passed to bool_error &amp;amp; result_from_gboolean&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1208&quot;&gt;gio: Use weak reference to ActionMap when adding action entries&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1207&quot;&gt;Add _full and _local_full methods for idle and timeout callbacks that take priority&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1204&quot;&gt;Implement ext trait on IsA&amp;lt;T&amp;gt;, don’t generate overridden methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1203&quot;&gt;glib: Implement object class methods via a trait&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1201&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::spawn_future()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::spawn_future_local()&lt;/code&gt; convenience functions that directly spawn a future on the current thread default’s main context, without first having to retrieve it&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1193&quot;&gt;glib-macros: Remove unused imports from Properties doc test&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1192&quot;&gt;glib-macros: Mark property getters as #[must_use]&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1188&quot;&gt;fix glyph string analysis methods that don’t need &amp;amp;mut&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1182&quot;&gt;cairo: Make it docs.rs friendly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1181&quot;&gt;glib/GStringPtr: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;as_str()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Deref&amp;amp;lt;Target=&amp;amp;str&amp;amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1179&quot;&gt;CI: add a cargo deny job&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1177&quot;&gt;glib: Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[doc(hidden)]&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;once_cell&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bitflags&lt;/code&gt; re-export&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1171&quot;&gt;Use associated type in memory managers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1169&quot;&gt;add support of module types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1163&quot;&gt;image: Switch to latest fedora stable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1159&quot;&gt;gio: Fix panics in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PollableInputStream&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PollableOutputStream&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1156&quot;&gt;Added bindings for Gio.DBusObjectManager, Gio.DBusObjectManagerClientFlags&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1154&quot;&gt;Disentangle docsrs and features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1153&quot;&gt;Add typos workflow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1151&quot;&gt;gio: Set missing annotations for new FileInfo apis&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1149&quot;&gt;Add support for ext_trait in properties macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1146&quot;&gt;glib: Bind &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_unichar&lt;/code&gt; APIs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1145&quot;&gt;Add object_subclass example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1143&quot;&gt;Fix docs of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::derived_properties&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1140&quot;&gt;Fix panic in gio InputStream&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1138&quot;&gt;Don’t generate unit tuple in clone macro as default-return value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1095&quot;&gt;glib: prelude cleanup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/947&quot;&gt;glib: Implement Regex&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1542&quot;&gt;codegen/sys: Don’t expect the crates are renamed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1539&quot;&gt;CI/tests: Remove gtk3 related bits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1537&quot;&gt;Replace once_cell crate with std::sync::OnceLock in a generated code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1532&quot;&gt;Replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;once_cell&lt;/code&gt; crate with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::sync::OnceLock&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1531&quot;&gt;parser: Don’t error out for forever scope&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1530&quot;&gt;record: Differentiate disguised vs pointer types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1528&quot;&gt;Remove unnecessary casts of function pointers through usize&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1520&quot;&gt;codegen: Generate a doc alias for aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1512&quot;&gt;parser: Don’t require name/type for record types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1507&quot;&gt;Fix various typos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1505&quot;&gt;Make auto builders/traits/functions &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pub(crate)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1502&quot;&gt;config/codegen: Stop generating useless Display impls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1499&quot;&gt;Generated sys tests: Better command error handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1490&quot;&gt;Fix inserting all-features in Cargo.toml for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1489&quot;&gt;Add trait_name to API docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1487&quot;&gt;Fix docsrs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1485&quot;&gt;codegen: Replace ControlFlow with Propagation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1143&quot;&gt;codegen: generate doc_alias for static_type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AaronErhardt&quot;&gt;@AaronErhardt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andy128k&quot;&gt;@andy128k&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/awused&quot;&gt;@awused&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bvinc&quot;&gt;@bvinc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cgwalters&quot;&gt;@cgwalters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Claudio-code&quot;&gt;@Claudio-code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/davidmhewitt&quot;&gt;@davidmhewitt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/erwinschrodinger1&quot;&gt;@erwinschrodinger1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/evaporei&quot;&gt;@evaporei&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fbrouille&quot;&gt;@fbrouille&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felinira&quot;&gt;@felinira&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JakeStanger&quot;&gt;@JakeStanger&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jf2048&quot;&gt;@jf2048&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jobale&quot;&gt;@jobale&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nicopap&quot;&gt;@nicopap&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ocrete&quot;&gt;@ocrete&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pbor&quot;&gt;@pbor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pentamassiv&quot;&gt;@pentamassiv&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pieterdd&quot;&gt;@pieterdd&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ranfdev&quot;&gt;@ranfdev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RealKC&quot;&gt;@RealKC&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/redvimo&quot;&gt;@redvimo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SeaDve&quot;&gt;@SeaDve&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vhakulinen&quot;&gt;@vhakulinen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wroyca&quot;&gt;@wroyca&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zachs18&quot;&gt;@zachs18&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ZanderBrown&quot;&gt;@ZanderBrown&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zecakeh&quot;&gt;@zecakeh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 01 Jun 2024 13:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2024/06/01/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2024/06/01/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>New Release</title>
        <description>&lt;p&gt;It is time again for a new gtk-rs release!&lt;/p&gt;

&lt;p&gt;If you have been watching our crates on crates.io closely or if you have attended GUADEC you may already have noticed that we have released new versions of the gtk-rs crates.&lt;/p&gt;

&lt;p&gt;The new versions contain less breaking changes than some of our previous releases, so updating will be easier. The release however does include some nice improvements that can simplify your application as well as support the latest API additions of the underlying libraries.&lt;/p&gt;

&lt;p&gt;As anticipated in the previous release, this will likely be the last release of the gtk3-rs bindings and we recommend to everyone to upgrade to GTK4. If you require gtk3-rs to keep up with new versions of gtk-rs-core please consider volunteering to help with maintenance of the project.&lt;/p&gt;

&lt;h2 id=&quot;increase-of-the-minimum-supported-rust-version-msrv&quot;&gt;Increase of the minimum supported Rust version (MSRV)&lt;/h2&gt;

&lt;p&gt;With this release, Rust 1.70 is the minimum version required to compile and use the bindings.&lt;/p&gt;

&lt;h2 id=&quot;supported-versions&quot;&gt;Supported versions&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;glib/gio: from version 2.56 to 2.78&lt;/li&gt;
  &lt;li&gt;cairo: 1.16&lt;/li&gt;
  &lt;li&gt;pango/pangocairo: from version 1.40 to the to be released 1.52&lt;/li&gt;
  &lt;li&gt;gdk-pixbuf: from version 2.36 to 2.42&lt;/li&gt;
  &lt;li&gt;graphene: from version 1.10 to 1.12&lt;/li&gt;
  &lt;li&gt;gtk4: from 4.0 to 4.12 with minimal support of the upcoming 4.14 release&lt;/li&gt;
  &lt;li&gt;gtk3: from 3.22&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;documentation-improvements&quot;&gt;Documentation improvements&lt;/h2&gt;

&lt;p&gt;In this release, we also started a slow but steady path towards automatically generating subclassing traits. The first step is to parse the corresponding virtual methods data from the GIR file and embed the documentation for these functions to their corresponding Rust functions like we do for normal functions/methods/types.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/latest/docs/gtk4/subclass/widget/trait.WidgetImpl.html#method.keynav_failed&quot;&gt;https://gtk-rs.org/gtk4-rs/stable/latest/docs/gtk4/subclass/widget/trait.WidgetImpl.html#method.keynav_failed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also now embed the documentation for Class methods. See &lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/latest/docs/gtk4/subclass/widget/trait.WidgetClassExt.html#method.install_property_action&quot;&gt;https://gtk-rs.org/gtk4-rs/stable/latest/docs/gtk4/subclass/widget/trait.WidgetClassExt.html#method.install_property_action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last but not least, libraries depending on gtk-rs libraries can now have their documentation &lt;a href=&quot;https://docs.rs/glib/latest/glib/&quot;&gt;published in docs.rs&lt;/a&gt; by adding the following to your Cargo.toml.&lt;/p&gt;

&lt;div class=&quot;language-toml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;[package.metadata.docs.rs]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;all-features&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;rustc-args&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;--cfg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;docsrs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;rustdoc-args&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;--cfg&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;docsrs&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;features&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;switch-to-bitflags-20&quot;&gt;Switch to bitflags 2.0&lt;/h2&gt;

&lt;p&gt;With this release we switched to version 2 of the  &lt;a href=&quot;https://crates.io/crates/bitflags&quot;&gt;bitflags&lt;/a&gt; crate. While we regularly update our dependencies to the latest version, this is of particular note since flag types are often used in glib and GTK API.&lt;/p&gt;

&lt;p&gt;We also re-export &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bitflags&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;once_cell&lt;/code&gt; from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib&lt;/code&gt; crate so you can use them without directly depending on them.&lt;/p&gt;

&lt;h2 id=&quot;gtk-rs-core&quot;&gt;gtk-rs-core&lt;/h2&gt;

&lt;h3 id=&quot;new-glibderived_properties-macro&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::derived_properties&lt;/code&gt; macro&lt;/h3&gt;

&lt;p&gt;With the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Properties&lt;/code&gt; derive macro added in the last release, you still had to write these blanket functions manually&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;properties&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;static&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ParamSpec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;derived_properties&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;set_property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;usize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ParamSpec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.derived_set_property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;usize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ParamSpec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Value&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.derived_property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now you can replace that code with&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;#[glib::derived_properties]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;replacement-of-glibcontinue--glibinhibit&quot;&gt;Replacement of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Continue&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Inhibit&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;These two types were a bit difficult to understand, as you had to pass a boolean &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Continue(true)&lt;/code&gt; /  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Inhibit(false)&lt;/code&gt;. We replaced them with new enums&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Continue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ControlFlow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Continue&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Continue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ControlFlow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Break&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Inhibit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Propagation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Stop&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Inhibit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Propagation&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Proceed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Making the meaning of each value clearer to the developer. This should be the most annoying change you need to do during the update to this release.&lt;/p&gt;

&lt;h3 id=&quot;typed-constructors&quot;&gt;Typed constructors&lt;/h3&gt;

&lt;p&gt;In the past we had a bunch of constructors taking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Type&lt;/code&gt; as a parameter instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;T: impl StaticType&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;T: impl IsA&amp;lt;O&amp;gt;&lt;/code&gt;. For this release, we cleaned up several of those constructors.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ListStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;SomeObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;static_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// before&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ListStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SomeObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// after&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ListStore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;with_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;SomeObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;static_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// is available for specific use cases&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Changed constructors:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::SignalGroup&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::FlagsClass&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::EnumClass&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;new-glibvaluedelegate-macro&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ValueDelegate&lt;/code&gt; macro&lt;/h3&gt;

&lt;p&gt;Let’s say you want to create a wrapper around some type, but you want to retain &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToValue&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromValue&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HasParamSpec&lt;/code&gt; implementations, which are especially necessary when you want to use a type as a property. This is where the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ValueDelegate&lt;/code&gt; macro comes in. Instead of having to manually implement the following:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Uid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StaticType&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Uid&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;static_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;StaticType&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;static_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ToValue&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Uid&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;to_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Value&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ToValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;to_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;value_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ToValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;value_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;From&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Uid&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Value&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Uid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uid&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;unsafe&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&apos;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FromValue&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&apos;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Uid&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Checker&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FromValue&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&apos;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Checker&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;unsafe&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;from_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&apos;a&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;Uid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FromValue&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;&apos;a&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;from_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HasParamSpec&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Uid&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParamSpec&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HasParamSpec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ParamSpec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SetValue&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BuilderFn&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HasParamSpec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BuilderFn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;param_spec_builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BuilderFn&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HasParamSpec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;param_spec_builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;you can simply use the macro as follows:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;#[derive(glib::ValueDelegate)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Uid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;For more complex cases, see the &lt;a href=&quot;https://docs.rs/glib/latest/glib/derive.ValueDelegate.html&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You could also achieve the same by using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Boxed&lt;/code&gt;, but &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ValueDelegate&lt;/code&gt; provides a thinner wrapper as it only calls to the inner implementation instead of using &lt;a href=&quot;https://docs.gtk.org/gobject/boxed.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GBoxed&lt;/code&gt;&lt;/a&gt;. Additionally, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ValueDelegate&lt;/code&gt; propagates the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GType&lt;/code&gt; to the wrapper instead of creating a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GType&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;gtk4-rs&quot;&gt;gtk4-rs&lt;/h2&gt;

&lt;p&gt;The bindings now support GTK 4.12 with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v4_12&lt;/code&gt; feature flag. Other than that they didn’t see many user facing changes. The development mainly focused on various cleanups and bug fixes.&lt;/p&gt;

&lt;h3 id=&quot;blueprint-support-in-gtkcompositetemplate&quot;&gt;Blueprint support in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::CompositeTemplate&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;You can now use &lt;a href=&quot;https://jwestman.pages.gitlab.gnome.org/blueprint-compiler/&quot;&gt;blueprint&lt;/a&gt; with both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;string&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file&lt;/code&gt; attributes of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::CompositeTemplate&lt;/code&gt; macro. This requires having the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;blueprint-compiler&lt;/code&gt; binary installed.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;prelude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;subclass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;prelude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;mod&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;imp&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;nd&quot;&gt;#[derive(Debug,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;Default,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;gtk::CompositeTemplate)]&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;#[template(string&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;
    template MyWidget : Widget {
        Label label {
            label: &apos;foobar&apos;;
        }

        Label my_label2 {
            label: &apos;foobaz&apos;;
        }
    }
    &quot;&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;)]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nd&quot;&gt;#[template_child]&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TemplateChild&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nd&quot;&gt;#[template_child(id&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;my_label2&quot;&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;)]&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;label2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TemplateChild&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;nd&quot;&gt;#[glib::object_subclass]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectSubclass&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;static&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;MyWidget&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Widget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;class_init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;klass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Class&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;klass&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.bind_template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;instance_init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;subclass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;InitializingObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.init_template&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;dispose&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.first_child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;child&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unparent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;WidgetImpl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;wrapper!&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MyWidget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ObjectSubclass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;imp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Widget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;stop-using-deprecated-stylecontext-apis&quot;&gt;Stop using deprecated StyleContext APIs&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::StyleContext::add_provider_for_display&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::StyleContext::remove_provider_for_display&lt;/code&gt; functions were never supposed to be part of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::StyleContext&lt;/code&gt; type. Since that type was deprecated upstream in GTK 4.10, the developers now annoyingly had to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[allow(deprecated)]&lt;/code&gt;, even though those two functions were not deprecated at all.&lt;/p&gt;

&lt;p&gt;We have added &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::style_context_add_provider_for_display&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::style_context_remove_provider_for_display&lt;/code&gt; as a replacement for them.&lt;/p&gt;

&lt;h2 id=&quot;detailed-changes&quot;&gt;Detailed Changes&lt;/h2&gt;

&lt;p&gt;Here is the full list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/969&quot;&gt;glib-macros: Improve properties macro docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/973&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ValueArray&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt; traits manually because of the c…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/989&quot;&gt;glib: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;strv::join()&lt;/code&gt; method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/999&quot;&gt;glib-macros: Derive HasParamSpec for SharedBoxed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/996&quot;&gt;glib-macros: allow properties macro generated functions to be unused&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/995&quot;&gt;properties: impl HasParamSpec for Vec&amp;lt;String&amp;gt; and StrV&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/994&quot;&gt;glib-macros: slightly improve Properties macro docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/986&quot;&gt;glib-macros: Improve conversion errors for setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/979&quot;&gt;graphene: Implement Default trait for vectors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/977&quot;&gt;glib: Add various &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoStrV&lt;/code&gt; impls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/974&quot;&gt;glib: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpecEnumBuilder::default_value()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1005&quot;&gt;glib: object: improve downcasting docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1007&quot;&gt;glib: More strv fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1017&quot;&gt;glib: implement WatchedObject for BorrowedObject&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1015&quot;&gt;gio: Don’t pass &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g\_list\_store\_find\_with\_equal\_func\_full()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1003&quot;&gt;glib: add missing ObjectImpl vfuncs overrides&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1006&quot;&gt;glib: Implement PartialEq for WeakRef&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/985&quot;&gt;glib: Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WeakRef&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SendWeakRef&lt;/code&gt; useable with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Properties&lt;/code&gt; derive macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1026&quot;&gt;glib: strv: when calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_strv&lt;/code&gt; ffi method, use our &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;as_ptr&lt;/code&gt; implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1025&quot;&gt;glib: strv: when calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_strv&lt;/code&gt; ffi method, use our &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;as_ptr&lt;/code&gt; implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1027&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;connect_notify*&lt;/code&gt; methods to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignalGroup&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1035&quot;&gt;gio: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FileEnumerator::into_stream&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1036&quot;&gt;cairo: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Surface::create_similar_image&lt;/code&gt; should return an ImageSurface&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1037&quot;&gt;glib: Don’t include the NULL terminator in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoStrV&lt;/code&gt; slice&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1032&quot;&gt;gio: Make ListStore::new() take a type parameter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1039&quot;&gt;gio: Added subclassing support for gio::SocketControlMessage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1038&quot;&gt;Fixed unit tests under macOS and possibly other *nix flavors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1034&quot;&gt;glib: Only optimize &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoGStr&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;String&lt;/code&gt; when capacity allows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1031&quot;&gt;pangocairo-sys: fix package.description in Cargo.toml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1023&quot;&gt;glib-macros: Add nullable attribute on properties macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1022&quot;&gt;glib-macros: impl HasParamSpec on glib::Variant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1016&quot;&gt;glib: Optimize &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoGStr&lt;/code&gt; impl for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;String&lt;/code&gt; by simply appending a NUL-byte&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1000&quot;&gt;glib-macros: Add ValueDelegate macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1044&quot;&gt;glib: impl StaticType, FromValue, ToValue, HasParamSpec for Box&amp;lt;str&amp;gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1049&quot;&gt;glib: implement From&amp;lt;GStringPtr&amp;gt; for GString&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1024&quot;&gt;glib: Switch Priority to associated constants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1043&quot;&gt;glib-macros: Value delegate improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1042&quot;&gt;glib: Implement bindings for g_win32 functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1055&quot;&gt;glib-macros: generate “From&amp;lt;Ident&amp;gt; for Value” on ValueDelegate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1057&quot;&gt;glib: Fix building for architectures without 64-bit atomics&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1056&quot;&gt;glib-macros: Don’t assume edition=2021&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1065&quot;&gt;glib-macros: enable default features of syn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1068&quot;&gt;glib-macros: Specify quoted types explicitly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1062&quot;&gt;glib-macros: add docs on supported #[property] attributes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1071&quot;&gt;glib: Allow using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Path&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PathBuf&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;s&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1074&quot;&gt;glib-macros: Import ParamSpecBuilderExt inside the scope of DerivedObjectProperties::derived_properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1076&quot;&gt;glib: Fix inverted boolean conditions when deciding whether to reserve new space&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1077&quot;&gt;glib-macros: Disambiguate TryFrom&amp;lt;usize&amp;gt;::Error for DerivedPropertiesEnum&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1079&quot;&gt;glib-macros: Strip raw identifier prefix from struct members for the Properties macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1086&quot;&gt;Split new/with_type in a few more places&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1092&quot;&gt;Fix required features not shown in docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1096&quot;&gt;Update syn: v2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1083&quot;&gt;glib: Enable various smallvec features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1081&quot;&gt;glib-macros: Strip out r# prefix from property names inside the GObject&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1115&quot;&gt;glib: Do not use ptr::offset/offset_from for private/impl offset&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1111&quot;&gt;glib: Fix heap buffer overflow due to operator precedence&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1114&quot;&gt;glib: strv: Implement From for constant GStr slices&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1089&quot;&gt;glib-macros: properties: Allow to omit set for construct_only properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1087&quot;&gt;pango: Lower pkg-config version requirement for v1_52&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1113&quot;&gt;glib: Add a std_once_cell feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1125&quot;&gt;Update to bitflags2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1066&quot;&gt;glib: Replace Continue with ControlFlow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1126&quot;&gt;glib: Remove Inhibit and replace it with ControlFlow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1129&quot;&gt;pango: Mark manual impls as such&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1128&quot;&gt;glib: control flow: Fix logic in From implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1122&quot;&gt;glib-macros: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromGlibPtrBorrow&lt;/code&gt; on boxed and shared-boxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1131&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--generate-link-to-definition&lt;/code&gt; option when generating documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1133&quot;&gt;gio: Add retain method to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ListStore&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1136&quot;&gt;glib: Add support for NonZeroT types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1137&quot;&gt;glib-macros: Remove unused dependency&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1127&quot;&gt;glib-macros: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;use_derived_properties&lt;/code&gt; macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1138&quot;&gt;Don’t generate unit tuple in clone macro as default-return value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1143&quot;&gt;glib-macros: Fix docs of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::derived_properties&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1144&quot;&gt;glib: Re-introduce an event propagation specific type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1151&quot;&gt;gio: Set missing annotations for new FileInfo apis&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1153&quot;&gt;Add typos workflow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1135&quot;&gt;glib: Fixed missing 512 flag, renamed 256 to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;USER_0&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1140&quot;&gt;gio: Fix panic in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;InputStream&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1154&quot;&gt;Disentangle docsrs and features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/1159&quot;&gt;gio: Fix panics if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PollableInputStream&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PollableOutputStream&lt;/code&gt; ret…&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs&quot;&gt;gtk3-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/810&quot;&gt;gdk: Implement Copy for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Key&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/813&quot;&gt;examples: Fix menu bar example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/817&quot;&gt;examples: Update per Priority changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/814&quot;&gt;Prepare for gir collections&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/816&quot;&gt;Update to bitflags 2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/818&quot;&gt;gtk3-macros: enable default features of syn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/821&quot;&gt;Shorten and seal subclass traits, ExtManual traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/827&quot;&gt;Adapt to inhibit removal&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/828&quot;&gt;Upgrade syn to 2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/829&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--generate-link-to-definition&lt;/code&gt; option when building on docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/830&quot;&gt;Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;anyhow&lt;/code&gt; dependency&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/836&quot;&gt;Adapt to addition of glib::Propagation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/838&quot;&gt;More fixes for docsrs attribute&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1298&quot;&gt;gtk4: Use correct length for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StrV&lt;/code&gt; when passing to C&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1312&quot;&gt;gtk4: Add Accessible subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1417&quot;&gt;gtk4: Add SectionModel subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1321&quot;&gt;gtk4: Update for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoStrV&lt;/code&gt; not including the NULL terminator in the …&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1361&quot;&gt;gtk4: Implement convenience traits for StringObject&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1362&quot;&gt;gtk4: Move provider related functions outside of StyleContext&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1372&quot;&gt;gtk4: Remove manual overrides for GestureClick&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1452&quot;&gt;gtk4: Impl Write on text buffers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1431&quot;&gt;gtk4: Add a GNOME 45 feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1371&quot;&gt;gtk4: allow subclassing WindowGroup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1453&quot;&gt;gtk4-macros: Bump quick-xml to 0.30&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1341&quot;&gt;gtk4-macros: enable default features of syn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1348&quot;&gt;gtk4-macros: Support blueprint files in CompositeTemplate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1315&quot;&gt;gdk4: rgba: Add TRANSPARENT const&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1426&quot;&gt;gdk4: bind GLTextureBuilder::build&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1427&quot;&gt;gdk4: More GLTextureBuilder tweaks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1428&quot;&gt;gdk4: Add ‘gl’ feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1450&quot;&gt;gdk4: Add missing Clipboard::set&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1338&quot;&gt;README: Document gnome_44 feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1320&quot;&gt;Prepare for gir collections&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1391&quot;&gt;Generate trait signature once for manual code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1392&quot;&gt;Fix required features not shown in docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1413&quot;&gt;Update to bitflags2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1414&quot;&gt;Adapt to glib::Inhibit removal&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1463&quot;&gt;Add new Path APIs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1454&quot;&gt;docs: Untangle docsrs attribute from features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1423&quot;&gt;docs: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--generate-link-to-definition&lt;/code&gt; option when building on docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1326&quot;&gt;examples: Update ListStore::new&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1385&quot;&gt;examples: update for 4.10 deprecations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1420&quot;&gt;examples: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Application::builder&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1433&quot;&gt;book: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::spawn_blocking&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;thread::spawn&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1434&quot;&gt;book: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;derived_properties&lt;/code&gt; macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1451&quot;&gt;book: Update for 0.7.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1465&quot;&gt;book: Update instructions to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v4\_12&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1470&quot;&gt;book: Move to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::cell::OnceCell&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1459&quot;&gt;book: Extend memory management chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1472&quot;&gt;book: Add missing snippet for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new\_task&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1331&quot;&gt;book: Add a note to the book&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1334&quot;&gt;book: Fix typos and deprecations in the book for CSS chapter (14th).&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1336&quot;&gt;book: Change xml code block to diff in “Adapt Todo App”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1333&quot;&gt;book: Remove mention of “clear_button”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1339&quot;&gt;book: Add a note about finishing touches to “Set CSS Name and Use Exported Colors” section of 14th (CSS) chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1343&quot;&gt;book: Replace usage of deprecated gtk::Dialog with adw::MessageDialog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1345&quot;&gt;book: Add lock file for listings and update dirs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1363&quot;&gt;book: Move to property macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1366&quot;&gt;book: Use generated wrapper method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1370&quot;&gt;book: Bind Settings to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;active&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;state&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1396&quot;&gt;book: Use property docs of of gtk-rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1359&quot;&gt;book: Use glib Priority enum&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1401&quot;&gt;book: Use bind helper functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1404&quot;&gt;book: Update librsvg in installation_windows.md&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1406&quot;&gt;book: Fix button sensitivity action&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1419&quot;&gt;book: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iter&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::ListModel&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1379&quot;&gt;Reworked the book/tutorial&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1427&quot;&gt;Fixes an overflow bug that may occasionally panic if gir is built in debug&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1451&quot;&gt;codegen: Avoid useless borrows for properties setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1452&quot;&gt;Update to bitflags 2.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1386&quot;&gt;Add external docs url config option&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1455&quot;&gt;Replace dox feature with docsrs attribute&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1457&quot;&gt;Make features independent from docsrs attribute&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1458&quot;&gt;Remove docsrs attr for conditional compilation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1459&quot;&gt;codegen: Drop useless any on a single feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1460&quot;&gt;parser: ignore &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;boxed&lt;/code&gt; elements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1461&quot;&gt;codegen: only generate trait signatures once&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1462&quot;&gt;codegen: generate attributes on trait fns&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1463&quot;&gt;Implement basic virtual methods support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1465&quot;&gt;analysis: Don’t fill imports from virtual methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1466&quot;&gt;Fix docs for docsrs attribute&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1468&quot;&gt;parser: ignore source-position in virtual methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1471&quot;&gt;analysis: Avoid overflow when determining whether to emit a parameter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1467&quot;&gt;codegen: seal Ext traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1453&quot;&gt;generate cfg conditions for aliases, enums, interfaces and disguised&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1476&quot;&gt;codegen: Only use any if scope constraints &amp;gt; 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1478&quot;&gt;codegen: build tests on all unix platforms&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1469&quot;&gt;analysis: Prefer prelude/exported crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1474&quot;&gt;Update to bitflags 2.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1481&quot;&gt;codegen: Switch from Inhibit to ControlFlow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1485&quot;&gt;codegen: Replace ControlFlow with Propagation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1489&quot;&gt;Add trait_name to API docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1490&quot;&gt;Fix inserting all-features in Cargo.toml for docs.rs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/A6GibKm&quot;&gt;@A6GibKm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AaronErhardt&quot;&gt;@AaronErhardt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andy128k&quot;&gt;@andy128k&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arcnmx&quot;&gt;@arcnmx&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Benjins-automation&quot;&gt;@Benjins-automation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/BrainBlasted&quot;&gt;@BrainBlasted&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/decathorpe&quot;&gt;@decathorpe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dependabot[bot]&quot;&gt;@dependabot[bot]&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/elmarco&quot;&gt;@elmarco&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/epilys&quot;&gt;@epilys&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fbrouille&quot;&gt;@fbrouille&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felinira&quot;&gt;@felinira&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FineFindus&quot;&gt;@FineFindus&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gdesmott&quot;&gt;@gdesmott&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gianzellweger&quot;&gt;@gianzellweger&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/happylinks&quot;&gt;@happylinks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/heftig&quot;&gt;@heftig&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jf2048&quot;&gt;@jf2048&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/johan-bjareholt&quot;&gt;@johan-bjareholt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jplatte&quot;&gt;@jplatte&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kawadakk&quot;&gt;@kawadakk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Kijewski&quot;&gt;@Kijewski&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lupinx2&quot;&gt;@lupinx2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mashomee&quot;&gt;@mashomee&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MathieuDuponchelle&quot;&gt;@MathieuDuponchelle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mbiggio&quot;&gt;@mbiggio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/melix99&quot;&gt;@melix99&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nicopap&quot;&gt;@nicopap&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pbor&quot;&gt;@pbor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pentamassiv&quot;&gt;@pentamassiv&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ranfdev&quot;&gt;@ranfdev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RealKC&quot;&gt;@RealKC&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rmnscnce&quot;&gt;@rmnscnce&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/saethlin&quot;&gt;@saethlin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Schmiddiii&quot;&gt;@Schmiddiii&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SeaDve&quot;&gt;@SeaDve&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tintou&quot;&gt;@tintou&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/valpackett&quot;&gt;@valpackett&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wroyca&quot;&gt;@wroyca&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xanathar&quot;&gt;@xanathar&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/yuraiz&quot;&gt;@yuraiz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zekefast&quot;&gt;@zekefast&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 28 Aug 2023 20:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2023/08/28/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2023/08/28/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>New release</title>
        <description>&lt;p&gt;It’s now time for a new gtk-rs release!&lt;/p&gt;

&lt;p&gt;As you might’ve noticed, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk3-rs&lt;/code&gt; projects are getting less and less attention and we intend to deprecate them in one of the future releases. Therefore, we recommend to anyone who didn’t upgrade to GTK4 to do it now. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk3-rs&lt;/code&gt; will get further releases in the foreseeable future to keep up with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk-rs-core&lt;/code&gt;, but no development effort is going to be directed towards it. This is already the de-facto situation for more than a year. Additionally, the GTK3 versions of various &lt;a href=&quot;https://gitlab.gnome.org/World/Rust&quot;&gt;externally maintained&lt;/a&gt; bindings will most likely not get any further releases.&lt;/p&gt;

&lt;p&gt;In addition to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk-rs&lt;/code&gt;, various externally maintained bindings also had a new release. For &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gstreamer-rs&lt;/code&gt; you can find the CHANGELOG of the 0.20 release &lt;a href=&quot;https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/blob/main/gstreamer/CHANGELOG.md#0200-2023-02-10&quot;&gt;here&lt;/a&gt;. Most bindings &lt;a href=&quot;https://gitlab.gnome.org/World/Rust&quot;&gt;maintained as part of GNOME&lt;/a&gt; were also updated.&lt;/p&gt;

&lt;p&gt;On this note, time to go through the major changes of this release. Enjoy!&lt;/p&gt;

&lt;h2 id=&quot;increase-of-the-minimum-supported-rust-version-msrv&quot;&gt;Increase of the minimum supported Rust version (MSRV)&lt;/h2&gt;

&lt;p&gt;With this release, Rust 1.64 is the minimum version required to compile and use the bindings.&lt;/p&gt;

&lt;h2 id=&quot;new-properties-macro-to-make-using-properties-in-glibobject-subclasses-simpler&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[properties]&lt;/code&gt; macro to make using properties in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object&lt;/code&gt; subclasses simpler&lt;/h2&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Properties&lt;/code&gt; macro is now available! It can be used to define object properties straight from the implementation struct definition. The macro will:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;define all the necessary &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec&lt;/code&gt;s, with the required flags&lt;/li&gt;
  &lt;li&gt;generate, for each property, a default getter/setter on the wrapper type&lt;/li&gt;
  &lt;li&gt;generate, for each property, a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;notify_$property&lt;/code&gt; method on the wrapper type&lt;/li&gt;
  &lt;li&gt;generate the methods &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;derived_properties&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;derived_property&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;derived_set_property&lt;/code&gt;, which can be directly called inside your overrides for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectImpl&lt;/code&gt; methods &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;properties&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;property&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_property&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;quick-example&quot;&gt;Quick example&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#[derive(Properties)]
#[properties(wrapper_type = super::Author)]
pub struct Author {
    #[property(get, set)]
    name: RefCell&amp;lt;String&amp;gt;,
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is the result of months of work, and will greatly improve the gtk-rs ecosystem by reducing some of the most prevalent boilerplate and making the platform more welcoming.&lt;/p&gt;

&lt;p&gt;Be sure to check out the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/latest/docs/glib/derive.Properties.html&quot;&gt;documentation&lt;/a&gt; for more info.&lt;/p&gt;

&lt;h2 id=&quot;direct-conversions-to-glibvalue-and-glibvariant-via-from&quot;&gt;Direct conversions to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Variant&lt;/code&gt; via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;Previously conversions required using the custom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToValue&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToVariant&lt;/code&gt; traits, which is not very intuitive. Now it’s possible to directly use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&lt;/code&gt; trait, i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;123i32.to_value()&lt;/code&gt; could become &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;123i32.into()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In addition to improving usability this also avoids copies of the values in a few cases.&lt;/p&gt;

&lt;h2 id=&quot;gdk_pixbuf-subclassing-support&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk_pixbuf&lt;/code&gt; subclassing support&lt;/h2&gt;

&lt;p&gt;Support for subclassing various &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk_pixbuf&lt;/code&gt; types was added. This allows writing custom pixbuf loaders in Rust and hopefully opens the way for replacing the old C-based PNG/JPEG/GIF pixbuf loaders with Rust versions to improve image loading in all GTK/GNOME applications.&lt;/p&gt;

&lt;h2 id=&quot;new-glibcastnone-convenience-trait&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::CastNone&lt;/code&gt; convenience trait&lt;/h2&gt;

&lt;p&gt;In many cases casting failures of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&lt;/code&gt;al values should be treated as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt;. For this purpose a new convenience trait was introduced, which provides an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;and_downcast()&lt;/code&gt; method.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Option&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Widget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list_item&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.child&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Without using `CastNone`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;label&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.downcast&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Using `CastNone` we can avoid the first `unwrap()` call&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;label&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.and_downcast&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;new-glibfunction_name-macro&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::function_name!&lt;/code&gt; macro&lt;/h2&gt;

&lt;p&gt;While a huge hack, until Rust supports this directly, this macro will allow to get the name of the current function as a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&apos;static str&lt;/code&gt;. Or to be more exact, the whole path to the current function.&lt;/p&gt;

&lt;p&gt;This is now used in the GLib structured logging API to provide the function name (in addition to the file name, line number and other metadata) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::BoolError&lt;/code&gt; to provide better location information.&lt;/p&gt;

&lt;h2 id=&quot;glibgstr-gliblist-glibptrslice-glibslice-glibstrv-and-related-native-glib-types&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GStr&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::List&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::PtrSlice&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Slice&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::StrV&lt;/code&gt; and related native GLib types&lt;/h2&gt;

&lt;p&gt;New API was added to all the aforementioned types to make dealing with them more natural in Rust. Using them instead of the native Rust types, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Vec&lt;/code&gt;, allows for fewer copies when passing the FFI boundary.&lt;/p&gt;

&lt;p&gt;Various bindings were also switched to these types for the same reason, and it is planned for the next release(s) to move even more API to it.&lt;/p&gt;

&lt;p&gt;In addition two new traits were introduced for dealing with GLib strings and string arrays more efficiently: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoGStr&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoStrV&lt;/code&gt;. Both allow passing a plain &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;str&lt;/code&gt; or an already &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NUL&lt;/code&gt;-terminated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;GStr&lt;/code&gt;, or a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Vec&amp;lt;String&amp;gt;&lt;/code&gt; or an already &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NUL&lt;/code&gt;-terminated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::StrV&lt;/code&gt; to functions and internally the function would either do a copy or directly pass the value to the C function. Up to a certain size the copy would by done on the stack, afterwards a temporary heap copy is made. Compared to the before, when temporary heap copies were made unconditionally, this allows for a lot fewer temporary heap allocations.&lt;/p&gt;

&lt;p&gt;And lastly, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GString&lt;/code&gt; is now storing strings up to a certain size inline without requiring a heap allocation. New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GString&lt;/code&gt;s can be created via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gformat!&lt;/code&gt; macro similar to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;format!&lt;/code&gt; macro from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;various-code-generation-improvements&quot;&gt;Various code generation improvements&lt;/h2&gt;

&lt;p&gt;All over the bindings, various small code generation improvements were applied which reduced the size of the generated code and/or improved the performance.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Various trivial functions were explicitly marked as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[inline]&lt;/code&gt; to give the compiler yet another hint to actually inline them, and improve inlining across crate boundaries, which then causes the bindings to be completely optimized away in most cases.&lt;/li&gt;
  &lt;li&gt;In many places, where it made sense, assertions were converted to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;debug_assert!&lt;/code&gt;s to reduce the number of places where stack unwinding could happen in release builds.&lt;/li&gt;
  &lt;li&gt;The representation of various types was improved, e.g. by removing unnecessary &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&lt;/code&gt; wrapping around values or replacing unneeded references with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PhantomData&lt;/code&gt; with the same lifetime.&lt;/li&gt;
  &lt;li&gt;Memory initialized by C functions was converted from using zero-initialization to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MaybeUninit&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;The number of redundant checks was reduced and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe&lt;/code&gt; variants of functions that skip the checks were added.&lt;/li&gt;
  &lt;li&gt;All object builder types were changed to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object::builder()&lt;/code&gt;, which reduces stack usage dramatically in addition to requiring fewer value copies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;new-glibobject-constructors&quot;&gt;New &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object&lt;/code&gt; constructors&lt;/h2&gt;

&lt;p&gt;The old &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new()&lt;/code&gt; constructor that took a slice of property name / value pairs was removed. Instead, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new()&lt;/code&gt; takes no parameters and creates a new object with default property values.&lt;/p&gt;

&lt;p&gt;For creating a new object with non-default property values, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::builder()&lt;/code&gt;. It provides a much nicer API and also allows for better code generation and fewer value copies.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// before&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;123i32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some string&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)]);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// after&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;123i32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;some string&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;gioapplicationrun-returns-an-exitcode&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::Application::run()&lt;/code&gt; returns an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ExitCode&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;Instead of returning a plain &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;i32&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::Application::run()&lt;/code&gt; now returns an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ExitCode&lt;/code&gt; type. This can be directly returned from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;main()&lt;/code&gt; function as it implements the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Termination&lt;/code&gt; trait, making it much easier to correctly propagate application exit codes.&lt;/p&gt;

&lt;h2 id=&quot;gtk4-410-api-additions&quot;&gt;GTK4 4.10 API additions&lt;/h2&gt;

&lt;p&gt;The GTK4 bindings were updated to include all the new APIs introduced by the upcoming GTK 4.10 release. These new APIs are available via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v4_10&lt;/code&gt; feature flag. Note that they are &lt;strong&gt;not stable&lt;/strong&gt; and are subject to change if the underlying C API happens to change before the 4.10.0 release.&lt;/p&gt;

&lt;p&gt;The minimum supported GTK version stays at 4.0.0.&lt;/p&gt;

&lt;h2 id=&quot;add-blueprint-ui-definition-support&quot;&gt;Add Blueprint UI definition support&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://jwestman.pages.gitlab.gnome.org/blueprint-compiler/&quot;&gt;Blueprint&lt;/a&gt; is a new markup language for defining GTK4 UIs. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[template]&lt;/code&gt; macro can now accept Blueprint UI definitions in addition to the old XML-based UI definitions. Doing so requires &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;blueprint-compiler&lt;/code&gt; to be available during compilation.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;#[derive(Debug,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;Default,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;gtk::CompositeTemplate)]&lt;/span&gt;
&lt;span class=&quot;nd&quot;&gt;#[template(string&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;
template MyWidget : Widget {
    Label label {
        label: &apos;foobar&apos;;
    }
    Label my_label2 {
        label: &apos;foobaz&apos;;
    }
}
&quot;&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyWidget&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;#[template_child]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TemplateChild&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;#[template_child(id&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;my_label2&quot;&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;)]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;label2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TemplateChild&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can also copy the example from &lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/releases/tag/0.6.0&quot;&gt;https://github.com/gtk-rs/gtk4-rs/releases/tag/0.6.0&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;better-mapping-of-c-ownership-transfer&quot;&gt;Better mapping of C ownership transfer&lt;/h2&gt;

&lt;p&gt;Previously various functions that took ownership of their parameters still used references in the bindings. This required an unnecessary copy to be made in the worst case, and in the best case made it less clear that ownership of the object is given away.&lt;/p&gt;

&lt;p&gt;In this release, functions are taking various arguments by value in more places.&lt;/p&gt;

&lt;h2 id=&quot;spawning-of-blocking-functions-on-the-glibmaincontext&quot;&gt;Spawning of blocking functions on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::MainContext&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::spawn_blocking()&lt;/code&gt; was added, which allows to spawn blocking functions on an internal threadpool and retrieve their results as a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Future&lt;/code&gt; from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::MainContext&lt;/code&gt;. This is useful for doing blocking / CPU intensive work in the background and when the results are available to handle them on the application’s main thread.&lt;/p&gt;

&lt;p&gt;As part of this work, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JoinHandle&lt;/code&gt;-style types were also added to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::MainContext::spawn()&lt;/code&gt; and related functions for spawning &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Future&lt;/code&gt;s on the main context, and to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ThreadPool&lt;/code&gt; for spawning functions on a custom thread pool and collecting their results.&lt;/p&gt;

&lt;h1 id=&quot;changes&quot;&gt;Changes&lt;/h1&gt;

&lt;p&gt;For those who are interested, here is the list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/800&quot;&gt;Fixed clippy lints and warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/803&quot;&gt;cairo: Fix rectangle getter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/802&quot;&gt;glib: Add helpers for setting property bindings flags&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/801&quot;&gt;glib: Add a getter for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectBuilder::type_&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/811&quot;&gt;glib: Add unsafe bindings to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_object_run_dispose()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/810&quot;&gt;gio: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_only&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_only&lt;/code&gt; helpers to BindingBuilder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/809&quot;&gt;gio: Add helpers for setting SettingBinding flags &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/808&quot;&gt;Correct outdated references to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subclass::simple&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/806&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectSubclass::obj()&lt;/code&gt; as a shorter alias for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;instance()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/817&quot;&gt;image: Rebuild once every week&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/816&quot;&gt;Fix new clippy lints&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/819&quot;&gt;fix CI for 1.65/1.66&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/823&quot;&gt;Fix new clippy lints&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/814&quot;&gt;Move from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.instance()&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.obj()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/820&quot;&gt;Move &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_cancellable_set_error_if_cancelled()&lt;/code&gt; to manual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/827&quot;&gt;pango: Auto generate Language&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/828&quot;&gt;pango: Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pango::Language::from_string()&lt;/code&gt; infallible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/826&quot;&gt;Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&amp;lt;T&amp;gt;&lt;/code&gt; for Value, Variant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/836&quot;&gt;glib: fix undefined behavior in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;types::register_type&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/835&quot;&gt;gdk-pixbuf: Add subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/832&quot;&gt;glib: Document the value guarantees for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectImpl::set_property()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;property()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/830&quot;&gt;glib: Add a doc string for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;as_ptr&lt;/code&gt; generated impls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/840&quot;&gt;Fix ABI tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/841&quot;&gt;cairo: fix some misc warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/822&quot;&gt;gio: socket/stream extras&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/844&quot;&gt;cairo: Update to freetype 0.32&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/843&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CastNone&lt;/code&gt; trait&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/846&quot;&gt;pango: Backport Language changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/848&quot;&gt;gio: Make GioFuture handle infaliable futures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/849&quot;&gt;gio: Add a GioInfaliableFuture&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/850&quot;&gt;Add a changelog file&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/853&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoGlibPtr&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/852&quot;&gt;glib: Use actual function name in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::BoolError&lt;/code&gt; and include function name/source file/line number in structured logs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/855&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStr::from_ptr_lossy()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GString::from_ptr_lossy()&lt;/code&gt; and implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&amp;lt;GStr&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&amp;lt;GString&amp;gt;&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cow&amp;lt;GStr&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/856&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStringBuilder&lt;/code&gt; as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoxedInline&lt;/code&gt; to avoid a useless additional heap allocation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/857&quot;&gt;glib: Minor &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStringBuilder&lt;/code&gt; improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/854&quot;&gt;Group imports and use prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/813&quot;&gt;glib: Bind more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_utf8&lt;/code&gt; APIs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/861&quot;&gt;gio: fix clippy lints for rust 1.64&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/818&quot;&gt;gio: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spawn_blocking()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/862&quot;&gt;Fix various new beta clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/863&quot;&gt;examples: spawn async gio task on the current thread context&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/865&quot;&gt;Various &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Stash&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;to_glib_none()&lt;/code&gt; related optimizations and bugfixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/600&quot;&gt;GString refactor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/870&quot;&gt;ActionEntry: take proper types instead of strings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/866&quot;&gt;Inline various trivial functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/874&quot;&gt;Suggest kebab-case for the error domain&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/876&quot;&gt;gio: simplify async initable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/875&quot;&gt;Improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::collections&lt;/code&gt; API and make it more versatile&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/877&quot;&gt;glib: Minor optimization for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;List&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SList&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Copy&lt;/code&gt; types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/879&quot;&gt;glib: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::wrapper!&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoxedInline&lt;/code&gt; with generic parameters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/878&quot;&gt;glib: Optimize various from/to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Vec&lt;/code&gt; FFI translation functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/881&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoGlibPtr&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;to_glib_full()&lt;/code&gt; in more places&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/883&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::from_type_unchecked()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/882&quot;&gt;glib: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoGStr&lt;/code&gt; trait in a couple of places&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/885&quot;&gt;Generate string constants as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&apos;static GStr&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[u8]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/886&quot;&gt;glib: Fix usage of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gformat!&lt;/code&gt; macro if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GString&lt;/code&gt; is not in scope&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/894&quot;&gt;build tools: fix documentation link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/900&quot;&gt;Enable introspection&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/896&quot;&gt;pango: use the new List api to simplify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reorder_items&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/895&quot;&gt;glib: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToGlibPtr&amp;lt;*mut _&amp;gt;&lt;/code&gt; for boxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/899&quot;&gt;settings: implement strv setter and getter manually&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/898&quot;&gt;gio: use StrV for the simple proxy resolver API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/907&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec::is()&lt;/code&gt; helper function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/905&quot;&gt;gdk-pixbuf: Trust return value nullability&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/906&quot;&gt;glib: Deprecate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectSubclass::instance()&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from_instance()&lt;/code&gt; in favour of the shorter versions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/904&quot;&gt;build-tools: Fix reporting of errors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/911&quot;&gt;Do not hard-code path separator&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/909&quot;&gt;glib: Implement enum paramspec builder variant that builds the default value automatically&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/908&quot;&gt;glib: Deprecate paramspec &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new()&lt;/code&gt; functions in favour of the builder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/910&quot;&gt;glib: Add new object constructor for constructing an object with default property values&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/901&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MainContext::spawn_from_within()&lt;/code&gt; for spawning non-&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; futures from another thread&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/914&quot;&gt;mark suboptimal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object&lt;/code&gt; constructors as deprecated&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/919&quot;&gt;glib: Implement more From traits for StrV&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/917&quot;&gt;build-tools: Allow passing multiple source dirs to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;compile_resources&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/920&quot;&gt;gio: use GStr for the manual extension point implenentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/921&quot;&gt;glib: Implement various traits on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStr&lt;/code&gt; manually&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/915&quot;&gt;gio: bind GFileDescriptorBased&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/924&quot;&gt;glib: Manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TimeZone::adjust_time()&lt;/code&gt; instead of ignoring it&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/880&quot;&gt;application: Return ExitCode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/494&quot;&gt;Properties macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/928&quot;&gt;gdk-pixbuf: check if either width/height is null before assignment in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;animation_get_size()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/931&quot;&gt;glib: Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new_default()&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new()&lt;/code&gt; and remove deprecated API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/936&quot;&gt;Add TransparentPtr marker trait to List, SList and StrVItem&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/938&quot;&gt;Rename StrVItem to GStrPtr and make it clonable and transparent&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/941&quot;&gt;Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;construct_cell&lt;/code&gt;, too experimental&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/926&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PtrSlice&amp;lt;GStrPtr&amp;gt;&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KeyFile&lt;/code&gt; methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/944&quot;&gt;gio: Don’t require a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;static&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;str&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;File::enumerate_children_async()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;enumerate_children_future()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/934&quot;&gt;gdk-pixbuf: Ensure that transfer-none return values in subclassing are staying alive long enough&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/933&quot;&gt;gdk-pixbuf: Fix time related types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/940&quot;&gt;Add doc for ConstructCell, improve doc Boxed, Enum&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/948&quot;&gt;macros: further tweak docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/953&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt; debug assertion to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from_glib_full()&lt;/code&gt; and others for GObjects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/950&quot;&gt;Rename GStrPtr to GStringPtr&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/945&quot;&gt;properties: Update syntax for custom flags and other builder fields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/954&quot;&gt;gio: implement FromIterator for ListStore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/961&quot;&gt;properties: correctly type check value returned by the getter fn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/955&quot;&gt;Use strcmp for GStringPtr comparisons&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/958&quot;&gt;Support &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default = ...&lt;/code&gt; in the properties macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/959&quot;&gt;macros: support overrides in the properties macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/962&quot;&gt;gio: make ListModel::iter() infallible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/963&quot;&gt;Greatly improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone!&lt;/code&gt; proc macro error output&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/964&quot;&gt;clippy cleanup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/965&quot;&gt;Refactor properties macro, improve errors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/967&quot;&gt;impl PropertyGet for T: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HasParamSpec&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/969&quot;&gt;Improve properties macro docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/973&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ValueArray&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt; traits manually because of the custom paramspec&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/974&quot;&gt;add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpecEnumBuilder::default_value()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs&quot;&gt;gtk3-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/783&quot;&gt;Update link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/750&quot;&gt;Base Dockerfile on gtk-rs-core image&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/784&quot;&gt;Move from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.instance()&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.obj()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/786&quot;&gt;widget: support &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;window_state_event&lt;/code&gt; when subclassing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/791&quot;&gt;Skip init assertion for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk::set_allowed_backends&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/794&quot;&gt;gtk: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&amp;lt;ResponseType&amp;gt;&lt;/code&gt; for Value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/797&quot;&gt;examples: Fix compilation after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::SimpleAction&lt;/code&gt; constructor took the state by value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/798&quot;&gt;examples: Adapt to glib-build-tools breaking change&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/804&quot;&gt;Allow subclassing ToggleButton and MenuButton&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/801&quot;&gt;Update wayland-client version to 0.30&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1153&quot;&gt;examples/glium: lookup libepoxy-0.dll first&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1024&quot;&gt;book: Migrate to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib-build-tools&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1029&quot;&gt;Base Dockerfile on gtk-rs-core image&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1162&quot;&gt;image: Rebuild once every week&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1155&quot;&gt;gtk: Generate new v4.10 APIs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1157&quot;&gt;Move from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.instance()&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.obj()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1160&quot;&gt;gtk: Add gnome_43 feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1166&quot;&gt;book: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::builder()&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1103&quot;&gt;Add gdk4-win32&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1171&quot;&gt;Win32 fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1172&quot;&gt;Fix latest clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1173&quot;&gt;book: Fix typo in xtask code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1175&quot;&gt;gdk-win32: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Win32Display.add_filter()&lt;/code&gt; (part 2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1174&quot;&gt;gdk-win32: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Win32Display.add_filter()&lt;/code&gt; (part 1)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1182&quot;&gt;Fixed a typo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1184&quot;&gt;Release 0.5.2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1176&quot;&gt;Fix clippy lints&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1183&quot;&gt;Skip init assertion for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk::set_allowed_backends&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1190&quot;&gt;book: Fix typo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1178&quot;&gt;Added Libxml, Librsvg, Gettext and Libadwaita demo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1194&quot;&gt;use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Into&amp;lt;Value&amp;gt;&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Into&amp;lt;Variant&amp;gt;&lt;/code&gt; where possible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1196&quot;&gt;book: Small windows instructions fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1206&quot;&gt;examples: Use NoneCast trait where possible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1179&quot;&gt;macros: Allow using re-exports of gtk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1186&quot;&gt;gsk: Export builders module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1192&quot;&gt;gtk4: use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl_offset()&lt;/code&gt; for calculating template child offset&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1195&quot;&gt;gtk: Fix missing version guards&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1211&quot;&gt;Add a changelog file&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1212&quot;&gt;gtk: Cleanup template related functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1214&quot;&gt;Group imports&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1210&quot;&gt;Generate AlertDialog::choose&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1217&quot;&gt;Release 0.5.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1218&quot;&gt;Relax version requirement&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1215&quot;&gt;gtk: Subclass BuilderCScope for the BuilderRustScope&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1219&quot;&gt;Fix clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1227&quot;&gt;Fix compilation after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Stash&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PhantomData&lt;/code&gt; usage in glib&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1226&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;install_action_async&lt;/code&gt;: Use owned Variant in closure&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1234&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file_chooser&lt;/code&gt;: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add_choice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1220&quot;&gt;Mark new dialog api as not nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1252&quot;&gt;book: Link to “Rust Atomics and Lock”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1239&quot;&gt;Add blueprint-compiler dependency into Dockerfile&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1254&quot;&gt;no need to move in the hello world exercise&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1255&quot;&gt;Book: make memory management conclusion clearer.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1256&quot;&gt;Use wrapper macros where possible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1258&quot;&gt;Various improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1259&quot;&gt;Allocations improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1264&quot;&gt;gtk: Make use of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::from_type_unchecked&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1263&quot;&gt;book: warn about precedence over pkg-config-lite&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1203&quot;&gt;Recommend (with instructions) building with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gvsbuild&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1265&quot;&gt;book: Simplify instructions on Windows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1262&quot;&gt;Make use of IntoGStr/IntoStrV&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1269&quot;&gt;Enable introspection for gtk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1238&quot;&gt;gtk4-macros: Add blueprint support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1270&quot;&gt;Update for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Boxed&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToGlibPtr&amp;lt;*mut _&amp;gt;&lt;/code&gt; trait impl addition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1267&quot;&gt;book: remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;try_property&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1272&quot;&gt;book: Move listings to feature 4_8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1273&quot;&gt;book: fix panic in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;list_widgets_4,5,6&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1275&quot;&gt;Builder related fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1279&quot;&gt;book: Rephrase a sentence&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1282&quot;&gt;Remove unneeded cfg(dox) condition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1287&quot;&gt;book: Add alt text to images and videos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1283&quot;&gt;Fix nightly clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1284&quot;&gt;Use glib::ExitStatus&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1288&quot;&gt;Update per Properties macro merge&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1290&quot;&gt;gtk-macros: Mention the failed to retrieve template child name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1294&quot;&gt;Prepare for 0.6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1295&quot;&gt;Implement HasParamSpec for Expression types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1296&quot;&gt;Clippy cleanups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1277&quot;&gt;book: Adapt to glib-build-tools breaking change&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1393&quot;&gt;Fix new clippy lints&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1394&quot;&gt;nameutil: correct dll link name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1395&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[allow(clippy::should_implement_trait)]&lt;/code&gt; if method is named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1398&quot;&gt;Fix new clippy lint in generated abi and sys test files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1403&quot;&gt;analysis/special_functions: fix missing import&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1402&quot;&gt;codegen: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&amp;lt;T&amp;gt;&lt;/code&gt; for Value for enums/flags&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1404&quot;&gt;Fix up special functions in traits correctly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1405&quot;&gt;Fix incorrect ‘missing from library’ warning when generating in sys mode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1406&quot;&gt;Add init assertions to the enum/flags &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&amp;lt;T&amp;gt; for glib::Value&lt;/code&gt; impls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1408&quot;&gt;codegen: silence deprecation warnings in impls for deprecated types/functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1407&quot;&gt;analysis: handle C array pointer casts to void&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1409&quot;&gt;fix the layout tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1397&quot;&gt;codegen: Handle &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_finish&lt;/code&gt; functions not taking a GError input param&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1411&quot;&gt;Backport: codegen: Handle &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_finish&lt;/code&gt; functions not taking a GError input param&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1384&quot;&gt;analysis: Use the new move trait for in transfer-full params&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1412&quot;&gt;analysis: Don’t use IntoGlibPtr for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Vec&amp;lt;T&amp;gt;&lt;/code&gt; parameters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1413&quot;&gt;analysis: Generate correct bounds when move is used for nullable types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1415&quot;&gt;analysis: Prefer using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::prelude::*&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1416&quot;&gt;codegen: Group imports by crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1419&quot;&gt;Various cleanups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1410&quot;&gt;Fix generation without any shared libraries&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1421&quot;&gt;Inline various enum/flags functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1424&quot;&gt;Generate string constants as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&apos;static GStr&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[u8]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1425&quot;&gt;Generate static &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;to_str()&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name()&lt;/code&gt; functions with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStr&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;str&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1359&quot;&gt;docs: Generate properties/signals docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1429&quot;&gt;Handle user_data renaming&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1430&quot;&gt;Optimize builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1431&quot;&gt;Implement object builders around &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::object::ObjectBuilder&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1432&quot;&gt;Fix missing check in case a type cannot be generated in builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1433&quot;&gt;Add configuration for exhaustive enums&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1435&quot;&gt;Fix new clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1436&quot;&gt;codegen: Generate HasParamSpec for enums/flags&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1437&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new()&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new_default()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1441&quot;&gt;Generate less clippy warnings code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1379&quot;&gt;Reworked the book/tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/A6GibKm&quot;&gt;@A6GibKm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AaronErhardt&quot;&gt;@AaronErhardt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andy128k&quot;&gt;@andy128k&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aruiz&quot;&gt;@aruiz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cgwalters&quot;&gt;@cgwalters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/delight-aug&quot;&gt;@delight-aug&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/elmarco&quot;&gt;@elmarco&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gdesmott&quot;&gt;@gdesmott&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/harshshredding&quot;&gt;@harshshredding&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Jedsek&quot;&gt;@Jedsek&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jf2048&quot;&gt;@jf2048&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lucab&quot;&gt;@lucab&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/luckylat&quot;&gt;@luckylat&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Megadash452&quot;&gt;@Megadash452&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mitchhentges&quot;&gt;@mitchhentges&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nacho&quot;&gt;@nacho&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nardoor&quot;&gt;@nardoor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nt8r&quot;&gt;@nt8r&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pbor&quot;&gt;@pbor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pentamassiv&quot;&gt;@pentamassiv&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ranfdev&quot;&gt;@ranfdev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RealKC&quot;&gt;@RealKC&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/veera-sivarajan&quot;&gt;@veera-sivarajan&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vikram-kangotra&quot;&gt;@vikram-kangotra&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vlinkz&quot;&gt;@vlinkz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wroyca&quot;&gt;@wroyca&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/yuraiz&quot;&gt;@yuraiz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Fri, 10 Feb 2023 22:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2023/02/10/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2023/02/10/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>New release</title>
        <description>&lt;p&gt;It’s now time for a new Gtk-rs release! As usual, a lot of improvements in a lot of places but subclasses in particular got a lot of updates. Time to dive in on some improvements. Enjoy!&lt;/p&gt;

&lt;h3 id=&quot;update-of-minimum-supported-versions&quot;&gt;Update of minimum supported versions&lt;/h3&gt;

&lt;p&gt;The minimum supported version of the C library of various crates was updated to the versions available in Ubuntu 18.04:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GLib/GIO requires at least version 2.56 now and supports API up to version 2.74&lt;/li&gt;
  &lt;li&gt;gdk-pixbuf requires at least version 2.36.8 and supports API up to version 2.42&lt;/li&gt;
  &lt;li&gt;Pango requires at least version 1.40 and supports API up to version 1.52&lt;/li&gt;
  &lt;li&gt;GTK3 requires at least version 3.22.30 and supports API up to version 3.24.30&lt;/li&gt;
  &lt;li&gt;GTK4 requires at least version 4.0.0 and supports API up to version 4.8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The minimum supported Rust version by all crates was updated to version 1.63.&lt;/p&gt;

&lt;h3 id=&quot;more-async-support&quot;&gt;More async support&lt;/h3&gt;

&lt;p&gt;A couple of futures helper functions were added with this release that should make futures usage easier in GTK applications.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Timeouts: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::future_with_timeout(Duration::from_millis(20), fut)&lt;/code&gt; will resolve to the result of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fut&lt;/code&gt; if it takes less than 20ms or otherwise to an error&lt;/li&gt;
  &lt;li&gt;Cancellation: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::CancellableFuture::new(fut, cancellable)&lt;/code&gt; will resolve to the future unless the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cancellable&lt;/code&gt; is cancelled before that&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;gtk-4&quot;&gt;GTK 4&lt;/h3&gt;

&lt;p&gt;Along with plenty of bugfixes and small improvements, the 0.5 release of gtk4-rs brings a couple of useful features&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gsk::Transform&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of the C functions return &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt; which represents an identity transformation. The Rust API nowadays returns an identity 
transformation instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[gtk::CompositeTemplate]&lt;/code&gt; runtime validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If used with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[template(string=...)]&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[template(file=...)]&lt;/code&gt; and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xml_validation&lt;/code&gt; feature is enabled, the XML content will be validated to ensure the child widgets that the code is trying to retrieve exists.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[gtk::test]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As GTK is single-threaded, using it in your tests is problematic as you can’t initialize GTK multiple times. The new attribute macro helps with that as it runs the tests in a thread pool instead of in parallel.&lt;/p&gt;

&lt;p&gt;Details at &lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/latest/docs/gtk4_macros/attr.test.html&quot;&gt;https://gtk-rs.org/gtk4-rs/stable/latest/docs/gtk4_macros/attr.test.html&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WidgetClassSubclassExt::install_action_async&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a lot of use cases, people used to do&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;klass&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.install_action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_group.action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;MainContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.spawn_local&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;clone!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;weak&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;cd&quot;&gt;/// call some async function&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.async_function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.await&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The new helper function allows you to write the code above like&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;klass&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.install_action_async&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_group.action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;cd&quot;&gt;/// call some async function&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.async_function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.await&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Which helps avoiding the usage of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone&lt;/code&gt; macro in some cases.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GTK 4.8 API additions which can be enabled with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v4_8&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Various fixes for the gdk-wayland &amp;amp; wayland-rs integration requiring wayland-client v0.30&lt;/li&gt;
  &lt;li&gt;Plenty of new examples:
    &lt;ul&gt;
      &lt;li&gt;Gif Paintable for rendering Gifs&lt;/li&gt;
      &lt;li&gt;ColumnView for displaying data in a table-like format&lt;/li&gt;
      &lt;li&gt;Confetti animation&lt;/li&gt;
      &lt;li&gt;Rotation / Squeezer example&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;glibobject-now-has-a-more-convenient-object-builder&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object&lt;/code&gt; now has a more convenient object builder&lt;/h3&gt;

&lt;p&gt;In addition to dynamic objects construction, or e.g. when implementing new GObject subclasses, via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object::new()&lt;/code&gt; and related API, there is also a more convenient object builder available.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;prop1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;prop2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;prop3&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This allows for slightly more idiomatic Rust code.&lt;/p&gt;

&lt;h3 id=&quot;gio-objects-completion-closure-doesnt-need-to-be-send-anymore&quot;&gt;GIO objects completion closure doesn’t need to be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; anymore&lt;/h3&gt;

&lt;p&gt;Asynchronous operations on GIO objects previously required the completion closure to be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt;. This is not required anymore as the objects themselves are not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt;-able either and the operation will be completed on the current thread via the thread’s own main context. This should make usage of the asynchronous operations easier from GTK applications, where all UI objects are not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;As a result of this, also futures provided by GIO objects based on these asynchronous operations do not implement the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; trait anymore, which was wrong to begin with and caused panics at runtime in any situation where the future was actually used on different threads.&lt;/p&gt;

&lt;h3 id=&quot;added-support-for-deriveglibvariant-for-enums&quot;&gt;Added support for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[derive(glib::Variant)]&lt;/code&gt; for enums&lt;/h3&gt;

&lt;p&gt;Starting with the previous release it was possible to derive the required trait implementations for (de)serializing Rust structs from/to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Variant&lt;/code&gt;s. With this release, support for enums is also added with different options for how the enum is going to be represented. Both C-style enums as well as enums with values in the variants are supported.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nd&quot;&gt;#[derive(Debug,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;PartialEq,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;Eq,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;glib::Variant)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;enum&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;MyA&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;MyB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;i32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;MyC&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;u32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyC&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;bar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.to_variant&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nd&quot;&gt;assert_eq!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.child_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;nd&quot;&gt;assert_eq!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;no-need-to-implement-send-and-sync-for-subclasses-anymore&quot;&gt;No need to implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Sync&lt;/code&gt; for subclasses anymore&lt;/h3&gt;

&lt;p&gt;In the past it was necessary to manually implement the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Sync&lt;/code&gt; traits via an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe impl&lt;/code&gt; block for the object types of GObject subclasses defined in Rust.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;wrapper!&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ObjectSubclass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;imp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;unsafe&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Send&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;unsafe&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Sync&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is not necessary anymore and happens automatically if the implementation struct implements both traits. Like this it is also harder to accidentally implement the traits manually although the requirements of them are not fulfilled.&lt;/p&gt;

&lt;h3 id=&quot;simpler-subclassing-for-virtual-methods&quot;&gt;Simpler subclassing for virtual methods&lt;/h3&gt;

&lt;p&gt;Previously when creating a GObject subclass, all virtual methods passed the implementation struct and the object itself as arguments, e.g.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;trait&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;constructed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This caused a lot of confusion and was also redundant. Instead, starting with this release only the implementation struct is passed by reference, e.g.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;trait&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;constructed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In most contexts the object itself was not actually needed, so this also simplifies the code. For the cases when the object is needed, it can be retrieved via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;obj()&lt;/code&gt; method on the implementation struct&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;constructed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.parent_constructed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.do_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In a similar way it is also possible to retrieve the implementation struct from the instance via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp()&lt;/code&gt; method. Both methods are cheap and only involve some pointer arithmetic.&lt;/p&gt;

&lt;p&gt;Additionally, to make it easy to pass around the implementation struct into e.g. closures, there is now also a reference counted wrapper around it available (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectImplRef&lt;/code&gt;) that can be retrieved via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.to_owned()&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.ref_counted()&lt;/code&gt;, and a weak reference variant that can be retrieved via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp.downgrade()&lt;/code&gt;. Both are working in combination with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::clone!&lt;/code&gt; macro, too.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;constructed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.parent_constructed&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// for a strong reference&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.button&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.connect_clicked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;clone!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;owned&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;imp&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;imp&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.do_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}));&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;// for a weak reference&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.button&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.connect_clicked&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;clone!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;weak&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;imp&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;imp&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.do_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}));&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;simpler-subclassing-for-properties&quot;&gt;Simpler subclassing for properties&lt;/h3&gt;

&lt;p&gt;When creating properties for GObject subclasses they need to be declared beforehand via a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ParamSpec&lt;/code&gt;. Previously these had simple &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new()&lt;/code&gt; functions with lots of parameters. These still exist but it’s usually more convenient to use the builder pattern to construct them, especially as most of the parameters have sensible defaults.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// Now&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ParamSpecUInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.maximum&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.construct&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Previously&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ParamSpecUInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ParamFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;READWRITE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ParamFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CONSTRUCT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In a similar spirit, signal definitions are available via a builder. This was available in the previous already but usage was simplified, for example by defaulting to no signal arguments and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;()&lt;/code&gt; signal return type.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// Now&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;signal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;subclass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Signal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;closed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Before&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;signal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;subclass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Signal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;closed&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[],&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UNIT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;removing-result-wrapping-in-some-functions-returned-values&quot;&gt;Removing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&amp;lt;&amp;gt;&lt;/code&gt; wrapping in some functions returned values&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object::new()&lt;/code&gt; returned a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt; in previous versions. However, the only way how this could potentially fail was via a programming error: properties that don’t exist were tried to be passed, or values of the wrong type were set for a property. By returning a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt;, the impression was given that this can also fail in a normal way that is supposed to be handled by the caller.&lt;/p&gt;

&lt;p&gt;As this is not the case, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object::new()&lt;/code&gt; always panics if the arguments passed to it are invalid and no longer returns a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the same spirit, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object.try_set_property()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object.try_property()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object.try_emit()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object.try_connect()&lt;/code&gt; do not exist any longer and only the panicking variants are left as the only way they could fail was if invalid arguments are provided.&lt;/p&gt;

&lt;h3 id=&quot;transform-functions-for-property-bindings-are-now-supported&quot;&gt;Transform functions for property bindings are now supported&lt;/h3&gt;

&lt;p&gt;Object property bindings allow for transform functions to be defined, which convert the property value to something else for the other object whenever it changes. Previously these were defined on the generic &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt; type, but as the types are generally fixed and known in advance it is now possible to define them directly with the correct types.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;source&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.bind_property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.flags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;crate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;BindingFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SYNC_CREATE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.transform_to&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_binding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;format!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{} World&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.transform_from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_binding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;format!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{} World&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If the types don’t match then this is considered a programming error and will panic at runtime.&lt;/p&gt;

&lt;p&gt;The old way of defining transform functions via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt; is still available via new functions&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;source&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.bind_property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;target&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.flags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;crate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;BindingFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SYNC_CREATE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.transform_to_with_values&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_binding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;format!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{} World&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.to_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.transform_from_with_values&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_binding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;format!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{} World&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.to_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;construct-simpleaction-with-actionentrybuilder&quot;&gt;Construct &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SimpleAction&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ActionEntryBuilder&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;It is now possible to use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::ActionEntryBuilder&lt;/code&gt; to construct a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::SimpleAction&lt;/code&gt;, the advantage of using that is the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::ActionMap&lt;/code&gt; type is passed as a first parameter to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;activate&lt;/code&gt; callback and so avoids the usage of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone!&lt;/code&gt; macro.&lt;/p&gt;

&lt;p&gt;Before:&lt;/p&gt;
&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;SimpleAction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.connect_activate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;clone!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;weak&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_obj&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;c1&quot;&gt;// Do something&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;actions_group&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.add_action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After&lt;/p&gt;
&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ActionEntry&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_action&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.activate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;move&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;some_obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SomeType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Do something&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.build&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// It is safe to `unwrap` as we don&apos;t pass any parameter type that requires validation&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;actions_group&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.add_action_entries&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;changes&quot;&gt;Changes&lt;/h3&gt;

&lt;p&gt;For the interested ones, here is the list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/470&quot;&gt;cairo: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send+Sync&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurfaceData&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurfaceDataOwned&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/471&quot;&gt;cairo: Allow converting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurfaceDataOwned&lt;/code&gt; back into an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurface&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/486&quot;&gt;pango: add setters for Rectangle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/487&quot;&gt;glib: use Result from std for logging macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/488&quot;&gt;gio: move task docs on the structs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/490&quot;&gt;glib: Generate bindings for markup_escape_text&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/483&quot;&gt;glib: implement To/FromVariant for OS strings and paths&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/498&quot;&gt;glib-macros: Remove redundant allocations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/499&quot;&gt;pangocairo: don’t re-export types on prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/500&quot;&gt;glib-macros: Smaller subclass macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/503&quot;&gt;glib: Add an object builder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/506&quot;&gt;glib: Add more documentation on how to replace g_signal_connect_object&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/504&quot;&gt;glib: Provide &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ThreadGuard&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;thread\_id()&lt;/code&gt; as public API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/511&quot;&gt;Don’t require &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; closures for GIO-style async functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/512&quot;&gt;gio: Don’t implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GioFuture&lt;/code&gt; anymore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/515&quot;&gt;gio: add Initable::with_type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/520&quot;&gt;gio: Use correct callback type for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;File::copy\_async()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/523&quot;&gt;glib: Never pass &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g\_log\_structured\_standard()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/522&quot;&gt;gio: Use correct callback type for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;File::copy\_async()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/518&quot;&gt;impl &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StaticType&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;{From,To}Value&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpointer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/519&quot;&gt;dynamic type function variants for Variants and Values&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/527&quot;&gt;gtask: fix memory leak when calling g_task_return_value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/533&quot;&gt;Handle empty slices correctly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/543&quot;&gt;cairo: Allow writing arbitrary &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Surface&lt;/code&gt;s as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PNG&lt;/code&gt;s&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/544&quot;&gt;glib: add trait &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StaticTypeExt&lt;/code&gt; with method &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;type\_ensure&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/548&quot;&gt;Add missing pango attrs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/549&quot;&gt;Remove remaining public fields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/555&quot;&gt;glib: Add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object&lt;/code&gt; specific value type checker&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/554&quot;&gt;glib: Fix handling of closures that provide a return value pointer that is initialized to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;G_TYPE_INVALID&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/552&quot;&gt;Fix cairo FFI types name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/557&quot;&gt;glib: Don’t use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from\_glib\_full()&lt;/code&gt; for the individual items of an array for boxed inline types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/559&quot;&gt;cairo: fix Glyph::index type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/561&quot;&gt;translate: Pre-allocate Rust hashmap at correct size&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/563&quot;&gt;glib-macros: Pass a pointer for watched objects into closure macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/564&quot;&gt;Variant::from_dict_entry&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/568&quot;&gt;Smaller spec numeric definition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/571&quot;&gt;pango: Add LayoutLine.runs()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/572&quot;&gt;pango: Add missing getter for GlyphItemIter.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/551&quot;&gt;define a corresponding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Builder&lt;/code&gt; for each &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/565&quot;&gt;glib: impl AsRef&amp;lt;Variant&amp;gt; for Variant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/434&quot;&gt;glib-macros: Add support for enums to glib::Variant &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/575&quot;&gt;use Self where possible in wrapper macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/569&quot;&gt;remove problematic phantom in glib_shared_wrapper&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/583&quot;&gt;glib: Use “%s” instead of replacing % in log functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/579&quot;&gt;impl &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToValue&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromValue&lt;/code&gt; for char&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/584&quot;&gt;glib: Correctly cast log messages to C char types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/586&quot;&gt;glib: Automatically implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send + Sync&lt;/code&gt; on object subclasses if their implementation struct implements those traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/587&quot;&gt;Use glib 2.71 for minimum v2_72 pkg-config versions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/528&quot;&gt;glib: Add function to wrap a future with a timeout&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/588&quot;&gt;glib: Allow using other error types and value type checkers for optional values&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/591&quot;&gt;glib: Only auto-impl &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send+Sync&lt;/code&gt; for subclasses if the parent type does&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/592&quot;&gt;glib: Use the correct value type checker for optional types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/577&quot;&gt;Add new classes from glib 2.72&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/589&quot;&gt;More gio::Cancellable methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/597&quot;&gt;glib: Allow borrowing a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec&lt;/code&gt; reference from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/599&quot;&gt;glib: Allow borrowing a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec&lt;/code&gt; reference from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/595&quot;&gt;Structured Logging&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/602&quot;&gt;gio: add AsyncInitable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/601&quot;&gt;Use Send+Sync for more Boxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/604&quot;&gt;glib: Disable log_structured doc test before v2_50&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/607&quot;&gt;glib: VariantTy tuple type iterator&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/605&quot;&gt;impl FromStr for VariantType&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/606&quot;&gt;glib: print and parse for Variant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/580&quot;&gt;glib-macros: Port clone failure tests to trybuild2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/615&quot;&gt;glib: Fix build with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v2_72&lt;/code&gt; and require 2.72.0 now&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/618&quot;&gt;glib: Generate docs for BindingGroupBuilder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/623&quot;&gt;More Cairo GValue fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/621&quot;&gt;Implement ValueTypeOptional for BoxedInline and cairo types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/626&quot;&gt;glib: implement ValueTypeOptional for Variant, VariantType, BoxedValue&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/627&quot;&gt;Add rustfmt.toml to allow some editors to auto-format the code on save&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/631&quot;&gt;Update minimum supported GLib version to 2.56&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/630&quot;&gt;glib: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mkdtemp()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mkdtemp\_full()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/632&quot;&gt;glib/variant: add some more safe wrappers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/625&quot;&gt;glib: Remove ending NUL when converting Variant to OsString.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/633&quot;&gt;error: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;matches&lt;/code&gt; method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/634&quot;&gt;Fix Windows build&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/635&quot;&gt;glib: Remove SendUnique and SendUniqueCell&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/636&quot;&gt;glib: Add new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectImplRef&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectImplWeakRef&lt;/code&gt; types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/639&quot;&gt;gdk_pixbuf: opt-in for gi-docgen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/642&quot;&gt;remove extend_from_slice position subtraction, add test&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/629&quot;&gt;gdk_pixbuf: Improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Pixbuf::pixels&lt;/code&gt; documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/647&quot;&gt;glib: Remove redundant null-checks before &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g\_free&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/648&quot;&gt;Remove more redundant null checks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/624&quot;&gt;glib: Don’t serialize 0 value flags as variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/644&quot;&gt;glib: Add bindings for GSignalGroup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/650&quot;&gt;gio: Add local variant for connect_cancelled&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/651&quot;&gt;glib: WatchedObject improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/653&quot;&gt;glib-macros: Remove boxed_nullable and shared_boxed_nullable attribute for glib::Boxed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/655&quot;&gt;glib: Add getter for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Error&lt;/code&gt; domain quark&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/660&quot;&gt;Set properties improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/668&quot;&gt;impl fallible IntoIterator for ListModel,ListStore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/671&quot;&gt;cairo+gio+glib: Add safety docs for low hanging fruits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/666&quot;&gt; glib: Add WeakRefNotify (v2)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/670&quot;&gt;Move &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::compile\_resources&lt;/code&gt; to its own crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/673&quot;&gt;Add IntoGlibPtr trait&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/674&quot;&gt;glib: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ptr::NonNull&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VariantType&lt;/code&gt; pointer storage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/672&quot;&gt;cairo: Add missing User Fonts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/677&quot;&gt;glib/gio: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FusedFuture&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FusedStream&lt;/code&gt; in some places&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/676&quot;&gt;Port Dockerfile to fedora rawhide and use system deps from git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/678&quot;&gt;Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FusedIterator&lt;/code&gt; for various custom iterators&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/679&quot;&gt;cairo: Fix user font callbacks.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/680&quot;&gt;Add some more tests for various custom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Iterator&lt;/code&gt; impls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/682&quot;&gt;Don’t build gdk-pixbuf tests in the docker image&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/654&quot;&gt;gio: add AsyncInitable subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/685&quot;&gt;gio: Use guard objects for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Application::hold()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mark\_busy()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/686&quot;&gt;cairo: Add missing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo\_surface\_get\_content&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/689&quot;&gt;cairo: Add new for TextCluster/TextExtents and add setter for TextCluster&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/690&quot;&gt;cairo: Add setter for Glyph.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/692&quot;&gt;cairo: add some 1.18 features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/694&quot;&gt;cairo: Use freetype-sys instead of freetype.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/665&quot;&gt;Fix GBindingGroup bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/701&quot;&gt;Add more tests for Binding/BindingGroup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/702&quot;&gt;glib: add missing emit_by_name methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/704&quot;&gt;Use RefCell::take() when possible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/705&quot;&gt;SocketAddressEnumerator: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;next&lt;/code&gt; return value should be nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/709&quot;&gt;translate.rs: free the container memory also when the container is empty&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/710&quot;&gt;gstring: implement AsRef&amp;lt;Path&amp;gt; for GString and GStr&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/707&quot;&gt;ProcessLauncher: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;close&lt;/code&gt; method should be available on unix only&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/643&quot;&gt;Remove is_windows_utf8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/720&quot;&gt;Fix off-by-one in GString::from (and missing null terminator in a test)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/722&quot;&gt;gio: Update serial_test dependency to 0.8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/725&quot;&gt;Add is_empty for List and SList&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/728&quot;&gt;glib: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec::name()&lt;/code&gt; return value lifetime&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/726&quot;&gt;glib: fix ParamSpec with null blurb and nick&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/730&quot;&gt;pango: Mark parameters to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extents\_to\_pixels()&lt;/code&gt; as mutable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/736&quot;&gt;add set_glyph to GlyphInfo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/737&quot;&gt;fix glyph string methods that don’t need to be &amp;amp;mut&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/738&quot;&gt;glib: add doc alias for g_type_class_ref&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/708&quot;&gt;glib: bind iconv functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/741&quot;&gt;cairo: Update to freetype 0.31&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/735&quot;&gt;glib: Add flag setters to ParamSpec builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/743&quot;&gt;gio: Manually implement ActionEntry&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/744&quot;&gt;as_ptr() and as_mut_ptr() accessors are safe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/745&quot;&gt;cairo: Don’t leak user data if setting it failed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/734&quot;&gt;glib: Simplify SignalBuilder constructor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/748&quot;&gt;glib: Allow passing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SignalType&lt;/code&gt;s and plain arrays to the signal builder for the types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/749&quot;&gt;glib: Variant wrapper types for handles, object paths and signatures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/752&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#\[must\_use\]&lt;/code&gt; to guard objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/754&quot;&gt;glib/object: add track_caller annotation in a few places&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/758&quot;&gt;glib: Remove unneeded and wrong &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;upcast()&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoxedAnyObject&lt;/code&gt; docs example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/760&quot;&gt;Don’t checkout submodules by default&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/761&quot;&gt;glib: Various paramspec builder API improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/762&quot;&gt;glib/gio: Replace various type parameters with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl trait&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/755&quot;&gt;glib/types: use rustc-hash for HashMap&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/764&quot;&gt;glib/subclass/types: use BTreeMap instead of HashMap&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/767&quot;&gt;gio: make Task::cancellable return Option&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/713&quot;&gt;Implement Borrow on object types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/770&quot;&gt;glib: Reduce number of allocations when writing non-structured logs via the GlibLogger&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/772&quot;&gt;gio: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CancellableFuture&lt;/code&gt; ergonomic for cancelling tasks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/774&quot;&gt;glib: Don’t allow passing a construct(-only) property twice during object construction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/771&quot;&gt;glib: Panic in Object::new() and related functions and add try_new()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/756&quot;&gt;Implement more FFI translation traits for shared types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/786&quot;&gt;cairo: Use AsRef&amp;lt;T&amp;gt; for custom subclassing types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/782&quot;&gt;glib/BindingBuilder: add concrete type based transform setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/784&quot;&gt;pango: Manually implement GlyphItemIter and AttrIterator with lifetimes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/785&quot;&gt;Pango odds and ends&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/783&quot;&gt;Change *Impl trait methods to only take &amp;amp;self and not Self::Type in addition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/787&quot;&gt;glib: Improve assertion message when number of arguments in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::closure!&lt;/code&gt; are not matching&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/791&quot;&gt;glib: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoGlibPtr&lt;/code&gt; as supertrait for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectType&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsA&lt;/code&gt; and remove redundant &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;static&lt;/code&gt; requirement from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsA&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/793&quot;&gt;glib: Some &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsA&lt;/code&gt; trait polishing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/794&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send+Sync&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BorrowedObject&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectImplRef&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectImplWeakRef&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/780&quot;&gt;Expose some fields of GDBusNodeInfo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/795&quot;&gt;pangocairo: Trust upstream nullable annotations for return values&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/796&quot;&gt;Add information about pangocairo::FontMap generation and fix some methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/797&quot;&gt;pango: Trust upstream nullable annotations for return values&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs&quot;&gt;gtk3-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/707&quot;&gt;drop problematic include &amp;amp; add missing symlinks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/706&quot;&gt;Drop cursed include and add missing links&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/696&quot;&gt;Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdkwayland&lt;/code&gt; pkg name in README.md snippets&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/714&quot;&gt;gtk/{Text,Tree}Iter: derive Debug&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/715&quot;&gt;Replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Foo::from\_instance(foo)&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo.imp()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/720&quot;&gt;gdk-wayland: re-export ffi&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/722&quot;&gt;gtk: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;u32&lt;/code&gt; as underlying type for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stock-size&lt;/code&gt; property of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CellRendererPixbuf&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/721&quot;&gt;gdk: Add constructor for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk::Geometry&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/723&quot;&gt;gtk: Set gtk-rs as initialized after the original &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GtkApplication::startup&lt;/code&gt; has returned&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/725&quot;&gt;Don’t require &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; closures for GIO-style async functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/728&quot;&gt;Make various newly added 3.24 API conditionally available&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/731&quot;&gt;gtk: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Atk.Role&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;manual&lt;/code&gt; to generate some more bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/732&quot;&gt;Handle empty slices correctly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/736&quot;&gt;gtk3-macros: Add doc links to glib/gtk items&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/738&quot;&gt;gdk: Fix per phantom field removal&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/740&quot;&gt;Add rustfmt.toml to allow some editors to auto-format the code on save&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/744&quot;&gt;subclass support for GtkEntry&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/748&quot;&gt;Fix link to docs of gdkwayland crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/749&quot;&gt;examples: Migrate to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib-build-tools&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/760&quot;&gt;Add binding for gtk_file_chooser_add_choice()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/757&quot;&gt;Add binding for Gtk.FileFilterInfo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/762&quot;&gt;gtk: Add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe-assume-initialized&lt;/code&gt; feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/769&quot;&gt;gdk: Fix binding for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk\_event\_get\_state&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/770&quot;&gt;Don’t checkout submodules by default&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/776&quot;&gt;Update for glib::Object::new() API changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/777&quot;&gt;Change *Impl trait methods to only take &amp;amp;self and not Self::Type in addition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/740&quot;&gt;Add example of a Rotation Bin widget&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/824&quot;&gt;gtk4/{Text,Tree}Iter: derive Debug &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/825&quot;&gt;gtk: fix TreeView subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/829&quot;&gt;book: Remove all mentions of meson and flatpak&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/830&quot;&gt;Replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Foo::from\_instance(foo)&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;foo.imp()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/833&quot;&gt;gtk: Set gtk-rs as initialized after the original &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GtkApplication::startup&lt;/code&gt; has returned&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/831&quot;&gt;book: Use closure to connect signal&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/837&quot;&gt;gdk: implement conversions for Rectangle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/839&quot;&gt;make use of impl T wherever possible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/840&quot;&gt;gtk: mark some of TextIter methods as nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/835&quot;&gt;book: Introduce template callbacks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/849&quot;&gt;gtk: mark Snapshot::to_(node|paintable) as nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/850&quot;&gt;Don’t require Send closures for GIO-style async functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/851&quot;&gt;Remove unnecessary &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; bounds from GIO-style async functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/855&quot;&gt;Trust return value nullability again for gsk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/869&quot;&gt;Fix library name for epoxy on Windows.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/867&quot;&gt;image: build on PR as well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/871&quot;&gt;Handle empty slices correctly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/899&quot;&gt;Disable broken builders/default implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/931&quot;&gt;gdk: Fix compilation after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo::Rectangle&lt;/code&gt; API changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/935&quot;&gt;gtk: Pass an object pointer into rust builder closures instead of weak ref&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/942&quot;&gt;gtk4-macros: Use relative doc links for glib/gtk items&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/944&quot;&gt;gtk4: CompositeTemplate set_template fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/943&quot;&gt;gtk4: Add runtime type checks for template children&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/945&quot;&gt;gtk4: Add convenience traits for binding template callbacks to classes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/949&quot;&gt;gdk: Fix post removal of PhantomData for BoxedInline&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/941&quot;&gt;Add CODEOWNERS file&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/956&quot;&gt;gtk4-macros: Improve error reporting, add failure tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/959&quot;&gt;gtk4-macros: Allow async template callbacks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/961&quot;&gt;More checks for composite template children&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/964&quot;&gt;Add is method to fundamental types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/969&quot;&gt;gtk: Add ParamSpecExpressionBuilder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/680&quot;&gt;examples: Add new widget that squeezes its child&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/977&quot;&gt;gtk4-macros: Fix compile error on rust 1.56&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/973&quot;&gt;gdk: Implement Value traits for Key&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/976&quot;&gt;gdk4-wayland: Use wayland_client::Display instead of a display proxy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/979&quot;&gt;book: Bring todo closer to libadwaita example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/983&quot;&gt;book: Add check in todo whether entry is empty&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/991&quot;&gt;Add rustfmt.toml to allow some editors to auto-format the code on save&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/996&quot;&gt;book: Rename (TodoRow, TodoObject) -&amp;gt; (TaskRow, TaskObject)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1001&quot;&gt;gtk4-macros: Fix re-entrancy panic in async template callback test&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1003&quot;&gt;book: Link snippets to code examples on github&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1007&quot;&gt;book: Replace git version of the book with link to stable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1012&quot;&gt;book: Refactor &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;current\_tasks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1013&quot;&gt;book: Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;list\_view&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/968&quot;&gt;book: Add nix to linux installation guide&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1017&quot;&gt;book: fix links&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1021&quot;&gt;fix vendoring by removing include from gdk4/Cargo.toml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1022&quot;&gt;book: Improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TaskData&lt;/code&gt; methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1026&quot;&gt;Removed extra bracket in 5.1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1027&quot;&gt;[🐛 Fix] Fix app variable name in build_ui function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1030&quot;&gt;Implement FusedIterator for custom iterators&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1028&quot;&gt;Migrate state storing back to json&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1034&quot;&gt;book: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extend\_from\_slice&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;splice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/998&quot;&gt;gtk: Add NativeDialog::run_async&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1040&quot;&gt;Rename app-id&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1035&quot;&gt;book: Use xtask to install data&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1009&quot;&gt;book: Fix application window comment&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1044&quot;&gt;book: Update xtask&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1002&quot;&gt;book: Rename variables in preparation of upcoming chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1047&quot;&gt;gtk4: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Key&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accelerator\_&lt;/code&gt; function bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1048&quot;&gt;gdk4-x11: Fix broken initialized test to be no-op; fix argument for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X11Display::set\_program\_class&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1050&quot;&gt;gtk4: Mark &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::GestureClick::unpaired-release&lt;/code&gt; sequence parameter as nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1059&quot;&gt;book: Fixes link in list widgets chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1060&quot;&gt;Book: Improved grammar and readability&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1061&quot;&gt;book: Stop using hyphens in app ids&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1065&quot;&gt;book: Update appid in book&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1008&quot;&gt;book: Add Todo App 6 using Adwaita&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1070&quot;&gt;book: Use param spec builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1071&quot;&gt;book: Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;current\_tasks&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tasks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1072&quot;&gt;dialog: Use present instead of show in run manuals&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1073&quot;&gt;book: Add Todo5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1074&quot;&gt;book: Add chapter about the Adwaita library&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1069&quot;&gt;gtk4: Add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe-assume-initialized&lt;/code&gt; feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1077&quot;&gt;book: Add Todo5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1082&quot;&gt;book: Remove AdwWindowTitle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1083&quot;&gt;book: Add tooltips to main menu&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1084&quot;&gt;Update per glib::SignalBuilder changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1081&quot;&gt;book: Replace usage of gtk preludes with adwaita ones&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1085&quot;&gt;TextNode::new doesn’t need to take glyphstring as mut&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1088&quot;&gt;book: Remove unused &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;menu\_button&lt;/code&gt; reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1093&quot;&gt;gtk: Implement ParamSpecBuilderExt for ParamSpecExpression&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1094&quot;&gt;gtk: Make xml validation optional&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1098&quot;&gt;gtk: Add a WidgetClassSubclassExt::install_action_async&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1099&quot;&gt;book: Address Alexander’s review comments&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1101&quot;&gt;book: Remove frame style from TodoTaskRow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1117&quot;&gt;examples: Use ParamSpec builder pattern&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1118&quot;&gt;gtk: Simplify types passed to ClosureExpression&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1119&quot;&gt;book: Fix wrong references&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1111&quot;&gt;Add gtk::ColumnView “data grid” example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1020&quot;&gt;Add confetti_snapshot_animation example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1120&quot;&gt;Fixes #1114 by passing a null ptr when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;colors&lt;/code&gt; is empty&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1121&quot;&gt;book: Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remove-current-collection&lt;/code&gt; action&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1112&quot;&gt;book: Second libadwaita section&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1129&quot;&gt;Remove fold threshold policy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1136&quot;&gt;Update for glib::Object::new() API changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1134&quot;&gt;book: use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cargo add&lt;/code&gt; when adding dependencies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1138&quot;&gt;book: Fix and complete recent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cargo add&lt;/code&gt; changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1139&quot;&gt;gsk: Add a ColorStopBuilder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1097&quot;&gt;gtk: Make use of the new move configuration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1137&quot;&gt;Update for new trait impls in gtk-rs-core&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1140&quot;&gt;gsk: Handle nullable Transform&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1131&quot;&gt;examples: Add a GIF paintable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1141&quot;&gt;subclass: Drop Self::Type usage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1146&quot;&gt;gdk4-wayland: Update wayland crate to 0.30&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1144&quot;&gt;examples: Update to glium 0.32&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/803&quot;&gt;gtk/gdk: mark Snapshot as not final and implement necessary traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1147&quot;&gt;gtk: Manually implement FileChooser::set_current_folder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/1151&quot;&gt;Fix dox features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1311&quot;&gt;sys: run ABI tests only under linux&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1312&quot;&gt;Don’t require &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; closures for GIO-style async functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1317&quot;&gt;Mention Default impls for objects with Builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1318&quot;&gt;docs: Handle gi-docgen namespaces when looking for types to link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1320&quot;&gt;Parse and codegen &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;doc-deprecated&lt;/code&gt; for enum members&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1321&quot;&gt;book: Pass output path to gir in console examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1323&quot;&gt;add GitHub urls to book&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1325&quot;&gt;Add “default_value” parameter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1328&quot;&gt;If an async function is marked unsafe, mark unsafe also the _future variant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1327&quot;&gt;codegen: Use GString::as_str instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&amp;lt;GString&amp;gt;::as_deref&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1332&quot;&gt;docs: Never use ExtManual trait with GObject&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1333&quot;&gt;suppress insertion of assertion for result of throw function to return void&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1335&quot;&gt;trampoline_from_glib: Replace broken deref with as_ref&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1342&quot;&gt;Fix error message for constant parsing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1341&quot;&gt;Add generate_doc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1344&quot;&gt;Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SendUnique&lt;/code&gt; code generation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1352&quot;&gt;Fix finding the deps for the sys crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1357&quot;&gt;Fix UB and clippy::let-and-return in function out variables handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1358&quot;&gt;docs: don’t generate implements links for fundamental types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1361&quot;&gt;add non unix fallback for creating PathBuf from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Vec&amp;lt;u8&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1345&quot;&gt;Remove is_windows_utf8 function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1364&quot;&gt;Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoolError&lt;/code&gt; import when being used from glib directly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1365&quot;&gt;Remove leading ‘&amp;gt;’ from tutorial&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1366&quot;&gt;book: Unbreak syntax highlighting on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;console&lt;/code&gt; codeblocks, address concerns consistently&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1367&quot;&gt;analysis: Call extra to_glib functions in array len transformation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1368&quot;&gt;don’t assume GObject.Object is always available&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1362&quot;&gt;codegen/sys/tests: Don’t trim whitespace on C constant output&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1371&quot;&gt;analysis: Don’t generate duplicate getter/notify/setter from parent type &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1375&quot;&gt;analysis: Fix logic when analysing a function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1376&quot;&gt;config: Add a move configuration for functions parameters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1380&quot;&gt;Update for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new()&lt;/code&gt; panicking instead of returning a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1387&quot;&gt;Remove parsing and storage of unused and deprecated allow-none attribute&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1388&quot;&gt;codegen/sys: Properly generate dox features for external libraries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/A6GibKm&quot;&gt;@A6GibKm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AaronErhardt&quot;&gt;@AaronErhardt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/abergmeier&quot;&gt;@abergmeier&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alatiera&quot;&gt;@alatiera&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andy128k&quot;&gt;@andy128k&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/anlumo&quot;&gt;@anlumo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arcnmx&quot;&gt;@arcnmx&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/BiagioFesta&quot;&gt;@BiagioFesta&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bvinc&quot;&gt;@bvinc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cgwalters&quot;&gt;@cgwalters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cmdcolin&quot;&gt;@cmdcolin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Davidoc26&quot;&gt;@Davidoc26&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ebanDev&quot;&gt;@ebanDev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/euclio&quot;&gt;@euclio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fengalin&quot;&gt;@fengalin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/filnet&quot;&gt;@filnet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/FineFindus&quot;&gt;@FineFindus&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gdesmott&quot;&gt;@gdesmott&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gwutz&quot;&gt;@gwutz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/heftig&quot;&gt;@heftig&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ids1024&quot;&gt;@ids1024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Jaakkonen&quot;&gt;@Jaakkonen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Jedsek&quot;&gt;@Jedsek&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jf2048&quot;&gt;@jf2048&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jim4067&quot;&gt;@jim4067&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/JoelMon&quot;&gt;@JoelMon&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jsparber&quot;&gt;@jsparber&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kelnos&quot;&gt;@kelnos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/khrj&quot;&gt;@khrj&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kianmeng&quot;&gt;@kianmeng&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lucab&quot;&gt;@lucab&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lucastarche&quot;&gt;@lucastarche&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MarijnS95&quot;&gt;@MarijnS95&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mbiggio&quot;&gt;@mbiggio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pbor&quot;&gt;@pbor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pentamassiv&quot;&gt;@pentamassiv&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/philn&quot;&gt;@philn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ranfdev&quot;&gt;@ranfdev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RealKC&quot;&gt;@RealKC&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rodrigorc&quot;&gt;@rodrigorc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/saethlin&quot;&gt;@saethlin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SeaDve&quot;&gt;@SeaDve&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/songww&quot;&gt;@songww&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/takaswie&quot;&gt;@takaswie&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ungedummt&quot;&gt;@Ungedummt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zecakeh&quot;&gt;@zecakeh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zhangyuannie&quot;&gt;@zhangyuannie&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 18 Oct 2022 12:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2022/10/18/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2022/10/18/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>New year, new release!</title>
        <description>&lt;p&gt;Hi everyone! Happy new year!&lt;/p&gt;

&lt;p&gt;With this new year comes a new &lt;a href=&quot;https://github.com/gtk-rs&quot;&gt;gtk-rs&lt;/a&gt; release! As usual, a lot of improvements have been made. Let’s check them out!&lt;/p&gt;

&lt;p&gt;One important change: the minimum supported rust version is now &lt;strong&gt;1.56&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;minimum-and-latest-supported-versions-of-the-underlying-c-libraries&quot;&gt;Minimum and latest supported versions of the underlying C libraries&lt;/h3&gt;

&lt;p&gt;The minimum supported versions of the underlying C libraries have not changed compared to last release but support for newer versions was added:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;GLib/GObject/GIO: minimum 2.48, latest 2.72&lt;/li&gt;
  &lt;li&gt;Pango/PangoCairo: minimum 1.38, latest 1.52&lt;/li&gt;
  &lt;li&gt;gdk-pixbuf: minimum 2.32, latest 2.42&lt;/li&gt;
  &lt;li&gt;cairo: minimum 1.14, latest 1.16&lt;/li&gt;
  &lt;li&gt;graphene: minimum 1.10&lt;/li&gt;
  &lt;li&gt;ATK: minimum 2.18, latest 2.38&lt;/li&gt;
  &lt;li&gt;GTK3: minimum 3.18, latest, 3.24.9&lt;/li&gt;
  &lt;li&gt;GTK4: minimum 4.0, latest 4.6&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;changes-to-derive-macro-names&quot;&gt;Changes to derive macro names&lt;/h3&gt;

&lt;p&gt;All &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/index.html#derives&quot;&gt;derive&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/index.html#attributes&quot;&gt;attribute&lt;/a&gt; macros are named more consistently now. Instead of e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GBoxed&lt;/code&gt;, the new name is just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Boxed&lt;/code&gt; and misses the additional &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;G&lt;/code&gt;, which would be redundant namespacing.&lt;/p&gt;

&lt;h3 id=&quot;glib-variant-api-improvements-and-derive-macro&quot;&gt;GLib Variant API improvements and derive macro&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/variant/struct.Variant.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Variant&lt;/code&gt;&lt;/a&gt; API was improved a lot in this release. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt; is a type that allows to store structured data built from basic types in a way that can be serialized into binary data efficiently.&lt;/p&gt;

&lt;p&gt;A lot of API that was missing in previous releases was added, including API for efficient conversion from/to slices of basic types, strings and other container types. The existing conversion APIs were optimized and cleaned up.&lt;/p&gt;

&lt;p&gt;To make it easier to handle custom structs (and soon &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/434&quot;&gt;enums&lt;/a&gt;), a &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/derive.Variant.html&quot;&gt;derive macro&lt;/a&gt; was added that allows to directly convert between a custom Rust type and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt; and back.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;prelude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;nd&quot;&gt;#[derive(Debug,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;PartialEq,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;Eq,&lt;/span&gt; &lt;span class=&quot;nd&quot;&gt;glib::Variant)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;some_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;some_int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;i32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Foo&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;bar&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.to_variant&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nd&quot;&gt;assert_eq!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;By using the derive macro, structured data can be handled automatically instead of manually accessing each of the individual parts of the data. This can be helpful for sending structured data over DBus via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio&lt;/code&gt; DBus API, or for dealing with &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/gio/struct.Settings.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::Settings&lt;/code&gt;&lt;/a&gt; or for more complex states/values used in &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/gio/struct.Action.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::Action&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;stack-allocated-types-and-reducing-heap-allocations&quot;&gt;Stack allocated types and reducing heap allocations&lt;/h3&gt;

&lt;p&gt;Various types that are usually stack-allocated in C were previously heap-allocated in the Rust bindings. With this release, these values are also stack-allocated when used from Rust unless explicitly heap-allocated, e.g. by explicitly placing them into a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Box&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Examples for this are all the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/graphene/index.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;graphene&lt;/code&gt;&lt;/a&gt; types (vectors, matrices, etc), which should make calculations considerably more efficient, types like &lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/0.4/docs/gdk4/struct.Rectangle.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk::Rectangle&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/0.4/docs/gdk4/struct.RGBA.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdk::RGBA&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/0.4/docs/gtk4/struct.TreeIter.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::TreeIter&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Overall this brings performance of applications using the Rust bindings even closer to the same code in C.&lt;/p&gt;

&lt;h3 id=&quot;main-context-api-improvements&quot;&gt;Main context API improvements&lt;/h3&gt;

&lt;p&gt;When spawning non-&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.MainContext.html#method.spawn_local&quot;&gt;futures&lt;/a&gt; or &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.MainContext.html#method.invoke_local&quot;&gt;closures&lt;/a&gt;, or attaching the main context &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.Receiver.html#method.attach&quot;&gt;channel&lt;/a&gt; to the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.MainContext.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::MainContext&lt;/code&gt;&lt;/a&gt;, it is not necessary anymore to have the main context acquired before. This was a common cause of confusion and this constraint was relaxed now. Instead it is only required that that thread default main context is not owned by a different thread yet, and if ownership is moved to a different thread at some point then it will panic at runtime.&lt;/p&gt;

&lt;p&gt;Additionally the API for pushing a main context as the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.MainContext.html#method.with_thread_default&quot;&gt;thread default&lt;/a&gt; was refactored to reduce the risk of misusage. Instead of returning a guard value, it can only be used via a closure now to ensure proper nesting of thread default main contexts.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;MainContext&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;ctx&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.with_thread_default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(||&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// do something with `ctx` being the thread default main context.&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.expect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Main context already owned by another thread&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;glib-string-builder&quot;&gt;GLib string builder&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::String&lt;/code&gt; was renamed to &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/git/docs/glib/struct.GStringBuilder.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GStringBuilder&lt;/code&gt;&lt;/a&gt; to avoid confusion with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GString&lt;/code&gt; and to make it clearer that this is meant for building &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NUL&lt;/code&gt;-terminated C strings.&lt;/p&gt;

&lt;p&gt;In addition the API was simplified considerably:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;All APIs that allowed to create invalid UTF-8 were removed, leaving only safe APIs to build UTF-8 strings.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStringBuilder&lt;/code&gt; directly dereferences into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;str&lt;/code&gt;, so all &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;str&lt;/code&gt; API can be used on it.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStringBuilder&lt;/code&gt; implements the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::fmt::Write&lt;/code&gt; trait, which allows making use of various &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std&lt;/code&gt; Rust API. For example &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;write!(&amp;amp;mut builder, &quot;some format string {}&quot;, some_value)&lt;/code&gt; can be used directly to write formatted strings into the string builder.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;multiple-improvements-on-glibobjectext&quot;&gt;Multiple improvements on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ObjectExt&lt;/code&gt;&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectExt::property&lt;/code&gt; now return the type T directly instead of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt; and panics in case the property is not readable or the wrong type is provided.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectExt::set_property&lt;/code&gt; now panics in case the property is not writeable or doesn’t exists&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectExt::emit_by_name&lt;/code&gt; expects you to pass in the type T for the returned value by the signal. If the signal doesn’t return anything, you can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;some_obj.emit_by_name::&amp;lt;()&amp;gt;(&quot;some_signal&quot;, &amp;amp;[]);&lt;/code&gt;  and also panics if the signal doesn’t exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_property&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.set_property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_property&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;some_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// signal that returns nothing&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.emit_by_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_signal&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// signal that returns T&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.emit_by_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_signal&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_property&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.set_property&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_property&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;some_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.emit_by_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_signal&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;some_value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.emit_by_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some_signal&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectExt::try_*&lt;/code&gt; variant exists if you want the old behaviour. As most of the application code unwraps the returned results, this should be one of the slight but nice improvements of the overall API.&lt;/p&gt;

&lt;h3 id=&quot;bindings-wrapper-types-memory-representation-optimization&quot;&gt;Bindings wrapper types memory representation optimization&lt;/h3&gt;

&lt;p&gt;All heap-allocated bindings types do now have a memory representation that is equivalent to the underlying raw C pointer. In addition to reducing memory usage compared to before, this also allows for other optimizations and e.g allows to borrow values from C storage in a few places instead of creating copies or increasing their reference count (e.g. in &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/collections/struct.PtrSlice.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::PtrSlice&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&quot;glib-collection-types&quot;&gt;GLib collection types&lt;/h3&gt;

&lt;p&gt;While not used widely yet, a new &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/collections/index.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::collections&lt;/code&gt;&lt;/a&gt; module was added that provides more efficient access to &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/collections/struct.Slice.html&quot;&gt;slices&lt;/a&gt;, &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/collections/struct.PtrSlice.html&quot;&gt;pointer slices&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/collections/struct.PtrSlice.html&quot;&gt;linked lists&lt;/a&gt; allocated from C. This is similar to the older &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.GString.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GString&lt;/code&gt;&lt;/a&gt; type, which represents an UTF-8 encoded, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NUL&lt;/code&gt;-terminated C string allocated with the GLib allocator.&lt;/p&gt;

&lt;p&gt;Previously (and still for most API), these were converted from/to native Rust types at the FFI boundary, which often caused unnecessary re-allocations and memory copies. In the next release we’re trying to move even more API to these new collection types for further performance improvements, and for only doing conversions between Rust and C types when actually necessary.&lt;/p&gt;

&lt;h3 id=&quot;cancelling-futures-spawned-on-the-glib-main-context&quot;&gt;Cancelling futures spawned on the GLib main context&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.MainContext.html#method.spawn&quot;&gt;Spawning&lt;/a&gt; futures on the main context now returns the source id. This allows to get access to the underlying &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.MainContext.html#method.find_source_by_id&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Source&lt;/code&gt;&lt;/a&gt; and to &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/struct.Source.html#method.destroy&quot;&gt;cancel&lt;/a&gt; the future before completion.&lt;/p&gt;

&lt;p&gt;Cancelling the future by this, or by other API that drops it (e.g. by selecting on two futures and only processing the first that resolves), will cancel all asynchronous operations performed by them at the next opportunity.&lt;/p&gt;

&lt;h3 id=&quot;dynamic-signal-connections&quot;&gt;Dynamic signal connections&lt;/h3&gt;

&lt;p&gt;A new &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/macro.closure.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::closure&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/macro.closure_local.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::closure_local&lt;/code&gt;&lt;/a&gt; was added that allows to create a &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.16/docs/glib/closure/struct.Closure.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Closure&lt;/code&gt;&lt;/a&gt; from a Rust closure while automatically unpacking argument &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/value/struct.Value.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;&lt;/a&gt;s to their native Rust types and packing the return value.&lt;/p&gt;

&lt;p&gt;While this doesn’t sound too exciting, it makes connecting to signals that have no static bindings more convenient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;notify&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;py&quot;&gt;.get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ParamSpec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;nd&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;property notify: {}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.connect_closure&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;s&quot;&gt;&quot;notify&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;closure_local!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ParamSpec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nd&quot;&gt;println!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;property notify: {}&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pspec&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The macros support the same syntax as the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/macro.clone.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::clone&lt;/code&gt;&lt;/a&gt; macro for creating strong/weak references, plus a &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/macro.closure.html#object-watching&quot;&gt;watch&lt;/a&gt; feature that automatically disconnects the closure once the watched object disappears.&lt;/p&gt;

&lt;h3 id=&quot;object-subclassing-improvements&quot;&gt;Object subclassing improvements&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ParamSpecOverride&lt;/code&gt; has now two helper constructors to create an override of a class property or an interface property. For example, overriding the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hadjustment&lt;/code&gt; property of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Scrollable&lt;/code&gt; interface can be done with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpecOverride::for_interface::&amp;lt;gtk::Scrollable&amp;gt;(&quot;hadjustment&quot;)&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;passing-cairo-image-surfaces-to-other-threads-and-getting-owned-access-to-its-data&quot;&gt;Passing Cairo image surfaces to other threads and getting owned access to its data&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cairo&lt;/code&gt; image surfaces &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/cairo/struct.ImageSurface.html#method.take_data&quot;&gt;can now be converted&lt;/a&gt; to an owned value that behaves like an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;mut [u8]&lt;/code&gt; and that can be safely sent to different threads. This allows both sending &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cairo&lt;/code&gt; image surfaces to other threads safely as well as their underlying data, e.g. to fill an image surface from a compressed image via the &lt;a href=&quot;https://crates.io/crates/image&quot;&gt;image&lt;/a&gt; crate or saving the contents of an image surface to compressed data from a different thread.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;surface&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;nn&quot;&gt;cairo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;ImageSurface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;create&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;cairo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Format&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ARgb32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;320&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;240&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.except&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Failed to allocate memory&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Use Cairo API on the `surface`.&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// [...]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;surface&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.take_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.expect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Not the unique owner of the surface&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Send `data` to another thread or otherwise treat it as a `&amp;amp;mut [u8]`.&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// [...]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;surface&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.into_inner&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Use the `surface` with Cairo APIs again.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This solves one of the common problems when using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cairo&lt;/code&gt; in multi-threaded applications.&lt;/p&gt;

&lt;h3 id=&quot;gio-bindings-improvements&quot;&gt;GIO bindings improvements&lt;/h3&gt;

&lt;p&gt;The gio bindings saw many additions and improvements. Among other things it is now possible to implement the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/gio/struct.Initable.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::Initable&lt;/code&gt;&lt;/a&gt; interface, the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/gio/struct.IOExtension.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::IOExtension&lt;/code&gt;&lt;/a&gt; API is now available, and the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/gio/struct.Task.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::Task&lt;/code&gt;&lt;/a&gt; bindings have been reworked to address soundness issues. More improvements to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::Task&lt;/code&gt; bindings are necessary for them to become nice to use from Rust.&lt;/p&gt;

&lt;h3 id=&quot;gdkwayland&quot;&gt;Gdkwayland&lt;/h3&gt;

&lt;p&gt;In this release, we generated the bindings for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gdkwayland&lt;/code&gt;. You can now use the brand new &lt;a href=&quot;https://crates.io/crates/gdkwayland&quot;&gt;gdkwayland&lt;/a&gt; crate!&lt;/p&gt;

&lt;h3 id=&quot;gtk3-child-properties&quot;&gt;GTK3 child properties&lt;/h3&gt;

&lt;p&gt;The GTK3 bindings had API added for generically &lt;a href=&quot;https://gtk-rs.org/gtk3-rs/stable/0.15/docs/gtk/prelude/trait.ContainerExtManual.html#tymethod.child_set_property&quot;&gt;setting&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk3-rs/stable/0.15/docs/gtk/prelude/trait.ContainerExtManual.html#tymethod.child_property&quot;&gt;getting&lt;/a&gt; child properties.&lt;/p&gt;

&lt;p&gt;This allows to access child properties for which no static bindings are available and performs all checks at runtime instead of at compile time. The API works the same as the API for &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/object/trait.ObjectExt.html#tymethod.set_property&quot;&gt;setting&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.15/docs/glib/object/trait.ObjectExt.html#tymethod.property&quot;&gt;getting&lt;/a&gt; object properties.&lt;/p&gt;

&lt;h3 id=&quot;gtk4-rs-and-builderscope&quot;&gt;gtk4-rs and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BuilderScope&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;The most important feature that landed on this release is a Rust &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BuilderScope&lt;/code&gt; implementation thanks to one of the awesome contributions of &lt;a href=&quot;https://github.com/jf2048&quot;&gt;@jf2048&lt;/a&gt;. This will allow applications to set callbacks/functions names in the UI file and define those in your Rust code. This only works with the CompositeTemplate macro. See the &lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/latest/docs/gtk4_macros/attr.template_callbacks.html&quot;&gt;documentations&lt;/a&gt; for how to make use of this new feature.&lt;/p&gt;

&lt;p&gt;We also added:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Trust upstream return nullability: in other words, &lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4&lt;/a&gt; crates trust the nullable annotations provided in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIR&lt;/code&gt; file which replaces a bunch of returned Option and returns only T nowadays. Please open an issue if you find any regressions.&lt;/li&gt;
  &lt;li&gt;GTK 4.6 support, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v4_6&lt;/code&gt; feature to unlock the new APIs.&lt;/li&gt;
  &lt;li&gt;Functions that return a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt; have now a corresponding function that gets you inner value &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;T&lt;/code&gt; directly. Note those will panic if you provide the wrong type.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GtkExpression&lt;/code&gt; helpers to make their usage nicer from Rust:
    &lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;button&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.set_label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Label property&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;label_expression&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.property_expression&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;A bunch of fixed issues, documentation improvements and new book chapters!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;other-crates&quot;&gt;Other crates&lt;/h2&gt;

&lt;p&gt;Other than the classic &lt;a href=&quot;https://github.com/gtk-rs&quot;&gt;gtk-rs&lt;/a&gt; crates, we have also worked on ensuring the ones in https://gitlab.gnome.org/World/Rust and the broader ecosystem received an update:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gstreamer.freedesktop.org/news/#2022-01-16T11:00:00Z&quot;&gt;gstreamer-rs&lt;/a&gt;: release 0.18&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/libadwaita-rs/&quot;&gt;libadwaita-rs&lt;/a&gt;: release 0.1 following up the release of the first stable version 1.0&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/sourceview5-rs/&quot;&gt;sourceview5-rs&lt;/a&gt;: updated to 0.4, with subclassing support&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/libshumate-rs/&quot;&gt;libshumate-rs&lt;/a&gt;: released an alpha for the GTK4 Map widgetery library&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/sourceview4-rs/&quot;&gt;sourceview4-rs&lt;/a&gt;/&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/libhandy-rs/&quot;&gt;libhandy-rs&lt;/a&gt;/&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/libdazzle-rs/&quot;&gt;libdazzle-rs&lt;/a&gt;/&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/gspell-rs/&quot;&gt;gspell-rs&lt;/a&gt;/&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/poppler-rs/&quot;&gt;poppler-rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://world.pages.gitlab.gnome.org/Rust/libflatpak-rs/&quot;&gt;libflatpak-rs&lt;/a&gt;: first release of the libflatpak bindings&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AaronErhardt/Relm4&quot;&gt;Relm4&lt;/a&gt;: release 0.4, with many new features and improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;changes&quot;&gt;Changes&lt;/h3&gt;

&lt;p&gt;For the interested ones, here is the list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;uri: re-export URI parsing utilities: &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/167&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/169&quot;&gt;part 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/170&quot;&gt;Fix some typo and warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;glib: Fix invalid types let &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from_variant&lt;/code&gt; panic &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/165&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/171&quot;&gt;part 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/168&quot;&gt;Fix some typo and warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Remove unwanted warnings from the clone macro: &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/183&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/185&quot;&gt;part 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/188&quot;&gt;Make stronger guarantees on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToValue&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/184&quot;&gt;Add cairo::Result type alias&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/192&quot;&gt;Replace unneeded doc comments with comments&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;glib: Re-export main context acquire guard: &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/194&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/195&quot;&gt;part 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/217&quot;&gt;cairo: silence self_named_constructor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/215&quot;&gt;glib: ignore unref return value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/218&quot;&gt;gio: Added basic &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Initable&lt;/code&gt; implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/222&quot;&gt;add pango_attr_font_desc_new&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/219&quot;&gt;Merge README files and crate documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/216&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VariantDict&lt;/code&gt;: Add more type lookup methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/221&quot;&gt;Add possibility to inspect pango attribute types and downcast them&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/220&quot;&gt;Add function to consume raw data of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurface&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/223&quot;&gt;glib/variant: Expose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_variant_get_normal_form()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/224&quot;&gt;glib/variant: add fallible child-value getter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/228&quot;&gt;variant: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;into_owned()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/226&quot;&gt;variant: Add more APIs to access typed children&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/227&quot;&gt;variant: Add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bytes()&lt;/code&gt; method.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/229&quot;&gt;variant: Add an API to iterate over &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;as&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;glib: add manual bindings for collation utils: &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/235&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/237&quot;&gt;part 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/238&quot;&gt;variant: Expose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g\_variant\_byteswap()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/239&quot;&gt;gio: Fix behavior of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SettingsBindFlags::INVERT\_BOOLEAN&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/243&quot;&gt;Remove the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;links&lt;/code&gt; annotations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/245&quot;&gt;glib: adapt to signed vs. unsigned libc::c_char to fix non-x86 builds&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/249&quot;&gt;Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;to_glib_full()&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VariantType&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/250&quot;&gt;gio: Generating binding for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g-signal&lt;/code&gt; signal of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DBusProxy&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/205&quot;&gt;Ignore &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;find_with_equal_func&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ListStore&lt;/code&gt; until a suitable API is provided by the C library&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/257&quot;&gt;gio: Don’t leak &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;transfer none&lt;/code&gt; return values in ActionMap/ActionGrou…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/260&quot;&gt;gio: fix gtask example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/261&quot;&gt;bind gtask run in thread&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;cairo: Fix up reference counting in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Surface::map_to_image()&lt;/code&gt;: &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/266&quot;&gt;part 1&lt;/a&gt; and &lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/268&quot;&gt;part 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/270&quot;&gt;Add more default object implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/95&quot;&gt;Regenerate with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl Trait&lt;/code&gt; instead of named types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/275&quot;&gt;Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromGlibPtrBorrow&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::SendValue&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/279&quot;&gt;docs: Fix the examples for variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/280&quot;&gt;glib: Merge variants of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wrapper!&lt;/code&gt; as much as possible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/282&quot;&gt;Use bool instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gboolean&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;graphene&lt;/code&gt; for FFI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/288&quot;&gt;Remove unused dependencies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/284&quot;&gt;Add support for inline-allocated Boxed types and various graphene fixups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/290&quot;&gt;glib: Don’t take internal value out of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt; struct but instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;into_raw()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/293&quot;&gt;cairo: remove target_os = “ios”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/292&quot;&gt;Remove iOS target from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;quartz_surface&lt;/code&gt; in Cairo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/298&quot;&gt;Include the LICENSE file in the published crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/299&quot;&gt;glib: Implement TimeSpan as a wrapper type with some convenience API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/295&quot;&gt;Declare minimum supported Rust version in Cargo.toml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/300&quot;&gt;Main context fixups&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/256&quot;&gt;glib: Provide default implementations for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsSubclassable&lt;/code&gt; methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/304&quot;&gt;Allow to change visibility in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::wrapper&lt;/code&gt; macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/308&quot;&gt;Add missing pango attrs and cleanup &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glyph*&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/305&quot;&gt;Various Pango fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/309&quot;&gt;Make parameters to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::ListStore::splice()&lt;/code&gt; more generic&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/311&quot;&gt;glib: impl &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromGlibContainerAsVec&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*const $ffi_name&lt;/code&gt; and for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoxedInline&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/312&quot;&gt;Minor cleanup as preparation for edition 2021&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/313&quot;&gt;pango: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DerefMut&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Attribute&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/314&quot;&gt;Upgrade to edition 2021&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/315&quot;&gt;glib: add simpler variants of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec::new_override&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/318&quot;&gt;Generate nullable paths&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/320&quot;&gt;glib: Add documentation to all undocumented &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectExt&lt;/code&gt; and related functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/321&quot;&gt;glib: Fix bug in main context channel test that caused it to deadlock&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/322&quot;&gt;object: fix documentation typo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/319&quot;&gt;gio: Add various &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::File&lt;/code&gt; missing functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/316&quot;&gt;gio: add manual bindings for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GIOExtension&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/327&quot;&gt;Change &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; constants as associated constants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/328&quot;&gt;glib: Assert that the memory allocated by GLib for the private instance data is aligned correctly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/330&quot;&gt;pango: Add missing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Matrix&lt;/code&gt; methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/325&quot;&gt;glib: add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get_owned&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/331&quot;&gt;gio: Make progress callback in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;File::copy_async&lt;/code&gt; optional&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/332&quot;&gt;glib: Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::String&lt;/code&gt; bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/333&quot;&gt;Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Into&amp;lt;&amp;amp;str&amp;gt;&lt;/code&gt; trait bounds and directly use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;str&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/334&quot;&gt;glib: Add support for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BTreeMap&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/323&quot;&gt;Add ObjectExt helpers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/339&quot;&gt;glib: make error &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;message()&lt;/code&gt; public&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/340&quot;&gt;glib: Lots of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VariantType&lt;/code&gt; improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/341&quot;&gt;glib-macros: Add a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt; trait derive macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/344&quot;&gt;Some more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt; API additions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/347&quot;&gt;glib: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Deref&lt;/code&gt; impls for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FixedSizeVariantArray&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/348&quot;&gt;glib: Mark wrapper structs for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Shared&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Boxed&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Type&lt;/code&gt; as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#\[repr(transparent)\]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/346&quot;&gt;macros: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromGlibNone&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Full&lt;/code&gt; for shared boxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/349&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Sync&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PartialOrd&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ord&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Hash&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GPtrSlice&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GSlice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/351&quot;&gt;glib: Re-use paramspec names instead of creating a new NUL-terminated…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/352&quot;&gt;glib: Simplify enum/flags class implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/354&quot;&gt;pango: take a generic attr in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AttrList&lt;/code&gt; methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/356&quot;&gt;macros: make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParentType&lt;/code&gt; optional&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/355&quot;&gt;Add wrapper type around &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GList&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GSList&lt;/code&gt; and various container cleanups/improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/358&quot;&gt;Remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Array&lt;/code&gt; bindings and make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ByteArray&lt;/code&gt; bindings safer (plus micro-optimization)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/360&quot;&gt;gio: don’t expose task module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/361&quot;&gt;gdk-pixbuf: generate missing auto bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/338&quot;&gt;Add gclosure macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/363&quot;&gt;Simplify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsImplementable&lt;/code&gt; implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/359&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GStringBuilder&lt;/code&gt; and generate Variant type signatures with only safe code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/371&quot;&gt;glib: Add doc alias for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_error_new()&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Error::new()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/372&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Sync&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;List&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SList&lt;/code&gt; if the items implement the corresponding trait&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/374&quot;&gt;Rename ffi crates on Cargo.toml instead of inside source code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/376&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromValue&lt;/code&gt; for references of object/shared/boxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/377&quot;&gt;glib: Fix missing indirection in previous commit and add tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/381&quot;&gt;glib: Use plain FFI functions instead of a GClosure for the property binding transform functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/380&quot;&gt;glib: Validate signal class handler return value and arguments when chaining up&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/383&quot;&gt;glib: Mark &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_get_user_special_dir()&lt;/code&gt; return value as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nullable&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/384&quot;&gt;Rename various constructors for consistency&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/385&quot;&gt;glib: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromValue&lt;/code&gt; implementations for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;Boxed&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;Shared&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;Object&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/386&quot;&gt;glib: Add API for non-destructive iteration over a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;List&lt;/code&gt; / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SList&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/366&quot;&gt;glib: Add new trait for allowing to unwrap the return value of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Closure::emit()&lt;/code&gt; directly instead of working with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/364&quot;&gt;macros: Update macro syntax for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;enum&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flags&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;boxed&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;variant&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/393&quot;&gt;glib: return a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec&lt;/code&gt; for override methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/395&quot;&gt;glib: add missing doc-aliases to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Type&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/397&quot;&gt;Generate missing const doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/400&quot;&gt;glib: make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spawn\*()&lt;/code&gt; return the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SourceId&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/402&quot;&gt;glib/gir: ignore &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_clear_error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/403&quot;&gt;glib: Fix accumulator trampoline in signals defined from Rust&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/404&quot;&gt;glib: specify it’s a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt; struct and not a derive macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/389&quot;&gt;graphene: add getters/setters for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Size&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Point&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Point3D&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/405&quot;&gt;glib: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectSubclassIsExt&lt;/code&gt; trait with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl_&lt;/code&gt; method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/413&quot;&gt;pango: allow for the modifying &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GlyphInfo&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GlyphGeometry&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/420&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ValueTypeOptional&lt;/code&gt; for shared/boxed/object types in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::wrapper&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/410&quot;&gt;glib: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AnyGObject&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/421&quot;&gt;gio: impl &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::iter::Extend&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::ListStore&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/428&quot;&gt;gio: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Extend&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ListStore&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AsRef&amp;lt;Object&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/430&quot;&gt;glib: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToValue&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;signal::Inhibit&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/427&quot;&gt;gio: add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ListModel::snapshot&lt;/code&gt; and implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IntoIterator&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ListModel&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/432&quot;&gt;glib-macros: Use absolute paths in proc macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/435&quot;&gt;glib: Add a helper trait for getting an object from a wrapper or subclass&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/433&quot;&gt;Use impl_() in tests/examples instead of from_instance()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/437&quot;&gt;glib: Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl_&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/438&quot;&gt;gio: mark &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;content_type_guess&lt;/code&gt; parameter as filename&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/440&quot;&gt;glib: Add Object::NONE const&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/412&quot;&gt;glib: ignore various unneeded functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/444&quot;&gt;glib: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpec::is_valid_name&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/446&quot;&gt;gio: Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Task&lt;/code&gt; binding sound and support generics in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wrapper!&lt;/code&gt; macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/449&quot;&gt;glib: Reduce allocations in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g_log&lt;/code&gt; bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/453&quot;&gt;gio: require &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send&lt;/code&gt; also for the source object&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/455&quot;&gt;gio: mark creating &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Task&lt;/code&gt; as unsafe and add public documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/458&quot;&gt;gio: generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SimpleProxyResolver&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/459&quot;&gt;gio: generate missing errors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/461&quot;&gt;glib: Correctly validate signal argument types in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;emit_with_details()&lt;/code&gt; variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/463&quot;&gt;glib: Don’t query signals twice when connecting&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/464&quot;&gt;glib: Handle zero &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Quark&lt;/code&gt;s correctly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/465&quot;&gt;glib: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&amp;lt;Infallible&amp;gt;&lt;/code&gt; for error types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/470&quot;&gt;cairo: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send+Sync&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurfaceData&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurfaceDataOwned&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/471&quot;&gt;cairo: Allow converting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurfaceDataOwned&lt;/code&gt; back into an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ImageSurface&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs&quot;&gt;gtk3-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/612&quot;&gt;Bump minimum required version to 1.53.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/614&quot;&gt;gtk: Acquire and leak main context in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::init()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/621&quot;&gt;gtk: Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Clipboard::request_image&lt;/code&gt; pixbuf an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/626&quot;&gt;gdk: Don’t require &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;mut self&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Event&lt;/code&gt; getters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/617&quot;&gt;gtk: Add test for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::init()&lt;/code&gt; and port &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TEST_THREAD_WORKER&lt;/code&gt; from gtk4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/629&quot;&gt;gtk: Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ButtonImpl&lt;/code&gt; depend on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BinImpl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/630&quot;&gt;gtk: Nullable callback param&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/634&quot;&gt;gtk: Add more default object implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/639&quot;&gt;Add support for inline-allocated Boxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/641&quot;&gt;gdk: Fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RGBA::parse()&lt;/code&gt; signature and implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromStr&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/649&quot;&gt;Mark simple structs as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoxedInline&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/650&quot;&gt;Simplify various &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsSubclassable&lt;/code&gt; implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/652&quot;&gt;examples: fix pango attributes per gtk-rs-core changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/653&quot;&gt;Update to 2021 Rust Edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/654&quot;&gt;gtk: Add missing methods on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TreeViewColumn&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/655&quot;&gt;gtk: Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Window::focus&lt;/code&gt; into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Windows::focused_widget&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/656&quot;&gt;gdk: remove unsafe marker for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Atom::value&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/657&quot;&gt;gtk: panic if gtk wasn’t init at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;class_init&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/658&quot;&gt;gdk: add helpers for checking which display is being used&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/659&quot;&gt;examples: Don’t silently ignore errors when property bindings can’t be established&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/660&quot;&gt;gdk: bind &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WaylandWindow&lt;/code&gt; manually&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/661&quot;&gt;gtk: implement subclassing for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Scrolledwindow&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/662&quot;&gt;Replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; constants as associated constants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/663&quot;&gt;Update per &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ObjectExt&lt;/code&gt; changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/671&quot;&gt;examples: update per pango::AttrList simplification&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/665&quot;&gt;gdkwayland: Add missing wayland types and create new gdkwayland crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/673&quot;&gt;gdk: add setters to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RGBA&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/675&quot;&gt;gtk: Fix usage of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pthread_main_np()&lt;/code&gt; return value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/682&quot;&gt;gtk3-macros: make the doc example building&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/683&quot;&gt;Simplify imports in doc example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/685&quot;&gt;Generate missing doc aliases for consts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/689&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk_print_operation_get_error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/691&quot;&gt;gtk/builder: manually implement several methods (custom return codes)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/694&quot;&gt;Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl_&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/699&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Container::(get|set)_property&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/589&quot;&gt;book: Fix explanation in gobject memory management&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/583&quot;&gt;book: Improve &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;todo_app&lt;/code&gt; listing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/588&quot;&gt;Fixed small typo in Virtual methods example README&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/590&quot;&gt;book: Use weak reference in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gobject_memory_management&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/598&quot;&gt;book: Rename listing app-id to org.gtk-rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/599&quot;&gt;book: Finish up remainder of app-id&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/600&quot;&gt;book: Mention that expressions only go in one direction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/577&quot;&gt;book: Add “Actions &amp;amp; Menus” chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/602&quot;&gt;book: Add headings to existing chapters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/605&quot;&gt;book: Fix action name in book listing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/595&quot;&gt;gtk: Add more manual default implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/601&quot;&gt;book: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Variant&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gobject_values&lt;/code&gt; chapter &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/609&quot;&gt;gdk: expose &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EventKind&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/608&quot;&gt;gsk: rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Renderer&lt;/code&gt; trait&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/611&quot;&gt;gdk: fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToplevelSize::bounds&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/615&quot;&gt;Add support for inline-allocated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Boxed&lt;/code&gt; types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/625&quot;&gt;book: Fix meson build instruction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/592&quot;&gt;book: Fix shortcut in todo listing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/626&quot;&gt;gtk: Fixed a typo in the README.md&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/629&quot;&gt;gtk/gsk: remove C convenience functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/620&quot;&gt;book: Add chapter about todo_app_2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/635&quot;&gt;gtk: make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*_set_sort_func&lt;/code&gt; use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Ordering&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/634&quot;&gt;examples: Add an example for a widget that scales its child&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/638&quot;&gt;wayland: Update to wayland-client 0.29&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/631&quot;&gt;simplify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsSubclassable&lt;/code&gt; implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/640&quot;&gt;gtk: don’t deref a null ptr on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;EntryBuffer&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/642&quot;&gt;gtk: take the closure on last param for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ClosureExpression&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/612&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FileChooser::add_choice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/531&quot;&gt;gtk-macros: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CompositeTemplate&lt;/code&gt;: support setting internal-child to true&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/641&quot;&gt;book: Fix videos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/643&quot;&gt;gtk: drop unneeded builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/644&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PrintSettings::set_page_ranges&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/651&quot;&gt;gtk: ignore &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StringList::take&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/650&quot;&gt;gdk: drop automatic &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;device_tool getter&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Device&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/649&quot;&gt;gdk: bind &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Event::get_device_tool&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/652&quot;&gt;book: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;splice&lt;/code&gt; in lists listings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/645&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Shortcut::with_arguments&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/653&quot;&gt;gtk: Implement missing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Event&lt;/code&gt; functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/660&quot;&gt;book/examples: Use dash instead of underline for properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/658&quot;&gt;gtk: manually implement more functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/665&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CellLayout::set_attributes&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/666&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accelerator_parse_with_keycode&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/667&quot;&gt;gtk: free memory on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Drop&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_qdata&lt;/code&gt; uses&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/534&quot;&gt;gdk: add helpers for checking which display is being used&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/661&quot;&gt;book: Add docs for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Builder&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Menu&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/657&quot;&gt;book: Mention string list in lists chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/672&quot;&gt;gsk: drop manual &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromGlibContainerAsVec&lt;/code&gt; implementation for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ColorStop&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/671&quot;&gt;book: Simplify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;splice&lt;/code&gt; usage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/675&quot;&gt;gtk: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FromIterator&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Extend&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StringList&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/679&quot;&gt;gdk-x11: generate missing functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/681&quot;&gt;book: Fix todo_app_2 chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/684&quot;&gt;Replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; constants as associated constants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/670&quot;&gt;book: Add cross-platform installation instructions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/689&quot;&gt;gdk: remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MemoryFormat::NFormats&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/699&quot;&gt;book: Fix book link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/690&quot;&gt;Improves variants for getters that returns &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/702&quot;&gt;gtk: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SymbolicPaintable&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/703&quot;&gt;gtk: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl IntoIterator&amp;lt;Item = Expression&amp;gt;&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ClosureExpression&lt;/code&gt; params&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/704&quot;&gt;gtk: Allow slices on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ClosureExpression&lt;/code&gt;’s params&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/694&quot;&gt;gtk: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PropExpr&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ChainExpr&lt;/code&gt; as convenience traits to chain &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GtkExpressions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/709&quot;&gt;Remove unnecessary clone&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/708&quot;&gt;book: Use the new expressions API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/715&quot;&gt;drop &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;instance_init&lt;/code&gt; per &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;IsImplementable&lt;/code&gt; changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/716&quot;&gt;gdk: Add setters to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RGBA&lt;/code&gt; and missing builder methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/718&quot;&gt;gtk: Reduce number of allocations in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;accelerator_parse_with_keycode&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/720&quot;&gt;gtk: backport macos fix for the main thread&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/721&quot;&gt;gsk: drop empty functions module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/724&quot;&gt;docs: add very brief info for each subclass module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/725&quot;&gt;gsk: fix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Renderer&lt;/code&gt; trait name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/744&quot;&gt;gtk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk_print_operation_get_error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/747&quot;&gt;gdkx11: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;xevent&lt;/code&gt; signal&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/751&quot;&gt;gtk: manually implement callback getters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/636&quot;&gt;gtk: re-implement missing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TextBuffer&lt;/code&gt; functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/711&quot;&gt;book: Add chapter about CSS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/754&quot;&gt;book: Move icon section from css to actions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/755&quot;&gt;gdkx11: don’t mark safe functions as unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/756&quot;&gt;gdkx11: fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/714&quot;&gt;gdkx11: Allow chaining expressions with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Closure&lt;/code&gt; objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/710&quot;&gt;gtk: Add method to create a “this” expression from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GObject&lt;/code&gt; types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/757&quot;&gt;book: Fix code snippets and some formatting in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gobject_memory_management&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/760&quot;&gt;book: Extend action chapter to mention &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PropertyAction&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/769&quot;&gt;examples: Update to glium 0.31&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/773&quot;&gt;gdk: add associative constants for keys&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/776&quot;&gt;book: Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imp()&lt;/code&gt; everywhere instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;from_instance()&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl_()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/782&quot;&gt;book: Fix broken &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_state&lt;/code&gt; link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/784&quot;&gt;gtk: string list: implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Default&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/786&quot;&gt;gdk: trust nullability annotations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/775&quot;&gt;gtk: Rework AccessibleExtManual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/793&quot;&gt;gdk/gtk/gsk: manually implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Debug&lt;/code&gt; for shared types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/792&quot;&gt;gtk: use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ToVariant&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Actionable::set_action_target&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/794&quot;&gt;gtk: provide gdk backend information to dependencies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/765&quot;&gt;gdk: add sanity checks for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Texture::download&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/795&quot;&gt;gdk: Implement &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Send+Sync&lt;/code&gt; for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Texture&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/797&quot;&gt;gtk: Automatically generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ParamSpecExpression&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/770&quot;&gt;examples: Add a custom model example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/805&quot;&gt;book: Use the predefined action “window.close”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/813&quot;&gt;book: Fix error message for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;activate_action&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/691&quot;&gt;examples: Add composite template callback macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/740&quot;&gt;examples: Add example of a Rotation Bin widget&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1196&quot;&gt;Fix doc condition for warning&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1201&quot;&gt;docs: disable language warning for various languages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1187&quot;&gt;docs: don’t generate for properties with getter/setter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1206&quot;&gt;book: Replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shell&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;console&lt;/code&gt; codeblocks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1210&quot;&gt;Remove the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;links&lt;/code&gt; annotations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1212&quot;&gt;Do not generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Default&lt;/code&gt; implementation for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&amp;lt;&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1213&quot;&gt;codegen/flags: Put doc attribute on struct instead of macro calls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1215&quot;&gt;Update system-deps version in generated crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1217&quot;&gt;Config for nullable callback param&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1218&quot;&gt;Fix parameter setting by applying it to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rust_parameters&lt;/code&gt; field as well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1222&quot;&gt;Add default impls for all objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1153&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl Trait&lt;/code&gt; instead of generic type names with trait bound&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1223&quot;&gt;Update to system-deps 5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1224&quot;&gt;build: Emit rerun-if-changed for branch file on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ref: &lt;/code&gt; HEAD&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1227&quot;&gt;Handle nullability configuration for async function return values&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1228&quot;&gt;Always output git short revisions with 12 characters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1229&quot;&gt;Remove type version heuristics&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1230&quot;&gt;Handle objects correctly where a supertype has a newer version than the type itself&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1232&quot;&gt;Special case C &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_Bool&lt;/code&gt; by treating it like a Rust bool instead of gboolean&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1234&quot;&gt;Implement support for inline allocated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Boxed&lt;/code&gt; types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1239&quot;&gt;book: Fix references to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;girs_dir&lt;/code&gt; config option&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1240&quot;&gt;book: Remove suggestions to add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;extern crate&lt;/code&gt; imports&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1242&quot;&gt;book: Add a section on fixing missing macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1241&quot;&gt;book: Fix sys crate import to use the ‘ffi’ convention.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1243&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;use glib::translate::*&lt;/code&gt; for generating the equal special function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1244&quot;&gt;Switch to 2021 edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1237&quot;&gt;analysis: mark &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;to_str&lt;/code&gt; functions as renamed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1248&quot;&gt;codegen: generate deprecated cfg attribute for Default trait&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1245&quot;&gt;Fix support for nullable paths / &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;OsString&lt;/code&gt;s&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1253&quot;&gt;codegen: generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NONE&lt;/code&gt; constants as associated constants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1255&quot;&gt;codegen: simplify properties getters/setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1258&quot;&gt;codegen: fix a logic issue in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;version_condition_no_doc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1259&quot;&gt;codegen: don’t assume child props are gtk only&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1263&quot;&gt;codegen: don’t re-export builder types on crate root&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1264&quot;&gt;codegen: generate builders inside a builders module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1262&quot;&gt;Correctly generate opaque types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1265&quot;&gt;codegen: don’t generate a functions mod if it’s empty&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1266&quot;&gt;codegen: don’t generate empty impl blocks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1267&quot;&gt;codegen: stop renaming crates inside sys generated code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1270&quot;&gt;Remove “auto” folder when regenarating non-sys crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1272&quot;&gt;Update to system-deps 6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1271&quot;&gt;Move auto folder removal into gir directly&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1273&quot;&gt;Only use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;remove_dir_all&lt;/code&gt; if there is a folder to remove&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1274&quot;&gt;Mark gi-docgen as optional&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1275&quot;&gt;gir: fix per &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;emit_by_name&lt;/code&gt; change&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1280&quot;&gt;Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#\[must\_use\]&lt;/code&gt; to the autogenerated builder types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1281&quot;&gt;codegen/function: assert sane GError behavior&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1282&quot;&gt;docs: work around glib::Variant case&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1284&quot;&gt;docs: allow documenting global functions in traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1283&quot;&gt;sys: stop importing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;time_t&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1285&quot;&gt;docs: allow to set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;doc_struct_name&lt;/code&gt; for global functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1286&quot;&gt;codegen: trim extra &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_async&lt;/code&gt; in future variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1287&quot;&gt;writer: check return code as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gboolean&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1289&quot;&gt;docs: avoid generating docs for unneeded properties getters/setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1293&quot;&gt;parser: ignore private records&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1294&quot;&gt;support fundamental types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1296&quot;&gt;analysis: don’t take a slice of copy types by ref&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1300&quot;&gt;analysis: fix logic code in slice of copy types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1292&quot;&gt;Allow tweaking visibility&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1303&quot;&gt;codegen/special_functions: Add missing space between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pub&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fn&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1301&quot;&gt;Generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[must_use]&lt;/code&gt; where needed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1304&quot;&gt;codegen: go through the safe bindings for child properties&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/A6GibKm&quot;&gt;@A6GibKm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AaronErhardt&quot;&gt;@AaronErhardt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alatiera&quot;&gt;@alatiera&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alcarney&quot;&gt;@alcarney&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/arcnmx&quot;&gt;@arcnmx&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ArekPiekarz&quot;&gt;@ArekPiekarz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/atheriel&quot;&gt;@atheriel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bbb651&quot;&gt;@bbb651&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bvinc&quot;&gt;@bvinc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cgwalters&quot;&gt;@cgwalters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/decathorpe&quot;&gt;@decathorpe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/elmarco&quot;&gt;@elmarco&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/euclio&quot;&gt;@euclio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/federicomenaquintero&quot;&gt;@federicomenaquintero&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fengalin&quot;&gt;@fengalin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Gymxo&quot;&gt;@Gymxo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hbina&quot;&gt;@hbina&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ids1024&quot;&gt;@ids1024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jackpot51&quot;&gt;@jackpot51&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jf2048&quot;&gt;@jf2048&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/keltrycroft&quot;&gt;@keltrycroft&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lehmanju&quot;&gt;@lehmanju&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lucab&quot;&gt;@lucab&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MarijnS95&quot;&gt;@MarijnS95&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MGlolenstine&quot;&gt;@MGlolenstine&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nagisa&quot;&gt;@nagisa&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pbor&quot;&gt;@pbor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/philn&quot;&gt;@philn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/piegamesde&quot;&gt;@piegamesde&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ranfdev&quot;&gt;@ranfdev&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RealKC&quot;&gt;@RealKC&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/remilauzier&quot;&gt;@remilauzier&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SeaDve&quot;&gt;@SeaDve&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sophie-h&quot;&gt;@sophie-h&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tronta&quot;&gt;@tronta&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Ungedummt&quot;&gt;@Ungedummt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vhdirk&quot;&gt;@vhdirk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/xanathar&quot;&gt;@xanathar&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sun, 16 Jan 2022 17:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2022/01/16/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2022/01/16/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>Here comes the 4</title>
        <description>&lt;p&gt;It’s been a long time since the last release, and, as you can guess, a lot of things happened in
this span of time. Let’s start with the most important one:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;gtk-rs now provides bindings for GTK4 libraries!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They are all available in the &lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt; repository.&lt;/p&gt;

&lt;p&gt;We also wrote an introductory book to teach users how to use &lt;strong&gt;gtk4-rs&lt;/strong&gt;. You can read it
&lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/latest/book/&quot;&gt;here&lt;/a&gt;. A more detailed blog post about GTK4 will
follow in the next days.&lt;/p&gt;

&lt;h2 id=&quot;new-website-and-new-logo&quot;&gt;New website and new logo&lt;/h2&gt;

&lt;p&gt;We used this occasion to completely re-design the website and also make a logo. Since you’re already
here, don’t hesitate to go take a look around!&lt;/p&gt;

&lt;h2 id=&quot;gnome-circle&quot;&gt;GNOME Circle&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;gtk-rs&lt;/strong&gt; is now part of the &lt;a href=&quot;https://circle.gnome.org/&quot;&gt;GNOME Circle&lt;/a&gt;! It allows our contributors
to join the GNOME foundation if they want to in addition to some other benefits. Check the website
for more details.&lt;/p&gt;

&lt;h2 id=&quot;repositories-changes&quot;&gt;Repositories changes&lt;/h2&gt;

&lt;p&gt;This release also saw changes to the gtk-rs repositories structure. We now have three main
repositories:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;: It contains crates which are considered “core” because they are used
by both GTK3 and GTK4, but also by other projects such as &lt;a href=&quot;https://gitlab.freedesktop.org/gstreamer/gstreamer-rs&quot;&gt;gstreamer-rs&lt;/a&gt;:
    &lt;ul&gt;
      &lt;li&gt;cairo&lt;/li&gt;
      &lt;li&gt;gdk-pixbuf&lt;/li&gt;
      &lt;li&gt;gio&lt;/li&gt;
      &lt;li&gt;glib&lt;/li&gt;
      &lt;li&gt;glib-macros&lt;/li&gt;
      &lt;li&gt;graphene&lt;/li&gt;
      &lt;li&gt;pango&lt;/li&gt;
      &lt;li&gt;pangocairo&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs&quot;&gt;gtk3-rs&lt;/a&gt;: Contains crates which are part of the GTK3 ecosystem:
    &lt;ul&gt;
      &lt;li&gt;atk&lt;/li&gt;
      &lt;li&gt;gdk&lt;/li&gt;
      &lt;li&gt;gdkx11&lt;/li&gt;
      &lt;li&gt;gtk3-macros&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;: Contains crates which are part of the GTK4 ecosystem:
    &lt;ul&gt;
      &lt;li&gt;gdk4&lt;/li&gt;
      &lt;li&gt;gdk4-wayland&lt;/li&gt;
      &lt;li&gt;gdk4-x11&lt;/li&gt;
      &lt;li&gt;gsk4&lt;/li&gt;
      &lt;li&gt;gtk4&lt;/li&gt;
      &lt;li&gt;gtk4-macros&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another important point about this: all crates in one repository share the same version number now.
Before it was a bit of a mess so we decided to simplify it. So here are the version numbers for each
repository:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;: 0.14&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs&quot;&gt;gtk3-rs&lt;/a&gt;: 0.14&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;: 0.1&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;documentation-improvements&quot;&gt;Documentation improvements&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;gtk-rs&lt;/strong&gt; crates use the C documentation, however we improved its rendering a bit to make it even
more useful for Rust developers:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The items’ links are now correctly generated.&lt;/li&gt;
  &lt;li&gt;If code examples are not written in Rust, we now add warnings to avoid confusion.&lt;/li&gt;
  &lt;li&gt;We added doc aliases, so you can now search signal names and even C function names directly.&lt;/li&gt;
  &lt;li&gt;Global functions, builder patterns, constants and statics are now documented as well.&lt;/li&gt;
  &lt;li&gt;Arguments which are C specific and therefore not used in the Rust bindings are not rendered anymore.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;dependencies-are-re-exported&quot;&gt;Dependencies are re-exported&lt;/h2&gt;

&lt;p&gt;Instead of a long explanation, let’s take an example. You have a GTK application and you also use
Cairo and GDK. Before this release, you would add all the 3 dependencies to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Cargo.toml&lt;/code&gt; file
to be able to use them. Now, you only need to import GTK and then you can do:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cairo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gdk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And that’s it! It’ll make your management of dependencies much simpler. To be noted, relevant traits
are also re-exported in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prelude&lt;/code&gt;, so importing it will give you access to them:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gdk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;prelude&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// ...&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// This uses the `gdk::prelude::WindowExtManual` trait, through the prelude.&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;w&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gdk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;default_root_window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Last note about the re-exports: the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-sys&lt;/code&gt; crates are also re-exported under the name &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ffi&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ffi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// You now have access to all raw C-functions of GTK.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;the-value-trait-was-refactored&quot;&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt; trait was refactored&lt;/h2&gt;

&lt;p&gt;The main change is that for non-nullable types &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get()&lt;/code&gt; will never ever return &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt;,
replacing the previous confusing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get_some()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In addition it is now possible to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get()&lt;/code&gt; a nullable type directly without &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&lt;/code&gt;
wrapping. If the value was actually &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; this would return an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Err&lt;/code&gt;. In cases where the value
being &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; was unexpected this avoids one layer of unwrapping.&lt;/p&gt;

&lt;p&gt;There is also a new generic &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ValueType&lt;/code&gt; trait that is implemented by all types that can be used
inside a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt; and that allows storing/retrieving types of this value into/from a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;added-gtk-composite-template-support&quot;&gt;Added GTK composite template support&lt;/h2&gt;

&lt;p&gt;For constructing widgets from a UI file, you can either use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Builder&lt;/code&gt; or composite templates.
With the former, you have to keep an instance of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Builder&lt;/code&gt; around. While with composite
templates, you make your custom widget (a subclass of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Widget&lt;/code&gt;) use the template internally and
with the difference of being able to use your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CustomWidget&lt;/code&gt; in a different UI file by defining:&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;object&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;CustomWidget&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;some-property&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;some-value&lt;span class=&quot;nt&quot;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/object&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can now make your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CustomWidget&lt;/code&gt; use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[CompositeTemplate]&lt;/code&gt; derive macro. The work was done
initially for GTK4 Rust bindings, but was backported to GTK3 as well. See
&lt;a href=&quot;https://gtk-rs.org/gtk4-rs/stable/0.1/docs/gtk4_macros/derive.CompositeTemplate.html&quot;&gt;here&lt;/a&gt; or
&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/tree/0.1/examples/composite_template&quot;&gt;here&lt;/a&gt; for examples.&lt;/p&gt;

&lt;p&gt;Composite templates also allow you to use methods defined on your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CustomWidget&lt;/code&gt; as a callback to a
signal directly from the UI file, even though the macro doesn’t support that for now for both
GTK3/GTK4 bindings… But don’t worry, &lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/issues/128&quot;&gt;we’re working on it&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id=&quot;new-and-improved-macros&quot;&gt;New and improved macros&lt;/h2&gt;

&lt;p&gt;In addition to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::object_subclass&lt;/code&gt; attribute macro (see link to paragraph about subclassing
improvements), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib&lt;/code&gt; provides a couple of other macros now for making application development
easier and with less boilerplate:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/macro.clone.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::clone!&lt;/code&gt;&lt;/a&gt;: This macro allows automatic cloning or creation of weak references plus upgrading for closures and greatly simplifies creation of signal handler closures. The documentation contains a couple of examples. While this macro existed in the last release already, it was completely rewritten and made more powerful and got a companion &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;derive&lt;/code&gt; macro &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/derive.Downgrade.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Downgrade&lt;/code&gt;&lt;/a&gt; that extends custom types with the required machinery to be used for weak references in the context of the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/macro.clone.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone!&lt;/code&gt;&lt;/a&gt; macro.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/derive.GBoxed.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GBoxed&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/derive.GSharedBoxed.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GSharedBoxed&lt;/code&gt;&lt;/a&gt;: These derive macros allow using custom Rust types inside &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/value/struct.Value.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;&lt;/a&gt;s, which is required for example for GObject properties and signal parameters/return values or the content of GTK tree views. The first macro always clones the underlying value when necessary while the second makes use of reference counting instead of normal cloning.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/attr.gflags.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::gflags!&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/derive.GEnum.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GEnum&lt;/code&gt;&lt;/a&gt;: These macros allow using Rust enums and &lt;a href=&quot;https://docs.rs/bitflags&quot;&gt;bitflags&lt;/a&gt; to be used inside &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/value/struct.Value.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;&lt;/a&gt;s. See the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/subclass/index.html#example-for-registering-a-glibobject-subclass&quot;&gt;subclassing docs&lt;/a&gt; for examples.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/derive.GErrorDomain.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GErrorDomain&lt;/code&gt;&lt;/a&gt;: This derive macro allows using a suitable Rust enum to be used as an error domain for &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/error/struct.Error.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Error&lt;/code&gt;&lt;/a&gt;s.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See also the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/subclass/index.html#example-for-registering-a-glibobject-subclass&quot;&gt;subclassing docs&lt;/a&gt; for more examples about the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/derive.GBoxed.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GBoxed&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/attr.gflags.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::gflags&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/derive.GEnum.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::GEnum&lt;/code&gt;&lt;/a&gt; macros.&lt;/p&gt;

&lt;h2 id=&quot;improvements-to-subclassing&quot;&gt;Improvements to subclassing&lt;/h2&gt;

&lt;p&gt;Implementing a GObject is simpler, thanks to the introduction of the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib_macros/attr.object_subclass.html&quot;&gt;glib::object_subclass&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;derive&lt;/code&gt; macro. Additionally registering properties and signals now requires less boiler plate. Refer to &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/glib/subclass/index.html#example-for-registering-a-glibobject-subclass&quot;&gt;this page&lt;/a&gt; for a complete example but a minimal example would look as follows now:&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;mod&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;imp&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nd&quot;&gt;#[derive(Default)]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;nd&quot;&gt;#[glib::object_subclass]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectSubclass&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&apos;static&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;MyObject&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ObjectImpl&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;wrapper!&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ObjectSubclass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;imp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyObject&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;Self&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nn&quot;&gt;glib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[])&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;better-cairo-error-handling&quot;&gt;Better cairo error handling&lt;/h2&gt;

&lt;p&gt;Using cairo is now more ergonomic: functions like &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/cairo/struct.Context.html#method.fill&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fill()&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/cairo/struct.Context.html#method.stroke&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stroke()&lt;/code&gt;&lt;/a&gt; return a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt; instead of requiring to manually check the &lt;a href=&quot;https://gtk-rs.org/gtk-rs-core/stable/0.14/docs/cairo/struct.Context.html#method.status&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Context::status()&lt;/code&gt;&lt;/a&gt;. Additionally, all internal calls to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;expect()&lt;/code&gt; on the cairo status were removed, enabling the caller to handle error conditions, rather than causing a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;panic&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;gir-tutorial&quot;&gt;Gir tutorial&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;gtk-rs&lt;/strong&gt; crates are mostly generated automatically thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gir&lt;/a&gt; project. If you also
want to generate your own GObject-based crate bindings, you can use it as well! To help you, we
started a tutorial book that is available &lt;a href=&quot;https://gtk-rs.org/gir/book/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;naming-improvements&quot;&gt;Naming improvements&lt;/h2&gt;

&lt;p&gt;We renamed a lot of functions/methods in order to make them more Rust-compliant. Specifically,
getter functions were renamed from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_something()&lt;/code&gt; to just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;something()&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;is_something()&lt;/code&gt;
while the setters stayed as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_something()&lt;/code&gt;. In addition GObject property getters/setters lost
their property designation from the name (i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_property_something()&lt;/code&gt; was replaced by
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set_something()&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;On this note:&lt;/p&gt;

&lt;h3 id=&quot;note-to-applications-developers&quot;&gt;Note to applications developers&lt;/h3&gt;

&lt;p&gt;Applications developers should use &lt;a href=&quot;https://crates.io/crates/fix-getters-calls&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fix-getters-calls&lt;/code&gt;&lt;/a&gt;
to ease migration of their applications. Use &lt;a href=&quot;https://crates.io/crates/fix-getters-def&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fix-getters-def&lt;/code&gt;&lt;/a&gt;
if you also want your get functions definition to comply with the API standards applied in this
release.&lt;/p&gt;

&lt;h2 id=&quot;minimum-supported-versions&quot;&gt;Minimum supported versions&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rust&lt;/strong&gt; minimum supported version is now &lt;strong&gt;1.51&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ATK: 2.18&lt;/li&gt;
  &lt;li&gt;Cairo: 1.14&lt;/li&gt;
  &lt;li&gt;GDK3: 3.18&lt;/li&gt;
  &lt;li&gt;GDK4: 4.0&lt;/li&gt;
  &lt;li&gt;GDK4-Wayland: 4.0&lt;/li&gt;
  &lt;li&gt;GDKX11: 3.18&lt;/li&gt;
  &lt;li&gt;GDK4-X11: 4.0&lt;/li&gt;
  &lt;li&gt;GDK-Pixbuf: 2.32&lt;/li&gt;
  &lt;li&gt;Gio: 2.48&lt;/li&gt;
  &lt;li&gt;GLib: 2.48&lt;/li&gt;
  &lt;li&gt;Graphene: 1.10&lt;/li&gt;
  &lt;li&gt;GSK4: 4.0&lt;/li&gt;
  &lt;li&gt;GTK3: 3.20&lt;/li&gt;
  &lt;li&gt;GTK4: 4.0&lt;/li&gt;
  &lt;li&gt;Pango: 1.38&lt;/li&gt;
  &lt;li&gt;PangoCairo: 1.38&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;migration-to-the-rust-2018-edition&quot;&gt;Migration to the Rust 2018 edition&lt;/h2&gt;

&lt;p&gt;The gtk-rs crates all migrated to the Rust 2018 edition. Just in time because the 2021 edition is
getting close!&lt;/p&gt;

&lt;h1 id=&quot;changes&quot;&gt;Changes&lt;/h1&gt;

&lt;p&gt;For the interested ones, here is the list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core&quot;&gt;gtk-rs-core&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/3&quot;&gt;translate/TryFromGlib: add shortcut function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/56&quot;&gt;Fix typo in function name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/58&quot;&gt;gio: Only assign to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GError**&lt;/code&gt;s if they’re not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NULL&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/59&quot;&gt;glib: Mark various Variant getter functions correctly as (transfer fu…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/60&quot;&gt;glib: Fix leaks in FromGlibContainer impls for GString&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/72&quot;&gt;glib: Implement main context acquire guard type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/78&quot;&gt;glib: bind freeze_notify and thaw_notify&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/83&quot;&gt;Add missing doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/86&quot;&gt;Add doc alias check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/91&quot;&gt;Add missing doc aliases on variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/90&quot;&gt;Manually bind g_win32_get_package_installation_directory_of_module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/92&quot;&gt;Add more doc aliases on variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/96&quot;&gt;glib: Allow creating Variants from slices instead of just Vecs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/99&quot;&gt;Add missing binding for pango::Attribute::new_shape&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/104&quot;&gt;Expose the type of pango::Attribute&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/105&quot;&gt;glib: add a doc alias for GType&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/108&quot;&gt;Generate missing doc aliases for newtypes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/109&quot;&gt;Generate new bitfields values and more doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/85&quot;&gt;Create Boxed(Value) newtype for Boxed GValue&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/113&quot;&gt;Generate missing doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/117&quot;&gt;gio: allow subtypes as item for Listmodels and improved error message&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/73&quot;&gt;Fix graphene-sys tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/125&quot;&gt;glib-macros: add proc_macro_error attribute to clone&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/116&quot;&gt;Fix glib re-export detection for macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/132&quot;&gt;glib-macros: remove KNOWN_GLIB_EXPORTS&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/136&quot;&gt;Let cancellable be passed into GioFuture instead of creating it by the closure&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/135&quot;&gt;glib: Duplicate some ObjectClass methods to Interface&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/137&quot;&gt;Add missing information for glib clone macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/143&quot;&gt;Remove duplicated doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/148&quot;&gt;glib: explain why Clone isn’t implemented on SourceId&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-rs-core/pull/151&quot;&gt;misc: update docs links &amp;amp; repos links&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/9&quot;&gt;Add gio::TlsBackend&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/8&quot;&gt;glib/functions: fix get_charset logic&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/12&quot;&gt;glib-macros: Use absolute paths to the StaticType trait&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/34&quot;&gt;glib: Add ObjectExt::connect_notify_local()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/11&quot;&gt;glib/translate: take advantage of Rust Option &amp;amp; Result types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/25&quot;&gt;cairo: Update to system-deps 2.0 like everything else&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/158&quot;&gt;glib: Implement Clone for glib::GString&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/156&quot;&gt;glib: Require all the Value traits to be implemented for ObjectType&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/65&quot;&gt;Clone to proc macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/179&quot;&gt;glib::Binding improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/184&quot;&gt;Fix clone macro by allowing returned value with type parameters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/194&quot;&gt;gio/sys: resolve winapi reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/210&quot;&gt;gio: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Settings::bind_with_mapping()&lt;/code&gt; binding&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/214&quot;&gt;glib: Hook up dispose() in ObjectImpl&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/219&quot;&gt;glib: Add an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object::new_subclass()&lt;/code&gt; function&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/220&quot;&gt;Rename glib_wrapper! and glib_object_subclass! to wrapper! and object_subclass!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/181&quot;&gt;glib: implement FromGlibContainer for GString&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/199&quot;&gt;From glib unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/204&quot;&gt;pango: export Glyph* manual types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/208&quot;&gt;pango: implement FromGlibContainerAsVec for GlyphInfo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/202&quot;&gt;glib: Add documentation for SignalHandlerId&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/233&quot;&gt;Fix weird indent in glib/Gir.toml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/232&quot;&gt;Add checks in Date methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/245&quot;&gt;Add bindings for GTask&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/234&quot;&gt;Make DateTime Option returns into Result&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/248&quot;&gt;Make gio::File::get_uri_scheme() nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/10&quot;&gt;In glib_object_wrapper!, use generic Class type instead defining a struct&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/263&quot;&gt;gio: use default methods when possible for ActionGroup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/261&quot;&gt;gio: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib-compile-resources&lt;/code&gt; wrapper, and macro to include&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/272&quot;&gt;Implement StaticType on ()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/275&quot;&gt;glib-macros: Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GBoxed&lt;/code&gt; not require importing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BoxedType&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/278&quot;&gt;gio: Remove unneeded trailing semicolon&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/279&quot;&gt;Cairo: make status() public&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/288&quot;&gt;gio: Add DBusActionGroup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/290&quot;&gt;Keep glib::clone spans for proc macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/292&quot;&gt;glib: rename TypeData::interface_data to class_data&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/299&quot;&gt;glib: ignore new clippy warnings for now&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/301&quot;&gt;cairo: Update system-deps dependency to 3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/304&quot;&gt;glib: Correctly mark future returned by ThreadPool::push_future() as …&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/307&quot;&gt;gio: Mark ETag out parameter in various GFile functions as nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/310&quot;&gt;gio: File::get_child() is not nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/302&quot;&gt;SignalId: add missing methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/315&quot;&gt;glib: rename remaining _generic to _values&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/317&quot;&gt;glib: Derive Ord on Type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/318&quot;&gt;glib: Improve the API of Type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/321&quot;&gt;glib-macros: Forward the visibility of the type into the code generated&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/319&quot;&gt; connect_unsafe: Refactor, then don’t ignore the return_type for null objects &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/335&quot;&gt;glib: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[object_subclass]&lt;/code&gt; proc macro.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/338&quot;&gt;glib: Move &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;type_data()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_type()&lt;/code&gt; to new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe trait&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/343&quot;&gt;cairo: add doc aliases round 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/344&quot;&gt;object: Return a pointer from get_qdata, not a reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/345&quot;&gt;Store class_data/instance_data hashmaps directly instead of boxing an…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/349&quot;&gt;glib: Add _once variants to many methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/350&quot;&gt;glib: add ObjectExt::connect_id &amp;amp; other variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/352&quot;&gt;glib: Distinguish between classes and interfaces at the type level&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/362&quot;&gt;Add support for async blocks in clone macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/364&quot;&gt;Update to GLib 2.68.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/355&quot;&gt;glib: Fix compilation of listbox_model example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/368&quot;&gt;glib: Don’t offset property ids before calling ObjectImpl::set_proper…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/367&quot;&gt;Add a GError derive macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/370&quot;&gt;glib-macros: Fix typo: domain -&amp;gt; domain&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/373&quot;&gt;Fix some clone @default-return handlings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/377&quot;&gt;Fix panic when there is no @default-panic and add more checks for clone macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/383&quot;&gt;glib: Actually call the function in _once wrappers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/388&quot;&gt;pango: Fix x_to_index docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/24&quot;&gt;Remove optional $rust_class_name argument from glib_wrapper!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/411&quot;&gt;cairo: don’t include freetype by default&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/414&quot;&gt;glib: Implement StaticType, FromValue(Optional)? and SetValue(Optional)? for Value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/428&quot;&gt;glib: add Error::into_raw()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/433&quot;&gt;glib: bind WeakRef::set()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/439&quot;&gt;Improve/fix NULL handling in GString&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/441&quot;&gt;glib: add some unit tests for translate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/449&quot;&gt;glib: Remove glib::TypedValue&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/444&quot;&gt;glib: add Array wrapper&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/452&quot;&gt;glib: glib-macros: add SharedType and Shared derive macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/457&quot;&gt;glib: mark ParamSpecType trait as unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/459&quot;&gt;glib: Remove un-generatable type UriParamsIter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/466&quot;&gt;Update to proc-macro-crate 1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/471&quot;&gt;glib-macros: Try harder to find glib&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/416&quot;&gt;glib: Only allow canonical names in property and signal builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/396&quot;&gt;Fix clone macro docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/435&quot;&gt;[docs] Some changes to glib intro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/482&quot;&gt;glib-macros: Don’t assume &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::StaticType&lt;/code&gt; is in scope in the gener…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/475&quot;&gt;glib: bind g_signal_has_handler_pending&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/484&quot;&gt;glib/value: impl StaticType for Option&amp;lt;T&amp;gt; when applicable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/488&quot;&gt;glib: manually bind g_unix_open_pipe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/427&quot;&gt;ToGlib should take Self&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/493&quot;&gt;Impl IntoGlib for Result…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/494&quot;&gt;glib: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;From&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TryFrom&lt;/code&gt; implementations for working with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Char&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/505&quot;&gt;Fix gio file constructors names&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/513&quot;&gt;glib-macros: do not export ::type_() for boxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/514&quot;&gt;glib: Make use of g_source_set_dispose_function() in 2.64+ to fix a r…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/508&quot;&gt;glib: fix some nullables&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/516&quot;&gt;glib: add VariantTy::any()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/492&quot;&gt;gio: Fix callbacks of bus_watch_name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/481&quot;&gt;gio: rename spawnv to plain spawn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/483&quot;&gt;gio: Rename TlsConnectionManualExt to ExtManual and export from prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/521&quot;&gt;Add missing gio reexports&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/498&quot;&gt;Make cairo error handling slightly better&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs&quot;&gt;gtk3-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/16&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Object&amp;lt;T&amp;gt;::as_mut()&lt;/code&gt; without unsafe, and a couple other small things&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/33&quot;&gt;Fix entry_completion quit shortcut&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/32&quot;&gt;Move to edition “2018”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/135&quot;&gt;inet_socket_address: Add std::net::SocketAddr conversions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/35&quot;&gt;Allow log_domain to be null&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/136&quot;&gt;Replace all Into impls with the corresponding From impls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/153&quot;&gt;Reexport sys dependencies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/165&quot;&gt;migrate to 2018 edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/174&quot;&gt;Improve naming&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/186&quot;&gt;gtk: backport fix compute_expand vfunc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/188&quot;&gt;Subclassing for GtkButton&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/189&quot;&gt;Add composite templates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/191&quot;&gt;Add ListModel subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/155&quot;&gt;Replace manual enum functions with autogenerated ones&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/198&quot;&gt;Regenerate everything with latest gir&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/206&quot;&gt;Macro parser improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/212&quot;&gt;Add new pango attributes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/200&quot;&gt;Implement derive macro for Downgrade/Upgrade traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/216&quot;&gt;subclass: Hook up instance_init()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/221&quot;&gt;2015 cleanup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/222&quot;&gt;Add more aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/217&quot;&gt;More checks and add missing license headers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/223&quot;&gt;docs: update per the new macro names&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/201&quot;&gt;export deps from gtk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/228&quot;&gt;Consistently re-export subclassing preludes of dependency crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/231&quot;&gt;Minor type / value improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/252&quot;&gt;Reduce external dependencies for futures-related things&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/253&quot;&gt;Remove useless badges info&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/254&quot;&gt;Regenerate with latest gir/gir-files, remove use_boxed_functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/227&quot;&gt;add manual doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/255&quot;&gt;gio: add Windows stream types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/249&quot;&gt;A couple minor improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/260&quot;&gt;gtk: Implement Deref for TemplateChild&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/257&quot;&gt;add ActionMap/ActionGroup subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/267&quot;&gt;examples: Use autobins&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/268&quot;&gt;Add Dialog::run_future()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/270&quot;&gt;Subclassing refactoring&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/281&quot;&gt;Remove dependency on itertools&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/286&quot;&gt;Mark ‘key’ parameter nullable for KeyFile’s get_comment()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/296&quot;&gt;Update to system-deps 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/269&quot;&gt;gtk: specify template as an attribute of CompositeTemplate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/311&quot;&gt;gdk: Use cairo::Format instead of i32 for the format in Window::creat…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/312&quot;&gt;gtk: Take (column, value) tuples instead of separate slices for the t…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/314&quot;&gt;Added screenshots to example readme&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/27&quot;&gt;Make virtual methods take wrapper of type, not parent&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/327&quot;&gt;gtk: use “assertion” = “skip” instead of manual implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/324&quot;&gt;API changes due to signal-detail PR to gir&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/331&quot;&gt;Implement ListBoxRowImplExt for activate method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/334&quot;&gt;gtk: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;enter_notify_event&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;leave_notify_event&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WidgetImpl&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/337&quot;&gt;Subclass cleanup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/342&quot;&gt;Add a way for the subclassing infrastructure to add per-instance management data&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/353&quot;&gt;Add support for chaining up to parent interface implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/361&quot;&gt;Make &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;drag-motion&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;drag-drop&lt;/code&gt; signals return &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bool&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Inhibit&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/366&quot;&gt;Use girs_directories option from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Gir.toml&lt;/code&gt; files instead of using “-d” by default on gir&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/371&quot;&gt;Fix async clone closures handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/273&quot;&gt;Don’t need serial_test_derive&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/379&quot;&gt;Fix use of gflags attribute in the subclass example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/375&quot;&gt;Add layout.rs, and manual LayoutLine::x_to_index impl&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/376&quot;&gt;Expose layout line fields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/384&quot;&gt;Replace _new constructor for Unix/Win32 Input and Output streams&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/385&quot;&gt;generator: Iterate gir directories passed on the command line&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/389&quot;&gt;Fix clippy lints&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/394&quot;&gt;add access to analysis.extra_attrs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/395&quot;&gt;Fix #392 export gdk::event::FromEvent&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/386&quot;&gt;Move examples to separate folders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/397&quot;&gt;Examples fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/403&quot;&gt;Further refactor examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/406&quot;&gt;Refactor example to modules&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/408&quot;&gt;Refactor CSS and dialog example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/412&quot;&gt;Add ValueArray::len()/is_empty()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/420&quot;&gt;Improve Debug output for GString, SendValue&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/421&quot;&gt;gio: do not take args in application.run()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/422&quot;&gt;gio: Mark &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DBusProxy&lt;/code&gt; as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send+sync&lt;/code&gt; and regenerate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/425&quot;&gt;gio: implement enumerate_children_async&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/424&quot;&gt;Add Ecosystem section to the README&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/429&quot;&gt;Add minimum Rust supported version&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/415&quot;&gt;Continue refactoring the examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/448&quot;&gt;gtk: make all with_label and with_mnemonic constructors consistent&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/447&quot;&gt;[gtk] Do not return Result from Application::new()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/451&quot;&gt;[gtk] Small Gir.toml cleanup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/211&quot;&gt;Remove get  for getters &amp;amp; properties where applicable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/461&quot;&gt;Return Options for new UnixMountEntry&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/431&quot;&gt;[docs] Some changes to gtk intro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/469&quot;&gt;set minimal features for syn/futures crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/455&quot;&gt;Get removal round 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/479&quot;&gt;list_model: Rename object to item&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/454&quot;&gt;Value trait refactoring&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/465&quot;&gt;Remove doc generation features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/487&quot;&gt;Don’t re-export traits from crate root&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/476&quot;&gt;gtk: Add &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WidgetClassSubclassExt::{css_name,set_css_name}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/495&quot;&gt;gtk: rename StyleContext::property to StyleContext::style_property&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/501&quot;&gt;Regen with latest gir&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/490&quot;&gt;Add rename doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/507&quot;&gt;error: remove misleading example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/497&quot;&gt;gtk: Add binding for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk_container_class_handle_border_width()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/500&quot;&gt;gtk: Add run_future() for native dialogs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/510&quot;&gt;Fix new 1.52 clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/509&quot;&gt;remove the deprecated functions/reduce the number of disabled clippy linters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/512&quot;&gt;Update minimum versions to versions available in Ubuntu 16.04&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/518&quot;&gt;Add a variant prop to the example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/523&quot;&gt;Split core&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/526&quot;&gt;Update URLs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/527&quot;&gt;Fix links to GIO examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/531&quot;&gt;README: it’s gtk3-rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/533&quot;&gt;Update issue templates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/534&quot;&gt;Replace invalid repository name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/536&quot;&gt;gtk: adapt per glib::MainContext changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/538&quot;&gt;Icon size property fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/529&quot;&gt;gdk: Fixes for keymap/keysym API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/539&quot;&gt;Add missing doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/540&quot;&gt;Add doc alias check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/542&quot;&gt;gtk: drop MainContext check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/545&quot;&gt;More doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/546&quot;&gt;regen with latest gir&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/549&quot;&gt;Update crates version for next release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/550&quot;&gt;Ignore tmp emacs files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/551&quot;&gt;Upgrade gtk3-macro crate version to 0.14.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/554&quot;&gt;Remove special handling for Window::present on mac&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/555&quot;&gt;regen with latest gir&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/552&quot;&gt;Gir update and example adjustment&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/556&quot;&gt;Generate missing doc aliases for newtypes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/557&quot;&gt;Regen (new bitfields values and more doc aliases)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/559&quot;&gt;Add more doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/560&quot;&gt;Fix README files format&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/561&quot;&gt;Fix git URLs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/563&quot;&gt;Add minimal crate info&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/566&quot;&gt;Rename project to “gtk-rs”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/573&quot;&gt;image: pre-install wget&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/577&quot;&gt;Fix duplicate doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/578&quot;&gt;Fix outdated docs overview link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/576&quot;&gt;Fix icon-size property type issue&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/580&quot;&gt;Fix clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk3-rs/pull/584&quot;&gt;misc: update docs links &amp;amp; repos links&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs&quot;&gt;gtk4-rs&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/38&quot;&gt;Regenerate with gtk 3.99.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/42&quot;&gt;gtk4: update subclasses to the latest glib&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/41&quot;&gt;regenerate with gtk 3.99.4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/45&quot;&gt;Generate gdk4-x11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/47&quot;&gt;gtk4: remove unneeded atk dependency&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/46&quot;&gt;gdk4-wayland: generate bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/53&quot;&gt;gdkx11: fix crate name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/57&quot;&gt;Gtk subclassing round 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/58&quot;&gt;Subclassing round 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/26&quot;&gt;Widget subclass&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/67&quot;&gt;Add some trust_return_value_nullability’s for gtk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/59&quot;&gt;Port builder_basics from gtk-rs/examples4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/65&quot;&gt;Update to 2018 edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/72&quot;&gt;2018 migration fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/51&quot;&gt;Add initial support for GTK composite templates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/78&quot;&gt;subclass/widget: Rework the default measure() vfunc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/84&quot;&gt;gtk: fix widget’s set_focus_child implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/62&quot;&gt;Subclassing round 4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/79&quot;&gt;Port examples builders, clock from gtk-rs/examples4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/60&quot;&gt;Subclassing part 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/87&quot;&gt;gtk: add TextBuffer/TextView subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/90&quot;&gt;backport CellRenderer/CellRendererText subclasses&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/91&quot;&gt;gtk: subclassing round 7&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/96&quot;&gt;gtk: fix compute_expand implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/98&quot;&gt;gtk4/subclass: Add composite template support to prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/93&quot;&gt;port css and entry_completion from gtk-rs/examples4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/81&quot;&gt;Fix some nullable return annotations 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/83&quot;&gt;gtk: nullability trust part 3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/101&quot;&gt;gtk: implement From cmp::Ordering&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/103&quot;&gt;Macro parser improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/108&quot;&gt;Regen with gtk 3.99.5&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/109&quot;&gt;Add 2 widget class methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/110&quot;&gt;regen with the latest gir-files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/112&quot;&gt;Add a Widget subclass example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/113&quot;&gt;gtk: add more WidgetClass methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/115&quot;&gt;gtk: regen from the latest gir-files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/117&quot;&gt;examples: Move unparent to dispose()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/120&quot;&gt;gtk: backport application subclass startup override&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/121&quot;&gt;Hook up gtk_widget_init_template() into InitializingObject&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/125&quot;&gt;Use manual gdk::Rectangle from gdk3-rs bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/124&quot;&gt;Regenerate with gtk 4.0.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/127&quot;&gt;Update per glib macros names changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/129&quot;&gt;More doc alias&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/105&quot;&gt;Rexport dependencies from gtk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/130&quot;&gt;port text_viewer from gtk-rs/examples4&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/131&quot;&gt;gdkx11/gdkwayland: export missed dependencies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/133&quot;&gt;simpler callbacks: avoid Option&amp;lt;Box&amp;lt;Q&amp;gt;&amp;gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/135&quot;&gt;Add doc aliases to manual types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/138&quot;&gt;gtk subclassing: re-export preludes of dependencies as well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/139&quot;&gt;gdk: add Paintable subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/142&quot;&gt;Manually Implement Custom Sorter &amp;amp; Filter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/148&quot;&gt;gtk: Add Orientable subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/155&quot;&gt;gtk: generate ApplicationBuilder manually&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/156&quot;&gt;gtk: allow setting layout_child_type on GtkLayoutManager&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/158&quot;&gt;gdk: properly export all consts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/149&quot;&gt;Add Dialog::run_future()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/161&quot;&gt;examples: Use autobins&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/159&quot;&gt;Add Dialog::run_async&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/163&quot;&gt;Implement Deref for TemplateChild&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/164&quot;&gt;gtk: subclassing round 8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/160&quot;&gt;gdk: manually implement Event and it’s subclasses&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/165&quot;&gt;Subclassing round 9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/89&quot;&gt;gtk: subclassing round 6&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/168&quot;&gt;Specify template as an attribute of CompositeTemplate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/172&quot;&gt;examples: update per subclassing changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/145&quot;&gt;Ignore CustomLayout&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/166&quot;&gt;subclass/widget: Ensure TemplateChild types are registered&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/167&quot;&gt;gtk: Remove outdated Gir.toml downstream fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/180&quot;&gt;widget: Implement Debug for TickCallbackId&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/178&quot;&gt;Some small fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/181&quot;&gt;gtk: add BuilderScope subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/114&quot;&gt;gtk: add IMContext subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/183&quot;&gt;gdk: bind gdk_gl_texture_new&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/184&quot;&gt;gtk: set the controller signals that return inhibit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/197&quot;&gt;regenerate with detailed signals support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/196&quot;&gt;gtk: make sure gtk::disable_setlocale has to be called before gtk::init()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/198&quot;&gt;gtk: use “assertion” = “skip” instead of manual implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/199&quot;&gt;gtk: mark manually implemented functions as such&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/200&quot;&gt;More doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/201&quot;&gt;gtk: add Expression bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/203&quot;&gt;update per glib::object_subclass changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/206&quot;&gt;gtk: more manual stuff&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/207&quot;&gt;Update per subclassing changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/208&quot;&gt;gtk: update per glib changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/209&quot;&gt;update subclassing per gtk-rs/gtk-rs#342&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/210&quot;&gt;more manual gtk stuff&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/211&quot;&gt;more manual stuff 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/186&quot;&gt;correctly make RenderNode not a glib::Object&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/214&quot;&gt;subclassing: interfaces are now distinct from objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/215&quot;&gt;interfaces chain up&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/137&quot;&gt;gtk: add more WidgetClass methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/213&quot;&gt;more manual stuff&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/219&quot;&gt;gir: regen with always generate builder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/224&quot;&gt;gtk: add subclassing support for more types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/157&quot;&gt;more manual stuff&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/226&quot;&gt;Examples: remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get&lt;/code&gt; from video_player&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/227&quot;&gt;Examples: move .ui files into separate folder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/228&quot;&gt;gtk: Application subclass initialization fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/189&quot;&gt;attempt of a new readme format&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/231&quot;&gt;gdk: add ToplevelExtManual to prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/233&quot;&gt;gtk: disable more printer stuff on non-unix platforms&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/234&quot;&gt;gtk: ShortcutTriggerExtManual traits to prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/230&quot;&gt;Move the examples into separate folders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/245&quot;&gt;gtk: add features to re-export gdk-x11 &amp;amp; gdk-wayland&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/246&quot;&gt;Properly expose features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/248&quot;&gt;examples: remove the duplicate custom editable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/241&quot;&gt;Read dropped application subclass example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/252&quot;&gt;Add book&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/262&quot;&gt;Add book to README&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/263&quot;&gt;gtk: make ShortcutTrigger::compare return a cmp::Ordering&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/264&quot;&gt;misc: bump default features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/269&quot;&gt;Specify naming of types, signals &amp;amp; properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/265&quot;&gt;Finish up prerequisites&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/271&quot;&gt;Accommodate Gio changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/272&quot;&gt;Put listings into the shared workspace&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/274&quot;&gt;gtk: expose KeyvalTrigger&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/278&quot;&gt;Update display of minimum supported Rust version&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/279&quot;&gt;get_widget_name return annotation fixed upstream&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/281&quot;&gt;gdk-x11: manual impl get_xdisplay and get_xsreen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/284&quot;&gt;Use relative paths to gtk4-rs docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/282&quot;&gt;Use Error::into_raw()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/273&quot;&gt;Refactor custom objects in own modules&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/290&quot;&gt;Take str for with_label and with_mnemonic constructors.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/289&quot;&gt;[gtk] Update to gtk3 handling of Application&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/292&quot;&gt;mark EventKind/IsExpression/IsRenderNode as unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/288&quot;&gt;[docs] Adds an introduction for the gtk4 crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/296&quot;&gt;Remove get  for getters &amp;amp; properties where applicable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/298&quot;&gt;no more boxes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/302&quot;&gt;bump min required rustc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/305&quot;&gt;readme: include a note about the other libs part of the ecosystem&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/303&quot;&gt;Get removal round 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/268&quot;&gt;more widget class methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/313&quot;&gt;new generator &amp;amp; fancy updated docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/300&quot;&gt;Improve signals&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/316&quot;&gt;README: Add Video Trimmer to the app list&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/315&quot;&gt;Cleanup leftovers from the remove-get-changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/309&quot;&gt;Value trait refactoring&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/320&quot;&gt;gtk: fix measure &amp;amp; add a layout manager example&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/323&quot;&gt;move ExtManual traits to prelude only&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/327&quot;&gt;add missing doc_trait_name &amp;amp; few fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/319&quot;&gt;Re-export glib::signal::Inhibit to gtk4 crate root like gtk3’s bindings.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/295&quot;&gt;Add examples to README&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/328&quot;&gt;gtk: bind WidgetClass::query_action&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/331&quot;&gt;Rename ToGlib into IntoGlib&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/325&quot;&gt;Accommodate changes in glib::Value&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/314&quot;&gt;gdk: make ContentProvider subclassable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/330&quot;&gt;Put modules of examples in separate files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/335&quot;&gt;gdk: manually bind ContentFormats::mime_types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/336&quot;&gt;gdk: accept NULL GCancellable*&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/337&quot;&gt;gdk: ContentFormats use transfer none instead of container&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/338&quot;&gt;Add grid_packing example from the upstream C repository.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/341&quot;&gt;gtk: rename MediaStream::error to MediaStream::set_error&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/342&quot;&gt;gtk: make ClosureExpression’s api a bit nicer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/307&quot;&gt;gtk: bind BitsetIter manually&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/343&quot;&gt;split expressions/events to multiple files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/345&quot;&gt;Properly mark functions as renamed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/344&quot;&gt;gdk: fix ContentProvider::write_mime_type_async&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/346&quot;&gt;gtk: add getters/setters for Border&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/351&quot;&gt;reduce usage of allow clippy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/350&quot;&gt;use Self where appropriate part 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/347&quot;&gt;gtk: add FontChooser/TreeModelFilter subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/174&quot;&gt;Subclassing round 11&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/353&quot;&gt;regen with latest gir &amp;amp; re-enable let_and_return lint&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/354&quot;&gt;Add rename doc aliases + rename prop notify signals as connect_*_notify&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/356&quot;&gt;gtk: expose invalid pos&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/340&quot;&gt;Add “Saving Window State” chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/358&quot;&gt;gtk: Builder is final&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/359&quot;&gt;Fix new 1.52 clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/360&quot;&gt;gtk: Put module of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;list_view_apps_launcher&lt;/code&gt; in separate folder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/362&quot;&gt;gtk: use transfer full for property expression&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/367&quot;&gt;misc: drop x11/wayland features from gtk4 crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/225&quot;&gt;gdk: unmark *_async callbacks as Send&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/366&quot;&gt;gtk: Add run_future() for native dialogs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/369&quot;&gt;gtk: add ParamSpecExpression&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/372&quot;&gt;gtk: drop duplicate getter/setters on SearchBar&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/373&quot;&gt;gtk: make show_about_dialog’s behaviour more like the upstream one&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/374&quot;&gt;Update URLs pointing to gtk-rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/370&quot;&gt;Add search_bar example from the upstream C repository.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/329&quot;&gt;gtk: bind functions::test_list_all_types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/376&quot;&gt;examples: point to gtk-rs-core ones&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/377&quot;&gt;gtk: manually bind ConstraintLayout::add_constraints_from_description&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/380&quot;&gt;drop not needed subclassing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/381&quot;&gt;misc: add missing doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/386&quot;&gt;gdk fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/388&quot;&gt;Add doc alias check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/391&quot;&gt;gtk: drop MainContext check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/394&quot;&gt;gtk: stop abusing pattern and use name instead&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/395&quot;&gt;gtk response type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/396&quot;&gt;gtk: ignore css_parser_warning_quark&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/397&quot;&gt;gir: enums fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/398&quot;&gt;gdk: ignore n_ranges params in&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/402&quot;&gt;book: Upgrade license to Creative Commons Attribution 4.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/403&quot;&gt;book: Take advantage of the newly introduced &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;builder&lt;/code&gt; method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/408&quot;&gt;drop not useful builders &amp;amp; generate missing ones&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/410&quot;&gt;Gir fixes &amp;amp; regen&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/411&quot;&gt;gdk: mark some types as non final&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/415&quot;&gt;glib wrapper out of macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/413&quot;&gt;gtk: register actions on the subclassed widget&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/417&quot;&gt;tests: drop extern crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/418&quot;&gt;misc: add doc aliases on manual types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/420&quot;&gt;gtk: panic if gtk wasn’t init at class_init/interface_init&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/421&quot;&gt;gtk4 macros test&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/419&quot;&gt;gtk: add Buildable subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/426&quot;&gt;gtk: mark buildable_get_id as nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/428&quot;&gt;Use ::builder() in doc examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/429&quot;&gt;Generate missing doc aliases for newtypes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/430&quot;&gt;Regen (new bitfields values and more doc aliases)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/431&quot;&gt;use ffi values instead of integers for bitfields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/432&quot;&gt;Add more doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/361&quot;&gt;book: Scalable lists chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/434&quot;&gt;less ext manual traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/435&quot;&gt;book: Fix links in lists chapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/438&quot;&gt;examples: fix per glib-macros changes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/441&quot;&gt;gdk-wayland: add missing prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/440&quot;&gt;Add an intro to all crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/449&quot;&gt;docs: replace rust-logo with gtk-rs logo on the CI stage&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/453&quot;&gt;Fix outdated docs overview link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/456&quot;&gt;A few miscellaneous book improvements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/457&quot;&gt;gtk: don’t generate a builder for ListItem/BuilderListItemFactory&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/458&quot;&gt;gtk: don’t generate a builder for *Page objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/459&quot;&gt;[regen] Fix duplicate doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/461&quot;&gt;add missing gsk function &amp;amp; docs fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/462&quot;&gt;gtk: TreePath fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/463&quot;&gt;gdk texture fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/464&quot;&gt;gtk: TreeStore/ListStore are final&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/466&quot;&gt;gdk: add a RGBABuilder&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/468&quot;&gt;Fix clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/470&quot;&gt;misc: update stable docs links&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk4-rs/pull/472&quot;&gt;Book: Fix outdated and dead links&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/965&quot;&gt;Specify link attribute for Windows to be happy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/972&quot;&gt;Properly handle error-domain&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/970&quot;&gt;Add per-crate and per-object configuration to trust return value nullability&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/978&quot;&gt;Generate error quark functions in -sys mode if they exist&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/980&quot;&gt;toml: use new system-deps versions syntax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/981&quot;&gt;Make sure that closures in global functions require Send+Sync&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/977&quot;&gt;Use char::TryFrom::&amp;lt;u32&amp;gt; to convert from UniChar&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/983&quot;&gt;Do not pass $rust_class_name to glib_wrapper!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/988&quot;&gt;Generate doc cfg attributes for more beautiful docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/989&quot;&gt;Don’t warn on docsection elements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/986&quot;&gt;Try to fix Windows CI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/992&quot;&gt;Simplify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;match&lt;/code&gt; blocks into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;?&lt;/code&gt; operator using SSR&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/994&quot;&gt;codegen/enum: Do not generate doc(cfg) on match arms&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/995&quot;&gt;This is not needed any longer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/996&quot;&gt;Switch to 2018 edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1003&quot;&gt;config/members: add manual to wanted check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1005&quot;&gt;Switch to doc cfg instead of feature dox&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1006&quot;&gt;codegen: Explicitly use glib::Value instead of importing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1007&quot;&gt;codegen: Add version condition on special function traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1008&quot;&gt;Use write_str instead of write_fmt when no formatting is needed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1010&quot;&gt;Revert “Switch to doc cfg instead of feature dox”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1011&quot;&gt;cargo_toml: Do not overwrite library name for unversioned system-deps&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1001&quot;&gt;don’t be verbose on missing c:type on internal fields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1017&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cargo:warning&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eprintln!&lt;/code&gt; for printing warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/991&quot;&gt;Generate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;impl&lt;/code&gt; blocks for associated enum functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1015&quot;&gt;Improve final type heuristic to also check for unknown instance structs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1018&quot;&gt;Make calls to from_glib unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1014&quot;&gt;Doc aliases for C functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1022&quot;&gt;Fixed issue generating the -sys/Cargo.toml&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1023&quot;&gt;cargo_toml: Do not overwrite system-deps version if already set&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1024&quot;&gt;Use new glib::Object::new() syntax&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1025&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wrapper!&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib_wrapper!&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1026&quot;&gt;Generate doc aliases for enums and constants too&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1027&quot;&gt;Add an error in case a name field has content of the pattern field&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1028&quot;&gt;Unify toml comments format in README&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1029&quot;&gt;Fix import of BoolError in glib&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1032&quot;&gt;Remove use_boxed_functions override&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1033&quot;&gt;function: Teach gir how to generate whole functions as unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1038&quot;&gt;Add extra_dox_features config setting&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1044&quot;&gt;codegen: Omit mut_override from boxed copy if parameter is *const&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1043&quot;&gt;analysis: Move global imports to object-specific analysis and under versioning constraints&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1045&quot;&gt;Honor the PKG_CONFIG env var in the codegen for abi tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1051&quot;&gt;Add documentation in case this is an abstract class&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1050&quot;&gt;codegen: rework ABI tests to use a single C program for each test&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1053&quot;&gt;Fix new clippy warning in generated C tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1054&quot;&gt;sys: use system-deps 3.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1055&quot;&gt;doc_alias: don’t generate if the enum c_name = rust_name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1057&quot;&gt;Consider nullability of out parameters in normal and async functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1060&quot;&gt;signals: rename emit to emit_by_name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1061&quot;&gt;codegen: Avoid a dead code warning in ABI tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1064&quot;&gt;assertions: add a not initialized variant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1065&quot;&gt;README: fix object.function “assertion” key name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1062&quot;&gt;Add support for connecting to signals with details&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1066&quot;&gt;Also populate interface structs in addition to class structs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1041&quot;&gt;Extend –gir-directory (into –gir-directories) to be able to pass multiple gir directories&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1074&quot;&gt;“canonicalize” paths&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1072&quot;&gt;add an option to always generate builder patterns&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1082&quot;&gt;sys mode: allow clippy warning upper_case_acronyms&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1075&quot;&gt;config: “Canonicalize” ../ away from relative git paths&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1080&quot;&gt;Omit version constraints if the surrounding scope already guards these&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1088&quot;&gt;[1/3] Emit intra-doc links for self (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@&lt;/code&gt;) references&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1090&quot;&gt;config: Normalize submodule path before looking it up in .gitmodules&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1021&quot;&gt;Remove get for getters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1098&quot;&gt;Fix renamed functions not being documented&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1103&quot;&gt;analysis/record: Do not bail on missing memory functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1084&quot;&gt;doc: Use intra-doc-links instead of relative paths to html pages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1101&quot;&gt;config,git: Omit gir directory hash and URL if not a submodule&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1102&quot;&gt;Get removal round 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1097&quot;&gt;Import generator.py from gtk-rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1100&quot;&gt;Value trait refactoring&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1111&quot;&gt;docs: manual traits are in prelude only&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1113&quot;&gt;codegen/object: Only re-export traits from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;traits&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prelude&lt;/code&gt; module&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1087&quot;&gt;codegen/general: Emit “Since vXXX” in #[deprecated] attributes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1086&quot;&gt;codegen/doc: Omit “Feature: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vXXX&lt;/code&gt;” text in favour of doc_cfg&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1085&quot;&gt;[3/3] Emit intra-doc-links for symbol references&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1089&quot;&gt;[2/3] Emit intra-doc links for function references&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1117&quot;&gt;analysis/properties: Remove unused ToValue import for property getters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1093&quot;&gt;codegen: take Self for Copy types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1120&quot;&gt;out_param: follow aliases for imports&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1118&quot;&gt;build: Rerun if git hash changed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1121&quot;&gt;Fix some clippy::use_self warnings in generated code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1108&quot;&gt;doc: Always consider &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trait_name&lt;/code&gt; from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Gir.toml&lt;/code&gt; in implementation docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1123&quot;&gt;codegen: only use ret if a builder_postprocess is set&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1125&quot;&gt;codegen: add missing } for build pattern&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1116&quot;&gt;Add rename doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1124&quot;&gt;codegen/enums: Keep emitting name of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Self&lt;/code&gt; in string literals&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1092&quot;&gt;TryFromGlib support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1126&quot;&gt;config/function: allow forcing ‘constructor’ annotation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1127&quot;&gt;codegen: Emit &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crate::&lt;/code&gt; for all global &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%&lt;/code&gt; constants except from prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1119&quot;&gt;doc: Link trait functions in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;prelude&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1128&quot;&gt;[RFC] codegen/doc: Simplify links by allowing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Self::&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crate::&lt;/code&gt; prefix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1130&quot;&gt;funct async: use codegen name for _future funct&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1131&quot;&gt;Fix some clippy/compiler warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1068&quot;&gt;git: Read remote url from upstream or origin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1135&quot;&gt;Use try_from_glib shortcut&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1138&quot;&gt;codegen/sys: Use pointer formatting literal to print address of self&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1139&quot;&gt;Stop dereferencing followed by reborrowing in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;match&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if let&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1141&quot;&gt;codegen: default to gtk-rs-core for sys crates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1146&quot;&gt;Rename &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;do_main&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;main&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1148&quot;&gt;codegen/doc: Drop &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[Deprecated]&lt;/code&gt; text in favour of Rust annotations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1147&quot;&gt;codegen/object: Add missing deprecation attribute to builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1144&quot;&gt;docs: generate docs for builder properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1145&quot;&gt;docs: ignore not useful function parameters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1151&quot;&gt;docs: generate docs for global functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1154&quot;&gt;docs: fix a missing param due to not rebasing #1151&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1152&quot;&gt;codegen: use C value instead of hardcoding it&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1155&quot;&gt;docs: use doc_ignore_parameters for global functions as well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1156&quot;&gt;codegen: generate a builder method for objects with a Builder &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1159&quot;&gt;codegen: generate impl T if there are builder properties as well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1160&quot;&gt;[refactor] Simplify handling of trait bounds and aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1168&quot;&gt;codegen/doc: Make extension trait docs link back to the type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1166&quot;&gt;docs: properly look for renamed enum members&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1167&quot;&gt;docs: use renamed function name for records as well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1165&quot;&gt;docs: filter out final types from implements trait list&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1164&quot;&gt;enums,flags: Always analyze manual types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1170&quot;&gt;flags: generate doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1169&quot;&gt;enums,flags: Do not analyze imports if the type is not generated&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1161&quot;&gt;Docs: refactored + GI Docgen support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1172&quot;&gt;docs: look for renamed properties getters/setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1173&quot;&gt;codegen: make the builder method doc slightly better formatted&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1176&quot;&gt;Generate doc aliases on items in wrapper! macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1175&quot;&gt;use C const for flags variants&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1177&quot;&gt;Fix sys crate name for bitfields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1178&quot;&gt;analysis/function: Don’t link docs that are commented or invisible&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1179&quot;&gt;codegen/doc: Generate links for enum/flag functions/methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1142&quot;&gt;Add float format to PRINT_CONSTANT&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1180&quot;&gt;enum,flags: Take &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;version=&lt;/code&gt; attribute in XML for members into account&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1181&quot;&gt;Add support for cfg_condition on enum variants and bitfields and fix cfg_condition for enums and bitfields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1182&quot;&gt;Let cancellable be passed into GioFuture instead of creating it ourselves&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1185&quot;&gt;Don’t generate duplicated doc aliases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1188&quot;&gt;Move tutorial &amp;amp; configurations docs to an mdbook&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1186&quot;&gt;docs: properly handle trait name for manual methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1189&quot;&gt;Rust 1.53: Use the new nested or_patterns&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1191&quot;&gt;Generate warnings for code examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1192&quot;&gt;Remove extra &amp;amp; to fix clippy lint&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1194&quot;&gt;Fix a/an grammar by changing the sentences.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/1195&quot;&gt;Fix link to builder pattern explanation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/A6GibKm&quot;&gt;@A6GibKm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/AaronErhardt&quot;&gt;@AaronErhardt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/abdulrehman-git&quot;&gt;@abdulrehman-git&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/aknarts&quot;&gt;@aknarts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alatiera&quot;&gt;@alatiera&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andy128k&quot;&gt;@andy128k&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/BrainBlasted&quot;&gt;@BrainBlasted&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bvinc&quot;&gt;@bvinc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/chengchangwu&quot;&gt;@chengchangwu&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cmyr&quot;&gt;@cmyr&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Cogitri&quot;&gt;@Cogitri&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/deanleggo&quot;&gt;@deanleggo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/derekdreery&quot;&gt;@derekdreery&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dns2utf8&quot;&gt;@dns2utf8&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/elmarco&quot;&gt;@elmarco&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/federicomenaquintero&quot;&gt;@federicomenaquintero&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/felinira&quot;&gt;@felinira&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fengalin&quot;&gt;@fengalin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gdesmott&quot;&gt;@gdesmott&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/george-hopkins&quot;&gt;@george-hopkins&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/grantshandy&quot;&gt;@grantshandy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/haecker-felix&quot;&gt;@haecker-felix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/heftig&quot;&gt;@heftig&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hfiguiere&quot;&gt;@hfiguiere&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/idanarye&quot;&gt;@idanarye&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ids1024&quot;&gt;@ids1024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jplatte&quot;&gt;@jplatte&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jsparber&quot;&gt;@jsparber&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kavanmevada&quot;&gt;@kavanmevada&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Krowemoh&quot;&gt;@Krowemoh&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/lucab&quot;&gt;@lucab&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/MarijnS95&quot;&gt;@MarijnS95&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/matzipan&quot;&gt;@matzipan&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mbiggio&quot;&gt;@mbiggio&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/mehmooda&quot;&gt;@mehmooda&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/palfrey&quot;&gt;@palfrey&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/pbor&quot;&gt;@pbor&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/piegamesde&quot;&gt;@piegamesde&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/seungha-yang&quot;&gt;@seungha-yang&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SolraBizna&quot;&gt;@SolraBizna&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sophie-h&quot;&gt;@sophie-h&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vamsikrishna-brahmajosyula&quot;&gt;@vamsikrishna-brahmajosyula&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/wonchulee&quot;&gt;@wonchulee&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/YaLTeR&quot;&gt;@YaLTeR&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zec&quot;&gt;@zec&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Tue, 22 Jun 2021 21:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2021/06/22/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2021/06/22/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>New crates, better APIs</title>
        <description>&lt;p&gt;Hi everyone, time for a new release!&lt;/p&gt;

&lt;p&gt;Today, it’s all about improving APIs and providing the GdkX11 bindings.
Let’s see it more in details!&lt;/p&gt;

&lt;h4 id=&quot;change-of-minimum-supported-rust-version&quot;&gt;Change of minimum supported Rust version&lt;/h4&gt;

&lt;p&gt;The minimum supported Rust version is now 1.40. All the enums provided by the
gtk-rs crates now make use of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[non_exhaustive]&lt;/code&gt; attribute to indicate
that there might be more values being added in the future.&lt;/p&gt;

&lt;h4 id=&quot;updated-library-versions&quot;&gt;Updated library versions&lt;/h4&gt;

&lt;p&gt;All the crates were updated to the latest library versions, that is, APIs that
are newly available since GNOME 3.36 are provided by the bindings.&lt;/p&gt;

&lt;h3 id=&quot;no-more-new_from_-and-new_with_&quot;&gt;No more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new_from_...()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new_with_...()&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;In GLib-based APIs, a common pattern for constructors is to call them
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new_from_...()&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new_with_...()&lt;/code&gt;. In Rust the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new_&lt;/code&gt; prefix is usually
omitted, so all bindings were changed according to that too.&lt;/p&gt;

&lt;p&gt;There might still be a few &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;new_...()&lt;/code&gt; functions in the bindings. If you find
one and think a different name would be better, please create an
&lt;a href=&quot;https://github.com/gtk-rs/glib/issues/new&quot;&gt;issue&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;glib-macros&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib-macros&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;There’s a new crate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib-macros&lt;/code&gt; now, which is re-exported by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib&lt;/code&gt;
crate and provides a couple of proc-macros&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[derive(GBoxed)&lt;/code&gt; for easily deriving a boxed type for any Rust type
the implements the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Clone&lt;/code&gt; trait. This can be used to store values of that
type in e.g. in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[derive(GEnum)]&lt;/code&gt; for integer representation Rust enums, which registers
GLib type for them and allows to use them e.g. in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#[gflags]&lt;/code&gt;, which registers a GLib type for bitflags and wraps around the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bitflags&lt;/code&gt; crate. Same as above this can then be used e.g. in a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check the &lt;a href=&quot;https://gtk-rs.org/docs/glib_macros/index.html&quot;&gt;documentation&lt;/a&gt; for
details about the above.&lt;/p&gt;

&lt;h4 id=&quot;gdkx11&quot;&gt;GdkX11&lt;/h4&gt;

&lt;p&gt;GTK and its companion library GDK provide various API for interoperability
with platform interfaces, like X11 or Wayland or the equivalent APIs on
Windows and macOS.&lt;/p&gt;

&lt;p&gt;With this release a crate for the X11 integration API for GDK is included.&lt;/p&gt;

&lt;h3 id=&quot;glibthreadpool&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::ThreadPool&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;GLib provides a thread-pool API, which is now included in the bindings. There
are many crates that provide similar functionality but nothing that is part of
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std&lt;/code&gt; yet, as such the addition seemed useful unlike adding bindings for the
threading primitives in GLib.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ThreadPool&lt;/code&gt; bindings allow to create shared or exclusive thread pools,
where the shared thread pools are sharing their threads with other shared
ones. The maximum number of threads and various other parameters can be
configured on each thread pool, see
the &lt;a href=&quot;https://gtk-rs.org/docs/glib/struct.ThreadPool.html&quot;&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After creation, new tasks can be pushed on the thread pool as a closure.
Optionally a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Future&lt;/code&gt; can be returned to get notified about the completion of
the task.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pool&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;ThreadPool&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new_exclusive&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Runs `do_something()` on the thread pool and doesn&apos;t wait&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pool&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.push&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(||&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nf&quot;&gt;do_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Runs `do_something_else()` on the thread pool and returns its&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// return value via a `Future`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fut&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pool&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.push_future&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(||&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;do_something_else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;res&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Asynchronously await the result of `do_something_else()`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;res&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fut&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.await&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;storage-of-arbitrary-data-in-glibobjects&quot;&gt;Storage of arbitrary data in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object&lt;/code&gt;s&lt;/h3&gt;

&lt;p&gt;In C, GObject provides the ability to store arbitrary data on any object.
Until this release this was not provided by the bindings as it generally is
used as a workaround for a suboptimal architecture, and most importantly
because all type information for the stored data is lost.&lt;/p&gt;

&lt;p&gt;In this release &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe&lt;/code&gt; API for making use of this is provided but it’s the
caller’s responsibility to ensure that the types are matching.&lt;/p&gt;

&lt;div class=&quot;language-rust highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;button&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;gtk&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;with_label&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;unsafe&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.set_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-data-value&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;my_data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;.get_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;my-data&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Before using this please make sure there is no better solution for what you’re
trying to achieve.&lt;/p&gt;

&lt;h3 id=&quot;cairoerror-instead-of-cairostatus&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo::Error&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo::Status&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;Previously all &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo&lt;/code&gt; functions that could fail were returning a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Status&lt;/code&gt;
enum in one way or another. This lead to unidiomatic error handling in Rust
applications.&lt;/p&gt;

&lt;p&gt;In this release the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Status&lt;/code&gt; enum was replaced by an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Error&lt;/code&gt; enum that only
includes errors cases and is returned as part of the error case of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt;s.
This allows doing normal Rust error handling via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;?&lt;/code&gt; operator, for
example.&lt;/p&gt;

&lt;h3 id=&quot;cairo-features&quot;&gt;cairo features&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FreeType&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;script&lt;/code&gt; features of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo&lt;/code&gt; bindings are now optional with
this release. It was already possible to compile the cairo C library without
them but the bindings assumed these features to always exist.&lt;/p&gt;

&lt;p&gt;If you make use of these features you now need to enable them when depending
on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo&lt;/code&gt; crate.&lt;/p&gt;

&lt;h3 id=&quot;gdbus&quot;&gt;GDBus&lt;/h3&gt;

&lt;p&gt;GLib comes with its own
&lt;a href=&quot;https://www.freedesktop.org/wiki/Software/dbus/&quot;&gt;DBus&lt;/a&gt; IPC implementation.
Starting with this release big parts of the API are included in the bindings
and it is for example possible to create DBus services or use existing DBus
services.&lt;/p&gt;

&lt;p&gt;The API is very close to the C API and as such not very convenient to use yet,
but more convenient APIs can be built on top of this in external crates or
maybe in future versions of the bindings. More to see later!&lt;/p&gt;

&lt;h3 id=&quot;no-more-widgetdestroy&quot;&gt;No more &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Widget::destroy()&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Widget::destroy()&lt;/code&gt; function is marked as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unsafe&lt;/code&gt; starting from this
release. Calling it on arbitrary widgets can cause all kinds of negative
side-effects and should be prevented.&lt;/p&gt;

&lt;p&gt;Most usages of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;destroy()&lt;/code&gt; were related to dialogs or other windows. Instead
of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;destroy()&lt;/code&gt; the safer &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;close()&lt;/code&gt; can be used now, which also allows the
window to handle the event.&lt;/p&gt;

&lt;h3 id=&quot;more-subclassing-support-in-gtk&quot;&gt;More subclassing support in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk&lt;/code&gt;&lt;/h3&gt;

&lt;p&gt;This new release features subclassing support for many additional types:
IconView, CellRenderers (Pixbuf, Text, Spinner, Progress, Toggle, Accel,
Combo, Spin), DrawingArea, Plug, Socket and Fixed.&lt;/p&gt;

&lt;p&gt;Together with all the ones that existed in previous releases, the most
commonly used types in GTK where subclassing is useful should be covered.
If some are missing, please open issues so we can add them.&lt;/p&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;This release took us a lot of time but as you can see, it was definitely
worth it. We expect to provide even more tools to make gtk-rs development
as fun as possible and to continue to improve the bindings. More to come
soon!&lt;/p&gt;

&lt;h3 id=&quot;changes&quot;&gt;Changes&lt;/h3&gt;

&lt;p&gt;For the interested ones, here is the list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys&quot;&gt;sys&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/158&quot;&gt;Fix fixed size arrays&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/161&quot;&gt;Add gdkx11 lib&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/162&quot;&gt;Put back missing information&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/163&quot;&gt;Changes from new eoans gir-files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/165&quot;&gt;Remove special case for gdkx11-sys&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/168&quot;&gt;Use options.split_build_rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/169&quot;&gt;Fix build_version.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/170&quot;&gt;Restore missing library versions in build.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/167&quot;&gt;gdk/gdk: build: Compute and export GDK backends&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/164&quot;&gt;GIR files focal update&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/171&quot;&gt;Add correct versions for get_type functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/173&quot;&gt;Depend on cairo-sys when selecting v3_24_2 feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/175&quot;&gt;Use eprintln&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib&quot;&gt;glib&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/570&quot;&gt;types: fix crashes on Type::Invalid API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/568&quot;&gt;add genum-derive crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/559&quot;&gt;Add PtrArray and related trait implementations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/571&quot;&gt;0.9.1 bugfix release&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/563&quot;&gt;Add more checks for clone macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/576&quot;&gt;Allow to specify type for closure arguments&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/577&quot;&gt;Derive fmt::Debug for a few more types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/578&quot;&gt;Add glib::ThreadPool bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/579&quot;&gt;Implements FromGlibPtrFull&amp;lt;*const T&amp;gt; for boxed types.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/588&quot;&gt;Bind API to convert from/to bytes to/from Variant&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/590&quot;&gt;Don’t pass an owned string to g_quark_from_static_string()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/593&quot;&gt;Replace unwrap calls with expect in tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/589&quot;&gt;Don’t store subclass impl/private data in an Option&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/587&quot;&gt;translate: Clarify the purpose and the effect of translation traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/600&quot;&gt;Add manual traits check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/601&quot;&gt;Various container translation cleanups/fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/604&quot;&gt;Don’t require too strict bounds for ObjectSubclass::from_instance()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/606&quot;&gt;Remove some unneeded mem::forget() calls and Option wrappers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/607&quot;&gt;More clone fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/609&quot;&gt;Add clone test case for “async”&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/603&quot;&gt;glib-macros: add GBoxed derive&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/614&quot;&gt;Return a bool instead of a Result from Object::has_property()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/611&quot;&gt;Add logs API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/617&quot;&gt;Clean up log functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/618&quot;&gt;Improve clone! error messages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/619&quot;&gt;Improve log macros&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/596&quot;&gt;Add print in case an upgrade failed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/620&quot;&gt;glib-macros: add gflags attribute macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/621&quot;&gt;Add @weak-allow-none for clone macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/605&quot;&gt;Add translate::Borrowed wrapper struct for from_glib_borrow()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/623&quot;&gt;glib-macros: Update itertools to 0.9&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/624&quot;&gt;Use mem::ManuallyDrop instead of mem::forget() everywhere&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/625&quot;&gt;Remove unnecessary transmute calls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/626&quot;&gt;Fix variant PartialOrd&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/627&quot;&gt;Remove deprecated Error::description impl&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/628&quot;&gt;Fix transmute mess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/632&quot;&gt;Add test for callbacks validity&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/633&quot;&gt;Return a string of any lifetime from Quark::to_string()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/634&quot;&gt;VariantDict support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/635&quot;&gt;Clippy cleanliness and CI enforcement&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/638&quot;&gt;Only derive SetValueOptional for nullable GBoxed types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/639&quot;&gt;Unset return nullable for uuid_string_random()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/645&quot;&gt;Disable GTK4 from the Travis CI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/644&quot;&gt;Add unsafe generic qdata API to ObjectExt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/646&quot;&gt;Various improvements to property handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/647&quot;&gt;Update glib-macros to proc-macro-error 1.0&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/648&quot;&gt;Don’t require users of the glib proc macros to have gobject_sys in scope&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/652&quot;&gt;Ignore g_variant_get_gtype()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/656&quot;&gt;Update to new gir and various related fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/657&quot;&gt;Use g_type_register_static_simple() instead of g_type_register_static…&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo&quot;&gt;cairo&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/303&quot;&gt;Remove deprecated Error::description&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/310&quot;&gt;Clean up travis script&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/313&quot;&gt;Add missing Surface::get_device method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/314&quot;&gt;Replace bad code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/315&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/317&quot;&gt;Add missing fn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/319&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge-lgpl-docs features are selected&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/322&quot;&gt;errors: create an Error type and use that instead of Status&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/324&quot;&gt;Work around crash when trying to access data of an image surface&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/326&quot;&gt;add a freetype feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/327&quot;&gt;mark all the enums as non exhaustive&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/328&quot;&gt;add a script feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/330&quot;&gt;Add an ImageSurface::with_data method.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/331&quot;&gt;Use system-deps crate instead of pkg-config directly&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview&quot;&gt;sourceview&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/123&quot;&gt;SearchContext::replace_all returns the number of replaced matches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/127&quot;&gt;Fix transmute mess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/128&quot;&gt;Remove the unused dependency on fragile&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/129&quot;&gt;Add async I/O to FileLoader and FileSaver&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/133&quot;&gt;README: it’s actually sourceview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk&quot;&gt;atk&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/58&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/60&quot;&gt;Fix transmute mess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/61&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge…&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio&quot;&gt;gio&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/281&quot;&gt;Fix/extend DataInputStream code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/283&quot;&gt;Add manual trait doc check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/284&quot;&gt;Credentials::get_unix_user returns user id&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/286&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/287&quot;&gt;Use mem::ManuallyDrop instead of mem::forget() everywhere&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/288&quot;&gt;Remove unneeded transmute calls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/290&quot;&gt;Fix transmute mess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/289&quot;&gt;Add callback check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/294&quot;&gt;Support various things which needed glib::VariantDict&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/295&quot;&gt;Clippy-clean plus CI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/292&quot;&gt;SubProcess::communicate_utf8_async() is nullable for the returned std…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/297&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/298&quot;&gt;input_stream: add AsyncBufRead adapter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/299&quot;&gt;Increase reference count of the stored streams in the IOStream when s…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/301&quot;&gt;Mark the source_object argument to the ThreadedSocketService::run as …&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/302&quot;&gt;Improve ThreadedSocketService::new&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/303&quot;&gt;Generate D-Bus classes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango&quot;&gt;pango&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/182&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/183&quot;&gt;remove clippy lint about transmute cast&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/187&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/186&quot;&gt;Fix memory unsafety in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FontDescription::set\_family\_static&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf&quot;&gt;gdk-pixbuf&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/146&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/150&quot;&gt;Fix transmute mess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/148&quot;&gt;Fix arithmetic overflow in Pixbuf::put_pixel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/151&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge…&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk&quot;&gt;gdk&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/333&quot;&gt;Ignore thread_add and threads_add_timeout in favor of glibs analog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/335&quot;&gt;Delete check_init_asserts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/340&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/342&quot;&gt;window: store event_mask using EventMask&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/344&quot;&gt;Fix transmute mess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/347&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/346&quot;&gt;Nicer bindings for Key(val) related functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk&quot;&gt;gtk&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/927&quot;&gt;Delete LGPL docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/930&quot;&gt;Fix osx CI build&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/929&quot;&gt;Switch from lazy_static to once_cell&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/931&quot;&gt;Add subclass for IconView&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/937&quot;&gt;Add subclass for CellRenderer and CellRendererPixbuf (Closes #936)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/940&quot;&gt;Added vfunc to IconView&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/939&quot;&gt;Added more CellRenderer subclasses: Text, Spinner, Progress, Toggle, Accel, Combo, Spin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/932&quot;&gt;Fix an ownership issue&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/942&quot;&gt;Implement size vfunc for Widget&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/941&quot;&gt;Added subclassing for DrawingArea&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/944&quot;&gt;Macos no Plug and Socket&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/950&quot;&gt;Update Copyright Year&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/948&quot;&gt;InfoBar::get_content_area return Box&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/953&quot;&gt;Add StyleContext::get_font, deignore Value getters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/955&quot;&gt;Add subclass support for Fixed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/958&quot;&gt;Mark Widget::destroy as unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/962&quot;&gt;Simplify travis file&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/970&quot;&gt;Fix doc link&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/972&quot;&gt;Add vfuncs to WidgetImpl&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/974&quot;&gt;Add ImplExt traits to subclass prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/975&quot;&gt;add basic subclassing functionality for treeview&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/961&quot;&gt;Add size_allocate vfunc to gtk::Widget&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/943&quot;&gt;CellRenderer: fix null dereference for activate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/978&quot;&gt;Add scroll_event vfunc to WidgetImpl&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/980&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/982&quot;&gt;The TreeSortable functions are called on the underlying model&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/987&quot;&gt;Fix transmute mess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/986&quot;&gt;Workaround for GtkWindow::set-focus parameter nullability&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/994&quot;&gt;Add gtk::Socket and gtk::Plug subclassing support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/993&quot;&gt;Clippy fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/996&quot;&gt;Application initialization&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/995&quot;&gt;gdk_backend config flags&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/999&quot;&gt;Change some get_ functions to return non-nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1001&quot;&gt;Fix more non-nullable returns&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1007&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1009&quot;&gt;Let Widget::hide_on_delete return Inhibit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1011&quot;&gt;bind &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Image.surface&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CellRendererPixbuf.surface&lt;/code&gt; properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1015&quot;&gt;Fix TextBuffer signals that can invalidate/modify TextIters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1019&quot;&gt;generate missing builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1022&quot;&gt;generate missing Gtk.EventController*&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1020&quot;&gt;generate missing Shortcut* objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1024&quot;&gt;Generate GtkGestureStylus&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/1021&quot;&gt;Ignore some builders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo&quot;&gt;pangocairo&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/69&quot;&gt;Clean up travis&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/71&quot;&gt;Update for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/72&quot;&gt;remove clippy lint about transmute cast&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/73&quot;&gt;Don’t include LGPL docs in the docs if both embed-lgpl-docs and purge…&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-test&quot;&gt;gtk-test&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-test/pull/30&quot;&gt;Update to last versions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-test/pull/31&quot;&gt;Add missing crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-test/pull/36&quot;&gt;Update enigo to 0.0.14&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/879&quot;&gt;Fix signal doc&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/882&quot;&gt;Remove unused variable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/881&quot;&gt;Fix fields with fixed size array type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/883&quot;&gt;Add new nullable_return_is_error configuration for return types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/886&quot;&gt;Use once_cell::sync::Lazy instead of lazy_static&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/887&quot;&gt;Fix returning array from async trampolines&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/888&quot;&gt;Add support for PtrArray&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/890&quot;&gt;Run rustfmt on generated code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/891&quot;&gt;Allow to override use-return-for-result in function configuration.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/893&quot;&gt;Check gir file&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/894&quot;&gt;git: check return value from ‘git’ command&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/895&quot;&gt;Generate code for new from_glib_borrow signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/897&quot;&gt;use #[non_exhaustive] for generated enums&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/900&quot;&gt;Simplify chunk::Assert* and fix missing init check for async_future methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/904&quot;&gt;Add a check to avoid unforeseen failures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/907&quot;&gt;Show more not generated types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/912&quot;&gt;Builder postprocess&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/911&quot;&gt;Generate duplicated enum values in the -sys crate&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/914&quot;&gt;Consider nullability for async function return values&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/913&quot;&gt;Initial conversion to github actions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/915&quot;&gt;Add options.split_build_rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/917&quot;&gt;Add static lifetime to generated build_version.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/918&quot;&gt;tests: use split_build_rs in gdk gir test&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/920&quot;&gt;Add options.extra_versions and lib_version_overrides configurations&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/922&quot;&gt;Allow overriding safety assertions for functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/923&quot;&gt;Fix some code generation issues&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/924&quot;&gt;Fix wrongly written &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;object.function.return&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/926&quot;&gt;Fix and ignore clippy warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/925&quot;&gt;Add ImportsWithDefaults&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/928&quot;&gt;Correctly get function configuration and make use of it for get_type(…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/929&quot;&gt;functions: rename constructors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/930&quot;&gt;Handle version configuration on get_type functions in non-sys mode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/931&quot;&gt;Generate version conditions for functions in sys mode no lower than t…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/932&quot;&gt;Give preference to configured function versions over versions automat…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/933&quot;&gt;Allow to ignore builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/934&quot;&gt;Update builder documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/939&quot;&gt;cargo_toml: set feature-versions for all versions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/940&quot;&gt;cargo_toml: use lib_version_overrides when defining feature versions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/941&quot;&gt;Remove deleting pkg_config&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/937&quot;&gt;Use system-deps&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/942&quot;&gt;Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eprintln&lt;/code&gt; for writing to stderr&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/943&quot;&gt;Generate docs for bitfields too&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/944&quot;&gt;Correctly generate doc elements for bitfields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/945&quot;&gt;Fix variant doc generation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/946&quot;&gt;Update dependencies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andy128k&quot;&gt;@andy128k&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ArekPiekarz&quot;&gt;@ArekPiekarz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/brackleian&quot;&gt;@brackleian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/cuviper&quot;&gt;@cuviper&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/danigm&quot;&gt;@danigm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dcz-purism&quot;&gt;@dcz-purism&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/de-vri-es&quot;&gt;@de-vri-es&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/dhonx&quot;&gt;@dhonx&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/EPashkin&quot;&gt;@EPashkin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/federicomenaquintero&quot;&gt;@federicomenaquintero&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fengalin&quot;&gt;@fengalin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gdesmott&quot;&gt;@gdesmott&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/hfiguiere&quot;&gt;@hfiguiere&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jneem&quot;&gt;@jneem&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jplatte&quot;&gt;@jplatte&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kinnison&quot;&gt;@kinnison&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/luukvanderduim&quot;&gt;@luukvanderduim&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/majorz&quot;&gt;@majorz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/misson20000&quot;&gt;@misson20000&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/myfreeweb&quot;&gt;@myfreeweb&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nt8r&quot;&gt;@nt8r&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sophie-h&quot;&gt;@sophie-h&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tsahyt&quot;&gt;@tsahyt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/vhdirk&quot;&gt;@vhdirk&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/yvt&quot;&gt;@yvt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/zeenix&quot;&gt;@zeenix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 04 Jul 2020 17:30:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2020/07/04/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2020/07/04/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>Sponsoring gtk-rs development</title>
        <description>&lt;p&gt;Hi everyone!&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/gtk-rs&quot;&gt;gtk-rs organization&lt;/a&gt; has been created in 2015. The original goal was to bring
&lt;a href=&quot;https://www.gtk.org/&quot;&gt;GTK&lt;/a&gt; library and other libraries from the GNOME platform to the &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust language&lt;/a&gt;. We
now provide 19 bindings and that number will certainly increase even more in the future.&lt;/p&gt;

&lt;p&gt;As this number continues to increase, our needs are increasing as well. At the same time, various
people were asking in the past how they could support us but we could never give a useful answer to
that. To solve this problem we decided to open a “collective” on &lt;a href=&quot;https://opencollective.com/gtk-rs&quot;&gt;opencollective&lt;/a&gt;.
The goal is to raise money to fulfill the project’s needs such as:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Sponsoring hackfests (happening twice a year) would be great, but paying a dinner for everyone or a round of drinks would be a great start!&lt;/li&gt;
  &lt;li&gt;Remunerating contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It would also allow to start improving the project itself more directly:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Pay for a better CI (it’s becoming a huge issue)&lt;/li&gt;
  &lt;li&gt;Renting a server to run bots and such to make repositories handling easier&lt;/li&gt;
  &lt;li&gt;Etc…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re using &lt;a href=&quot;https://github.com/gtk-rs&quot;&gt;gtk-rs&lt;/a&gt; and want/can support us, any donation is very welcome and can be
done &lt;a href=&quot;https://opencollective.com/gtk-rs&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Thu, 02 Apr 2020 18:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2020/04/02/sponsoring-gtk-rs-development.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2020/04/02/sponsoring-gtk-rs-development.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
      <item>
        <title>Simplification and more of everything</title>
        <description>&lt;p&gt;Hello everyone, time for a new release!&lt;/p&gt;

&lt;p&gt;This time, this is mostly about stabilization and simplification. It means that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk-rs&lt;/code&gt; is now
simpler to use and more complete than ever. Let’s take a tour of what’s new(er)!&lt;/p&gt;

&lt;h3 id=&quot;macro-to-make-gtk-rs-usage-far-simpler&quot;&gt;Macro to make gtk-rs usage far simpler&lt;/h3&gt;

&lt;p&gt;A big productivity killer when using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk-rs&lt;/code&gt; in the past was the requirement to pass cloned
references to objects, or even worse, weak references into signal handler closures. This is still
required but to make it more ergonomic, a new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clone!&lt;/code&gt; macro is provided as part of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;See the &lt;a href=&quot;https://docs.rs/glib/0.9.0/glib/macro.clone.html&quot;&gt;documentation&lt;/a&gt; for various examples on
how to use it. The big advantage of the macro is that you don’t have to manually declare new local
variables with a different name that are then moved into the closure, but simply have to provide the
name of the variable you want to make available in the closure and whether it should be passed as a
strong or weak reference. Inside the closure it can then be used as-is and for example upgrading any
weak references manually is not necessary. In case of failure of upgrading a weak reference, an
optional default return value for the closure can be provided or the closure can be configured to
panic.&lt;/p&gt;

&lt;p&gt;The macro works on any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object&lt;/code&gt; as well as on any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Arc&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;As a side-note, it is important to know the difference between strong and weak references and not
simply clone (strong reference) everything. By using strong references everywhere, many GTK
applications (not only in Rust) currently create reference cycles and therefore have memory leaks.
If, for example, you want to pass a reference to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Window&lt;/code&gt; into a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Button&lt;/code&gt;’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clicked&lt;/code&gt; signal,
you would create a reference cycle between the window, button, signal handler and again the window.
This would lead to the whole cycle to be kept alive forever and leaked. The solution to this is to
make one of the references a weak reference, in this case the reference to the window that is
passed into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;clicked&lt;/code&gt; signal handler. See also the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Rc&lt;/code&gt; documentation about
&lt;a href=&quot;https://doc.rust-lang.org/std/rc/index.html&quot;&gt;reference cycles&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;subclass&quot;&gt;Subclass&lt;/h3&gt;

&lt;p&gt;The “subclass” cargo feature was removed from all crates and is instead enabled by default with
this release. The GObject subclassing support matured a lot over the last months and is ready for
wider usage. A basic example for subclassing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Application&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::ApplicationWindow&lt;/code&gt; can
be found &lt;a href=&quot;https://github.com/gtk-rs/examples/blob/main/src/bin/basic_subclass.rs&quot;&gt;here&lt;/a&gt;, another
example using custom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Object&lt;/code&gt; subclasses as part of a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::ListBox&lt;/code&gt; model can be found
&lt;a href=&quot;https://github.com/gtk-rs/examples/blob/main/src/bin/listbox_model.rs&quot;&gt;here&lt;/a&gt; and various examples
for creating GStreamer elements &lt;a href=&quot;https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While there are still subclassing bindings missing for many types, various basic types in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio&lt;/code&gt;,
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gstreamer&lt;/code&gt; crates are covered already. If something is missing for you, please let us
know with an issue or, even better, a pull request.&lt;/p&gt;

&lt;p&gt;Thanks to subclassing being a first-class citizen of the bindings, there is also an adapter
available for making any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::io::Read&lt;/code&gt; available as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::InputStream&lt;/code&gt; and any &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::io::Write&lt;/code&gt;
as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::OutputStream&lt;/code&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::ReadInputStream&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::WriteOutputStream&lt;/code&gt;. Adapters in the other
direction are available as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::InputStream::into_read()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::OutputStream::into_write()&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;futures&quot;&gt;Futures&lt;/h3&gt;

&lt;p&gt;The futures support was ported to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Future&lt;/code&gt;s and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;futures&lt;/code&gt; 0.3, and as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;async/await&lt;/code&gt; is
stabilized now it was also enabled by default. The “futures” feature is not needed anymore.&lt;/p&gt;

&lt;p&gt;With the futures support in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio&lt;/code&gt; and other modules it is now possible to write applications making
use of asynchronous I/O with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;async/await&lt;/code&gt;, which allows writing asynchronous code in a much simpler
way that looks close to the equivalent synchronous code. Check
&lt;a href=&quot;https://blog.rust-lang.org/2019/11/07/Async-await-stable.html&quot;&gt;async/await stable&lt;/a&gt; on the official
Rust blog for more details.&lt;/p&gt;

&lt;p&gt;An example making use of this with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio&lt;/code&gt;’s asynchronous file reading support can be found
&lt;a href=&quot;https://github.com/gtk-rs/examples/blob/main/src/bin/gio_futures_await.rs&quot;&gt;here&lt;/a&gt;. While it is
not as streamlined as with native Rust crates like &lt;a href=&quot;https://async.rs&quot;&gt;async-std&lt;/a&gt; or
&lt;a href=&quot;https://tokio.rs&quot;&gt;tokio&lt;/a&gt; because of how the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio&lt;/code&gt; API works, it nonetheless much more convenient
to work with than the previous (but still available) callback-based approach.&lt;/p&gt;

&lt;p&gt;Another example that shows integration of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio&lt;/code&gt; with generic Rust futures crates can be found
&lt;a href=&quot;https://github.com/gtk-rs/examples/blob/pending/src/bin/gio_async_tls.rs&quot;&gt;here&lt;/a&gt; . Each
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::PollableInputStream&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio::PollableOutputStream&lt;/code&gt; can be converted into an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AsyncRead&lt;/code&gt; /
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AsyncWrite&lt;/code&gt;, and by this allows integration with the wider Rust async ecosystem. In this case a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gio&lt;/code&gt; TCP connection is wrapped in a TLS connection provided by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;async-tls&lt;/code&gt; crate, which uses
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rustls&lt;/code&gt; as underlying TLS implementation.&lt;/p&gt;

&lt;h3 id=&quot;gtk4&quot;&gt;GTK4&lt;/h3&gt;

&lt;p&gt;We have initial GTK4 bindings now, which are the result of &lt;a href=&quot;https://github.com/sfanxiang&quot;&gt;@sfanxiang&lt;/a&gt;’s
GSoC project this year. While not part of this release because GTK4 itself is still not API stable,
you can also try it from git. The GTK4 bindings can be found &lt;a href=&quot;https://github.com/gtk-rs/gtk4&quot;&gt;here&lt;/a&gt;.
Once there are release candidates of GTK4 we will also do alpha releases of the bindings.&lt;/p&gt;

&lt;h3 id=&quot;cairo-improvements&quot;&gt;Cairo improvements&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo&lt;/code&gt; bindings now consistently return &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt;s for various functions instead of sometimes
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&lt;/code&gt;s, sometimes silently failing. Many &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cairo&lt;/code&gt; operations return an actual &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Surface&lt;/code&gt; in an
error state if something goes wrong, and this surface will then (usually silently) fail any future
operations on it. Instead of returning the surface, an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Err&lt;/code&gt; is returned now as it should.&lt;/p&gt;

&lt;h3 id=&quot;gtk-builder-improvements&quot;&gt;GTK Builder improvements&lt;/h3&gt;

&lt;p&gt;In &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Builder&lt;/code&gt; UI description files it is possible to declare signal handlers for the widgets.
While it’s not possible to connect them automatically to functions in Rust in a safe way, it is now
possible for applications to implement the connection logic themselves based on the information from
the UI description. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gtk::Builder::connect_signals_full()&lt;/code&gt; allows to provide closures for each
signal handler name that is given in the UI description.&lt;/p&gt;

&lt;h3 id=&quot;glibvalueget-improvements&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value::get&lt;/code&gt; improvements&lt;/h3&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;glib::Value::get()&lt;/code&gt; was changed to allow distinguishing between the value containing a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; and
trying to get a value of the wrong type out of it. This means that it now returns a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Result&lt;/code&gt;, and
also that for types that can’t possibly be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;None&lt;/code&gt; (e.g. integer types), &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get_some()&lt;/code&gt; is
provided as a helper to not require unwrapping the returned &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Option&lt;/code&gt; from the normal &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That’s it for biggest changes. A lot of other small ones are in as well. So enjoy!&lt;/p&gt;

&lt;h3 id=&quot;changes&quot;&gt;Changes&lt;/h3&gt;

&lt;p&gt;For the interested ones, here is the list of the merged pull requests:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys&quot;&gt;sys&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/138&quot;&gt;Update with eoan’s gir-files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/145&quot;&gt;Add gtk4 files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/149&quot;&gt;Remove graphene&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/155&quot;&gt;Update minimum rust version to 1.39&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sys/pull/154&quot;&gt;Use tempfile in tests&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib&quot;&gt;glib&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/502&quot;&gt;New version&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/505&quot;&gt;Zeroed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/506&quot;&gt;Fix handling of GValues containing a floating GObject&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/508&quot;&gt;Implement FromGlib and ToGlib traits on Pid type&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/512&quot;&gt;Mark ByteArray::set_size() as unsafe&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/513&quot;&gt;Value::get: return a Result to account for type mismatch…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/519&quot;&gt;Remove tests which panic in signals&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/517&quot;&gt;value::GetError: add a constructor and make fields public&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/511&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/521&quot;&gt;Remove subclass feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/522&quot;&gt;Fully qualify inner macros for exported macros…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/524&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/525&quot;&gt;Implement Value::transform()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/528&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/529&quot;&gt;Use MainContext::with_thread_default() instead of pushing/popping man…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/531&quot;&gt;Update to futures 0.3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/527&quot;&gt;Add clone macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/534&quot;&gt;Extend clone macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/535&quot;&gt;Support downgrade on references as well&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/539&quot;&gt;Don’t leak missing Safety doc clippy warnings (#538)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/540&quot;&gt;Remove unneeded &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow(clippy::missing_safety_doc)&lt;/code&gt; attributes (538)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/536&quot;&gt;Add renaming support&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/541&quot;&gt;API additions for connecting non-Send closures and thread-safety fixes to the main context channel and futures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/542&quot;&gt;Remove Send bound from SourceFuture/SourceStream&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/544&quot;&gt;KeyFile::get_string() can return a string in error case that still ha…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/548&quot;&gt;Remove glib_floating_reference_guard!() macro&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/glib/pull/547&quot;&gt;Manually implement FFI code for GObject instead of using glib_shared_wrapper!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo&quot;&gt;cairo&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/271&quot;&gt;Fix warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/273&quot;&gt;Reexport the Gradient type too.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/276&quot;&gt;Replace mem::uninitialized calls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/280&quot;&gt;Make winapi optional.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/281&quot;&gt;cairo-sys: align win32-surface feature gates with those in cairo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/283&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/284&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/288&quot;&gt;Improve cairo library documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/286&quot;&gt;Include crate features in docs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/289&quot;&gt;Add lib.rs to ignore purge files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/291&quot;&gt;Add cargo fmt check&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/292&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/287&quot;&gt;(#251): Surface::create_similar() and friends should return a Result&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/cairo/pull/294&quot;&gt;SvgSurface: make filename param optional&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview&quot;&gt;sourceview&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/107&quot;&gt;Fix boxing in async func&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/105&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/108&quot;&gt;better handling of dox feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/110&quot;&gt;Use IsA for property setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/111&quot;&gt;Generate builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/112&quot;&gt;Builder use implemented interfaces properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/113&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/115&quot;&gt;Use tempfile in tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/116&quot;&gt;Derive Default, Clone for builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/sourceview/pull/117&quot;&gt;Regen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk&quot;&gt;atk&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/35&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/36&quot;&gt;Update for new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get&lt;/code&gt; signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/37&quot;&gt;better handling of docs.rs features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/38&quot;&gt;Use IsA for property setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/39&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/40&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/atk/pull/44&quot;&gt;Update minimum required rust version&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio&quot;&gt;gio&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/224&quot;&gt;Fix docs for manual functions [ci skip]&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/227&quot;&gt;New version&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/229&quot;&gt;Generate FileEnumerator&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/231&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/233&quot;&gt;Update for new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get&lt;/code&gt; signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/226&quot;&gt;settings: add SettingsExtManual Trait for get::&amp;lt;T&amp;gt;/set::&amp;lt;T&amp;gt; fn&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/232&quot;&gt;Fix boxing in async func&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/237&quot;&gt;Ignore AppInfo::launch_uris_async&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/238&quot;&gt;Add support for subclassing Input/OutputStream&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/239&quot;&gt;Remove subclass feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/240&quot;&gt;Use IsA for property setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/241&quot;&gt;Remove ignoring not generated property&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/243&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/242&quot;&gt;IsA&amp;lt;Cancellable&amp;gt; generic instead of concrete Option&amp;lt;&amp;amp;Cancellable&amp;gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/244&quot;&gt;Fix/silence various clippy warnings and errors&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/246&quot;&gt;Change UnixMountPoint getters to not require &amp;amp;mut self&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/248&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/249&quot;&gt;Don’t re-export glib types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/250&quot;&gt;Regen and prelude fixes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/252&quot;&gt;Update to stabilized futures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/251&quot;&gt;More types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/253&quot;&gt;Don’t reexport prelude content&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/254&quot;&gt;Fix use statements in the tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/256&quot;&gt;Some updates to the I/O streams&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/258&quot;&gt;Update GioFuture to not require fragile crate usage by all users anymore&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/259&quot;&gt;Derive Default, Clone for builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/260&quot;&gt;Remove usage of glib_floating_reference_guard!()&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gio/pull/261&quot;&gt;Fix some clippy warnings by removing unused lifetime parameters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango&quot;&gt;pango&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/157&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/158&quot;&gt;(#156): Manual implementations of PangoGravity functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/159&quot;&gt;Improve docs.rs handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/162&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/163&quot;&gt;Add pango-glyph interfaces &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/164&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pango/pull/166&quot;&gt;Add PangoAttrSize&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf&quot;&gt;gdk-pixbuf&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/128&quot;&gt;Update for new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get&lt;/code&gt; signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/129&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/130&quot;&gt;Improve docs.rs handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/131&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk-pixbuf/pull/132&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk&quot;&gt;gdk&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/299&quot;&gt;Fix docs for manual functions [ci skip]&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/302&quot;&gt;Fix build after #299&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/305&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/307&quot;&gt;Update for new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get&lt;/code&gt; signature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/309&quot;&gt;Cairo interactions: auto load Pixbuf &amp;amp; Surface Exts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/306&quot;&gt;Fix boxing in async func&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/312&quot;&gt;Fix up cairo interaction extension traits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/313&quot;&gt;better handling of docs.rs features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/314&quot;&gt;Time coord&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/315&quot;&gt;Improve get_device_history api&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/316&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/317&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/311&quot;&gt;Generate Keymap bindings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gdk/pull/319&quot;&gt;Don’t reexport prelude content&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk&quot;&gt;gtk&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/832&quot;&gt;Fix docs for manual functions [ci skip]&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/839&quot;&gt;PadController is disguised so trait don’t needed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/841&quot;&gt;Make PadController::set_action_entries() public so it can actually be…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/852&quot;&gt;Implement Builder::connect_signals_full&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/857&quot;&gt;Generate GtkWindowExt::set_geometry_hints&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/861&quot;&gt;subclass: Get started on subclassing GtkWidget&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/863&quot;&gt;Add support for overriding Widget::draw() virtual method&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/865&quot;&gt;subclass: Add subclassing for GtkContainer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/868&quot;&gt;subclass: Add ContainerImpl to prelude&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/869&quot;&gt;Add support for subclassing GtkBin and GtkEventBox&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/864&quot;&gt;subclass/widget: Add vfuncs between child_notify and draw&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/870&quot;&gt;Value get result&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/873&quot;&gt;Add support for subclassing GtkWindow and GtkApplicationWindow&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/871&quot;&gt;subclass: Add support for subclassing GtkBox&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/877&quot;&gt;subclass/application_window: Remove unused imports&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/878&quot;&gt;subclass: Add support for subclassing GtkHeaderBar&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/880&quot;&gt;subclass: Add support for subclassing GtkDialog&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/866&quot;&gt;Fix boxing in async func&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/882&quot;&gt;Fix tests for 32bit windows&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/883&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/885&quot;&gt;ShortcutLabel&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/888&quot;&gt;Remove subclass feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/889&quot;&gt;Use IsA for property setters&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/894&quot;&gt;Builder use implemented interfaces properties&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/896&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/899&quot;&gt;Get rid of Uninitialized impl for TargetEntry&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/879&quot;&gt;subclass: Implement subclassing for GtkStack&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/900&quot;&gt;NativeDialog: have run return ResponseType&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/901&quot;&gt;Warn on macos when initializing from non_main_thread&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/903&quot;&gt;Fix format issue&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/904&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/908&quot;&gt;subclass: Always allow to override the vfuns of classes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/911&quot;&gt;Fix various imports to fix the build&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/915&quot;&gt;Make AccelGroup::connect() and ::connect_by_path() more usable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/917&quot;&gt;Add renaming for WidgetExt::set_name and BuildableExt::set_name&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/919&quot;&gt;Derive Default for builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/922&quot;&gt;subclass/container: widget in set_focus_child should be Nullable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk/pull/921&quot;&gt;subclass/widget: Implement default handling for parent events&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo&quot;&gt;pangocairo&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/53&quot;&gt;Fix docs for manual functions [ci skip]&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/54&quot;&gt;Improve docs.rs documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/55&quot;&gt;Fix invalid cargo key for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/57&quot;&gt;remove not needed anymore libffi fix&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/59&quot;&gt;Fix build and reexports&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/pangocairo/pull/62&quot;&gt;Make FontMap::set_default() a static function and allow passing None …&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-test&quot;&gt;gtk-test&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gtk-test/pull/32&quot;&gt;Update to last versions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this was possible thanks to the &lt;a href=&quot;https://github.com/gtk-rs/gir&quot;&gt;gtk-rs/gir&lt;/a&gt; project as well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/798&quot;&gt;Add overriding for function trait for manual implemented functions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/802&quot;&gt;Don’t derive Copy, Clone for truncated in sys mode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/804&quot;&gt;Parse “doc-deprecated” tag in alias&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/806&quot;&gt;Use new mem::uninitialized API&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/810&quot;&gt;Parse “doc-deprecated” tag in class and interface&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/814&quot;&gt;Prevent invalid function parameter order on async callback by not enforcing it&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/817&quot;&gt;Handle glib::Pid conversions specifically&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/820&quot;&gt;Handle doc generation for docs.rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/822&quot;&gt;Use dox instead of creating new feature&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/825&quot;&gt;Migrate property getters to new signature for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Value::get&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/826&quot;&gt;Refactor Imports&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/830&quot;&gt;Add flag to disable future generation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/833&quot;&gt;Add link to gir reference&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/837&quot;&gt;Add link to schema for .gir files&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/836&quot;&gt;Fall back for “type-name” for objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/838&quot;&gt;Use IsA for property setters for non-final objects&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/842&quot;&gt;Correctly detect not generated builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/843&quot;&gt;Class builder includes properties of  implemented interfaces&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/846&quot;&gt;Docs rs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/848&quot;&gt;Use Box&amp;lt;dyn Error&amp;gt; instead of Box&amp;lt;Error&amp;gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/852&quot;&gt;Remove some duplicate clone calls&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/854&quot;&gt;Fix merge conflict&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/816&quot;&gt;Allow nullable callbacks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/853&quot;&gt;Add generic parameters to builder methods&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/858&quot;&gt;Fix invalid import add&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/855&quot;&gt;Remove dependencies&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/860&quot;&gt;Extend gpointer to void*&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/861&quot;&gt;Fix missing parenthesis on return types&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/864&quot;&gt;Add missing from_glib conversion for Pid&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/863&quot;&gt;Correctly generate glib::Error import&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/866&quot;&gt;Provide the full path to the Inhibit type for signals&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/868&quot;&gt;Ignore function-macro tag to prevent warnings&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/869&quot;&gt;Generate pinned box futures and use the stabilized futures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/871&quot;&gt;Format&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/870&quot;&gt;Migrate to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tempfile&lt;/code&gt; from deprecated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;temdir&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/873&quot;&gt;Rename&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/875&quot;&gt;Generate GIO futures code a bit more simple and without requiring all…&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/876&quot;&gt;Add deriving Default, Clone to builders&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/877&quot;&gt;Fix off-by-one line numbers in xmlparser::ErrorEmitter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/gtk-rs/gir/pull/878&quot;&gt;generate imports in the same order as rustfmt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to all of our contributors for their (awesome!) work on this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alatiera&quot;&gt;@alatiera&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/alex179ohm&quot;&gt;@alex179ohm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/antoyo&quot;&gt;@antoyo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bilelmoussaoui&quot;&gt;@bilelmoussaoui&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/BrainBlasted&quot;&gt;@BrainBlasted&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Cogitri&quot;&gt;@Cogitri&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/EPashkin&quot;&gt;@EPashkin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/federicomenaquintero&quot;&gt;@federicomenaquintero&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/fengalin&quot;&gt;@fengalin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/GuillaumeGomez&quot;&gt;@GuillaumeGomez&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Hofer-Julian&quot;&gt;@Hofer-Julian&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jangernert&quot;&gt;@jangernert&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/nipunn1313&quot;&gt;@nipunn1313&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/RazrFalcon&quot;&gt;@RazrFalcon&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sdroege&quot;&gt;@sdroege&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sfanxiang&quot;&gt;@sfanxiang&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/silwol&quot;&gt;@silwol&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/timbodeit&quot;&gt;@timbodeit&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/velyan&quot;&gt;@velyan&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sun, 15 Dec 2019 19:00:00 +0000</pubDate>
        <link>https://gtk-rs.org/blog/2019/12/15/new-release.html</link>
        <guid isPermaLink="true">https://gtk-rs.org/blog/2019/12/15/new-release.html</guid>
        
        
        <category>front</category>
        
        <category>crates</category>
        
      </item>
    
  </channel>
</rss>
