[gnome-tour] Port to latest gtk-rs crates



commit 181247c079ffaba9be825bfcdd44b60ea9129a38
Author: Bilal Elmoussaoui <belmouss redhat com>
Date:   Wed Oct 19 17:27:22 2022 +0200

    Port to latest gtk-rs crates

 Cargo.lock                | 172 +++++++++++++++++++++++++---------------------
 Cargo.toml                |   4 +-
 src/application.rs        |  92 ++++++++++---------------
 src/utils.rs              |  14 ----
 src/widgets/image_page.rs |  22 +++---
 src/widgets/paginator.rs  |  21 +++---
 src/widgets/window.rs     |   7 +-
 7 files changed, 152 insertions(+), 180 deletions(-)
---
diff --git a/Cargo.lock b/Cargo.lock
index 9a9330b..6f52f92 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -48,22 +48,23 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
 
 [[package]]
 name = "cairo-rs"
-version = "0.15.12"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
+checksum = "bd6d010ad1f8103b579afac7713f061e3fc99d101f23928a432e2d42e9bdf249"
 dependencies = [
  "bitflags",
  "cairo-sys-rs",
  "glib",
  "libc",
+ "once_cell",
  "thiserror",
 ]
 
 [[package]]
 name = "cairo-sys-rs"
-version = "0.15.1"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
+checksum = "5119ea655ec777b523f0b57279e70f8a4542f61b0e98a48f892b4ef043fd4c5d"
 dependencies = [
  "glib-sys",
  "libc",
@@ -78,9 +79,9 @@ checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
 
 [[package]]
 name = "cfg-expr"
-version = "0.10.3"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
 dependencies = [
  "smallvec",
 ]
@@ -146,6 +147,17 @@ version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
 
+[[package]]
+name = "futures-macro"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
 [[package]]
 name = "futures-task"
 version = "0.3.24"
@@ -159,6 +171,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
 dependencies = [
  "futures-core",
+ "futures-macro",
  "futures-task",
  "pin-project-lite",
  "pin-utils",
@@ -167,9 +180,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf"
-version = "0.15.11"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
+checksum = "c0fb526c8c3a075eda15f961820edf3e15fe18576ac4fbabbb324e4cc6c421e6"
 dependencies = [
  "bitflags",
  "gdk-pixbuf-sys",
@@ -180,9 +193,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
+checksum = "7df12d15c10c3c5a84d9fb4ba0e27659f6a2bdee4f27f8b17126da15d5ddd3f2"
 dependencies = [
  "gio-sys",
  "glib-sys",
@@ -193,9 +206,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4"
-version = "0.4.8"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4fabb7cf843c26b085a5d68abb95d0c0bf27a9ae2eeff9c4adb503a1eb580876"
+checksum = "66fe07f362c977c4684d1136a29f097208b3ccb2013ab6f441a3c60a046fd358"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -209,9 +222,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4-sys"
-version = "0.4.8"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "efe7dcb44f5c00aeabff3f69abfc5673de46559070f89bd3fbb7b66485d9cef2"
+checksum = "ddcf9e3ab5f237bb641e7f2fccc4b26d5b86f111f0d62e27d452dc24964541c2"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -246,26 +259,29 @@ dependencies = [
 
 [[package]]
 name = "gio"
-version = "0.15.12"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
+checksum = "3025f17aab38ebbb40d785806cf36c292c4dd6755b05584fc52d34fb87533263"
 dependencies = [
  "bitflags",
  "futures-channel",
  "futures-core",
  "futures-io",
+ "futures-util",
  "gio-sys",
  "glib",
  "libc",
  "once_cell",
+ "pin-project-lite",
+ "smallvec",
  "thiserror",
 ]
 
 [[package]]
 name = "gio-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
+checksum = "6da1bba9d3f2ab13a6e9932c40f240dc99ebc9f0bdc35cfb130d1a3df36f374c"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -276,15 +292,17 @@ dependencies = [
 
 [[package]]
 name = "glib"
-version = "0.15.12"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
+checksum = "9d9d01334b55e33e9189fa956dde9885e5439dfa6c448f4d724e222addbf06f2"
 dependencies = [
  "bitflags",
  "futures-channel",
  "futures-core",
  "futures-executor",
  "futures-task",
+ "futures-util",
+ "gio-sys",
  "glib-macros",
  "glib-sys",
  "gobject-sys",
@@ -296,9 +314,9 @@ dependencies = [
 
 [[package]]
 name = "glib-macros"
-version = "0.15.11"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64"
+checksum = "e195c1311fa6b04d7b896ea39385f6bd60ef5d25bf74a7c11c8c3f94f6c1a572"
 dependencies = [
  "anyhow",
  "heck",
@@ -311,9 +329,9 @@ dependencies = [
 
 [[package]]
 name = "glib-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
+checksum = "b33357bb421a77bd849f6a0bfcaf3b4b256a2577802971bb5dd522d530f27021"
 dependencies = [
  "libc",
  "system-deps",
@@ -333,9 +351,9 @@ dependencies = [
 
 [[package]]
 name = "gobject-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
+checksum = "63ca11a57400f3d4fda594e002844be47900c9fb8b29e2155c6e37a1f24e51b3"
 dependencies = [
  "glib-sys",
  "libc",
@@ -344,9 +362,9 @@ dependencies = [
 
 [[package]]
 name = "graphene-rs"
-version = "0.15.1"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7c54f9fbbeefdb62c99f892dfca35f83991e2cb5b46a8dc2a715e58612f85570"
+checksum = "95a8de4506a64776d90fedf9c28fdca5a7127f8cc9c78976e8184ac6f42685d8"
 dependencies = [
  "glib",
  "graphene-sys",
@@ -355,9 +373,9 @@ dependencies = [
 
 [[package]]
 name = "graphene-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fa691fc7337ba1df599afb55c3bcb85c04f1b3f17362570e9bb0ff0d1bc3028a"
+checksum = "f2c952f764f02f8546fcc5d014bc78aa704c6d453c828c8b429121f704349163"
 dependencies = [
  "glib-sys",
  "libc",
@@ -367,9 +385,9 @@ dependencies = [
 
 [[package]]
 name = "gsk4"
-version = "0.4.8"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "05e9020d333280b3aa38d496495bfa9b50712eebf1ad63f0ec5bcddb5eb61be4"
+checksum = "d4fc2b86c751a7fe9aad0fdba85937a6aace3a8453e0e2a08d2a31ce4bb8ae55"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -383,9 +401,9 @@ dependencies = [
 
 [[package]]
 name = "gsk4-sys"
-version = "0.4.8"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7add39ccf60078508c838643a2dcc91f045c46ed63b5ea6ab701b2e25bda3fea"
+checksum = "2cb53e25cbbe3fa8e3e9db7c06d65085086fadbec4cd0aa567b2e2a4917db83d"
 dependencies = [
  "cairo-sys-rs",
  "gdk4-sys",
@@ -399,9 +417,9 @@ dependencies = [
 
 [[package]]
 name = "gtk4"
-version = "0.4.8"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c64f0c2a3d80e899dc3febddad5bac193ffcf74a0fd7e31037f30dd34d6f7396"
+checksum = "954e5a318221d69301c80f71cc2d2c15d0d4e259b1b253cad762e93f251bf6d6"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -422,24 +440,23 @@ dependencies = [
 
 [[package]]
 name = "gtk4-macros"
-version = "0.4.8"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fafbcc920af4eb677d7d164853e7040b9de5a22379c596f570190c675d45f7a7"
+checksum = "ce5eb86364b216ee8c497b1121831168fb25130d3378495a135f8e5c1972db7b"
 dependencies = [
  "anyhow",
  "proc-macro-crate",
  "proc-macro-error",
  "proc-macro2",
- "quick-xml",
  "quote",
  "syn",
 ]
 
 [[package]]
 name = "gtk4-sys"
-version = "0.4.8"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5bc8006eea634b7c72da3ff79e24606e45f21b3b832a3c5a1f543f5f97eb0f63"
+checksum = "0f04bd0b63d999a36ae53a916ee4b20ea64a3ef4732ca8a98b1fde4a22c1476c"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -486,10 +503,12 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libadwaita"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f2ae453d28e3b91f03749f02b1531e8cfe315a1d0762b77a61797d2ab80bb87d"
+checksum = "ed92f031cf7f3d501b84f41e4d05aed6ebfd8eed59a8fc0cccbf51359e92c8e3"
 dependencies = [
+ "bitflags",
+ "futures-channel",
  "gdk-pixbuf",
  "gdk4",
  "gio",
@@ -503,9 +522,9 @@ dependencies = [
 
 [[package]]
 name = "libadwaita-sys"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f18b6ac4cadd252a89f5cba0a5a4e99836131795d6fad37b859ac79e8cb7d2c8"
+checksum = "9ec4243e86fb53d06df2461d543529a640c9a0fba2d4cc850b70e11a85f9d952"
 dependencies = [
  "gdk4-sys",
  "gio-sys",
@@ -513,14 +532,15 @@ dependencies = [
  "gobject-sys",
  "gtk4-sys",
  "libc",
+ "pango-sys",
  "system-deps",
 ]
 
 [[package]]
 name = "libc"
-version = "0.2.133"
+version = "0.2.135"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
+checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
 
 [[package]]
 name = "locale_config"
@@ -599,17 +619,18 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.14.0"
+version = "1.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0"
+checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
 
 [[package]]
 name = "pango"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
+checksum = "7208c60f224cf6e44c551df5ee2ef38f9da0fd29d7c5a0402000b8ab0520e798"
 dependencies = [
  "bitflags",
+ "gio",
  "glib",
  "libc",
  "once_cell",
@@ -618,9 +639,9 @@ dependencies = [
 
 [[package]]
 name = "pango-sys"
-version = "0.15.10"
+version = "0.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
+checksum = "922441c228366ed98d3534b87bc7c987c50564094c3abbc3513717786419252d"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -630,9 +651,9 @@ dependencies = [
 
 [[package]]
 name = "pest"
-version = "2.3.1"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cb779fcf4bb850fbbb0edc96ff6cf34fd90c4b1a112ce042653280d9a7364048"
+checksum = "dbc7bc69c062e492337d74d59b120c274fd3d261b6bf6d3207d499b4b379c41a"
 dependencies = [
  "thiserror",
  "ucd-trie",
@@ -703,9 +724,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.43"
+version = "1.0.47"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
 dependencies = [
  "unicode-ident",
 ]
@@ -716,15 +737,6 @@ version = "1.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
 
-[[package]]
-name = "quick-xml"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8533f14c8382aaad0d592c812ac3b826162128b65662331e1127b45c3d18536b"
-dependencies = [
- "memchr",
-]
-
 [[package]]
 name = "quote"
 version = "1.0.21"
@@ -780,9 +792,9 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.144"
+version = "1.0.145"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
+checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
 
 [[package]]
 name = "slab"
@@ -795,15 +807,15 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.9.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
 
 [[package]]
 name = "syn"
-version = "1.0.100"
+version = "1.0.102"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e"
+checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -812,9 +824,9 @@ dependencies = [
 
 [[package]]
 name = "system-deps"
-version = "6.0.2"
+version = "6.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
 dependencies = [
  "cfg-expr",
  "heck",
@@ -840,18 +852,18 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.35"
+version = "1.0.37"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.35"
+version = "1.0.37"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -875,9 +887,9 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.4"
+version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
 
 [[package]]
 name = "version-compare"
diff --git a/Cargo.toml b/Cargo.toml
index c9e76b2..320f74c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,9 +6,9 @@ edition = "2021"
 
 
 [dependencies]
-gtk = { package = "gtk4", version = "0.4", features= ["v4_2"]}
+gtk = { package = "gtk4", version = "0.5", features= ["v4_2"]}
 log = "0.4"
 gettext-rs = { version = "0.7", features = ["gettext-system"] }
-adw = {package = "libadwaita", version = "0.1"}
+adw = {package = "libadwaita", version = "0.2"}
 pretty_env_logger = "0.4"
 regex = "1.5"
diff --git a/src/application.rs b/src/application.rs
index 931d865..288b662 100644
--- a/src/application.rs
+++ b/src/application.rs
@@ -1,13 +1,7 @@
 use crate::config;
-use crate::utils;
 use crate::widgets::Window;
 use adw::prelude::*;
-use gtk::{
-    gio,
-    glib::{self, clone},
-    subclass::prelude::*,
-};
-use log::info;
+use gtk::{gio, glib, subclass::prelude::*};
 
 mod imp {
     use super::*;
@@ -28,66 +22,55 @@ mod imp {
 
     impl ObjectImpl for Application {}
     impl ApplicationImpl for Application {
-        fn activate(&self, application: &Self::Type) {
-            let window = Window::new(application);
+        fn activate(&self) {
+            self.parent_activate();
+            let application = self.instance();
+
+            let window = Window::new(&application);
             application.add_window(&window);
             window.present();
             self.window.set(window.downgrade()).unwrap();
-            self.parent_activate(application);
         }
 
-        fn startup(&self, application: &Self::Type) {
+        fn startup(&self) {
+            self.parent_startup();
+            let application = self.instance();
             // Quit
-            utils::action(
-                application,
-                "quit",
-                clone!(@weak application => move |_, _| {
-                    application.quit();
-                }),
-            );
-
+            let quit = gio::ActionEntry::builder("quit")
+                .activate(move |app: &Self::Type, _, _| app.quit())
+                .build();
             // Start Tour
-            utils::action(
-                application,
-                "start-tour",
-                clone!(@weak application => move |_, _| {
-                    application.window().start_tour();
-                }),
-            );
-
+            let start_tour = gio::ActionEntry::builder("start-tour")
+                .activate(move |app: &Self::Type, _, _| app.window().start_tour())
+                .build();
             // Skip Tour
-            utils::action(
-                application,
-                "skip-tour",
-                clone!(@weak application => move |_, _| {
-                    application.quit();
-                }),
-            );
-
-            utils::action(
-                application,
-                "next-page",
-                clone!(@weak application => move |_, _| {
-                    let window = application.window();
+            let skip_tour = gio::ActionEntry::builder("skip-tour")
+                .activate(move |app: &Self::Type, _, _| app.quit())
+                .build();
+            // Next page
+            let next_page = gio::ActionEntry::builder("next-page")
+                .activate(move |app: &Self::Type, _, _| {
+                    let window = app.window();
                     if window.paginator().try_next().is_none() {
                         window.close();
                     }
-                }),
-            );
-
-            utils::action(
-                application,
-                "previous-page",
-                clone!(@weak application => move |_, _| {
-                    let window = application.window();
+                })
+                .build();
+            // Previous page
+            let previous_page = gio::ActionEntry::builder("previous-page")
+                .activate(move |app: &Self::Type, _, _| {
+                    let window = app.window();
                     if window.paginator().try_previous().is_none() {
                         window.reset_tour();
                     }
-                }),
-            );
+                })
+                .build();
+            application
+                .add_action_entries([quit, start_tour, skip_tour, next_page, previous_page])
+                .unwrap();
+
             application.set_accels_for_action("app.quit", &["<Control>q"]);
             application.set_accels_for_action("app.skip-tour", &["Escape"]);
-            self.parent_startup(application);
         }
     }
     impl GtkApplicationImpl for Application {}
@@ -107,7 +90,6 @@ impl Application {
             ("application-id", &config::APP_ID),
             ("resource-base-path", &Some("/org/gnome/Tour")),
         ])
-        .unwrap()
     }
 
     fn window(&self) -> Window {
@@ -115,9 +97,9 @@ impl Application {
     }
 
     pub fn run() {
-        info!("GNOME Tour ({})", config::APP_ID);
-        info!("Version: {} ({})", config::VERSION, config::PROFILE);
-        info!("Datadir: {}", config::PKGDATADIR);
+        log::info!("GNOME Tour ({})", config::APP_ID);
+        log::info!("Version: {} ({})", config::VERSION, config::PROFILE);
+        log::info!("Datadir: {}", config::PKGDATADIR);
         let app = Self::new();
         gtk::prelude::ApplicationExtManual::run(&app);
     }
diff --git a/src/utils.rs b/src/utils.rs
index b26127f..ddcc793 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -1,21 +1,7 @@
 // based on https://gitlab.gnome.org/World/podcasts/-/blob/master/podcasts-gtk/src/i18n|utils.rs
 use gettextrs::gettext;
-use gtk::{gio, glib};
 use regex::{Captures, Regex};
 
-pub fn action<T, F>(thing: &T, name: &str, action: F)
-where
-    T: gio::traits::ActionMapExt,
-    for<'r, 's> F: Fn(&'r gio::SimpleAction, Option<&glib::Variant>) + 'static,
-{
-    // Create a stateless, parameterless action
-    let act = gio::SimpleAction::new(name, None);
-    // Connect the handler
-    act.connect_activate(action);
-    // Add it to the map
-    thing.add_action(&act);
-}
-
 pub fn i18n_f(format: &str, kwargs: &[(&str, &str)]) -> String {
     let mut s = gettext(format);
     for (k, v) in kwargs {
diff --git a/src/widgets/image_page.rs b/src/widgets/image_page.rs
index 88a9610..d99e7ee 100644
--- a/src/widgets/image_page.rs
+++ b/src/widgets/image_page.rs
@@ -5,7 +5,7 @@ use gtk::subclass::prelude::*;
 mod imp {
     use super::*;
     use glib::once_cell::sync::Lazy;
-    use glib::{ParamFlags, ParamSpec, ParamSpecString, Value};
+    use glib::{ParamSpec, ParamSpecString, Value};
     use gtk::glib::once_cell::sync::OnceCell;
     use std::cell::RefCell;
 
@@ -25,7 +25,9 @@ mod imp {
     }
 
     impl ObjectImpl for ImagePageWidget {
-        fn constructed(&self, obj: &Self::Type) {
+        fn constructed(&self) {
+            self.parent_constructed();
+            let obj = self.instance();
             let layout_manager = obj
                 .layout_manager()
                 .map(|l| l.downcast::<gtk::BoxLayout>().unwrap())
@@ -81,27 +83,22 @@ mod imp {
             container.append(&body_label);
 
             obj.append(&clamp);
-            self.parent_constructed(obj);
         }
 
         fn properties() -> &'static [ParamSpec] {
             static PROPERTIES: Lazy<Vec<ParamSpec>> = Lazy::new(|| {
                 vec![
                     ParamSpecString::builder("resource-uri")
-                        .flags(ParamFlags::READWRITE | ParamFlags::CONSTRUCT_ONLY)
-                        .build(),
-                    ParamSpecString::builder("head")
-                        .flags(ParamFlags::READWRITE | ParamFlags::CONSTRUCT_ONLY)
-                        .build(),
-                    ParamSpecString::builder("body")
-                        .flags(ParamFlags::READWRITE | ParamFlags::CONSTRUCT)
+                        .construct_only()
                         .build(),
+                    ParamSpecString::builder("head").construct_only().build(),
+                    ParamSpecString::builder("body").construct().build(),
                 ]
             });
             PROPERTIES.as_ref()
         }
 
-        fn set_property(&self, _obj: &Self::Type, _id: usize, value: &Value, pspec: &ParamSpec) {
+        fn set_property(&self, _id: usize, value: &Value, pspec: &ParamSpec) {
             match pspec.name() {
                 "resource-uri" => {
                     let resource_uri: String = value.get().unwrap();
@@ -121,7 +118,7 @@ mod imp {
             }
         }
 
-        fn property(&self, _obj: &Self::Type, _id: usize, pspec: &ParamSpec) -> Value {
+        fn property(&self, _id: usize, pspec: &ParamSpec) -> Value {
             match pspec.name() {
                 "resource-uri" => self.resource_uri.get().to_value(),
                 "head" => self.head.get().to_value(),
@@ -146,7 +143,6 @@ impl ImagePageWidget {
             ("head", &head),
             ("body", &body),
         ])
-        .unwrap()
     }
 
     pub fn set_body(&self, body: &str) {
diff --git a/src/widgets/paginator.rs b/src/widgets/paginator.rs
index f8be161..f35272b 100644
--- a/src/widgets/paginator.rs
+++ b/src/widgets/paginator.rs
@@ -42,7 +42,9 @@ mod imp {
     }
 
     impl ObjectImpl for PaginatorWidget {
-        fn constructed(&self, obj: &Self::Type) {
+        fn constructed(&self) {
+            self.parent_constructed();
+            let obj = self.instance();
             let layout_manager = obj
                 .layout_manager()
                 .map(|l| l.downcast::<gtk::BoxLayout>().unwrap())
@@ -66,24 +68,17 @@ mod imp {
             }));
 
             obj.add_controller(&controller);
-
-            self.parent_constructed(obj);
         }
     }
     impl WidgetImpl for PaginatorWidget {}
     impl BoxImpl for PaginatorWidget {}
     impl BuildableImpl for PaginatorWidget {
-        fn add_child(
-            &self,
-            buildable: &Self::Type,
-            builder: &gtk::Builder,
-            child: &glib::Object,
-            type_: Option<&str>,
-        ) {
+        fn add_child(&self, builder: &gtk::Builder, child: &glib::Object, type_: Option<&str>) {
             if !self.carousel.is_bound() {
-                self.parent_add_child(buildable, builder, child, type_);
+                self.parent_add_child(builder, child, type_);
             } else {
-                buildable.add_page(child.clone().downcast::<gtk::Widget>().unwrap());
+                self.instance()
+                    .add_page(child.clone().downcast::<gtk::Widget>().unwrap());
             }
         }
     }
@@ -97,7 +92,7 @@ glib::wrapper! {
 
 impl PaginatorWidget {
     pub fn new() -> Self {
-        glib::Object::new(&[]).unwrap()
+        glib::Object::new(&[])
     }
 
     pub fn try_next(&self) -> Option<()> {
diff --git a/src/widgets/window.rs b/src/widgets/window.rs
index ebe2db8..72be6d1 100644
--- a/src/widgets/window.rs
+++ b/src/widgets/window.rs
@@ -37,7 +37,9 @@ mod imp {
     }
 
     impl ObjectImpl for Window {
-        fn constructed(&self, widget: &Self::Type) {
+        fn constructed(&self) {
+            self.parent_constructed();
+            let widget = self.instance();
             widget.set_icon_name(Some(config::APP_ID));
 
             // Devel Profile
@@ -53,7 +55,6 @@ mod imp {
                 &[("name", &name), ("version", &version)],
             );
             self.welcome_page.set_body(&body);
-            self.parent_constructed(widget);
         }
     }
     impl WidgetImpl for Window {}
@@ -70,7 +71,7 @@ glib::wrapper! {
 
 impl Window {
     pub fn new(app: &Application) -> Self {
-        glib::Object::new(&[("application", app)]).unwrap()
+        glib::Object::new(&[("application", app)])
     }
 
     pub fn paginator(&self) -> PaginatorWidget {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]