[niepce] Update to latest glib-rs and gtk3-rs.



commit 3a4bd2027a0ea04963e49a76218695e4137efb3c
Author: Hubert Figuière <hub figuiere net>
Date:   Mon Mar 14 23:04:59 2022 -0400

    Update to latest glib-rs and gtk3-rs.
    
    - Update cbindgen, and disable static const generation
    - add AM_GNU_GETTEXT_REQUIRE_VERSION

 Cargo.lock                                         | 366 +++++++++------------
 README                                             |  12 +-
 configure.ac                                       |   9 +-
 crates/npc-engine/Cargo.toml                       |   2 +-
 crates/npc-engine/build.rs                         |   4 +
 crates/npc-fwk/Cargo.toml                          |  12 +-
 crates/npc-fwk/build.rs                            |   3 +
 crates/npc-fwk/src/base/rgbcolour.rs               |  14 +-
 crates/npc-fwk/src/toolkit.rs                      |   4 +-
 crates/npc-fwk/src/toolkit/widgets/rating_label.rs |  11 +-
 crates/npc-fwk/src/utils/files.rs                  |   6 +-
 niepce-main/Cargo.toml                             |   2 +-
 niepce-main/build.rs                               |   4 +
 niepce-main/src/niepce/ui/image_list_store.rs      |   6 +-
 niepce-main/src/niepce/ui/library_cell_renderer.rs |  58 ++--
 niepce-main/src/niepce/ui/thumb_nav.rs             |  34 +-
 niepce-main/src/niepce/ui/thumb_strip_view.rs      |   4 +-
 17 files changed, 242 insertions(+), 309 deletions(-)
---
diff --git a/Cargo.lock b/Cargo.lock
index e08ea03..ecb7fa3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
 
 [[package]]
 name = "ahash"
