From e402270a2d7dd650db483be332795b53967d4c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 8 Jul 2019 10:00:43 +0300 Subject: [PATCH 001/186] Remove obsolete "known problem" from Windows instructions Also clarify a bit that it's not interfacing with other Windows libraries that is possible with the MSVC toolchain, but only with ones that are incompatible with MINGW. Which are not that many after all. And add a comment that using the MSVC toolchain allows using the Visual Studio debugger. --- docs-src/requirements.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/docs-src/requirements.md b/docs-src/requirements.md index 7d479b24a..076e5276a 100644 --- a/docs-src/requirements.md +++ b/docs-src/requirements.md @@ -30,8 +30,9 @@ The __gtk__ crate expects __GTK+__, __GLib__ and __Cairo__ development files to ## Windows On Windows Rust can use either the MSVC toolchain or the GNU toolchain. The latter is easier to -install, but the former provides a better overall experience and allows interfacing with other -Windows libraries. +install, but the former provides a better overall experience and allows interfacing with Windows +libraries that are incompatible with the GNU toolchain and allows for example usage of the +Visual Studio debugger. ### MSVC toolchain @@ -56,12 +57,6 @@ gtk-theme-name=win32 #### Possible problems -##### `unresolved external symbol gtk_font_chooser_level_get_type` - -This is [a bug](https://github.com/gtk-rs/gtk/issues/794) in version 0.6 of gtk-rs with versions of -GTK prior to 3.22.30; either use gtk-rs from Git directly or backport [the fix](https://github.com/gtk-rs/gtk/pull/804) -into the copy of gtk-rs in your Cargo registry. - ##### `process didn't exit successfully (exit code: 0xc0000139, STATUS_ENTRYPOINT_NOT_FOUND)` `%VCPKGDIR%\bin` is too late in the `PATH` environment variable, and DLLs for other programs are being found before the ones installed alongside GTK. Move `%VCPKGDIR%\bin` earlier in your `PATH` and try again. From 298a6ec16194ae4ce2c159fff5568366c812ebde Mon Sep 17 00:00:00 2001 From: Mitchell Hentges Date: Tue, 6 Aug 2019 20:27:35 -0700 Subject: [PATCH 002/186] Fixes #117. Wraps param in Some --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 686f34981..69bb3f229 100644 --- a/index.md +++ b/index.md @@ -68,7 +68,7 @@ Create an application, etc. use gtk::{Application, ApplicationWindow, Button}; fn main() { - let application = Application::new("com.github.gtk-rs.examples.basic", Default::default()) + let application = Application::new(Some("com.github.gtk-rs.examples.basic"), Default::default()) .expect("failed to initialize GTK application"); application.connect_activate(|app| { From 36a0c13316ad3b99b60c3f0b79184f18d0f3d871 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Fri, 16 Aug 2019 17:02:56 -0700 Subject: [PATCH 003/186] index: Add more projects Add the following projects: * Banner Viewer * Contrast * Icon Library * neovim-gtk --- index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.md b/index.md index 69bb3f229..319cea22a 100644 --- a/index.md +++ b/index.md @@ -100,7 +100,9 @@ features = ["v3_16"] ~~~ ## Projects using gtk-rs +* [Banner Viewer](https://gitlab.gnome.org/World/design/banner-viewer) * [BrewStillery](https://gitlab.com/MonkeyLog/BrewStillery) +* [Contrast](https://gitlab.gnome.org/World/design/contrast) * [Epicwar Downloader](https://github.com/ab0v3g4me/epicwar-downloader) * [Font Finder](https://github.com/mmstick/fontfinder) * [Fractal](https://gitlab.gnome.org/danigm/fractal) @@ -108,9 +110,11 @@ features = ["v3_16"] * [Gattii](https://gitlab.com/susurrus/gattii) * [glide](https://github.com/philn/glide) * [gpsami](https://github.com/hfiguiere/gpsami) +* [Icon Library](https://gitlab.gnome.org/World/design/icon-library) * [Marmoset](https://github.com/sprang/marmoset) * [mcmmtk](https://github.com/pwil3058/mcmmtk) * [media-toc](https://github.com/fengalin/media-toc) +* [neovim-gtk](https://github.com/daa84/neovim-gtk) * [noaa-apt](https://github.com/martinber/noaa-apt) * [pcatk](https://github.com/pwil3058/pcatk) * [PNMixer-rs](https://github.com/hasufell/pnmixer-rust) From 43c8691efcaeca2444661a72346486ad644b050d Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 30 Aug 2019 15:50:13 +0200 Subject: [PATCH 004/186] Remove unused channels --- docs-src/contact.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs-src/contact.md b/docs-src/contact.md index 3d8158d33..53e19ced2 100644 --- a/docs-src/contact.md +++ b/docs-src/contact.md @@ -8,14 +8,11 @@ There are multiple ways to contact directly `Gtk-rs` developers: # IRC -In here you have the choice between two channels on two different servers: +Channel #rust on **irc.gimp.org** server. - * #gtk-rs on irc.mozilla.org - * #rust on irc.gimp.org +# Matrix -# Gitter - -You can find us on gitter at this address: [gitter.im/gtk-rs/gtk](https://gitter.im/gtk-rs/gtk). +You can connect using: **#gimpnet#gnome:matrix.org**. # Github From c4ff1d6e01e78c7fef1b53b630cf53fc87329b7a Mon Sep 17 00:00:00 2001 From: Ville Hakulinen Date: Mon, 30 Sep 2019 12:09:30 +0300 Subject: [PATCH 005/186] Add GNvim to projects using gtk-rs list --- index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/index.md b/index.md index 319cea22a..6edb83a85 100644 --- a/index.md +++ b/index.md @@ -108,6 +108,7 @@ features = ["v3_16"] * [Fractal](https://gitlab.gnome.org/danigm/fractal) * [Garta](https://github.com/zaari/garta) * [Gattii](https://gitlab.com/susurrus/gattii) +* [GNvim](https://github.com/vhakulinen/gnvim) * [glide](https://github.com/philn/glide) * [gpsami](https://github.com/hfiguiere/gpsami) * [Icon Library](https://gitlab.gnome.org/World/design/icon-library) From cf8f8c5f728d1f8b525a1fc153b7401ba08c86b5 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 21 Oct 2019 14:23:49 +0200 Subject: [PATCH 006/186] Add new files to ignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 132fbb944..92dd792f3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ _site .sass-cache Gemfile.lock **.DS_Store +.bundle +vendor From 883909b8901424647747c4c387471db9d220a95d Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 21 Oct 2019 14:23:59 +0200 Subject: [PATCH 007/186] Fix jekyll run issues --- _config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/_config.yml b/_config.yml index 3c860e564..8925a539b 100644 --- a/_config.yml +++ b/_config.yml @@ -14,6 +14,7 @@ exclude: - README.md - "Gemfile*" - "*.sh" + - vendor # Build settings markdown: kramdown From 46e10e9acdd1c8ad7835777b8f30339ff80a509e Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 21 Oct 2019 14:24:12 +0200 Subject: [PATCH 008/186] Add table to show minimum supported versions --- css/main.scss | 15 ++++++++++++++- index.md | 27 ++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/css/main.scss b/css/main.scss index 0c5dc93c8..6f0e2b1f5 100755 --- a/css/main.scss +++ b/css/main.scss @@ -61,4 +61,17 @@ div.footer > div { width: 33.3%; text-align: center; min-height: 5px; -} \ No newline at end of file +} + +table { + width: 100%; + text-align: left; + border-collapse: collapse; +} +th { + text-align: center; +} +th, td { + border: 1px solid #ddd; + padding: 2px 8px; +} diff --git a/index.md b/index.md index 6edb83a85..647c85273 100644 --- a/index.md +++ b/index.md @@ -5,7 +5,7 @@ layout: wide
-### [Rust] bindings for [GTK+ 3][GTK], [Cairo], [GtkSourceView] and other [GLib]-compatible libraries +## [Rust] bindings for [GTK+ 3][GTK], [Cairo], [GtkSourceView] and other [GLib]-compatible libraries [![GTK screenshot](gtk.png)](gtk.png) @@ -33,11 +33,26 @@ layout: wide
+| Crate | Minimum supported version | +|-------|---------------------------| +| [atk](https://crates.io/crates/atk) | 2.30 | +| [cairo](https://crates.io/crates/cairo) | 1.14 | +| [gdk](https://crates.io/crates/gdk) | 3.16 | +| [gdk-pixbuf](https://crates.io/crates/gdk-pixbuf) | 2.32 | +| [gio](https://crates.io/crates/gio) | 2.44 | +| [glib](https://crates.io/crates/glib) | 2.44 | +| [gtk](https://crates.io/crates/gtk) | 3.16 | +| [pango](https://crates.io/crates/pango) | 1.38 | +| [pangocairo](https://crates.io/crates/pangocairo) | 1.0 | +| [sourceview](https://crates.io/crates/sourceview) | 3.0 | + +
+ ## Using -Prepare your system: [Requirements](http://gtk-rs.org/docs-src/requirements.html) +First, prepare your system by taking a look at the [requirements](http://gtk-rs.org/docs-src/requirements.html). -Include `gtk` and `gio` in your `Cargo.toml` and set the minimal GTK version required by your project: +Then include `gtk` and `gio` in your `Cargo.toml` and set the minimal GTK version required by your project: {% assign gtk = site.data.crates | where: "name", "gtk" %} ~~~toml @@ -68,8 +83,10 @@ Create an application, etc. use gtk::{Application, ApplicationWindow, Button}; fn main() { - let application = Application::new(Some("com.github.gtk-rs.examples.basic"), Default::default()) - .expect("failed to initialize GTK application"); + let application = Application::new( + Some("com.github.gtk-rs.examples.basic"), + Default::default(), + ).expect("failed to initialize GTK application"); application.connect_activate(|app| { let window = ApplicationWindow::new(app); From 4c79f4903a7f0fba5c5cfc28064c4a814448f4b4 Mon Sep 17 00:00:00 2001 From: Rohan Prinja <1688456+ajnirp@users.noreply.github.com> Date: Mon, 21 Oct 2019 18:20:15 -0700 Subject: [PATCH 009/186] Make the cairo link point to the correct crate --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 647c85273..422e9c79f 100644 --- a/index.md +++ b/index.md @@ -36,7 +36,7 @@ layout: wide | Crate | Minimum supported version | |-------|---------------------------| | [atk](https://crates.io/crates/atk) | 2.30 | -| [cairo](https://crates.io/crates/cairo) | 1.14 | +| [cairo](https://crates.io/crates/cairo-rs) | 1.14 | | [gdk](https://crates.io/crates/gdk) | 3.16 | | [gdk-pixbuf](https://crates.io/crates/gdk-pixbuf) | 2.32 | | [gio](https://crates.io/crates/gio) | 2.44 | From 0e56f8ed393b2e0ad1db6bf4e344f4082932ab30 Mon Sep 17 00:00:00 2001 From: Tglman Date: Tue, 22 Oct 2019 11:28:07 +0100 Subject: [PATCH 010/186] add Shortwave and Social applications --- index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.md b/index.md index 422e9c79f..10baa5b27 100644 --- a/index.md +++ b/index.md @@ -141,6 +141,8 @@ features = ["v3_16"] * [process-viewer](https://github.com/GuillaumeGomez/process-viewer) * [relm](https://github.com/antoyo/relm) * [rrun](https://github.com/buster/rrun) +* [Shortwave](https://gitlab.gnome.org/World/Shortwave) +* [Social](https://gitlab.gnome.org/World/Social) * [SolidOak](https://github.com/oakes/SolidOak) * [systemd-manager](https://github.com/mmstick/systemd-manager) * [Tau](https://gitlab.gnome.org/World/Tau) From e00c42587f7b1153e9780215bab0e57585592d19 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Wed, 13 Nov 2019 18:57:49 +0100 Subject: [PATCH 011/186] Improve front page wording --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 10baa5b27..3ea394b7c 100644 --- a/index.md +++ b/index.md @@ -65,7 +65,7 @@ version = "{{ gio[0].max_version }}" features = ["v2_44"] ~~~ -__The APIs aren't stable yet. Watch the Announcements box above for breaking changes to the crates!__ +__The code is stable and feature complete, but the APIs might change in the future.__ Import the `gtk` and `gio` crates and their traits: From 97a4f7e03305c33b280df90aee6abab6265fd480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20R=C3=B6ssler?= Date: Sat, 14 Dec 2019 02:12:49 +0100 Subject: [PATCH 012/186] Add gled to list of projects --- index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/index.md b/index.md index 3ea394b7c..6c73ecb2f 100644 --- a/index.md +++ b/index.md @@ -126,6 +126,7 @@ features = ["v3_16"] * [Garta](https://github.com/zaari/garta) * [Gattii](https://gitlab.com/susurrus/gattii) * [GNvim](https://github.com/vhakulinen/gnvim) +* [gled](https://gitlab.com/pentagonum/gled) * [glide](https://github.com/philn/glide) * [gpsami](https://github.com/hfiguiere/gpsami) * [Icon Library](https://gitlab.gnome.org/World/design/icon-library) From 326059e58e413020c07713dc006f2dee3a7e580b Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 14 Dec 2019 16:45:59 +0100 Subject: [PATCH 013/186] Add new blog post --- _posts/2019-12-14-new-release.md | 310 +++++++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 _posts/2019-12-14-new-release.md diff --git a/_posts/2019-12-14-new-release.md b/_posts/2019-12-14-new-release.md new file mode 100644 index 000000000..cebc6db1a --- /dev/null +++ b/_posts/2019-12-14-new-release.md @@ -0,0 +1,310 @@ +--- +layout: post +author: GuillaumeGomez +title: Simplification and more everything +categories: [front, crates] +date: 2019-12-14 16:00:00 +0000 +--- + +* Write intro here * + +### Changes + +For the interested ones, here is the list of the merged pull requests: + +[sys](https://github.com/gtk-rs/sys): + + * [Update with eoan's gir-files](https://github.com/gtk-rs/sys/pull/138) + * [Add gtk4 files](https://github.com/gtk-rs/sys/pull/145) + * [Regen](https://github.com/gtk-rs/sys/pull/148) + * [Remove graphene](https://github.com/gtk-rs/sys/pull/149) + * [Regen](https://github.com/gtk-rs/sys/pull/150) + * [Regen](https://github.com/gtk-rs/sys/pull/152) + * [Update minimum rust version to 1.39](https://github.com/gtk-rs/sys/pull/155) + * [Use tempfile in tests](https://github.com/gtk-rs/sys/pull/154) + +[glib](https://github.com/gtk-rs/glib): + + * [New version](https://github.com/gtk-rs/glib/pull/502) + * [Regen](https://github.com/gtk-rs/glib/pull/504) + * [Zeroed](https://github.com/gtk-rs/glib/pull/505) + * [Fix handling of GValues containing a floating GObject](https://github.com/gtk-rs/glib/pull/506) + * [Publish new 0 8](https://github.com/gtk-rs/glib/pull/507) + * [Implement FromGlib and ToGlib traits on Pid type](https://github.com/gtk-rs/glib/pull/508) + * [Mark ByteArray::set_size() as unsafe](https://github.com/gtk-rs/glib/pull/512) + * [ Value::get: return a Result to account for type mismatch...](https://github.com/gtk-rs/glib/pull/513) + * [Remove tests which panic in signals](https://github.com/gtk-rs/glib/pull/519) + * [value::GetError: add a constructor and make fields public](https://github.com/gtk-rs/glib/pull/517) + * [Improve docs.rs documentation](https://github.com/gtk-rs/glib/pull/511) + * [Remove subclass feature](https://github.com/gtk-rs/glib/pull/521) + * [Fully qualify inner macros for exported macros...](https://github.com/gtk-rs/glib/pull/522) + * [Publish new 0.8](https://github.com/gtk-rs/glib/pull/523) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/glib/pull/524) + * [Implement Value::transform()](https://github.com/gtk-rs/glib/pull/525) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/glib/pull/528) + * [Use MainContext::with_thread_default() instead of pushing/popping man…](https://github.com/gtk-rs/glib/pull/529) + * [Update to futures 0.3](https://github.com/gtk-rs/glib/pull/531) + * [Add clone macro](https://github.com/gtk-rs/glib/pull/527) + * [Extend clone macro](https://github.com/gtk-rs/glib/pull/534) + * [Support downgrade on references as well](https://github.com/gtk-rs/glib/pull/535) + * [Don't leak missing Safety doc clippy warnings (#538)](https://github.com/gtk-rs/glib/pull/539) + * [Remove unneeded `allow(clippy::missing_safety_doc)` attributes (538)](https://github.com/gtk-rs/glib/pull/540) + * [Add renaming support](https://github.com/gtk-rs/glib/pull/536) + * [API additions for connecting non-Send closures and thread-safety fixes to the main context channel and futures](https://github.com/gtk-rs/glib/pull/541) + * [Remove Send bound from SourceFuture/SourceStream](https://github.com/gtk-rs/glib/pull/542) + * [KeyFile::get_string() can return a string in error case that still ha…](https://github.com/gtk-rs/glib/pull/544) + * [Remove glib_floating_reference_guard!() macro](https://github.com/gtk-rs/glib/pull/548) + * [Manually implement FFI code for GObject instead of using glib_shared_wrapper!](https://github.com/gtk-rs/glib/pull/547) + * [Regen](https://github.com/gtk-rs/glib/pull/549) + * [Regen](https://github.com/gtk-rs/glib/pull/550) + +[cairo](https://github.com/gtk-rs/cairo): + + * [Fix warnings](https://github.com/gtk-rs/cairo/pull/271) + * [Reexport the Gradient type too.](https://github.com/gtk-rs/cairo/pull/273) + * [Replace mem::uninitialized calls](https://github.com/gtk-rs/cairo/pull/276) + * [Make winapi optional.](https://github.com/gtk-rs/cairo/pull/280) + * [cairo-sys: align win32-surface feature gates with those in cairo](https://github.com/gtk-rs/cairo/pull/281) + * [Improve docs.rs documentation](https://github.com/gtk-rs/cairo/pull/283) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/cairo/pull/284) + * [Improve cairo library documentation](https://github.com/gtk-rs/cairo/pull/288) + * [Include crate features in docs](https://github.com/gtk-rs/cairo/pull/286) + * [Add lib.rs to ignore purge files](https://github.com/gtk-rs/cairo/pull/289) + * [Add cargo fmt check](https://github.com/gtk-rs/cairo/pull/291) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/cairo/pull/292) + * [(#251): Surface::create_similar() and friends should return a Result](https://github.com/gtk-rs/cairo/pull/287) + * [SvgSurface: make filename param optional](https://github.com/gtk-rs/cairo/pull/294) + +[sourceview](https://github.com/gtk-rs/sourceview): + + * [Regen](https://github.com/gtk-rs/sourceview/pull/103) + * [Fix boxing in async func](https://github.com/gtk-rs/sourceview/pull/107) + * [Improve docs.rs documentation](https://github.com/gtk-rs/sourceview/pull/105) + * [better handling of dox feature](https://github.com/gtk-rs/sourceview/pull/108) + * [Use IsA for property setters](https://github.com/gtk-rs/sourceview/pull/110) + * [Generate builders](https://github.com/gtk-rs/sourceview/pull/111) + * [Builder use implemented interfaces properties](https://github.com/gtk-rs/sourceview/pull/112) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/sourceview/pull/113) + * [Regen](https://github.com/gtk-rs/sourceview/pull/114) + * [Use tempfile in tests](https://github.com/gtk-rs/sourceview/pull/115) + * [Derive Default, Clone for builders](https://github.com/gtk-rs/sourceview/pull/116) + * [Regen](https://github.com/gtk-rs/sourceview/pull/117) + +[atk](https://github.com/gtk-rs/atk): + + * [New version](https://github.com/gtk-rs/atk/pull/33) + * [Regen](https://github.com/gtk-rs/atk/pull/34) + * [Improve docs.rs documentation](https://github.com/gtk-rs/atk/pull/35) + * [Update for new `Value::get` signature](https://github.com/gtk-rs/atk/pull/36) + * [better handling of docs.rs features](https://github.com/gtk-rs/atk/pull/37) + * [Use IsA for property setters](https://github.com/gtk-rs/atk/pull/38) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/atk/pull/39) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/atk/pull/40) + * [Regen](https://github.com/gtk-rs/atk/pull/41) + * [Regen](https://github.com/gtk-rs/atk/pull/43) + * [Update minimum required rust version](https://github.com/gtk-rs/atk/pull/44) + * [Regen](https://github.com/gtk-rs/atk/pull/45) + +[gio](https://github.com/gtk-rs/gio): + + * [Fix docs for manual functions \[ci skip\]](https://github.com/gtk-rs/gio/pull/224) + * [Regen](https://github.com/gtk-rs/gio/pull/225) + * [New version](https://github.com/gtk-rs/gio/pull/227) + * [Regen](https://github.com/gtk-rs/gio/pull/228) + * [Generate FileEnumerator](https://github.com/gtk-rs/gio/pull/229) + * [Improve docs.rs documentation](https://github.com/gtk-rs/gio/pull/231) + * [Update for new `Value::get` signature](https://github.com/gtk-rs/gio/pull/233) + * [settings: add SettingsExtManual Trait for get::<T>/set::<T> fn](https://github.com/gtk-rs/gio/pull/226) + * [Fix boxing in async func](https://github.com/gtk-rs/gio/pull/232) + * [Ignore AppInfo::launch_uris_async](https://github.com/gtk-rs/gio/pull/237) + * [Add support for subclassing Input/OutputStream](https://github.com/gtk-rs/gio/pull/238) + * [Remove subclass feature](https://github.com/gtk-rs/gio/pull/239) + * [Use IsA for property setters](https://github.com/gtk-rs/gio/pull/240) + * [Remove ignoring not generated property](https://github.com/gtk-rs/gio/pull/241) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/gio/pull/243) + * [IsA<Cancellable> generic instead of concrete Option<&Cancellable>](https://github.com/gtk-rs/gio/pull/242) + * [Fix/silence various clippy warnings and errors](https://github.com/gtk-rs/gio/pull/244) + * [Change UnixMountPoint getters to not require &mut self](https://github.com/gtk-rs/gio/pull/246) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/gio/pull/248) + * [Don't re-export glib types](https://github.com/gtk-rs/gio/pull/249) + * [Regen and prelude fixes](https://github.com/gtk-rs/gio/pull/250) + * [Update to stabilized futures](https://github.com/gtk-rs/gio/pull/252) + * [More types](https://github.com/gtk-rs/gio/pull/251) + * [Don't reexport prelude content](https://github.com/gtk-rs/gio/pull/253) + * [Fix use statements in the tests](https://github.com/gtk-rs/gio/pull/254) + * [Some updates to the I/O streams](https://github.com/gtk-rs/gio/pull/256) + * [Update GioFuture to not require fragile crate usage by all users anymore](https://github.com/gtk-rs/gio/pull/258) + * [Derive Default, Clone for builders](https://github.com/gtk-rs/gio/pull/259) + * [Remove usage of glib_floating_reference_guard!()](https://github.com/gtk-rs/gio/pull/260) + * [Fix some clippy warnings by removing unused lifetime parameters](https://github.com/gtk-rs/gio/pull/261) + * [Regen](https://github.com/gtk-rs/gio/pull/262) + +[pango](https://github.com/gtk-rs/pango): + + * [regen](https://github.com/gtk-rs/pango/pull/155) + * [Improve docs.rs documentation](https://github.com/gtk-rs/pango/pull/157) + * [(#156): Manual implementations of PangoGravity functions](https://github.com/gtk-rs/pango/pull/158) + * [Improve docs.rs handling](https://github.com/gtk-rs/pango/pull/159) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/pango/pull/162) + * [Add pango-glyph interfaces ](https://github.com/gtk-rs/pango/pull/163) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/pango/pull/164) + * [Add PangoAttrSize](https://github.com/gtk-rs/pango/pull/166) + * [Regen](https://github.com/gtk-rs/pango/pull/169) + * [Regen](https://github.com/gtk-rs/pango/pull/171) + +[gdk-pixbuf](https://github.com/gtk-rs/gdk-pixbuf): + + * [Regen](https://github.com/gtk-rs/gdk-pixbuf/pull/127) + * [Update for new `Value::get` signature](https://github.com/gtk-rs/gdk-pixbuf/pull/128) + * [Improve docs.rs documentation](https://github.com/gtk-rs/gdk-pixbuf/pull/129) + * [Improve docs.rs handling](https://github.com/gtk-rs/gdk-pixbuf/pull/130) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/gdk-pixbuf/pull/131) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/gdk-pixbuf/pull/132) + * [Regen](https://github.com/gtk-rs/gdk-pixbuf/pull/133) + * [Regenerate with latest gir](https://github.com/gtk-rs/gdk-pixbuf/pull/134) + * [Regen](https://github.com/gtk-rs/gdk-pixbuf/pull/135) + +[gdk](https://github.com/gtk-rs/gdk): + + * [Fix docs for manual functions \[ci skip\]](https://github.com/gtk-rs/gdk/pull/299) + * [Fix build after #299](https://github.com/gtk-rs/gdk/pull/302) + * [Regen](https://github.com/gtk-rs/gdk/pull/303) + * [Improve docs.rs documentation](https://github.com/gtk-rs/gdk/pull/305) + * [Update for new `Value::get` signature](https://github.com/gtk-rs/gdk/pull/307) + * [Cairo interactions: auto load Pixbuf & Surface Exts](https://github.com/gtk-rs/gdk/pull/309) + * [Fix boxing in async func](https://github.com/gtk-rs/gdk/pull/306) + * [Fix up cairo interaction extension traits](https://github.com/gtk-rs/gdk/pull/312) + * [better handling of docs.rs features](https://github.com/gtk-rs/gdk/pull/313) + * [Time coord](https://github.com/gtk-rs/gdk/pull/314) + * [Improve get_device_history api](https://github.com/gtk-rs/gdk/pull/315) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/gdk/pull/316) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/gdk/pull/317) + * [Generate Keymap bindings](https://github.com/gtk-rs/gdk/pull/311) + * [Regen](https://github.com/gtk-rs/gdk/pull/318) + * [Don't reexport prelude content](https://github.com/gtk-rs/gdk/pull/319) + * [Regen](https://github.com/gtk-rs/gdk/pull/320) + +[gtk](https://github.com/gtk-rs/gtk): + + * [Fix docs for manual functions \[ci skip\]](https://github.com/gtk-rs/gtk/pull/832) + * [PadController is disguised so trait don't needed](https://github.com/gtk-rs/gtk/pull/839) + * [Make PadController::set_action_entries() public so it can actually be…](https://github.com/gtk-rs/gtk/pull/841) + * [New version](https://github.com/gtk-rs/gtk/pull/845) + * [Regen](https://github.com/gtk-rs/gtk/pull/849) + * [Implement Builder::connect_signals_full](https://github.com/gtk-rs/gtk/pull/852) + * [Generate GtkWindowExt::set_geometry_hints](https://github.com/gtk-rs/gtk/pull/857) + * [subclass: Get started on subclassing GtkWidget](https://github.com/gtk-rs/gtk/pull/861) + * [Add support for overriding Widget::draw() virtual method](https://github.com/gtk-rs/gtk/pull/863) + * [subclass: Add subclassing for GtkContainer](https://github.com/gtk-rs/gtk/pull/865) + * [subclass: Add ContainerImpl to prelude](https://github.com/gtk-rs/gtk/pull/868) + * [Add support for subclassing GtkBin and GtkEventBox](https://github.com/gtk-rs/gtk/pull/869) + * [subclass/widget: Add vfuncs between child_notify and draw](https://github.com/gtk-rs/gtk/pull/864) + * [Value get result](https://github.com/gtk-rs/gtk/pull/870) + * [Add support for subclassing GtkWindow and GtkApplicationWindow](https://github.com/gtk-rs/gtk/pull/873) + * [subclass: Add support for subclassing GtkBox](https://github.com/gtk-rs/gtk/pull/871) + * [subclass/application_window: Remove unused imports](https://github.com/gtk-rs/gtk/pull/877) + * [subclass: Add support for subclassing GtkHeaderBar](https://github.com/gtk-rs/gtk/pull/878) + * [subclass: Add support for subclassing GtkDialog](https://github.com/gtk-rs/gtk/pull/880) + * [Fix boxing in async func](https://github.com/gtk-rs/gtk/pull/866) + * [Fix tests for 32bit windows](https://github.com/gtk-rs/gtk/pull/882) + * [Improve docs.rs documentation](https://github.com/gtk-rs/gtk/pull/883) + * [ShortcutLabel](https://github.com/gtk-rs/gtk/pull/885) + * [Remove subclass feature](https://github.com/gtk-rs/gtk/pull/888) + * [Use IsA for property setters](https://github.com/gtk-rs/gtk/pull/889) + * [Builder use implemented interfaces properties](https://github.com/gtk-rs/gtk/pull/894) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/gtk/pull/896) + * [Get rid of Uninitialized impl for TargetEntry](https://github.com/gtk-rs/gtk/pull/899) + * [subclass: Implement subclassing for GtkStack](https://github.com/gtk-rs/gtk/pull/879) + * [NativeDialog: have run return ResponseType](https://github.com/gtk-rs/gtk/pull/900) + * [Warn on macos when initializing from non_main_thread](https://github.com/gtk-rs/gtk/pull/901) + * [Fix format issue](https://github.com/gtk-rs/gtk/pull/903) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/gtk/pull/904) + * [subclass: Always allow to override the vfuns of classes](https://github.com/gtk-rs/gtk/pull/908) + * [Regen](https://github.com/gtk-rs/gtk/pull/910) + * [Fix various imports to fix the build](https://github.com/gtk-rs/gtk/pull/911) + * [Make AccelGroup::connect() and ::connect_by_path() more usable](https://github.com/gtk-rs/gtk/pull/915) + * [Add renaming for WidgetExt::set_name and BuildableExt::set_name](https://github.com/gtk-rs/gtk/pull/917) + * [Regenerate with latest gir](https://github.com/gtk-rs/gtk/pull/918) + * [Derive Default for builders](https://github.com/gtk-rs/gtk/pull/919) + * [subclass/container: widget in set_focu_child should be Nullable](https://github.com/gtk-rs/gtk/pull/922) + * [subclass/widget: Implement default handling for parent events](https://github.com/gtk-rs/gtk/pull/921) + * [Regen](https://github.com/gtk-rs/gtk/pull/923) + +[pangocairo](https://github.com/gtk-rs/pangocairo): + + * [Fix docs for manual functions \[ci skip\]](https://github.com/gtk-rs/pangocairo/pull/53) + * [Improve docs.rs documentation](https://github.com/gtk-rs/pangocairo/pull/54) + * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/pangocairo/pull/55) + * [remove not needed anymore libffi fix](https://github.com/gtk-rs/pangocairo/pull/57) + * [Regen](https://github.com/gtk-rs/pangocairo/pull/58) + * [Fix build and reexports](https://github.com/gtk-rs/pangocairo/pull/59) + * [Regen](https://github.com/gtk-rs/pangocairo/pull/61) + * [Make FontMap::set_default() a static function and allow passing None …](https://github.com/gtk-rs/pangocairo/pull/62) + +[gtk-test](https://github.com/gtk-rs/gtk-test): + + +All this was possible thanks to the [gtk-rs/gir](https://github.com/gtk-rs/gir) project as well: + + * [Add overriding for function trait for manual implemented functions](https://github.com/gtk-rs/gir/pull/798) + * [Don't derive Copy, Clone for truncated in sys mode](https://github.com/gtk-rs/gir/pull/802) + * [Parse "doc-deprecated" tag in alias](https://github.com/gtk-rs/gir/pull/804) + * [Use new mem::uninitialized API](https://github.com/gtk-rs/gir/pull/806) + * [Parse "doc-deprecated" tag in class and interface](https://github.com/gtk-rs/gir/pull/810) + * [Prevent invalid function parameter order on async callback by not enforcing it](https://github.com/gtk-rs/gir/pull/814) + * [Handle glib::Pid conversions specifically](https://github.com/gtk-rs/gir/pull/817) + * [Handle doc generation for docs.rs](https://github.com/gtk-rs/gir/pull/820) + * [Use dox instead of creating new feature](https://github.com/gtk-rs/gir/pull/822) + * [Migrate property getters to new signature for `Value::get`](https://github.com/gtk-rs/gir/pull/825) + * [Refactor Imports](https://github.com/gtk-rs/gir/pull/826) + * [Add flag to disable future generation](https://github.com/gtk-rs/gir/pull/830) + * [Add link to gir reference](https://github.com/gtk-rs/gir/pull/833) + * [Add link to schema for .gir files](https://github.com/gtk-rs/gir/pull/837) + * [Fall back for "type-name" for objects](https://github.com/gtk-rs/gir/pull/836) + * [Use IsA for property setters for non-final objects](https://github.com/gtk-rs/gir/pull/838) + * [Correctly detect not generated builders](https://github.com/gtk-rs/gir/pull/842) + * [Class builder includes properties of implemented interfaces](https://github.com/gtk-rs/gir/pull/843) + * [Docs rs](https://github.com/gtk-rs/gir/pull/846) + * [Use Box<dyn Error> instead of Box<Error>](https://github.com/gtk-rs/gir/pull/848) + * [Remove some duplicate clone calls](https://github.com/gtk-rs/gir/pull/852) + * [Fix merge conflict](https://github.com/gtk-rs/gir/pull/854) + * [Allow nullable callbacks](https://github.com/gtk-rs/gir/pull/816) + * [Add generic parameters to builder methods](https://github.com/gtk-rs/gir/pull/853) + * [Fix invalid import add](https://github.com/gtk-rs/gir/pull/858) + * [Remove dependencies](https://github.com/gtk-rs/gir/pull/855) + * [Extend gpointer to void*](https://github.com/gtk-rs/gir/pull/860) + * [Fix missing parenthesis on return types](https://github.com/gtk-rs/gir/pull/861) + * [Add missing from_glib conversion for Pid](https://github.com/gtk-rs/gir/pull/864) + * [Correctly generate glib::Error import](https://github.com/gtk-rs/gir/pull/863) + * [Provide the full path to the Inhibit type for signals](https://github.com/gtk-rs/gir/pull/866) + * [Ignore function-macro tag to prevent warnings](https://github.com/gtk-rs/gir/pull/868) + * [Generate pinned box futures and use the stabilized futures](https://github.com/gtk-rs/gir/pull/869) + * [Format](https://github.com/gtk-rs/gir/pull/871) + * [Migrate to `tempfile` from deprecated `temdir`](https://github.com/gtk-rs/gir/pull/870) + * [Rename](https://github.com/gtk-rs/gir/pull/873) + * [Generate GIO futures code a bit more simple and without requiring all…](https://github.com/gtk-rs/gir/pull/875) + * [Add deriving Default, Clone to builders](https://github.com/gtk-rs/gir/pull/876) + * [Fix off-by-one line numbers in xmlparser::ErrorEmitter](https://github.com/gtk-rs/gir/pull/877) + * [generate imports in the same order as rustfmt](https://github.com/gtk-rs/gir/pull/878) + +Thanks to all of our contributors for their (awesome!) work on this release: + + * [@alatiera](https://github.com/alatiera) + * [@alex179ohm](https://github.com/alex179ohm) + * [@antoyo](https://github.com/antoyo) + * [@bilelmoussaoui](https://github.com/bilelmoussaoui) + * [@BrainBlasted](https://github.com/BrainBlasted) + * [@Cogitri](https://github.com/Cogitri) + * [@EPashkin](https://github.com/EPashkin) + * [@federicomenaquintero](https://github.com/federicomenaquintero) + * [@fengalin](https://github.com/fengalin) + * [@GuillaumeGomez](https://github.com/GuillaumeGomez) + * [@Hofer-Julian](https://github.com/Hofer-Julian) + * [@jangernert](https://github.com/jangernert) + * [@nipunn1313](https://github.com/nipunn1313) + * [@RazrFalcon](https://github.com/RazrFalcon) + * [@sdroege](https://github.com/sdroege) + * [@sfanxiang](https://github.com/sfanxiang) + * [@silwol](https://github.com/silwol) + * [@timbodeit](https://github.com/timbodeit) + * [@velyan](https://github.com/velyan) From 33a8be0de7375b649ee09c29b7acc00238af5529 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 14 Dec 2019 21:48:02 +0100 Subject: [PATCH 014/186] Update versions --- _data/crates.json | 16 +- ...w-release.md => 2019-12-15-new-release.md} | 155 +++++++++++++----- 2 files changed, 122 insertions(+), 49 deletions(-) rename _posts/{2019-12-14-new-release.md => 2019-12-15-new-release.md} (71%) diff --git a/_data/crates.json b/_data/crates.json index d02de1f51..144c788a2 100644 --- a/_data/crates.json +++ b/_data/crates.json @@ -1,35 +1,35 @@ [ { "name": "cairo-rs", - "max_version": "0.7.0" + "max_version": "0.8.0" }, { "name": "gdk", - "max_version": "0.11.0" + "max_version": "0.12.0" }, { "name": "gdk-pixbuf", - "max_version": "0.7.0" + "max_version": "0.8.0" }, { "name": "gio", - "max_version": "0.7.0" + "max_version": "0.8.0" }, { "name": "glib", - "max_version": "0.8.0" + "max_version": "0.9.0" }, { "name": "gtk", - "max_version": "0.7.0" + "max_version": "0.8.0" }, { "name": "pango", - "max_version": "0.7.0" + "max_version": "0.8.0" }, { "name": "sourceview", - "max_version": "0.7.0" + "max_version": "0.8.0" } ] diff --git a/_posts/2019-12-14-new-release.md b/_posts/2019-12-15-new-release.md similarity index 71% rename from _posts/2019-12-14-new-release.md rename to _posts/2019-12-15-new-release.md index cebc6db1a..e178c8f14 100644 --- a/_posts/2019-12-14-new-release.md +++ b/_posts/2019-12-15-new-release.md @@ -1,12 +1,116 @@ --- layout: post author: GuillaumeGomez -title: Simplification and more everything +title: Simplification and more of everything categories: [front, crates] -date: 2019-12-14 16:00:00 +0000 +date: 2019-12-15 19:00:00 +0000 --- -* Write intro here * +Hello everyone, time for a new release! + +This time, this is mostly about stabilization and simplification. It means that `gtk-rs` is now +simpler to use and more complete than ever. Let's take a tour of what's new(er)! + +### Macro to make gtk-rs usage far simpler + +A big productivity killer when using `gtk-rs` 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 `clone!` macro is provided as part of `glib`. + +See the [documentation](https://docs.rs/glib/0.9.0/glib/macro.clone.html) 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. + +The macro works on any `glib::Object` as well as on any `Arc` and `Rc`. + +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 `Window` into a `Button`'s `clicked` 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 `clicked` signal handler. See also the `Rc` documentation about +[reference cycles](https://doc.rust-lang.org/std/rc/index.html). + +### Subclass + +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 `gtk::Application` and `gtk::ApplicationWindow` can +be found [here](https://github.com/gtk-rs/examples/blob/master/src/bin/basic_subclass.rs), another +example using custom `glib::Object` subclasses as part of a `gtk::ListBox` model can be found +[here](https://github.com/gtk-rs/examples/blob/master/src/bin/listbox_model.rs) and various examples +for creating GStreamer elements [here](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs). + +While there are still subclassing bindings missing for many types, various basic types in the `gio`, +`gtk` and `gstreamer` crates are covered already. If something is missing for you, please let us +know with an issue or, even better, a pull request. + +Thanks to subclassing being a first-class citizen of the bindings, there is also an adapter +available for making any `std::io::Read` available as `gio::InputStream` and any `std::io::Write` +as `gio::OutputStream`: `gio::ReadInputStream` and `gio::WriteOutputStream`. Adapters in the other +direction are available as `gio::InputStream::into_read()` and `gio::OutputStream::into_write()`. + +### Futures + +The futures support was ported to `std` `Future`s and `futures` 0.3, and as `async/await` is +stabilized now it was also enabled by default. The "futures" feature is not needed anymore. + +With the futures support in `gio` and other modules it is now possible to write applications making +use of asynchronous I/O with `async/await`, which allows writing asynchronous code in a much simpler +way that looks close to the equivalent synchronous code. Check +[async/await stable](https://blog.rust-lang.org/2019/11/07/Async-await-stable.html) on the official +Rust blog for more details. + +An example making use of this with `gio`'s asynchronous file reading support can be found +[here](https://github.com/gtk-rs/examples/blob/master/src/bin/gio_futures_await.rs). While it is +not as streamlined as with native Rust crates like [async-std](https://async.rs) or +[tokio](https://tokio.rs) because of how the `gio` API works, it nonetheless much more convenient +to work with than the previous (but still available) callback-based approach. + +Another example that shows integration of `gio` with generic Rust futures crates can be found +[here](https://github.com/gtk-rs/examples/blob/pending/src/bin/gio_async_tls.rs) . Each +`gio::PollableInputStream` and `gio::PollableOutputStream` can be converted into an `AsyncRead` / +`AsyncWrite`, and by this allows integration with the wider Rust async ecosystem. In this case a +`gio` TCP connection is wrapped in a TLS connection provided by the `async-tls` crate, which uses +`rustls` as underlying TLS implementation. + +### GTK4 + +We have initial GTK4 bindings now, which are the result of [@sfanxiang][@sfanxiang]'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 [here](https://github.com/gtk-rs/gtk4). +Once there are release candidates of GTK4 we will also do alpha releases of the bindings. + +### Cairo improvements + +The `cairo` bindings now consistently return `Result`s for various functions instead of sometimes +`Option`s, sometimes silently failing. Many `cairo` operations return an actual `Surface` 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 `Err` is returned now as it should. + +### GTK Builder improvements + +In `gtk::Builder` 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. `gtk::Builder::connect_signals_full()` allows to provide closures for each +signal handler name that is given in the UI description. + +### `glib::Value::get` improvements + +`glib::Value::get()` was changed to allow distinguishing between the value containing a `None` and +trying to get a value of the wrong type out of it. This means that it now returns a `Result`, and +also that for types that can't possibly be `None` (e.g. integer types), `Value::get_some()` is +provided as a helper to not require unwrapping the returned `Option` from the normal `Value::get()`. + +That's it for biggest changes. A lot of other small ones are in as well. So enjoy! ### Changes @@ -16,29 +120,23 @@ For the interested ones, here is the list of the merged pull requests: * [Update with eoan's gir-files](https://github.com/gtk-rs/sys/pull/138) * [Add gtk4 files](https://github.com/gtk-rs/sys/pull/145) - * [Regen](https://github.com/gtk-rs/sys/pull/148) * [Remove graphene](https://github.com/gtk-rs/sys/pull/149) - * [Regen](https://github.com/gtk-rs/sys/pull/150) - * [Regen](https://github.com/gtk-rs/sys/pull/152) * [Update minimum rust version to 1.39](https://github.com/gtk-rs/sys/pull/155) * [Use tempfile in tests](https://github.com/gtk-rs/sys/pull/154) [glib](https://github.com/gtk-rs/glib): * [New version](https://github.com/gtk-rs/glib/pull/502) - * [Regen](https://github.com/gtk-rs/glib/pull/504) * [Zeroed](https://github.com/gtk-rs/glib/pull/505) * [Fix handling of GValues containing a floating GObject](https://github.com/gtk-rs/glib/pull/506) - * [Publish new 0 8](https://github.com/gtk-rs/glib/pull/507) * [Implement FromGlib and ToGlib traits on Pid type](https://github.com/gtk-rs/glib/pull/508) * [Mark ByteArray::set_size() as unsafe](https://github.com/gtk-rs/glib/pull/512) - * [ Value::get: return a Result to account for type mismatch...](https://github.com/gtk-rs/glib/pull/513) + * [Value::get: return a Result to account for type mismatch...](https://github.com/gtk-rs/glib/pull/513) * [Remove tests which panic in signals](https://github.com/gtk-rs/glib/pull/519) * [value::GetError: add a constructor and make fields public](https://github.com/gtk-rs/glib/pull/517) * [Improve docs.rs documentation](https://github.com/gtk-rs/glib/pull/511) * [Remove subclass feature](https://github.com/gtk-rs/glib/pull/521) * [Fully qualify inner macros for exported macros...](https://github.com/gtk-rs/glib/pull/522) - * [Publish new 0.8](https://github.com/gtk-rs/glib/pull/523) * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/glib/pull/524) * [Implement Value::transform()](https://github.com/gtk-rs/glib/pull/525) * [remove not needed anymore libffi fix](https://github.com/gtk-rs/glib/pull/528) @@ -55,8 +153,6 @@ For the interested ones, here is the list of the merged pull requests: * [KeyFile::get_string() can return a string in error case that still ha…](https://github.com/gtk-rs/glib/pull/544) * [Remove glib_floating_reference_guard!() macro](https://github.com/gtk-rs/glib/pull/548) * [Manually implement FFI code for GObject instead of using glib_shared_wrapper!](https://github.com/gtk-rs/glib/pull/547) - * [Regen](https://github.com/gtk-rs/glib/pull/549) - * [Regen](https://github.com/gtk-rs/glib/pull/550) [cairo](https://github.com/gtk-rs/cairo): @@ -77,7 +173,6 @@ For the interested ones, here is the list of the merged pull requests: [sourceview](https://github.com/gtk-rs/sourceview): - * [Regen](https://github.com/gtk-rs/sourceview/pull/103) * [Fix boxing in async func](https://github.com/gtk-rs/sourceview/pull/107) * [Improve docs.rs documentation](https://github.com/gtk-rs/sourceview/pull/105) * [better handling of dox feature](https://github.com/gtk-rs/sourceview/pull/108) @@ -85,32 +180,24 @@ For the interested ones, here is the list of the merged pull requests: * [Generate builders](https://github.com/gtk-rs/sourceview/pull/111) * [Builder use implemented interfaces properties](https://github.com/gtk-rs/sourceview/pull/112) * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/sourceview/pull/113) - * [Regen](https://github.com/gtk-rs/sourceview/pull/114) * [Use tempfile in tests](https://github.com/gtk-rs/sourceview/pull/115) * [Derive Default, Clone for builders](https://github.com/gtk-rs/sourceview/pull/116) * [Regen](https://github.com/gtk-rs/sourceview/pull/117) [atk](https://github.com/gtk-rs/atk): - * [New version](https://github.com/gtk-rs/atk/pull/33) - * [Regen](https://github.com/gtk-rs/atk/pull/34) * [Improve docs.rs documentation](https://github.com/gtk-rs/atk/pull/35) * [Update for new `Value::get` signature](https://github.com/gtk-rs/atk/pull/36) * [better handling of docs.rs features](https://github.com/gtk-rs/atk/pull/37) * [Use IsA for property setters](https://github.com/gtk-rs/atk/pull/38) * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/atk/pull/39) * [remove not needed anymore libffi fix](https://github.com/gtk-rs/atk/pull/40) - * [Regen](https://github.com/gtk-rs/atk/pull/41) - * [Regen](https://github.com/gtk-rs/atk/pull/43) * [Update minimum required rust version](https://github.com/gtk-rs/atk/pull/44) - * [Regen](https://github.com/gtk-rs/atk/pull/45) [gio](https://github.com/gtk-rs/gio): * [Fix docs for manual functions \[ci skip\]](https://github.com/gtk-rs/gio/pull/224) - * [Regen](https://github.com/gtk-rs/gio/pull/225) * [New version](https://github.com/gtk-rs/gio/pull/227) - * [Regen](https://github.com/gtk-rs/gio/pull/228) * [Generate FileEnumerator](https://github.com/gtk-rs/gio/pull/229) * [Improve docs.rs documentation](https://github.com/gtk-rs/gio/pull/231) * [Update for new `Value::get` signature](https://github.com/gtk-rs/gio/pull/233) @@ -137,11 +224,9 @@ For the interested ones, here is the list of the merged pull requests: * [Derive Default, Clone for builders](https://github.com/gtk-rs/gio/pull/259) * [Remove usage of glib_floating_reference_guard!()](https://github.com/gtk-rs/gio/pull/260) * [Fix some clippy warnings by removing unused lifetime parameters](https://github.com/gtk-rs/gio/pull/261) - * [Regen](https://github.com/gtk-rs/gio/pull/262) [pango](https://github.com/gtk-rs/pango): - * [regen](https://github.com/gtk-rs/pango/pull/155) * [Improve docs.rs documentation](https://github.com/gtk-rs/pango/pull/157) * [(#156): Manual implementations of PangoGravity functions](https://github.com/gtk-rs/pango/pull/158) * [Improve docs.rs handling](https://github.com/gtk-rs/pango/pull/159) @@ -149,26 +234,19 @@ For the interested ones, here is the list of the merged pull requests: * [Add pango-glyph interfaces ](https://github.com/gtk-rs/pango/pull/163) * [remove not needed anymore libffi fix](https://github.com/gtk-rs/pango/pull/164) * [Add PangoAttrSize](https://github.com/gtk-rs/pango/pull/166) - * [Regen](https://github.com/gtk-rs/pango/pull/169) - * [Regen](https://github.com/gtk-rs/pango/pull/171) [gdk-pixbuf](https://github.com/gtk-rs/gdk-pixbuf): - * [Regen](https://github.com/gtk-rs/gdk-pixbuf/pull/127) * [Update for new `Value::get` signature](https://github.com/gtk-rs/gdk-pixbuf/pull/128) * [Improve docs.rs documentation](https://github.com/gtk-rs/gdk-pixbuf/pull/129) * [Improve docs.rs handling](https://github.com/gtk-rs/gdk-pixbuf/pull/130) * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/gdk-pixbuf/pull/131) * [remove not needed anymore libffi fix](https://github.com/gtk-rs/gdk-pixbuf/pull/132) - * [Regen](https://github.com/gtk-rs/gdk-pixbuf/pull/133) - * [Regenerate with latest gir](https://github.com/gtk-rs/gdk-pixbuf/pull/134) - * [Regen](https://github.com/gtk-rs/gdk-pixbuf/pull/135) [gdk](https://github.com/gtk-rs/gdk): * [Fix docs for manual functions \[ci skip\]](https://github.com/gtk-rs/gdk/pull/299) * [Fix build after #299](https://github.com/gtk-rs/gdk/pull/302) - * [Regen](https://github.com/gtk-rs/gdk/pull/303) * [Improve docs.rs documentation](https://github.com/gtk-rs/gdk/pull/305) * [Update for new `Value::get` signature](https://github.com/gtk-rs/gdk/pull/307) * [Cairo interactions: auto load Pixbuf & Surface Exts](https://github.com/gtk-rs/gdk/pull/309) @@ -180,17 +258,13 @@ For the interested ones, here is the list of the merged pull requests: * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/gdk/pull/316) * [remove not needed anymore libffi fix](https://github.com/gtk-rs/gdk/pull/317) * [Generate Keymap bindings](https://github.com/gtk-rs/gdk/pull/311) - * [Regen](https://github.com/gtk-rs/gdk/pull/318) * [Don't reexport prelude content](https://github.com/gtk-rs/gdk/pull/319) - * [Regen](https://github.com/gtk-rs/gdk/pull/320) [gtk](https://github.com/gtk-rs/gtk): * [Fix docs for manual functions \[ci skip\]](https://github.com/gtk-rs/gtk/pull/832) * [PadController is disguised so trait don't needed](https://github.com/gtk-rs/gtk/pull/839) * [Make PadController::set_action_entries() public so it can actually be…](https://github.com/gtk-rs/gtk/pull/841) - * [New version](https://github.com/gtk-rs/gtk/pull/845) - * [Regen](https://github.com/gtk-rs/gtk/pull/849) * [Implement Builder::connect_signals_full](https://github.com/gtk-rs/gtk/pull/852) * [Generate GtkWindowExt::set_geometry_hints](https://github.com/gtk-rs/gtk/pull/857) * [subclass: Get started on subclassing GtkWidget](https://github.com/gtk-rs/gtk/pull/861) @@ -220,15 +294,12 @@ For the interested ones, here is the list of the merged pull requests: * [Fix format issue](https://github.com/gtk-rs/gtk/pull/903) * [remove not needed anymore libffi fix](https://github.com/gtk-rs/gtk/pull/904) * [subclass: Always allow to override the vfuns of classes](https://github.com/gtk-rs/gtk/pull/908) - * [Regen](https://github.com/gtk-rs/gtk/pull/910) * [Fix various imports to fix the build](https://github.com/gtk-rs/gtk/pull/911) * [Make AccelGroup::connect() and ::connect_by_path() more usable](https://github.com/gtk-rs/gtk/pull/915) * [Add renaming for WidgetExt::set_name and BuildableExt::set_name](https://github.com/gtk-rs/gtk/pull/917) - * [Regenerate with latest gir](https://github.com/gtk-rs/gtk/pull/918) * [Derive Default for builders](https://github.com/gtk-rs/gtk/pull/919) * [subclass/container: widget in set_focu_child should be Nullable](https://github.com/gtk-rs/gtk/pull/922) * [subclass/widget: Implement default handling for parent events](https://github.com/gtk-rs/gtk/pull/921) - * [Regen](https://github.com/gtk-rs/gtk/pull/923) [pangocairo](https://github.com/gtk-rs/pangocairo): @@ -236,13 +307,13 @@ For the interested ones, here is the list of the merged pull requests: * [Improve docs.rs documentation](https://github.com/gtk-rs/pangocairo/pull/54) * [Fix invalid cargo key for docs.rs](https://github.com/gtk-rs/pangocairo/pull/55) * [remove not needed anymore libffi fix](https://github.com/gtk-rs/pangocairo/pull/57) - * [Regen](https://github.com/gtk-rs/pangocairo/pull/58) * [Fix build and reexports](https://github.com/gtk-rs/pangocairo/pull/59) - * [Regen](https://github.com/gtk-rs/pangocairo/pull/61) * [Make FontMap::set_default() a static function and allow passing None …](https://github.com/gtk-rs/pangocairo/pull/62) [gtk-test](https://github.com/gtk-rs/gtk-test): + * [Update to last versions](https://github.com/gtk-rs/gtk-test/pull/32) + All this was possible thanks to the [gtk-rs/gir](https://github.com/gtk-rs/gir) project as well: @@ -272,7 +343,7 @@ All this was possible thanks to the [gtk-rs/gir](https://github.com/gtk-rs/gir) * [Add generic parameters to builder methods](https://github.com/gtk-rs/gir/pull/853) * [Fix invalid import add](https://github.com/gtk-rs/gir/pull/858) * [Remove dependencies](https://github.com/gtk-rs/gir/pull/855) - * [Extend gpointer to void*](https://github.com/gtk-rs/gir/pull/860) + * [Extend gpointer to void\*](https://github.com/gtk-rs/gir/pull/860) * [Fix missing parenthesis on return types](https://github.com/gtk-rs/gir/pull/861) * [Add missing from_glib conversion for Pid](https://github.com/gtk-rs/gir/pull/864) * [Correctly generate glib::Error import](https://github.com/gtk-rs/gir/pull/863) @@ -304,7 +375,9 @@ Thanks to all of our contributors for their (awesome!) work on this release: * [@nipunn1313](https://github.com/nipunn1313) * [@RazrFalcon](https://github.com/RazrFalcon) * [@sdroege](https://github.com/sdroege) - * [@sfanxiang](https://github.com/sfanxiang) + * [@sfanxiang][@sfanxiang] * [@silwol](https://github.com/silwol) * [@timbodeit](https://github.com/timbodeit) * [@velyan](https://github.com/velyan) + +[@sfanxiang]: https://github.com/sfanxiang From bf438611069798c563dcfd451eaaf3e9ea6f75f6 Mon Sep 17 00:00:00 2001 From: zzeroo Date: Thu, 19 Dec 2019 08:49:52 +0100 Subject: [PATCH 015/186] systemd-manager repo changed to gitlab Looks like systemd-manager @mmstick changed the repo origin to gitlab --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 6c73ecb2f..276e696d0 100644 --- a/index.md +++ b/index.md @@ -145,7 +145,7 @@ features = ["v3_16"] * [Shortwave](https://gitlab.gnome.org/World/Shortwave) * [Social](https://gitlab.gnome.org/World/Social) * [SolidOak](https://github.com/oakes/SolidOak) -* [systemd-manager](https://github.com/mmstick/systemd-manager) +* [systemd-manager](https://gitlab.com/mmstick/systemd-manager) * [Tau](https://gitlab.gnome.org/World/Tau) * [tv-renamer](https://github.com/mmstick/tv-renamer) * [Way Cooler](https://github.com/way-cooler) From 1e8438532fa0c8be2be90de84fff6bdb764ff18d Mon Sep 17 00:00:00 2001 From: danigm Date: Mon, 6 Jan 2020 17:02:44 +0100 Subject: [PATCH 016/186] index: Update Fractal url use the current Fractal url in the GNOME group. --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 276e696d0..e3272b746 100644 --- a/index.md +++ b/index.md @@ -122,7 +122,7 @@ features = ["v3_16"] * [Contrast](https://gitlab.gnome.org/World/design/contrast) * [Epicwar Downloader](https://github.com/ab0v3g4me/epicwar-downloader) * [Font Finder](https://github.com/mmstick/fontfinder) -* [Fractal](https://gitlab.gnome.org/danigm/fractal) +* [Fractal](https://gitlab.gnome.org/GNOME/fractal) * [Garta](https://github.com/zaari/garta) * [Gattii](https://gitlab.com/susurrus/gattii) * [GNvim](https://github.com/vhakulinen/gnvim) From 0c7c1fe1a520ead2c1ad82d4bbcaf79bf52699ea Mon Sep 17 00:00:00 2001 From: Windel Bouwman Date: Wed, 5 Feb 2020 20:01:52 +0100 Subject: [PATCH 017/186] Add lognplot to list of using projects --- index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/index.md b/index.md index e3272b746..04c1252c9 100644 --- a/index.md +++ b/index.md @@ -130,6 +130,7 @@ features = ["v3_16"] * [glide](https://github.com/philn/glide) * [gpsami](https://github.com/hfiguiere/gpsami) * [Icon Library](https://gitlab.gnome.org/World/design/icon-library) +* [lognplot](https://github.com/windelbouwman/lognplot) * [Marmoset](https://github.com/sprang/marmoset) * [mcmmtk](https://github.com/pwil3058/mcmmtk) * [media-toc](https://github.com/fengalin/media-toc) From b78a81ddacc8c37555af95587ea5de971916ae2f Mon Sep 17 00:00:00 2001 From: Pascal Hertleif Date: Sun, 16 Feb 2020 15:35:36 +0100 Subject: [PATCH 018/186] Add descriptions for libraries Basically copied from Wikipedia --- docs-src/tutorial/gnome_and_rust.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs-src/tutorial/gnome_and_rust.md b/docs-src/tutorial/gnome_and_rust.md index 34322fe78..334be822f 100644 --- a/docs-src/tutorial/gnome_and_rust.md +++ b/docs-src/tutorial/gnome_and_rust.md @@ -6,13 +6,13 @@ layout: default Currently, the `Gtk-rs` organization provides the bindings for the following libraries: - * Gtk - * Gdk - * Gdk-pixbuf - * Cairo - * Glib - * Gio - * Pango + * Gtk (the widget toolkit) + * Gdk (low-level functions provided by the underlying windowing and graphics systems) + * Gdk-pixbuf (image loading and manipulation) + * Cairo (vector graphic API) + * Glib (data structures and utilities for dealing with them) + * Gio (file system abstractions) + * Pango (layout engine, text and font handling) The goal is to provide a safe abstraction using Rust paradigms. From a39de4aea2e5a29b4da43b06ef7ca60fff140da9 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Wed, 19 Feb 2020 22:20:27 +0100 Subject: [PATCH 019/186] Fix docs links --- README.md | 4 ++-- _posts/2015-11-28-safety-first.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6d9dbde9e..250dd2cb6 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,9 @@ When authoring any changes you can try them out locally by running (requires rub > bundle exec jekyll serve -wD ``` -The `/docs/` location is served by the [docs](https://github.com/gtk-rs/docs) repo. Its contents +The `/docs/` location is served by the [docs](https://github.com/gtk-rs/docs) repository. Its contents should be considered disposable and eventually will be updated via CI. The documentation in [`docs-src`](docs-src) is not intended to be viewed at the `/docs-src/` -location. Instead the generated static files (`_site/docs-src/*`) are merged into the `docs` repo, +location. Instead the generated static files (`_site/docs-src/*`) are merged into the `docs` repository, keeping a nice urls structure. diff --git a/_posts/2015-11-28-safety-first.md b/_posts/2015-11-28-safety-first.md index b4eb27875..1132bb0fb 100644 --- a/_posts/2015-11-28-safety-first.md +++ b/_posts/2015-11-28-safety-first.md @@ -33,7 +33,7 @@ marked accordingly and need someone to pick them up. We've realized that we can't take the documentation from an LGPL licensed library and just slip it into an MIT-licensed one. Consequently we had to move almost all doc comments into a [separate repo][doc-comments]. We will keep -maintaining [online documentation](http://gtk-rs.org/docs/) and +maintaining [online documentation](http://gtk-rs.org/docs-src/) and **@GuillaumeGomez** is working on a tool, that will allow to put the doc comments back locally. From 9325ca5a43566e7e2fc8611b78300923fd01f7d3 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Wed, 19 Feb 2020 22:04:11 +0100 Subject: [PATCH 020/186] Point to gnome installation page instead of ours --- docs-src/index.md | 4 +- docs-src/requirements.md | 160 --------------------------------------- index.md | 2 +- 3 files changed, 4 insertions(+), 162 deletions(-) delete mode 100644 docs-src/requirements.md diff --git a/docs-src/index.md b/docs-src/index.md index ab2454140..86fb2d918 100644 --- a/docs-src/index.md +++ b/docs-src/index.md @@ -3,7 +3,9 @@ layout: default --- # Gtk-rs documentation -## [Requirements](requirements.html) +## Requirements + +First, prepare your system by taking a look at the [GTK installation page](https://www.gtk.org/docs/installations/). ## Crate API docs diff --git a/docs-src/requirements.md b/docs-src/requirements.md deleted file mode 100644 index 076e5276a..000000000 --- a/docs-src/requirements.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -layout: default ---- - -# Requirements - -The __gtk__ crate expects __GTK+__, __GLib__ and __Cairo__ development files to be installed on your system. - -## Debian and Ubuntu - -~~~bash -> sudo apt-get install libgtk-3-dev -~~~ - -## Fedora - -~~~bash -> sudo dnf install gtk3-devel glib2-devel - -### Fedora 21 and earlier -> sudo yum install gtk3-devel glib2-devel -~~~ - -## OS X - -~~~bash -> brew install gtk+3 -~~~ - -## Windows - -On Windows Rust can use either the MSVC toolchain or the GNU toolchain. The latter is easier to -install, but the former provides a better overall experience and allows interfacing with Windows -libraries that are incompatible with the GNU toolchain and allows for example usage of the -Visual Studio debugger. - -### MSVC toolchain - -1. Install GTK using [the instructions on the GTK website](https://www.gtk.org/download/windows.php). - This will take some time. Once it's finished, make a note of the folder `installed\x86-windows` - (32-bit)/`installed\x64-windows` (64-bit); these instructions will refer to it as `%VCPKGDIR%`. -2. Add `%VCPKGDIR%\bin` to the beginning of your `PATH` environment variable. -3. Set the `GTK_LIB_DIR` environment variable to `%VCPKGDIR%\lib`. -4. Create the following symlinks. (NTFS has supported symlinks since Windows Vista, but prior to the - Windows 10 Creators Update it required elevated privileges. Copying the files also works, but - you'll need to do it again when GTK is updated.) - * `%VCPKGDIR%\lib\gtk-3.0.lib` points to `%VCPKGDIR%\lib\gtk-3.lib`. - * `%VCPKGDIR%\lib\gdk-3.0.lib` points to `%VCPKGDIR%\lib\gdk-3.lib`. - * `%VCPKGDIR%\bin\gtk-3.0.dll` points to `%VCPKGDIR%\bin\gtk-3.dll`. - * `%VCPKGDIR%\bin\gdk-3.0.dll` points to `%VCPKGDIR%\bin\gdk-3.dll`. -5. Create the folder `%VCPKGDIR%\etc\gtk-3.0`. Inside it, create the file `settings.ini`: - -```ini -[Settings] -gtk-theme-name=win32 -``` - -#### Possible problems - -##### `process didn't exit successfully (exit code: 0xc0000139, STATUS_ENTRYPOINT_NOT_FOUND)` - -`%VCPKGDIR%\bin` is too late in the `PATH` environment variable, and DLLs for other programs are being found before the ones installed alongside GTK. Move `%VCPKGDIR%\bin` earlier in your `PATH` and try again. - -### GNU toolchain - -Make sure you have the [GNU ABI] version of the rust compiler installed. -Contrary to earlier instructions, **you don't need to uncheck "Linker and -platform libraries" in the Rust setup or delete `gcc.exe` and `ld.exe` in Rust's -`bin` directory.** - -[GNU ABI]: https://github.com/rust-lang-nursery/rustup.rs/blob/master/README.md#working-with-rust-on-windows - -### Getting the GTK+ SDK - -The GTK+ Project [recommends][gtk-download] using the GTK+ SDK provided by [MSYS2]: - -[gtk-download]: http://www.gtk.org/download/windows.php -[MSYS2]: http://www.msys2.org/ - - * [Install MSYS2](http://www.msys2.org/). - We're going to assume it's installed in `C:\msys64` on 64-bit systems and `C:\msys32` - on 32-bit ones. Adjust the paths in the following steps if necessary. - - * In the "MSYS2 MSYS Shell" install `libgtk3`. - - - 32-bit targets: - - ~~~bash - > pacman -S mingw-w64-i686-gtk3 - ~~~ - - - 64-bit targets: - - ~~~bash - > pacman -S mingw-w64-x86_64-gtk3 - ~~~ - -If you prefer getting the SDK from [gtk-win64] or building it from source, set -the variables in the next section accordingly. - -[gtk-win64]: https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer - -### Using the native Windows shell - -Back in the `cmd.exe` shell set the `GTK_LIB_DIR` and `PATH` environment -variables: - - * 32-bit targets: - - ~~~cmd - C:\> SET GTK_LIB_DIR=C:\msys32\mingw32\lib - C:\> SET PATH=%PATH%;C:\msys32\mingw32\bin - ~~~ - - * 64-bit targets: - - ~~~cmd - C:\> SET GTK_LIB_DIR=C:\msys64\mingw64\lib - C:\> SET PATH=%PATH%;C:\msys64\mingw64\bin - ~~~ - -If you're happy with these changes, make them permanent with -[`SETX`](https://technet.microsoft.com/en-us/library/cc755104.aspx): - -~~~cmd -C:\> SETX GTK_LIB_DIR %GTK_LIB_DIR% -C:\> SETX PATH %PATH% -~~~ - -### Using the MSYS2 MinGW shell - -Instead of setting the environment variables manually, you can let `pkg-config` -sort the paths out for you. - - * In the "MSYS2 MSYS Shell" install the `mingw-w64` toolchain: - - - 32-bit targets: - - ~~~bash - > pacman -S mingw-w64-i686-toolchain - ~~~ - - - 64-bit targets: - - ~~~bash - > pacman -S mingw-w64-x86_64-toolchain - ~~~ - - * Start the "MSYS2 MinGW Shell" (not to be confused with "MSYS2 MSYS Shell"). - -### Possible problems - -#### Error on linking on Windows MSYS2: undefined reference to `__imp___acrt_iob_func' - -Download these packages and install it with `pacman -U `: - -* http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-crt-git-5.0.0.5002.34a7c1c0-1-any.pkg.tar.xz -* http://repo.msys2.org/mingw/x86_64/mingw-w64-x86_64-headers-git-5.0.0.5002.34a7c1c0-1-any.pkg.tar.xz - -Also pkg-config better ignore these packages on updating, add "IgnorePkg = mingw-w64-x86_64-crt-git mingw-w64-x86_64-headers-git" to /etc/pacman.conf diff --git a/index.md b/index.md index 04c1252c9..f7d30bc92 100644 --- a/index.md +++ b/index.md @@ -50,7 +50,7 @@ layout: wide ## Using -First, prepare your system by taking a look at the [requirements](http://gtk-rs.org/docs-src/requirements.html). +First, prepare your system by taking a look at the [GTK installation page](https://www.gtk.org/docs/installations/). Then include `gtk` and `gio` in your `Cargo.toml` and set the minimal GTK version required by your project: {% assign gtk = site.data.crates | where: "name", "gtk" %} From 334cb195f764d885e9ed41f136a33797fbf92ada Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 22 Feb 2020 17:17:04 +0100 Subject: [PATCH 021/186] Fix requirements link --- docs-src/tutorial/rust_and_gtk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-src/tutorial/rust_and_gtk.md b/docs-src/tutorial/rust_and_gtk.md index 70105065b..28f32d2ce 100644 --- a/docs-src/tutorial/rust_and_gtk.md +++ b/docs-src/tutorial/rust_and_gtk.md @@ -6,7 +6,7 @@ layout: default Before going any further, if you don't know Rust at all, we recommend you to read the official [Rust Book](https://doc.rust-lang.org/book/). -Then we recommend you to learn a bit about [Cargo](http://doc.crates.io/index.html) and check the [GTK requirements](/docs-src/requirements). +Then we recommend you to learn a bit about [Cargo](http://doc.crates.io/index.html) and check the [GTK requirements](https://www.gtk.org/docs/installations/). All done? Perfect! From fc53930b5d7922b419fc5d7d946d66157a82d09e Mon Sep 17 00:00:00 2001 From: emmanueltouzery Date: Tue, 10 Mar 2020 18:52:48 +0100 Subject: [PATCH 022/186] mention another gtk-rs application, cigale --- index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/index.md b/index.md index f7d30bc92..dde4bac3d 100644 --- a/index.md +++ b/index.md @@ -119,6 +119,7 @@ features = ["v3_16"] ## Projects using gtk-rs * [Banner Viewer](https://gitlab.gnome.org/World/design/banner-viewer) * [BrewStillery](https://gitlab.com/MonkeyLog/BrewStillery) +* [Cigale](https://github.com/emmanueltouzery/cigale) * [Contrast](https://gitlab.gnome.org/World/design/contrast) * [Epicwar Downloader](https://github.com/ab0v3g4me/epicwar-downloader) * [Font Finder](https://github.com/mmstick/fontfinder) From fa0d924aabf7b5d55d9db3126541bac2ca63c671 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 2 Apr 2020 14:28:24 +0200 Subject: [PATCH 023/186] [ci skip] Add sponsor button --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..1d8307f36 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +open_collective: gtk-rs From b90803cde1dd8943bae64ad1ee3fa1e37f080d3a Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 2 Apr 2020 16:37:46 +0200 Subject: [PATCH 024/186] Add "support us" button --- _includes/header.html | 5 ++++- _sass/_layout.scss | 36 ++++++++++++++++++++++++++++++++++-- css/main.scss | 1 + 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/_includes/header.html b/_includes/header.html index 616185418..d2b90f08e 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -22,7 +22,10 @@ Contact us - + + Support our work! diff --git a/_sass/_layout.scss b/_sass/_layout.scss index 23a44b772..0772c431d 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -24,6 +24,37 @@ } } +#support-button { + position: absolute; + right: 6px; + top: 11px; + border-radius: 7px; + background-color: #fff; + padding: 4px; + text-decoration: none; + width: initial; + color: #000; + cursor: pointer; + border: 1px solid #ddd; + + &:hover { + background-color: #e3ffff; + } + + > svg { + fill: #ff0b9e; + vertical-align: middle; + font-size: 12px; + line-height: 20px; + } +} + +@include media-query($title-on-palm) { + #support-button { + right: 85px; + } +} + .site-nav { float: right; line-height: 56px; @@ -42,7 +73,7 @@ } } - @include media-query($on-palm) { + @include media-query($title-on-palm) { position: absolute; top: 9px; right: 30px; @@ -50,6 +81,7 @@ border: 1px solid $grey-color-light; border-radius: 5px; text-align: right; + z-index: 1; // to go over the "support us" button .menu-icon { display: block; @@ -276,4 +308,4 @@ border-radius: 5px; padding: 7px; margin-bottom: 7px; -} \ No newline at end of file +} diff --git a/css/main.scss b/css/main.scss index 6f0e2b1f5..42c984dcf 100755 --- a/css/main.scss +++ b/css/main.scss @@ -23,6 +23,7 @@ $grey-color-light: lighten($grey-color, 40%); $grey-color-dark: darken($grey-color, 25%); $on-palm: 675px; +$title-on-palm: 1064px; $on-laptop: 800px; From 6b251d88d2a74eb17f88c412886395fda901fa93 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 2 Apr 2020 17:51:44 +0200 Subject: [PATCH 025/186] Fix listing on blog post contributors --- _posts/2019-12-15-new-release.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/_posts/2019-12-15-new-release.md b/_posts/2019-12-15-new-release.md index e178c8f14..bf5681656 100644 --- a/_posts/2019-12-15-new-release.md +++ b/_posts/2019-12-15-new-release.md @@ -379,5 +379,4 @@ Thanks to all of our contributors for their (awesome!) work on this release: * [@silwol](https://github.com/silwol) * [@timbodeit](https://github.com/timbodeit) * [@velyan](https://github.com/velyan) - -[@sfanxiang]: https://github.com/sfanxiang + * [@sfanxiang]: https://github.com/sfanxiang From ad09863c698f891c731fd2705afeea45dc0ef045 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 2 Apr 2020 17:52:57 +0200 Subject: [PATCH 026/186] Add new blog post --- .../2020-04-02-gtk-rs-looking-for-sponsors.md | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 _posts/2020-04-02-gtk-rs-looking-for-sponsors.md diff --git a/_posts/2020-04-02-gtk-rs-looking-for-sponsors.md b/_posts/2020-04-02-gtk-rs-looking-for-sponsors.md new file mode 100644 index 000000000..1fe73cfb3 --- /dev/null +++ b/_posts/2020-04-02-gtk-rs-looking-for-sponsors.md @@ -0,0 +1,34 @@ +--- +layout: post +author: GuillaumeGomez +title: gtk-rs organization is now looking for sponsors +categories: [front, crates] +date: 2020-04-02 18:00:00 +0000 +--- + + +Hi everyone! + +The [gtk-rs organization][gtk-rs] has been created in 2015. The original goal was to bring +[GTK+][GTK+] library and other libraries from the GNOME platform to the [Rust language][Rust]. We +now provide 19 bindings and that number will certainly increase even more in the future. + +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 [opencollective][opencollective]. +The goal is to raise money to fulfill the project's needs such as: + * 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! + * Remunerating contributors + +It would also allow to start improving the project itself more directly: + * Pay for a better CI (it's becoming a huge issue) + * Renting a server to run bots and such to make repositories handling easier + * Etc... + +If you're using [gtk-rs][gtk-rs] and want/can support us, any donation is very welcome and can be +done [here][opencollective]. + +[gtk-rs]: https://github.com/gtk-rs +[GTK+]: https://www.gtk.org/ +[Rust]: https://www.rust-lang.org/ +[opencollective]: https://opencollective.com/gtk-rs From 620ea67fea350c827b7f0946d5dd459b271e476d Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 2 Apr 2020 18:15:08 +0200 Subject: [PATCH 027/186] Improve title --- ...-sponsors.md => 2020-04-02-sponsoring-gtk-rs-development.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename _posts/{2020-04-02-gtk-rs-looking-for-sponsors.md => 2020-04-02-sponsoring-gtk-rs-development.md} (96%) diff --git a/_posts/2020-04-02-gtk-rs-looking-for-sponsors.md b/_posts/2020-04-02-sponsoring-gtk-rs-development.md similarity index 96% rename from _posts/2020-04-02-gtk-rs-looking-for-sponsors.md rename to _posts/2020-04-02-sponsoring-gtk-rs-development.md index 1fe73cfb3..33bf09c1d 100644 --- a/_posts/2020-04-02-gtk-rs-looking-for-sponsors.md +++ b/_posts/2020-04-02-sponsoring-gtk-rs-development.md @@ -1,7 +1,7 @@ --- layout: post author: GuillaumeGomez -title: gtk-rs organization is now looking for sponsors +title: Sponsoring gtk-rs development categories: [front, crates] date: 2020-04-02 18:00:00 +0000 --- From 5656b6e21d1869a011c0252595bab8dcd005373e Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Mon, 6 Apr 2020 12:46:57 +0200 Subject: [PATCH 028/186] Contact page: Update matrix room & add a link --- docs-src/contact.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs-src/contact.md b/docs-src/contact.md index 53e19ced2..3b350ddef 100644 --- a/docs-src/contact.md +++ b/docs-src/contact.md @@ -12,7 +12,9 @@ Channel #rust on **irc.gimp.org** server. # Matrix -You can connect using: **#gimpnet#gnome:matrix.org**. +You can connect using: **[#rust:gnome.org][]**. + +[#rust:gnome.org]: https://matrix.to/#/#rust:gnome.org # Github From b2302b6c62a1668937197209fa1de2372637b472 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 6 Apr 2020 20:58:39 +0200 Subject: [PATCH 029/186] Force footer to remain at the bottom --- _sass/_base.scss | 9 +++---- _sass/_layout.scss | 58 +++++++++++++++++++++++++++++----------------- css/main.scss | 33 ++++++++++++++------------ 3 files changed, 58 insertions(+), 42 deletions(-) diff --git a/_sass/_base.scss b/_sass/_base.scss index b08eb5e46..42c286e03 100644 --- a/_sass/_base.scss +++ b/_sass/_base.scss @@ -166,8 +166,7 @@ pre { * Wrapper */ .wrapper { - max-width: -webkit-calc(800px - (#{$spacing-unit} * 2)); - max-width: calc(800px - (#{$spacing-unit} * 2)); + max-width: calc(800px - (#{$spacing-unit} * 2)); margin-right: auto; margin-left: auto; padding-right: $spacing-unit; @@ -177,16 +176,14 @@ pre { background-color: $elem-background; @include media-query($on-laptop) { - max-width: -webkit-calc(800px - (#{$spacing-unit})); - max-width: calc(800px - (#{$spacing-unit})); + max-width: calc(800px - (#{$spacing-unit})); padding-right: $spacing-unit / 2; padding-left: $spacing-unit / 2; } } .wide-wrapper { - max-width: -webkit-calc(1000px - (#{$spacing-unit} * 2)); - max-width: calc(1000px - (#{$spacing-unit} * 2)); + max-width: calc(1000px - (#{$spacing-unit} * 2)); padding-top: 10px; } diff --git a/_sass/_layout.scss b/_sass/_layout.scss index 0772c431d..dac46c534 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -4,7 +4,6 @@ .site-header { border-top: 5px solid $grey-color-dark; border-bottom: 1px solid $grey-color-light; - min-height: 56px; // Positioning context for the mobile navigation icon position: relative; @@ -13,7 +12,7 @@ .site-title { font-size: 26px; - line-height: 56px; + line-height: $header-line-height; letter-spacing: -1px; margin-bottom: 0; float: left; @@ -153,20 +152,17 @@ } .intro-col-1 { - width: -webkit-calc(60% - (#{$spacing-unit} / 2)); - width: calc(60% - (#{$spacing-unit} / 2)); + width: calc(60% - (#{$spacing-unit} / 2)); } .intro-col-2 { - width: -webkit-calc(40% - (#{$spacing-unit} / 2)); - width: calc(40% - (#{$spacing-unit} / 2)); + width: calc(40% - (#{$spacing-unit} / 2)); } @include media-query($on-laptop) { .intro-col { float: none; - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); + width: calc(100% - (#{$spacing-unit} / 2)); } } @@ -183,38 +179,42 @@ } .footer-col-1 { - width: -webkit-calc(35% - (#{$spacing-unit} / 2)); - width: calc(35% - (#{$spacing-unit} / 2)); + width: calc(35% - (#{$spacing-unit} / 2)); } .footer-col-2 { - width: -webkit-calc(20% - (#{$spacing-unit} / 2)); - width: calc(20% - (#{$spacing-unit} / 2)); + width: calc(20% - (#{$spacing-unit} / 2)); } .footer-col-3 { - width: -webkit-calc(45% - (#{$spacing-unit} / 2)); - width: calc(45% - (#{$spacing-unit} / 2)); + width: calc(45% - (#{$spacing-unit} / 2)); } @include media-query($on-laptop) { .footer-col-1, .footer-col-2 { - width: -webkit-calc(50% - (#{$spacing-unit} / 2)); - width: calc(50% - (#{$spacing-unit} / 2)); + width: calc(50% - (#{$spacing-unit} / 2)); } .footer-col-3 { - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); + width: calc(100% - (#{$spacing-unit} / 2)); + } + + .page-content { + /* 88px is the footer size */ + min-height: calc(100vh - #{$header-line-height} - #{$header-borders} - (#{$content-padding} * 2) - 88px); } } @include media-query($on-palm) { .footer-col { float: none; - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); + width: calc(100% - (#{$spacing-unit} / 2)); + } + + .page-content { + /* 126px is the footer size */ + min-height: calc(100vh - #{$header-line-height} - #{$header-borders} - (#{$content-padding} * 2) - 126px); } } @@ -224,7 +224,23 @@ * Page content */ .page-content { - padding: 10px 0; + padding: $content-padding 0; + /* 51px is the footer size */ + min-height: calc(100vh - #{$header-line-height} - #{$header-borders} - (#{$content-padding} * 2) - 51px); +} + +@include media-query($on-laptop) { + .page-content { + /* 88px is the footer size */ + min-height: calc(100vh - #{$header-line-height} - #{$header-borders} - (#{$content-padding} * 2) - 88px); + } +} + +@include media-query($on-palm) { + .page-content { + /* 126px is the footer size */ + min-height: calc(100vh - #{$header-line-height} - #{$header-borders} - (#{$content-padding} * 2) - 126px); + } } .page-heading { diff --git a/css/main.scss b/css/main.scss index 42c984dcf..e09996d1d 100755 --- a/css/main.scss +++ b/css/main.scss @@ -6,26 +6,29 @@ // Our variables -$base-font-family: Helvetica, Arial, sans-serif; -$base-font-size: 16px; -$small-font-size: $base-font-size * 0.875; -$base-line-height: 1.5; +$base-font-family: Helvetica, Arial, sans-serif; +$base-font-size: 16px; +$small-font-size: $base-font-size * 0.875; +$base-line-height: 1.5; -$spacing-unit: 30px; +$spacing-unit: 30px; -$text-color: #111; -$background-color: #fdfdfd; -$brand-color: #2a7ae2; -$elem-background: #f7f7f7; +$text-color: #111; +$background-color: #fdfdfd; +$brand-color: #2a7ae2; +$elem-background: #f7f7f7; -$grey-color: #828282; -$grey-color-light: lighten($grey-color, 40%); -$grey-color-dark: darken($grey-color, 25%); +$grey-color: #828282; +$grey-color-light: lighten($grey-color, 40%); +$grey-color-dark: darken($grey-color, 25%); -$on-palm: 675px; -$title-on-palm: 1064px; -$on-laptop: 800px; +$on-palm: 675px; +$title-on-palm: 1064px; +$on-laptop: 800px; +$header-borders: 6px; +$header-line-height: 56px; +$content-padding: 10px; // Using media queries with like this: // @include media-query($palm) { From c604bd8ff0c8cde3745d11d3f11be128fbe3252c Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 6 Apr 2020 21:54:29 +0200 Subject: [PATCH 030/186] Add sponsor page --- _sass/_layout.scss | 55 +++++++++++++++++++++++++++++++++++++++---- docs-src/sponsors.md | 32 +++++++++++++++++++++++++ images/alistair.png | Bin 0 -> 48951 bytes index.md | 9 +++++++ 4 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 docs-src/sponsors.md create mode 100644 images/alistair.png diff --git a/_sass/_layout.scss b/_sass/_layout.scss index dac46c534..183c51fd6 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -313,15 +313,60 @@ } } -.blog { - background-color: #F7F5D7; +.blog, .crates, .sponsors { border-radius: 5px; padding: 7px; } +.crates, .sponsors { + margin-bottom: 7px; +} + .crates { background-color: #E6F5F9; - border-radius: 5px; - padding: 7px; - margin-bottom: 7px; +} + +.sponsors { + text-align: center; + background-color: #fff0de; + + > div { + display: inline-flex; + + > svg { + height: 25px; + } + } +} + +.blog { + background-color: #F7F5D7; +} + +.thanks-sponsors { + padding-top: 15px; + font-size: 20px; + padding-bottom: 25px; +} + +.sponsor-tiers { + margin-bottom: 20px; + + > a { + display: block; + max-width: 75px; + text-align: center; + border: 1px solid #ccc; + border-radius: 4px; + padding: 5px; + text-decoration: none; + + > img { + border-radius: 50%; + } + + &:hover { + background-color: #e5f4ff; + } + } } diff --git a/docs-src/sponsors.md b/docs-src/sponsors.md new file mode 100644 index 000000000..d1852038b --- /dev/null +++ b/docs-src/sponsors.md @@ -0,0 +1,32 @@ +--- +layout: default +--- + +

Thanks to everyone supporting us on opencollective!

+ +## Platinum tier + +No sponsors in this tier yet. + +## Gold tier + +No sponsors in this tier yet. + +## Silver tier + +No sponsors in this tier yet. + +## Bronze tier + + + +## Other sponsors + +Other sponsors can be seen on our [opencollective][opencollective] page. + +[opencollective]: https://opencollective.com/gtk-rs diff --git a/images/alistair.png b/images/alistair.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd17e470892e67bc1d300c4e8171ca87ef73a4d GIT binary patch literal 48951 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

Xf*tGQ^|&z6h^;9$XmyGy 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 Crates

{% include badges.html %} +

Announcements

{% for post in site.categories.front limit:3 %} From 3e5a28efbd8e2c7a738db697dbb27a9cd0691f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hubert=20Figui=C3=A8re?= Date: Sun, 22 Mar 2020 18:47:03 -0400 Subject: [PATCH 031/186] Gpsami is on GNOME gitlab now --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index d4ea5d46e..560bdcb59 100644 --- a/index.md +++ b/index.md @@ -138,7 +138,7 @@ features = ["v3_16"] * [GNvim](https://github.com/vhakulinen/gnvim) * [gled](https://gitlab.com/pentagonum/gled) * [glide](https://github.com/philn/glide) -* [gpsami](https://github.com/hfiguiere/gpsami) +* [gpsami](https://gitlab.gnome.org/hub/gpsami) * [Icon Library](https://gitlab.gnome.org/World/design/icon-library) * [lognplot](https://github.com/windelbouwman/lognplot) * [Marmoset](https://github.com/sprang/marmoset) From e077da3eb12408629750b69987bc63a5fea4a121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hubert=20Figui=C3=A8re?= Date: Sat, 11 Apr 2020 20:55:44 -0400 Subject: [PATCH 032/186] Update crate versions --- _data/crates.json | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/_data/crates.json b/_data/crates.json index 144c788a2..c5176684d 100644 --- a/_data/crates.json +++ b/_data/crates.json @@ -1,11 +1,11 @@ [ { "name": "cairo-rs", - "max_version": "0.8.0" + "max_version": "0.8.1" }, { "name": "gdk", - "max_version": "0.12.0" + "max_version": "0.12.1" }, { "name": "gdk-pixbuf", @@ -13,15 +13,15 @@ }, { "name": "gio", - "max_version": "0.8.0" + "max_version": "0.8.1" }, { "name": "glib", - "max_version": "0.9.0" + "max_version": "0.9.3" }, { "name": "gtk", - "max_version": "0.8.0" + "max_version": "0.8.1" }, { "name": "pango", @@ -32,4 +32,3 @@ "max_version": "0.8.0" } ] - From a20ee1c49b41fe0720cfce49a33f28562144c97c Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 13 Apr 2020 16:24:05 +0200 Subject: [PATCH 033/186] Remove unused script --- update_crates.sh | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100755 update_crates.sh diff --git a/update_crates.sh b/update_crates.sh deleted file mode 100755 index 0db29b27c..000000000 --- a/update_crates.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -e -set -u - -mkdir -p _data -curl -s 'https://crates.io/api/v1/crates?keyword=gtk-rs&per_page=50' > tmp1 -jq '.crates | map({name, max_version} | select(.name|contains("-sys")|not))' tmp1 > tmp2 -mv tmp2 _data/crates.json -rm tmp1 From 7fe49aebe1b1983d93de3bf35e500b4c3824b813 Mon Sep 17 00:00:00 2001 From: piegames Date: Tue, 16 Jun 2020 16:58:30 +0200 Subject: [PATCH 034/186] Document the object-oriented nature of gtk-rs The old "Upcast and downcast" article already touched that topic, so I decided to rename and extend that page. --- docs-src/tutorial/closures.md | 2 +- docs-src/tutorial/glade.md | 2 +- docs-src/tutorial/index.md | 2 +- .../{upcast_downcast.md => object_oriented.md} | 16 +++++++++++++--- 4 files changed, 16 insertions(+), 6 deletions(-) rename docs-src/tutorial/{upcast_downcast.md => object_oriented.md} (60%) diff --git a/docs-src/tutorial/closures.md b/docs-src/tutorial/closures.md index 161259286..91e5c5f85 100644 --- a/docs-src/tutorial/closures.md +++ b/docs-src/tutorial/closures.md @@ -152,5 +152,5 @@ button.connect_clicked(clone!(windows => move |_| { diff --git a/docs-src/tutorial/glade.md b/docs-src/tutorial/glade.md index 494a7eb63..518c0ad5e 100644 --- a/docs-src/tutorial/glade.md +++ b/docs-src/tutorial/glade.md @@ -133,7 +133,7 @@ gtk::main(); ```