gtk v0.8.1 Release Notes

Release Date: 2020-02-17 // about 4 years ago

Previous changes from v0.0.7

  • 💥 Breaking changes

    • Object reform introduced autogenerated high-level bindings and broke some conventions.

      • Constructors don't return Option, they never fail.
      • Companion traits renamed e.g. ButtonTrait -> ButtonExt.
      • Modules are private now, all items are exported at the crate level (e.g. gtk::button::Button is no longer visible, use gtk::Button instead).
      • Dialog APIs made less Rust-y for consistency with upstream.
      • File name types changed from &str to T: AsRef<Path>.
      • A few signatures and spellings corrected to match upstream.
    • 🔖 Version features reintroduced and autodetection is no more. The fallback version is 3.4.

      Select the minimal version required by your application like this:

      [dependencies.gtk]
      features = ["v3_10"]
      
    • 🚦 Signal handlers take the receiver by reference and support more specific receiver types.

    • 🆕 New safe event bindings are passed to signal handlers. These bindings have safe getters while the low-level event structs are still reachable via as_ref.

    • 🆕 New safe Error and Value bindings. ListStore and TreeStore changed accordingly, traded set_string for more powerful set.

    • 🚚 In an ongoing move to reflect integer unsignedness properly Notebook switched from i32 to u32, ListStore and TreeStore partly switched to u32 and EntryBuffer switched to u16.

    👌 Improvements

    • Object reform benefits include:

      • Automatic generation of the majority of code, expanding the number of implemented classes, eliminating typos and making maintenance easier.
      • Unified upcasting and downcasting via the Cast trait, proper interface support. In particular this makes Builder safe to use.
      • Each crate has a prelude module, which reexports all traits and some ubiquitous types (Continue, Inhibit). gtk's prelude incorporates glib's one.
      • Removal of the C glue layer and gcc dependency.
    • 📚 The upstream documentation excised from all crates earlier lives in the [lgpl-docs][lgpl-docs] crate now. It can be embedded into your local copy of gtk and other crates by enabling the embed-lgpl-docs feature.

    • 🏗 Building:

      • Windows users no longer need to delete Rust's bundled gcc.
      • In the absence of pkg-config we try to link anyway assuming the libraries can be found in the default search path. There are no version checks in this case.
      • Setting GTK_LIB_DIR skips pkg-config altogether.

    📄 [lgpl-docs]: https://github.com/gtk-rs/lgpl-docs