-version = "0.7.4"
+version = "0.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
 dependencies = [
  "getrandom",
  "once_cell",
@@ -15,18 +15,18 @@ dependencies = [
 
 [[package]]
 name = "ansi_term"
-version = "0.11.0"
+version = "0.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
 dependencies = [
  "winapi",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.41"
+version = "1.0.56"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "15af2628f6890fe2609a3b91bef4c83450512802e59489f9c1cb1fa5df064a61"
+checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27"
 
 [[package]]
 name = "async-channel"
@@ -41,9 +41,9 @@ dependencies = [
 
 [[package]]
 name = "atk"
-version = "0.14.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba"
+checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
 dependencies = [
  "atk-sys",
  "bitflags",
@@ -53,9 +53,9 @@ dependencies = [
 
 [[package]]
 name = "atk-sys"
-version = "0.14.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea"
+checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -76,27 +76,27 @@ dependencies = [
 
 [[package]]
 name = "autocfg"
-version = "1.0.1"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "bitflags"
-version = "1.2.1"
+version = "1.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
 name = "cache-padded"
-version = "1.1.1"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
 
 [[package]]
 name = "cairo-rs"
-version = "0.14.0"
+version = "0.15.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8d32eecb1e806433cf68063c4548bbdc15cc56d35db19d685ab60909c4c85206"
+checksum = "e8b14c80d8d1a02fa6d914b9d1afeeca9bc34257f8300d9696e1e331ae114223"
 dependencies = [
  "bitflags",
  "cairo-sys-rs",
@@ -107,9 +107,9 @@ dependencies = [
 
 [[package]]
 name = "cairo-sys-rs"
-version = "0.14.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80"
+checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
 dependencies = [
  "glib-sys",
  "libc",
@@ -118,12 +118,12 @@ dependencies = [
 
 [[package]]
 name = "cbindgen"
-version = "0.19.0"
+version = "0.20.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "38728c31b994e4b849cf59feefb4a8bf26acd299ee0b92c9fb35bd14ad4b8dfa"
+checksum = "51e3973b165dc0f435831a9e426de67e894de532754ff7a3f307c03ee5dec7dc"
 dependencies = [
  "clap",
- "heck",
+ "heck 0.3.3",
  "indexmap",
  "log",
  "proc-macro2",
@@ -137,9 +137,9 @@ dependencies = [
 
 [[package]]
 name = "cfg-expr"
-version = "0.7.4"
+version = "0.10.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "30aa9e2ffbb838c6b451db14f3cd8e63ed622bf859f9956bc93845a10fafc26a"
+checksum = "5e068cb2806bbc15b439846dc16c5f89f8599f2c3e4d73d4449d38f9b2f0b6c5"
 dependencies = [
  "smallvec",
 ]
@@ -165,9 +165,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "2.33.3"
+version = "2.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
 dependencies = [
  "ansi_term",
  "atty",
@@ -187,17 +187,11 @@ dependencies = [
  "cache-padded",
 ]
 
-[[package]]
-name = "either"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
-
 [[package]]
 name = "event-listener"
-version = "2.5.1"
+version = "2.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59"
+checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
 
 [[package]]
 name = "exempi"
@@ -230,6 +224,15 @@ version = "0.1.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
 
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
 [[package]]
 name = "field-offset"
 version = "0.3.4"
@@ -242,24 +245,24 @@ dependencies = [
 
 [[package]]
 name = "futures-channel"
-version = "0.3.15"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"
+checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
 dependencies = [
  "futures-core",
 ]
 
 [[package]]
 name = "futures-core"
-version = "0.3.15"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
 
 [[package]]
 name = "futures-executor"
-version = "0.3.15"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"
+checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -268,23 +271,22 @@ dependencies = [
 
 [[package]]
 name = "futures-io"
-version = "0.3.15"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"
+checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
 
 [[package]]
 name = "futures-task"
-version = "0.3.15"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"
+checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
 
 [[package]]
 name = "futures-util"
-version = "0.3.15"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"
+checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
 dependencies = [
- "autocfg",
  "futures-core",
  "futures-task",
  "pin-project-lite",
@@ -294,9 +296,9 @@ dependencies = [
 
 [[package]]
 name = "gdk"
-version = "0.14.0"
+version = "0.15.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "679e22651cd15888e7acd01767950edca2ee9fcd6421fbf5b3c3b420d4e88bb0"
+checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -310,10 +312,11 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf"
-version = "0.14.0"
+version = "0.15.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f"
+checksum = "d8750501d75f318c2ec0314701bc8403901303210def80bafd13f6b6059a3f45"
 dependencies = [
+ "bitflags",
  "gdk-pixbuf-sys",
  "gio",
  "glib",
@@ -322,9 +325,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf-sys"
-version = "0.14.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590"
+checksum = "413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171"
 dependencies = [
  "gio-sys",
  "glib-sys",
@@ -335,9 +338,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-sys"
-version = "0.14.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e"
+checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -352,9 +355,9 @@ dependencies = [
 
 [[package]]
 name = "getrandom"
-version = "0.2.3"
+version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77"
 dependencies = [
  "cfg-if",
  "libc",
@@ -379,9 +382,9 @@ dependencies = [
 
 [[package]]
 name = "gio"
-version = "0.14.0"
+version = "0.15.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "86c6823b39d46d22cac2466de261f28d7f049ebc18f7b35296a42c7ed8a88325"
+checksum = "bb50e113645fba48bc36c8abaee1fe5e43d353e8763966e29dfe69660514e461"
 dependencies = [
  "bitflags",
  "futures-channel",
@@ -396,9 +399,9 @@ dependencies = [
 
 [[package]]
 name = "gio-sys"
-version = "0.14.0"
+version = "0.15.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa"
+checksum = "9cb5dabebbb63c5cf763c9d9cb120280bf1a442cc496e17fd78ff75272d68244"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -409,9 +412,9 @@ dependencies = [
 
 [[package]]
 name = "glib"
-version = "0.14.2"
+version = "0.15.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dbecad7a3a898ee749d491ce2ae0decb0bce9e736f9747bc49159b1cea5d37f4"
+checksum = "89528258cfdc79b1e54591202705be67896ad254f99e3cc2ea3710e0307148f2"
 dependencies = [
  "bitflags",
  "futures-channel",
@@ -424,16 +427,17 @@ dependencies = [
  "libc",
  "once_cell",
  "smallvec",
+ "thiserror",
 ]
 
 [[package]]
 name = "glib-macros"
-version = "0.14.0"
+version = "0.15.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9eb7bdf41972a6f6dab5d72c23d22789f400059a43ba0d72b4bb2f8664d946a9"
+checksum = "41bfd8d227dead0829ac142454e97531b93f576d0805d779c42bfd799c65c572"
 dependencies = [
  "anyhow",
- "heck",
+ "heck 0.4.0",
  "proc-macro-crate",
  "proc-macro-error",
  "proc-macro2",
@@ -443,9 +447,9 @@ dependencies = [
 
 [[package]]
 name = "glib-sys"
-version = "0.14.0"
+version = "0.15.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae"
+checksum = "19289e4953dad38c9fea1c5c52cc594f29afc4a70802822ef382dca356b27bfd"
 dependencies = [
  "libc",
  "system-deps",
@@ -453,9 +457,9 @@ dependencies = [
 
 [[package]]
 name = "gobject-sys"
-version = "0.14.0"
+version = "0.15.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5"
+checksum = "a085ec9acece647f905b675705c349eb00acba30505f5cee43459bc3b2e968cc"
 dependencies = [
  "glib-sys",
  "libc",
@@ -464,9 +468,9 @@ dependencies = [
 
 [[package]]
 name = "gtk"
-version = "0.14.0"
+version = "0.15.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "10ae864e5eab8bc8b6b8544ed259eb02dd61b25323b20e777a77aa289c05fd0c"
+checksum = "5f2d1326b36af927fe46ae2f89a8fec38c6f0d279ebc5ef07ffeeabb70300bfc"
 dependencies = [
  "atk",
  "bitflags",
@@ -487,9 +491,9 @@ dependencies = [
 
 [[package]]
 name = "gtk-sys"
-version = "0.14.0"
+version = "0.15.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e"
+checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
 dependencies = [
  "atk-sys",
  "cairo-sys-rs",
@@ -505,12 +509,11 @@ dependencies = [
 
 [[package]]
 name = "gtk3-macros"
-version = "0.14.0"
+version = "0.15.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79"
+checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9"
 dependencies = [
  "anyhow",
- "heck",
  "proc-macro-crate",
  "proc-macro-error",
  "proc-macro2",
@@ -545,6 +548,12 @@ dependencies = [
  "unicode-segmentation",
 ]
 
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
 [[package]]
 name = "hermit-abi"
 version = "0.1.19"
@@ -556,28 +565,28 @@ dependencies = [
 
 [[package]]
 name = "indexmap"
-version = "1.7.0"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
+checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
 dependencies = [
  "autocfg",
  "hashbrown",
 ]
 
 [[package]]
-name = "itertools"
-version = "0.10.1"
+name = "instant"
+version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
 dependencies = [
- "either",
+ "cfg-if",
 ]
 
 [[package]]
 name = "itoa"
-version = "0.4.7"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
 
 [[package]]
 name = "lazy_static"
@@ -587,9 +596,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.97"
+version = "0.2.120"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6"
+checksum = "ad5c14e80759d0939d013e6ca49930e59fc53dd8e5009132f76240c179380c09"
 
 [[package]]
 name = "libopenraw-rs"
@@ -632,15 +641,15 @@ checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
 
 [[package]]
 name = "memchr"
-version = "2.4.0"
+version = "2.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
+checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
 
 [[package]]
 name = "memoffset"
-version = "0.6.4"
+version = "0.6.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
 dependencies = [
  "autocfg",
 ]
@@ -752,15 +761,15 @@ dependencies = [
 
 [[package]]
 name = "once_cell"
-version = "1.8.0"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
+checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
 
 [[package]]
 name = "pango"
-version = "0.14.0"
+version = "0.15.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "415823a4fb9f1789785cd6e2d2413816f2ecff92380382969aaca9c400e13a19"
+checksum = "a159678be05876e40e1bb4e93db9c9e2f86986fac010b3630feab1273f83b605"
 dependencies = [
  "bitflags",
  "glib",
@@ -771,9 +780,9 @@ dependencies = [
 
 [[package]]
 name = "pango-sys"
-version = "0.14.0"
+version = "0.15.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe"
+checksum = "7022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -792,9 +801,9 @@ dependencies = [
 
 [[package]]
 name = "pin-project-lite"
-version = "0.2.7"
+version = "0.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
+checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
 
 [[package]]
 name = "pin-utils"
@@ -804,21 +813,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
 name = "pkg-config"
-version = "0.3.19"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.10"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
 
 [[package]]
 name = "proc-macro-crate"
-version = "1.0.0"
+version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92"
+checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
 dependencies = [
  "thiserror",
  "toml",
@@ -850,67 +853,27 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.27"
+version = "1.0.36"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
+checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
 dependencies = [
  "unicode-xid",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.9"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
 dependencies = [
  "proc-macro2",
 ]
 
-[[package]]
-name = "rand"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8"
-dependencies = [
- "libc",
- "rand_chacha",
- "rand_core",
- "rand_hc",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "rand_hc"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7"
-dependencies = [
- "rand_core",
-]
-
 [[package]]
 name = "redox_syscall"
-version = "0.2.9"
+version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
+checksum = "8380fe0152551244f0747b1bf41737e0f8a74f97a14ccefd1148187271634f3c"
 dependencies = [
  "bitflags",
 ]
@@ -937,9 +900,9 @@ dependencies = [
 
 [[package]]
 name = "rusqlite"
-version = "0.25.3"
+version = "0.25.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "57adcf67c8faaf96f3248c2a7b419a0dbc52ebe36ba83dd57fe83827c1ea4eb3"
+checksum = "5c4b1eaf239b47034fb450ee9cdedd7d0226571689d8823030c4b6c2cb407152"
 dependencies = [
  "bitflags",
  "fallible-iterator",
@@ -961,9 +924,9 @@ dependencies = [
 
 [[package]]
 name = "ryu"
-version = "1.0.5"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
 
 [[package]]
 name = "semver"
@@ -985,18 +948,18 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.126"
+version = "1.0.136"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03"
+checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.126"
+version = "1.0.136"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43"
+checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1005,9 +968,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.64"
+version = "1.0.79"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
+checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
 dependencies = [
  "itoa",
  "ryu",
@@ -1016,15 +979,15 @@ dependencies = [
 
 [[package]]
 name = "slab"
-version = "0.4.3"
+version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527"
+checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
 
 [[package]]
 name = "smallvec"
-version = "1.6.1"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
 
 [[package]]
 name = "strsim"
@@ -1032,29 +995,11 @@ version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
 
-[[package]]
-name = "strum"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2"
-
-[[package]]
-name = "strum_macros"
-version = "0.21.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
-dependencies = [
- "heck",
- "proc-macro2",
- "quote",
- "syn",
-]
-
 [[package]]
 name = "syn"
-version = "1.0.73"
+version = "1.0.87"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"
+checksum = "1e59d925cf59d8151f25a3bedf97c9c157597c9df7324d32d68991cc399ed08b"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1063,31 +1008,26 @@ dependencies = [
 
 [[package]]
 name = "system-deps"
-version = "3.1.2"
+version = "6.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7ab7dbd121ce66af2176147a48c7e01aaf1f001837a18a7cf4317858606bbdf8"
+checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709"
 dependencies = [
- "anyhow",
  "cfg-expr",
- "heck",
- "itertools",
+ "heck 0.4.0",
  "pkg-config",
- "strum",
- "strum_macros",
- "thiserror",
  "toml",
  "version-compare",
 ]
 
 [[package]]
 name = "tempfile"
-version = "3.2.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
 dependencies = [
  "cfg-if",
+ "fastrand",
  "libc",
- "rand",
  "redox_syscall",
  "remove_dir_all",
  "winapi",
@@ -1104,18 +1044,18 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.26"
+version = "1.0.30"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2"
+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.26"
+version = "1.0.30"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745"
+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1149,15 +1089,15 @@ checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
 
 [[package]]
 name = "unicode-segmentation"
-version = "1.8.0"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
 
 [[package]]
 name = "unicode-width"
-version = "0.1.8"
+version = "0.1.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
 
 [[package]]
 name = "unicode-xid"
@@ -1179,15 +1119,15 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
 
 [[package]]
 name = "version-compare"
-version = "0.0.11"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
+checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
 
 [[package]]
 name = "version_check"
-version = "0.9.3"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
 
 [[package]]
 name = "wasi"
diff --git a/README b/README
index baf5659..9ef258e 100644
--- a/README
+++ b/README
@@ -5,7 +5,7 @@ This software is licensed under GPL version 3. See file
 COPYING for details.
 Some files may be under GPL version 2 or later.
 
-(c) 2006-2018 Hubert Figuière
+(c) 2006-2022 Hubert Figuière
 Some portions are written by other people.
 
 Google Test framework (for testing only)
@@ -25,18 +25,18 @@ To build is you need the following:
 
 A C++11 compiler
 A Rust compiler
-gtk+ 3.16
+gtk+ 3.24
 cairo 1.1
-glibmm 2.32
-gtkmm 3.16
+glibmm 2.66
+gtkmm 3.24
 giomm
 cairomm
 osm-gps-map 1.1
 sqlite3
 libxml2 > 2.5.0
 boost 1.60
-exempi >= 2.4.0
-libopenraw >= 0.1.0
+exempi >= 2.6.0
+libopenraw >= 0.3.0
 gegl >= 0.4.0
 babl
 libgphoto2
diff --git a/configure.ac b/configure.ac
index a1a2e17..072fb0f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -11,9 +11,9 @@ m4_pattern_allow([^BOOST_])
 
 dnl all the library version.
 dnl if one is harcoded elsewhere, it is a bug
-LIBGIOMM_VERSION=2.32
-LIBGLIBMM_VERSION=2.32
-LIBGTKMM_VERSION=3.22
+LIBGIOMM_VERSION=2.66
+LIBGLIBMM_VERSION=2.66
+LIBGTKMM_VERSION=3.24
 EXEMPI_VERSION=2.4.0
 SQLITE_VERSION=3.0
 GEGL_VERSION=0.3.0
@@ -184,7 +184,8 @@ GETTEXT_PACKAGE=niepce
 AC_SUBST(GETTEXT_PACKAGE)
 AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
                    [The domain to use with gettext])
-AM_GNU_GETTEXT_VERSION([0.19.7])
+AM_GNU_GETTEXT_VERSION([0.19.8])
+AM_GNU_GETTEXT_REQUIRE_VERSION([0.19.8])
 AM_GNU_GETTEXT([external])
 
 NIEPCE_LOCALEDIR=[${datadir}/locale]
diff --git a/crates/npc-engine/Cargo.toml b/crates/npc-engine/Cargo.toml
index 625bc06..86c1f48 100644
--- a/crates/npc-engine/Cargo.toml
+++ b/crates/npc-engine/Cargo.toml
@@ -22,4 +22,4 @@ rusqlite = { version = "0.25.3", features = ["functions"] }
 npc-fwk = { path = "../npc-fwk" }
 
 [build-dependencies]
-cbindgen = { version = "0.19.0" }
+cbindgen = { version = "0.20.0" }
diff --git a/crates/npc-engine/build.rs b/crates/npc-engine/build.rs
index 27c5bbf..0312e66 100644
--- a/crates/npc-engine/build.rs
+++ b/crates/npc-engine/build.rs
@@ -8,7 +8,10 @@ fn main() {
         let target_dir = env::var("CARGO_TARGET_DIR").unwrap_or_else(|_| String::from("./target"));
         let mut target_file = PathBuf::from(target_dir);
         target_file.push("eng_bindings.h");
+        let mut config = cbindgen::Config::default();
+        config.constant.allow_static_const = false;
         cbindgen::Builder::new()
+            .with_config(config)
             .with_include_guard("niepce_rust_eng_bindings_h")
             .with_namespace("ffi")
             .with_language(cbindgen::Language::Cxx)
@@ -31,6 +34,7 @@ fn main() {
             .exclude_item("NiepcePropertyBag")
             .exclude_item("PropertySet")
             .exclude_item("PropertyBag")
+            .exclude_item("Option")
             .with_crate(&crate_dir)
             .generate()
             .expect("Couldn't generate bindings")
diff --git a/crates/npc-fwk/Cargo.toml b/crates/npc-fwk/Cargo.toml
index e129245..ce15c76 100644
--- a/crates/npc-fwk/Cargo.toml
+++ b/crates/npc-fwk/Cargo.toml
@@ -13,14 +13,14 @@ cairo-rs = "*"
 chrono = "0.4.0"
 exempi = { version = "2.6.0", git = "https://github.com/hfiguiere/exempi-rs.git";, rev="99e8ba5" }
 gio-sys = "*"
-gio = "^0.14.0"
+gio = "^0.15.7"
 glib-sys = "*"
-glib = "^0.14.2"
+glib = "^0.15.9"
 gtk-sys = "*"
-gdk = "^0.14.0"
+gdk = "^0.15.4"
 gdk-pixbuf-sys = "*"
-gdk-pixbuf = "^0.14.0"
-gtk = "^0.14.0"
+gdk-pixbuf = "^0.15.6"
+gtk = "^0.15.3"
 lazy_static = "^1.2.0"
 libc = "0.2.39"
 libopenraw-rs = { path = "../../../libopenraw-rs/libopenraw-rs" }
@@ -31,4 +31,4 @@ rexiv2 = "^0.9.1"
 
 
 [build-dependencies]
-cbindgen = { version = "0.19.0" }
+cbindgen = { version = "0.20.0" }
diff --git a/crates/npc-fwk/build.rs b/crates/npc-fwk/build.rs
index 60ad393..2a7961c 100644
--- a/crates/npc-fwk/build.rs
+++ b/crates/npc-fwk/build.rs
@@ -10,7 +10,10 @@ fn main() {
         let target_dir = env::var("CARGO_TARGET_DIR").unwrap_or_else(|_| String::from("./target"));
         let mut target_file = PathBuf::from(target_dir);
         target_file.push("fwk_bindings.h");
+        let mut config = cbindgen::Config::default();
+        config.constant.allow_static_const = false;
         cbindgen::Builder::new()
+            .with_config(config)
             .with_include_guard("niepce_fwk_rust_bindings_h")
             .with_namespace("ffi")
             .with_language(cbindgen::Language::Cxx)
diff --git a/crates/npc-fwk/src/base/rgbcolour.rs b/crates/npc-fwk/src/base/rgbcolour.rs
index de86620..341372c 100644
--- a/crates/npc-fwk/src/base/rgbcolour.rs
+++ b/crates/npc-fwk/src/base/rgbcolour.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - fwk/base/rgbcolour.rs
  *
- * Copyright (C) 2017-2021 Hubert Figuière
+ * Copyright (C) 2017-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -75,12 +75,12 @@ impl ToString for RgbColour {
 
 impl From<RgbColour> for gdk::RGBA {
     fn from(v: RgbColour) -> gdk::RGBA {
-        gdk::RGBA {
-            red: v.r as f64 / 65535_f64,
-            green: v.g as f64 / 65535_f64,
-            blue: v.b as f64 / 65535_f64,
-            alpha: 1.0,
-        }
+        gdk::RGBA::new(
+            v.r as f64 / 65535_f64,
+            v.g as f64 / 65535_f64,
+            v.b as f64 / 65535_f64,
+            1.0,
+        )
     }
 }
 
diff --git a/crates/npc-fwk/src/toolkit.rs b/crates/npc-fwk/src/toolkit.rs
index f456fd2..c9538e3 100644
--- a/crates/npc-fwk/src/toolkit.rs
+++ b/crates/npc-fwk/src/toolkit.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - crates/npc-fwk/src/toolkit/mod.rs
  *
- * Copyright (C) 2020-2021 Hubert Figuière
+ * Copyright (C) 2020-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@ pub struct PortableChannel<T>(pub Sender<T>);
 pub fn thread_context() -> glib::MainContext {
     glib::MainContext::thread_default().unwrap_or_else(|| {
         let ctx = glib::MainContext::new();
-        ctx.push_thread_default();
+        ctx.with_thread_default(|| true);
         ctx
     })
 }
diff --git a/crates/npc-fwk/src/toolkit/widgets/rating_label.rs 
b/crates/npc-fwk/src/toolkit/widgets/rating_label.rs
index 184020c..ba19231 100644
--- a/crates/npc-fwk/src/toolkit/widgets/rating_label.rs
+++ b/crates/npc-fwk/src/toolkit/widgets/rating_label.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - crates/npc-fwk/src/toolkit/widgets/rating_label.rs
  *
- * Copyright (C) 2020 Hubert Figuière
+ * Copyright (C) 2020-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -111,7 +111,7 @@ impl ObjectImpl for RatingLabelPriv {
     fn properties() -> &'static [glib::ParamSpec] {
         use once_cell::sync::Lazy;
         static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
-            vec![glib::ParamSpec::new_int(
+            vec![glib::ParamSpecInt::new(
                 "rating",
                 "Rating",
                 "The rating value",
@@ -226,12 +226,9 @@ impl WidgetImpl for RatingLabelPriv {
                 let new_rating = RatingLabel::rating_value_from_hit_x(x);
                 if new_rating != self.rating.get() {
                     self.set_rating(new_rating);
-                    if let Err(err) = self
+                    self
                         .instance()
-                        .emit_by_name("rating-changed", &[&new_rating])
-                    {
-                        err_out!("Emit signal 'rating-changed' failed: {}", err);
-                    }
+                        .emit_by_name::<()>("rating-changed", &[&new_rating]);
                 }
             }
             Inhibit(true)
diff --git a/crates/npc-fwk/src/utils/files.rs b/crates/npc-fwk/src/utils/files.rs
index a1ba27f..5a42702 100644
--- a/crates/npc-fwk/src/utils/files.rs
+++ b/crates/npc-fwk/src/utils/files.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - fwk/utils/files.rs
  *
- * Copyright (C) 2018-2021 Hubert Figuière
+ * Copyright (C) 2018-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -45,7 +45,7 @@ impl FileList {
         }
         let dir_path = dir_path.unwrap();
         if let Ok(enumerator) =
-            dir.enumerate_children("*", gio::FileQueryInfoFlags::NONE, gio::NONE_CANCELLABLE)
+            dir.enumerate_children("*", gio::FileQueryInfoFlags::NONE, Option::<&gio::Cancellable>::None)
         {
             for itr in enumerator.into_iter() {
                 if itr.is_err() {
@@ -60,7 +60,7 @@ impl FileList {
                         continue;
                     }
                     let name = finfo.name();
-                    let fullname = glib::build_filenamev(&[&dir_path, &name]);
+                    let fullname: PathBuf = [&dir_path, &name].iter().collect();
                     dbg_out!("Found file {:?}", &fullname);
                     l.0.push(fullname);
                 }
diff --git a/niepce-main/Cargo.toml b/niepce-main/Cargo.toml
index 5c09382..0f69e6c 100644
--- a/niepce-main/Cargo.toml
+++ b/niepce-main/Cargo.toml
@@ -25,7 +25,7 @@ npc-fwk = { path = "../crates/npc-fwk" }
 npc-engine = { path = "../crates/npc-engine" }
 
 [build-dependencies]
-cbindgen = { version = "0.19.0" }
+cbindgen = { version = "0.20.0" }
 
 [lib]
 name = "niepce_rust"
diff --git a/niepce-main/build.rs b/niepce-main/build.rs
index 883215e..a267cd7 100644
--- a/niepce-main/build.rs
+++ b/niepce-main/build.rs
@@ -10,7 +10,10 @@ fn main() {
         let target_dir = env::var("CARGO_TARGET_DIR").unwrap_or_else(|_| String::from("./target"));
         let mut target_file = PathBuf::from(target_dir);
         target_file.push("bindings.h");
+        let mut config = cbindgen::Config::default();
+        config.constant.allow_static_const = false;
         cbindgen::Builder::new()
+            .with_config(config)
             .with_include_guard("niepce_rust_bindings_h")
             .with_namespace("ffi")
             .with_language(cbindgen::Language::Cxx)
@@ -38,6 +41,7 @@ fn main() {
             .exclude_item("GtkWidget")
             .exclude_item("GFileInfo")
             .exclude_item("PortableChannel")
+            .exclude_item("Option")
             .with_crate(&crate_dir)
             .generate()
             .expect("Couldn't generate bindings")
diff --git a/niepce-main/src/niepce/ui/image_list_store.rs b/niepce-main/src/niepce/ui/image_list_store.rs
index 7ec219d..c5f0376 100644
--- a/niepce-main/src/niepce/ui/image_list_store.rs
+++ b/niepce-main/src/niepce/ui/image_list_store.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - niepce/ui/image_list_store.rs
  *
- * Copyright (C) 2020-2021 Hubert Figuière
+ * Copyright (C) 2020-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -35,8 +35,8 @@ use npc_fwk::toolkit::gdk_utils;
 use npc_fwk::PropertyValue;
 
 /// Wrap a libfile into something that can be in a glib::Value
-#[derive(Clone, GBoxed)]
-#[gboxed(type_name = "StoreLibFile", nullable)]
+#[derive(Clone, glib::Boxed)]
+#[boxed_type(name = "StoreLibFile", nullable)]
 pub struct StoreLibFile(pub LibFile);
 
 #[repr(i32)]
diff --git a/niepce-main/src/niepce/ui/library_cell_renderer.rs 
b/niepce-main/src/niepce/ui/library_cell_renderer.rs
index 627262b..e80813c 100644
--- a/niepce-main/src/niepce/ui/library_cell_renderer.rs
+++ b/niepce-main/src/niepce/ui/library_cell_renderer.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - niepce/ui/library_cell_renderer.rs
  *
- * Copyright (C) 2020-2021 Hubert Figuière
+ * Copyright (C) 2020-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -215,7 +215,7 @@ impl LibraryCellRendererPriv {
         self.libfile.replace(libfile);
     }
 
-    fn do_draw_thumbnail(&self, cr: &cairo::Context, pixbuf: &Pixbuf, r: &gdk::Rectangle) {
+    fn do_draw_thumbnail(&self, cr: &cairo::Context, pixbuf: &Pixbuf, r: &cairo::RectangleInt) {
         let w = pixbuf.width();
         let h = pixbuf.height();
         let offset_x = (self.size.get() - w) / 2;
@@ -231,7 +231,7 @@ impl LibraryCellRendererPriv {
         on_err_out!(cr.paint());
     }
 
-    fn do_draw_flag(cr: &cairo::Context, flag: i32, r: &gdk::Rectangle) {
+    fn do_draw_flag(cr: &cairo::Context, flag: i32, r: &cairo::RectangleInt) {
         if flag == 0 {
             return;
         }
@@ -248,7 +248,7 @@ impl LibraryCellRendererPriv {
         on_err_out!(cr.paint());
     }
 
-    fn do_draw_status(cr: &cairo::Context, status: FileStatus, r: &gdk::Rectangle) {
+    fn do_draw_status(cr: &cairo::Context, status: FileStatus, r: &cairo::RectangleInt) {
         if status == FileStatus::Ok {
             return;
         }
@@ -258,7 +258,7 @@ impl LibraryCellRendererPriv {
         on_err_out!(cr.paint());
     }
 
-    fn do_draw_format_emblem(cr: &cairo::Context, emblem: &Pixbuf, r: &gdk::Rectangle) -> i32 {
+    fn do_draw_format_emblem(cr: &cairo::Context, emblem: &Pixbuf, r: &cairo::RectangleInt) -> i32 {
         let w = emblem.width();
         let h = emblem.height();
         let left = CELL_PADDING + w;
@@ -269,7 +269,7 @@ impl LibraryCellRendererPriv {
         left
     }
 
-    fn do_draw_label(cr: &cairo::Context, right: i32, colour: RgbColour, r: &gdk::Rectangle) {
+    fn do_draw_label(cr: &cairo::Context, right: i32, colour: RgbColour, r: &cairo::RectangleInt) {
         const LABEL_SIZE: i32 = 15;
         let x: f64 = (r.x + r.width - CELL_PADDING - right - CELL_PADDING - LABEL_SIZE).into();
         let y: f64 = (r.y + r.height - CELL_PADDING - LABEL_SIZE).into();
@@ -279,7 +279,7 @@ impl LibraryCellRendererPriv {
         on_err_out!(cr.stroke());
         cr.rectangle(x, y, LABEL_SIZE.into(), LABEL_SIZE.into());
         let rgb: gdk::RGBA = colour.into();
-        cr.set_source_rgba(rgb.red, rgb.green, rgb.blue, rgb.alpha);
+        cr.set_source_rgba(rgb.red(), rgb.green(), rgb.blue(), rgb.alpha());
         on_err_out!(cr.fill());
     }
 
@@ -330,14 +330,14 @@ impl ObjectImpl for LibraryCellRendererPriv {
         use once_cell::sync::Lazy;
         static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
             vec![
-                glib::ParamSpec::new_boxed(
+                glib::ParamSpecBoxed::new(
                     "libfile",
                     "Library File",
                     "File from the library in the cell",
                     StoreLibFile::static_type(),
                     glib::ParamFlags::READWRITE,
                 ),
-                glib::ParamSpec::new_int(
+                glib::ParamSpecInt::new(
                     "status",
                     "File Status",
                     "Status of the file in the cell",
@@ -437,7 +437,7 @@ impl CellRendererImpl for LibraryCellRendererPriv {
         let xpad = self_.xpad();
         let ypad = self_.ypad();
 
-        let mut r = *cell_area;
+        let mut r = *cell_area.as_ref();
         r.x += xpad as i32;
         r.y += ypad as i32;
 
@@ -549,50 +549,46 @@ impl CellRendererImpl for LibraryCellRendererPriv {
             // hit test with the rating region
             let xpad = instance.xpad();
             let ypad = instance.ypad();
-            let mut r = *cell_area;
+            let mut r = *cell_area.as_ref();
             r.x += xpad as i32;
             r.y += ypad as i32;
 
             let (rw, rh) = RatingLabel::geometry();
-            let rect = gdk::Rectangle {
-                x: r.x + CELL_PADDING,
-                y: r.y + r.height - rh - CELL_PADDING,
-                width: rw,
-                height: rh,
-            };
+            let rect = gdk::Rectangle::new(
+                r.x + CELL_PADDING,
+                r.y + r.height - rh - CELL_PADDING,
+                rw,
+                rh,
+            );
             let x = instance.x();
             let y = instance.y();
             dbg_out!(
                 "r({}, {}, {}, {}) p({}, {})",
-                rect.x,
-                rect.y,
-                rect.width,
-                rect.height,
+                rect.x(),
+                rect.y(),
+                rect.width(),
+                rect.height(),
                 x,
                 y
             );
-            let hit = (rect.x <= x)
-                && (rect.x + rect.width >= x)
-                && (rect.y <= y)
-                && (rect.y + rect.height >= y);
+            let hit = (rect.x() <= x)
+                && (rect.x() + rect.width() >= x)
+                && (rect.y() <= y)
+                && (rect.y() + rect.height() >= y);
             if !hit {
                 dbg_out!("not a hit");
                 return false;
             }
 
             // hit test for the rating value
-            let new_rating = RatingLabel::rating_value_from_hit_x((x - rect.x).into());
+            let new_rating = RatingLabel::rating_value_from_hit_x((x - rect.x()).into());
             dbg_out!("new_rating {}", new_rating);
 
             let file = self.libfile.borrow();
             if let Some(f) = &*file {
                 if f.0.rating() != new_rating {
                     // emit signal if changed
-                    if let Err(err) =
-                        instance.emit_by_name("rating-changed", &[&f.0.id(), &new_rating])
-                    {
-                        err_out!("Can't emit rating-changed signal: {}", err);
-                    }
+                    instance.emit_by_name::<()>("rating-changed", &[&f.0.id(), &new_rating]);
                 }
             }
             true
diff --git a/niepce-main/src/niepce/ui/thumb_nav.rs b/niepce-main/src/niepce/ui/thumb_nav.rs
index ad1ccb3..89ad2b2 100644
--- a/niepce-main/src/niepce/ui/thumb_nav.rs
+++ b/niepce-main/src/niepce/ui/thumb_nav.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - niepce/ui/thumb_nav.rs
  *
- * Copyright (C) 2020-2021 Hubert Figuière
+ * Copyright (C) 2020-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -176,9 +176,8 @@ impl ThumbNavPriv {
 
         if i == SCROLL_MOVE || value - SCROLL_INC < 0.0 {
             ref_i.set(0.0);
-            if let Err(err) = adj.emit_by_name("value-changed", &[]) {
-                err_out!("signal emit value-changed {}", err);
-            }
+            adj.emit_by_name::<()>("value-changed", &[]);
+
             return Continue(false);
         }
 
@@ -229,12 +228,7 @@ impl ThumbNavPriv {
             ThumbNavMode::OneRow => {
                 if let Some(thumbview) = &*self.thumbview.borrow() {
                     thumbview.set_size_request(-1, -1);
-                    if let Err(err) = thumbview.set_property("item-height", &100) {
-                        err_out!(
-                            "ThumbNav::set_mode: set property 'item-height' failed: {}",
-                            err
-                        );
-                    }
+                    thumbview.set_property("item-height", &100);
                 }
                 self.widgets
                     .get()
@@ -251,12 +245,7 @@ impl ThumbNavPriv {
                     thumbview.set_columns(1);
 
                     thumbview.set_size_request(-1, -1);
-                    if let Err(err) = thumbview.set_property("item-height", &-1) {
-                        err_out!(
-                            "ThumbNav::set_mode: set property 'item-height' failed: {}",
-                            err
-                        );
-                    }
+                    thumbview.set_property("item-height", &-1);
                 }
                 if let Some(widgets) = self.widgets.get() {
                     widgets
@@ -316,7 +305,8 @@ impl ObjectImpl for ThumbNavPriv {
             priv_.left_button_clicked();
         }));
 
-        let sw = gtk::ScrolledWindow::new(gtk::NONE_ADJUSTMENT, gtk::NONE_ADJUSTMENT);
+        let sw = gtk::ScrolledWindow::new(Option::<&gtk::Adjustment>::None,
+                                          Option::<&gtk::Adjustment>::None);
         sw.set_shadow_type(gtk::ShadowType::In);
         sw.set_policy(gtk::PolicyType::Always, gtk::PolicyType::Never);
         let adj = sw.hadjustment();
@@ -357,9 +347,7 @@ impl ObjectImpl for ThumbNavPriv {
         // The value-changed signal might not be emitted because the value is already 0.
         // Ensure the state first.
         self.adj_value_changed(&adj);
-        if let Err(err) = adj.emit_by_name("value-changed", &[]) {
-            err_out!("ThumbNav::constructed: signal emit failed: {}", err);
-        }
+        adj.emit_by_name::<()>("value-changed", &[]);
 
         self.add_thumbview();
     }
@@ -368,21 +356,21 @@ impl ObjectImpl for ThumbNavPriv {
         use once_cell::sync::Lazy;
         static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
             vec![
-                glib::ParamSpec::new_boolean(
+                glib::ParamSpecBoolean::new(
                     "show-buttons",
                     "Show Buttons",
                     "Whether to show navigation buttons or not",
                     true, // Default value
                     glib::ParamFlags::READWRITE,
                 ),
-                glib::ParamSpec::new_object(
+                glib::ParamSpecObject::new(
                     "thumbview",
                     "Thumbnail View",
                     "The internal thumbnail viewer widget",
                     gtk::IconView::static_type(),
                     glib::ParamFlags::READWRITE | glib::ParamFlags::CONSTRUCT_ONLY,
                 ),
-                glib::ParamSpec::new_int(
+                glib::ParamSpecInt::new(
                     "mode",
                     "Mode",
                     "Thumb navigator mode",
diff --git a/niepce-main/src/niepce/ui/thumb_strip_view.rs b/niepce-main/src/niepce/ui/thumb_strip_view.rs
index be8557e..23fc3b0 100644
--- a/niepce-main/src/niepce/ui/thumb_strip_view.rs
+++ b/niepce-main/src/niepce/ui/thumb_strip_view.rs
@@ -1,7 +1,7 @@
 /*
  * niepce - niepce/ui/thumbstripview.rs
  *
- * Copyright (C) 2020-2021 Hubert Figuière
+ * Copyright (C) 2020-2022 Hubert Figuière
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -234,7 +234,7 @@ impl ObjectImpl for ThumbStripViewPriv {
     fn properties() -> &'static [glib::ParamSpec] {
         use once_cell::sync::Lazy;
         static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
-            vec![glib::ParamSpec::new_int(
+            vec![glib::ParamSpecInt::new(
                 "item-height",
                 "Item Height",
                 "The Item Height",


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