This commit is contained in:
DashieTM 2025-02-02 18:32:17 +01:00
parent f09ed75581
commit 5fc51ecda0
14 changed files with 596 additions and 498 deletions

309
Cargo.lock generated
View file

@ -17,12 +17,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "anyhow"
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.2.0" version = "1.2.0"
@ -52,28 +46,27 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "2.5.0" version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36"
[[package]] [[package]]
name = "cairo-rs" name = "cairo-rs"
version = "0.19.4" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2ac2a4d0e69036cf0062976f6efcba1aaee3e448594e6514bb2ddf87acce562" checksum = "ae50b5510d86cf96ac2370e66d8dc960882f3df179d6a5a1e52bd94a1416c0f7"
dependencies = [ dependencies = [
"bitflags 2.5.0", "bitflags 2.8.0",
"cairo-sys-rs", "cairo-sys-rs",
"glib", "glib",
"libc", "libc",
"thiserror",
] ]
[[package]] [[package]]
name = "cairo-sys-rs" name = "cairo-sys-rs"
version = "0.19.2" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd3bb3119664efbd78b5e6c93957447944f16bdbced84c17a9f41c7829b81e64" checksum = "f18b6bb8e43c7eb0f2aac7976afe0c61b6f5fc2ab7bc4c139537ea56c92290df"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -88,9 +81,9 @@ checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7"
[[package]] [[package]]
name = "cfg-expr" name = "cfg-expr"
version = "0.15.8" version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" checksum = "8d4ba6e40bd1184518716a6e1a781bf9160e286d219ccdb8ab2612e74cfe4789"
dependencies = [ dependencies = [
"smallvec", "smallvec",
"target-lexicon", "target-lexicon",
@ -158,19 +151,6 @@ version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
[[package]]
name = "dashmap"
version = "5.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
dependencies = [
"cfg-if",
"hashbrown",
"lock_api",
"once_cell",
"parking_lot_core",
]
[[package]] [[package]]
name = "dbus" name = "dbus"
version = "0.9.7" version = "0.9.7"
@ -222,9 +202,9 @@ dependencies = [
[[package]] [[package]]
name = "fork" name = "fork"
version = "0.1.23" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60e74d3423998a57e9d906e49252fb79eb4a04d5cdfe188fb1b7ff9fc076a8ed" checksum = "05dc8b302e04a1c27f4fe694439ef0f29779ca4edc205b7b58f00db04e29656d"
dependencies = [ dependencies = [
"libc", "libc",
] ]
@ -285,7 +265,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.59", "syn 2.0.98",
] ]
[[package]] [[package]]
@ -320,9 +300,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf" name = "gdk-pixbuf"
version = "0.19.2" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6a23f8a0b5090494fd04924662d463f8386cc678dd3915015a838c1a3679b92" checksum = "b6efc7705f7863d37b12ad6974cbb310d35d054f5108cdc1e69037742f573c4c"
dependencies = [ dependencies = [
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio", "gio",
@ -332,9 +312,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf-sys" name = "gdk-pixbuf-sys"
version = "0.19.0" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dcbd04c1b2c4834cc008b4828bc917d062483b88d26effde6342e5622028f96" checksum = "67f2587c9202bf997476bbba6aaed4f78a11538a2567df002a5f57f5331d0b5c"
dependencies = [ dependencies = [
"gio-sys", "gio-sys",
"glib-sys", "glib-sys",
@ -345,9 +325,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk4" name = "gdk4"
version = "0.8.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9100b25604183f2fd97f55ef087fae96ab4934d7215118a35303e422688e6e4b" checksum = "d0196720118f880f71fe7da971eff58cc43a89c9cf73f46076b7cb1e60889b15"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"gdk-pixbuf", "gdk-pixbuf",
@ -360,9 +340,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-sys" name = "gdk4-sys"
version = "0.8.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0b76874c40bb8d1c7d03a7231e23ac75fa577a456cd53af32ec17ec8f121626" checksum = "60b0e1340bd15e7a78810cf39fed9e5d85f0a8f80b1d999d384ca17dcc452b60"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@ -383,9 +363,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
[[package]] [[package]]
name = "gio" name = "gio"
version = "0.19.4" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f91a0518c2ec539f099d3f945ab2d6a83ec372a9ef40a21906343b191182845" checksum = "a517657589a174be9f60c667f1fec8b7ac82ed5db4ebf56cf073a3b5955d8e2e"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@ -396,14 +376,13 @@ dependencies = [
"libc", "libc",
"pin-project-lite", "pin-project-lite",
"smallvec", "smallvec",
"thiserror",
] ]
[[package]] [[package]]
name = "gio-sys" name = "gio-sys"
version = "0.19.0" version = "0.20.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcf8e1d9219bb294636753d307b030c1e8a032062cba74f493c431a5c8b81ce4" checksum = "8446d9b475730ebef81802c1738d972db42fde1c5a36a627ebc4d665fc87db04"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -414,11 +393,11 @@ dependencies = [
[[package]] [[package]]
name = "glib" name = "glib"
version = "0.19.4" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae1407b2ce171e654720be10d57d4054d3ff2f10a13d5b37e6819b41439832f7" checksum = "f969edf089188d821a30cde713b6f9eb08b20c63fc2e584aba2892a7984a8cc0"
dependencies = [ dependencies = [
"bitflags 2.5.0", "bitflags 2.8.0",
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-executor", "futures-executor",
@ -431,36 +410,35 @@ dependencies = [
"libc", "libc",
"memchr", "memchr",
"smallvec", "smallvec",
"thiserror",
] ]
[[package]] [[package]]
name = "glib-build-tools" name = "glib-build-tools"
version = "0.19.0" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "108f374fff60efd14b0d70d8916e7213aed18d7dd071ba3e9334ed2dac1dc86a" checksum = "7029c2651d9b5d5a3eea93ec8a1995665c6d3a69ce9bf6042ad9064d134736d8"
dependencies = [ dependencies = [
"gio", "gio",
] ]
[[package]] [[package]]
name = "glib-macros" name = "glib-macros"
version = "0.19.4" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8bba315e8ce8aa59631545358450f4962557e89b5f7db7442e7153b47037f71" checksum = "715601f8f02e71baef9c1f94a657a9a77c192aea6097cf9ae7e5e177cd8cde68"
dependencies = [ dependencies = [
"heck", "heck",
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.59", "syn 2.0.98",
] ]
[[package]] [[package]]
name = "glib-sys" name = "glib-sys"
version = "0.19.0" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630f097773d7c7a0bb3258df4e8157b47dc98bbfa0e60ad9ab56174813feced4" checksum = "b360ff0f90d71de99095f79c526a5888c9c92fc9ee1b19da06c6f5e75f0c2a53"
dependencies = [ dependencies = [
"libc", "libc",
"system-deps", "system-deps",
@ -468,9 +446,9 @@ dependencies = [
[[package]] [[package]]
name = "gobject-sys" name = "gobject-sys"
version = "0.19.0" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c85e2b1080b9418dd0c58b498da3a5c826030343e0ef07bde6a955d28de54979" checksum = "67a56235e971a63bfd75abb13ef70064e1346388723422a68580d8a6fbac6423"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -479,9 +457,9 @@ dependencies = [
[[package]] [[package]]
name = "graphene-rs" name = "graphene-rs"
version = "0.19.2" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99e4d388e96c5f29e2b2f67045d229ddf826d0a8d6d282f94ed3b34452222c91" checksum = "f39d3bcd2e24fd9c2874a56f277b72c03e728de9bdc95a8d4ef4c962f10ced98"
dependencies = [ dependencies = [
"glib", "glib",
"graphene-sys", "graphene-sys",
@ -490,9 +468,9 @@ dependencies = [
[[package]] [[package]]
name = "graphene-sys" name = "graphene-sys"
version = "0.19.0" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "236ed66cc9b18d8adf233716f75de803d0bf6fc806f60d14d948974a12e240d0" checksum = "11a68d39515bf340e879b72cecd4a25c1332557757ada6e8aba8654b4b81d23a"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@ -502,9 +480,9 @@ dependencies = [
[[package]] [[package]]
name = "gsk4" name = "gsk4"
version = "0.8.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c65036fc8f99579e8cb37b12487969b707ab23ec8ab953682ff347cbd15d396e" checksum = "32b9188db0a6219e708b6b6e7225718e459def664023dbddb8395ca1486d8102"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"gdk4", "gdk4",
@ -517,9 +495,9 @@ dependencies = [
[[package]] [[package]]
name = "gsk4-sys" name = "gsk4-sys"
version = "0.8.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd24c814379f9c3199dc53e52253ee8d0f657eae389ab282c330505289d24738" checksum = "bca10fc65d68528a548efa3d8747934adcbe7058b73695c9a7f43a25352fce14"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk4-sys", "gdk4-sys",
@ -533,9 +511,9 @@ dependencies = [
[[package]] [[package]]
name = "gtk4" name = "gtk4"
version = "0.8.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa82753b8c26277e4af1446c70e35b19aad4fb794a7b143859e7eeb9a4025d83" checksum = "b697ff938136625f6acf75f01951220f47a45adcf0060ee55b4671cf734dac44"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"field-offset", "field-offset",
@ -554,23 +532,21 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-macros" name = "gtk4-macros"
version = "0.8.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40300bf071d2fcd4c94eacc09e84ec6fe73129d2ceb635cf7e55b026b5443567" checksum = "0ed1786c4703dd196baf7e103525ce0cf579b3a63a0570fe653b7ee6bac33999"
dependencies = [ dependencies = [
"anyhow",
"proc-macro-crate", "proc-macro-crate",
"proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 1.0.109", "syn 2.0.98",
] ]
[[package]] [[package]]
name = "gtk4-sys" name = "gtk4-sys"
version = "0.8.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0db1b104138f087ccdc81d2c332de5dd049b89de3d384437cc1093b17cd2da18" checksum = "3af4b680cee5d2f786a2f91f1c77e95ecf2254522f0ca4edf3a2dce6cb35cecf"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@ -587,9 +563,9 @@ dependencies = [
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.14.3" version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
[[package]] [[package]]
name = "heck" name = "heck"
@ -605,9 +581,9 @@ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.2.6" version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown",
@ -615,26 +591,16 @@ dependencies = [
[[package]] [[package]]
name = "ipnetwork" name = "ipnetwork"
version = "0.20.0" version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" checksum = "cf370abdafd54d13e54a620e8c3e1145f28e46cc9d704bc6d94414559df41763"
dependencies = [
"serde",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libadwaita" name = "libadwaita"
version = "0.6.0" version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91b4990248b9e1ec5e72094a2ccaea70ec3809f88f6fd52192f2af306b87c5d9" checksum = "8611ee9fb85e7606c362b513afcaf5b59853f79e4d98caaaf581d99465014247"
dependencies = [ dependencies = [
"gdk-pixbuf",
"gdk4", "gdk4",
"gio", "gio",
"glib", "glib",
@ -646,9 +612,9 @@ dependencies = [
[[package]] [[package]]
name = "libadwaita-sys" name = "libadwaita-sys"
version = "0.6.0" version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23a748e4e92be1265cd9e93d569c0b5dfc7814107985aa6743d670ab281ea1a8" checksum = "b099a223560118d4d4fa04b6d23f3ea5b7171fe1d83dfb7e6b45b54cdfc83af9"
dependencies = [ dependencies = [
"gdk4-sys", "gdk4-sys",
"gio-sys", "gio-sys",
@ -677,9 +643,9 @@ dependencies = [
[[package]] [[package]]
name = "libloading" name = "libloading"
version = "0.8.3" version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"windows-targets 0.52.5", "windows-targets 0.52.5",
@ -687,9 +653,9 @@ dependencies = [
[[package]] [[package]]
name = "libpulse-binding" name = "libpulse-binding"
version = "2.28.1" version = "2.28.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed3557a2dfc380c8f061189a01c6ae7348354e0c9886038dc6c171219c08eaff" checksum = "b6b1040a6c4c4d1e9e852000f6202df1a02a4f074320de336ab21e4fd317b538"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"libc", "libc",
@ -730,9 +696,9 @@ checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.7.2" version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]] [[package]]
name = "memoffset" name = "memoffset"
@ -804,15 +770,15 @@ dependencies = [
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.19.0" version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
[[package]] [[package]]
name = "pango" name = "pango"
version = "0.19.3" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1264d13deb823cc652f26cfe59afb1ec4b9db2a5bd27c41b738c879cc1bfaa1" checksum = "9e89bd74250a03a05cec047b43465469102af803be2bf5e5a1088f8b8455e087"
dependencies = [ dependencies = [
"gio", "gio",
"glib", "glib",
@ -822,9 +788,9 @@ dependencies = [
[[package]] [[package]]
name = "pango-sys" name = "pango-sys"
version = "0.19.0" version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f52ef6a881c19fbfe3b1484df5cad411acaaba29dbec843941c3110d19f340ea" checksum = "71787e0019b499a5eda889279e4adb455a4f3fdd6870cd5ab7f4a5aa25df6699"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@ -882,35 +848,11 @@ dependencies = [
"toml_edit 0.21.1", "toml_edit 0.21.1",
] ]
[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn 1.0.109",
"version_check",
]
[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"version_check",
]
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.81" version = "1.0.93"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -927,8 +869,7 @@ dependencies = [
[[package]] [[package]]
name = "re_set-lib" name = "re_set-lib"
version = "5.2.5" version = "5.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/Xetibo/ReSet-Lib.git?branch=dashie-2#5aaadeaa68272d563177399fa546f62a14f90bf8"
checksum = "69ec9fc4d9e919feb030e5382de1aa49447404a57ecc19361bf7710f1cf9063e"
dependencies = [ dependencies = [
"dbus", "dbus",
"dbus-crossroads", "dbus-crossroads",
@ -969,8 +910,7 @@ dependencies = [
[[package]] [[package]]
name = "reset_daemon" name = "reset_daemon"
version = "2.2.0" version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/Xetibo/ReSet-Daemon.git?branch=dashie-2#5b630a497278b55a6321830971a7c219732f993d"
checksum = "f72dd51da41c2fc3ac37ae55fbdeb2670d32cad39cc85cc95a9ea25fc02b6086"
dependencies = [ dependencies = [
"crossbeam", "crossbeam",
"dbus", "dbus",
@ -1000,12 +940,27 @@ dependencies = [
"semver", "semver",
] ]
[[package]]
name = "scc"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28e1c91382686d21b5ac7959341fcb9780fa7c03773646995a87c950fa7be640"
dependencies = [
"sdd",
]
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.2.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sdd"
version = "3.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "478f121bb72bbf63c52c93011ea1791dca40140dfe13f8336c4c5ac952c33aa9"
[[package]] [[package]]
name = "semver" name = "semver"
version = "1.0.22" version = "1.0.22"
@ -1029,41 +984,41 @@ checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.59", "syn 2.0.98",
] ]
[[package]] [[package]]
name = "serde_spanned" name = "serde_spanned"
version = "0.6.5" version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
dependencies = [ dependencies = [
"serde", "serde",
] ]
[[package]] [[package]]
name = "serial_test" name = "serial_test"
version = "3.0.0" version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "953ad9342b3aaca7cb43c45c097dd008d4907070394bd0751a0aa8817e5a018d" checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9"
dependencies = [ dependencies = [
"dashmap",
"futures", "futures",
"lazy_static",
"log", "log",
"once_cell",
"parking_lot", "parking_lot",
"scc",
"serial_test_derive", "serial_test_derive",
] ]
[[package]] [[package]]
name = "serial_test_derive" name = "serial_test_derive"
version = "3.0.0" version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b93fb4adc70021ac1b47f7d45e8cc4169baaa7ea58483bc5b721d19a26202212" checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.59", "syn 2.0.98",
] ]
[[package]] [[package]]
@ -1104,9 +1059,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.59" version = "2.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a6531ffc7b071655e4ce2e04bd464c4830bb585a61cabb96cf808f05172615a" checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1115,9 +1070,9 @@ dependencies = [
[[package]] [[package]]
name = "system-deps" name = "system-deps"
version = "6.2.2" version = "7.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" checksum = "66d23aaf9f331227789a99e8de4c91bf46703add012bdfd45fdecdfb2975a005"
dependencies = [ dependencies = [
"cfg-expr", "cfg-expr",
"heck", "heck",
@ -1128,29 +1083,9 @@ dependencies = [
[[package]] [[package]]
name = "target-lexicon" name = "target-lexicon"
version = "0.12.14" version = "0.12.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "thiserror"
version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.59",
]
[[package]] [[package]]
name = "tokio" name = "tokio"
@ -1176,26 +1111,26 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.59", "syn 2.0.98",
] ]
[[package]] [[package]]
name = "toml" name = "toml"
version = "0.8.12" version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
dependencies = [ dependencies = [
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"toml_edit 0.22.9", "toml_edit 0.22.23",
] ]
[[package]] [[package]]
name = "toml_datetime" name = "toml_datetime"
version = "0.6.5" version = "0.6.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
dependencies = [ dependencies = [
"serde", "serde",
] ]
@ -1213,15 +1148,15 @@ dependencies = [
[[package]] [[package]]
name = "toml_edit" name = "toml_edit"
version = "0.22.9" version = "0.22.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"winnow 0.6.6", "winnow 0.7.0",
] ]
[[package]] [[package]]
@ -1236,12 +1171,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.11.0+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"
@ -1420,9 +1349,9 @@ dependencies = [
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.6.6" version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]

View file

@ -11,22 +11,24 @@ name = "ReSet"
path = "src/main.rs" path = "src/main.rs"
[dependencies] [dependencies]
reset_daemon = "2.2.0" #reset_daemon = "2.2.0"
re_set-lib = "5.2.5" reset_daemon = { git = "https://github.com/Xetibo/ReSet-Daemon.git", branch = "dashie-2" }
adw = { version = "0.6.0", package = "libadwaita", features = ["v1_4"] } #re_set-lib = "5.2.5"
re_set-lib = { git = "https://github.com/Xetibo/ReSet-Lib.git", branch = "dashie-2" }
adw = { version = "0.7.1", package = "libadwaita", features = ["v1_4"] }
dbus = "0.9.7" dbus = "0.9.7"
gtk = { version = "0.8.1", package = "gtk4", features = ["v4_12"] } gtk = { version = "0.9.5", package = "gtk4", features = ["v4_12"] }
glib = "0.19.3" glib = "0.20.7"
tokio = { version = "1.36.0", features = [ tokio = { version = "1.36.0", features = [
"rt", "rt",
"time", "time",
"net", "net",
"macros", "macros",
"rt-multi-thread", "rt-multi-thread",
"sync", "sync",
] } ] }
fork = "0.1.23" fork = "0.2.0"
ipnetwork = "0.20.0" ipnetwork = "0.21.1"
[build-dependencies] [build-dependencies]
glib-build-tools = "0.19.0" glib-build-tools = "0.20.0"

View file

@ -45,18 +45,22 @@ impl CardEntry {
entry.set_model(Some(&list)); entry.set_model(Some(&list));
entry.set_selected(index); entry.set_selected(index);
entry.set_use_subtitle(true); entry.set_use_subtitle(true);
entry.connect_selected_notify(clone!(@weak imp => move |dropdown| { entry.connect_selected_notify(clone!(
let selected = dropdown.selected_item(); #[weak]
if selected.is_none() { imp,
return; move |dropdown| {
let selected = dropdown.selected_item();
if selected.is_none() {
return;
}
let selected = selected.unwrap();
let selected = selected.downcast_ref::<StringObject>().unwrap();
let selected = selected.string().to_string();
let map = imp.reset_card_map.borrow();
let (device_index, profile_name) = map.get(&selected).unwrap();
set_card_profile_of_device(*device_index, profile_name.clone());
} }
let selected = selected.unwrap(); ));
let selected = selected.downcast_ref::<StringObject>().unwrap();
let selected = selected.string().to_string();
let map = imp.reset_card_map.borrow();
let (device_index, profile_name) = map.get(&selected).unwrap();
set_card_profile_of_device(*device_index, profile_name.clone());
}));
entry.set_factory(Some(&create_dropdown_label_factory())); entry.set_factory(Some(&create_dropdown_label_factory()));
} }
entry entry

View file

@ -20,12 +20,13 @@ unsafe impl Sync for ReSetError {}
impl ReSetError { impl ReSetError {
pub fn new() -> Self { pub fn new() -> Self {
let error: ReSetError = Object::builder().build(); let error: ReSetError = Object::builder().build();
error error.imp().reset_error_button.connect_clicked(clone!(
.imp() #[strong]
.reset_error_button error,
.connect_clicked(clone!(@strong error => move |_| { move |_| {
error.popdown(); error.popdown();
})); }
));
error error
} }
} }

View file

@ -17,7 +17,7 @@ use gtk::{gio, StringObject};
use re_set_lib::{ use re_set_lib::{
bluetooth::bluetooth_structures::{BluetoothAdapter, BluetoothDevice}, bluetooth::bluetooth_structures::{BluetoothAdapter, BluetoothDevice},
signals::{BluetoothDeviceAdded, BluetoothDeviceChanged, BluetoothDeviceRemoved}, signals::{BluetoothDeviceAdded, BluetoothDeviceChanged, BluetoothDeviceRemoved},
ERROR ERROR,
}; };
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
@ -90,23 +90,31 @@ fn setup_callbacks(
let bluetooth_box_discover = bluetooth_box.clone(); let bluetooth_box_discover = bluetooth_box.clone();
imp.reset_bluetooth_discoverable_switch imp.reset_bluetooth_discoverable_switch
.connect_active_notify(clone!(@weak imp => move |state| { .connect_active_notify(clone!(
set_bluetooth_adapter_visibility( #[weak]
imp.reset_current_bluetooth_adapter.borrow().path.clone(), imp,
state.is_active(), move |state| {
bluetooth_box_discover.clone() set_bluetooth_adapter_visibility(
); imp.reset_current_bluetooth_adapter.borrow().path.clone(),
})); state.is_active(),
bluetooth_box_discover.clone(),
);
}
));
let bluetooth_box_pairable = bluetooth_box.clone(); let bluetooth_box_pairable = bluetooth_box.clone();
imp.reset_bluetooth_pairable_switch imp.reset_bluetooth_pairable_switch
.connect_active_notify(clone!(@weak imp => move |state| { .connect_active_notify(clone!(
set_bluetooth_adapter_pairability( #[weak]
imp.reset_current_bluetooth_adapter.borrow().path.clone(), imp,
state.is_active(), move |state| {
bluetooth_box_pairable.clone() set_bluetooth_adapter_pairability(
); imp.reset_current_bluetooth_adapter.borrow().path.clone(),
})); state.is_active(),
bluetooth_box_pairable.clone(),
);
}
));
imp.reset_bluetooth_switch imp.reset_bluetooth_switch
.connect_state_set(move |_, state| { .connect_state_set(move |_, state| {

View file

@ -45,20 +45,31 @@ impl SavedWifiEntry {
suffix_box.append(&delete_button); suffix_box.append(&delete_button);
entry.add_suffix(&suffix_box); entry.add_suffix(&suffix_box);
edit_button.connect_clicked( edit_button.connect_clicked(clone!(
clone!(@ weak entry_imp, @ weak wifi_box => move |_| { #[weak]
let _option = get_connection_settings(entry_imp.reset_connection_path.borrow().clone()); entry_imp,
wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(_option, entry_imp.reset_connection_path.borrow().clone())); #[weak]
}), wifi_box,
); move |_| {
let _option =
get_connection_settings(entry_imp.reset_connection_path.borrow().clone());
wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(
_option,
entry_imp.reset_connection_path.borrow().clone(),
));
}
));
let entry_ref = entry.clone(); let entry_ref = entry.clone();
delete_button.connect_clicked(clone!(@weak wifi_box => move |_| { delete_button.connect_clicked(clone!(
delete_connection(entry_ref.imp().reset_connection_path.take()); #[weak]
// FUTURE TODO: handle error wifi_box,
wifi_box.reset_stored_wifi_list.remove(&*entry_ref); move |_| {
delete_connection(entry_ref.imp().reset_connection_path.take());
})); // FUTURE TODO: handle error
wifi_box.reset_stored_wifi_list.remove(&*entry_ref);
}
));
entry entry
} }
} }

View file

@ -51,94 +51,123 @@ impl WifiAddressEntry {
let self_imp = self.imp(); let self_imp = self.imp();
let conn = connection.clone(); let conn = connection.clone();
self_imp.reset_address_address.connect_changed(clone!(@weak self_imp => move |entry| { self_imp.reset_address_address.connect_changed(clone!(
let address_input = entry.text(); #[weak]
let mut conn = conn.borrow_mut(); self_imp,
move |entry| {
let address_input = entry.text();
let mut conn = conn.borrow_mut();
if address_input.is_empty() { if address_input.is_empty() {
self_imp.reset_address_address.remove_css_class("error");
self_imp.reset_address_row.set_title("Add new address");
return;
}
let result = match self_imp.protocol.get() {
IpProtocol::IPv4 => Ipv4Addr::from_str(address_input.as_str()).map(IpAddr::V4),
IpProtocol::IPv6 => Ipv6Addr::from_str(address_input.as_str()).map(IpAddr::V6),
};
match result {
Ok(ip_addr) => {
self_imp.reset_address_address.remove_css_class("error"); self_imp.reset_address_address.remove_css_class("error");
let address_data = match self_imp.protocol.get() { self_imp.reset_address_row.set_title("Add new address");
IpProtocol::IPv4 => &mut conn.ipv4.address_data, return;
IpProtocol::IPv6 => &mut conn.ipv6.address_data,
};
address_data.push(Address::new_no_options(ip_addr.to_string(), self_imp.prefix.get().1));
*self_imp.address.borrow_mut() = (true, ip_addr.to_string());
} }
Err(_) => { let result = match self_imp.protocol.get() {
self_imp.reset_address_address.add_css_class("error"); IpProtocol::IPv4 => Ipv4Addr::from_str(address_input.as_str()).map(IpAddr::V4),
*self_imp.address.borrow_mut() = (false, String::default()); IpProtocol::IPv6 => Ipv6Addr::from_str(address_input.as_str()).map(IpAddr::V6),
};
match result {
Ok(ip_addr) => {
self_imp.reset_address_address.remove_css_class("error");
let address_data = match self_imp.protocol.get() {
IpProtocol::IPv4 => &mut conn.ipv4.address_data,
IpProtocol::IPv6 => &mut conn.ipv6.address_data,
};
address_data.push(Address::new_no_options(
ip_addr.to_string(),
self_imp.prefix.get().1,
));
*self_imp.address.borrow_mut() = (true, ip_addr.to_string());
}
Err(_) => {
self_imp.reset_address_address.add_css_class("error");
*self_imp.address.borrow_mut() = (false, String::default());
}
} }
}
set_row_name(&self_imp);
}));
let conn = connection.clone();
self_imp.reset_address_prefix.connect_changed(clone!(@weak self_imp => move |entry| {
let prefix_input = entry.text();
let prefix = prefix_input.parse::<u8>();
let mut conn = conn.borrow_mut();
let handle_error = || {
if self_imp.reset_address_prefix.text().is_empty() {
self_imp.reset_address_prefix.remove_css_class("error");
} else {
self_imp.reset_address_prefix.add_css_class("error");
}
self_imp.prefix.set((false, 0));
set_row_name(&self_imp); set_row_name(&self_imp);
};
if prefix_input.is_empty() || prefix.is_err() {
handle_error();
return;
} }
));
let prefix = prefix.unwrap();
match self_imp.protocol.get() {
IpProtocol::IPv4 if prefix <= 32 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_address_prefix.remove_css_class("error");
if let Ok(address2) = Ipv4Addr::from_str(self_imp.reset_address_address.text().as_str()) {
if let Some(addr) = conn.ipv4.address_data.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string()) {
addr.prefix = prefix as u32;
}
}
}
IpProtocol::IPv6 if prefix <= 128 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_address_prefix.remove_css_class("error");
if let Ok(address2) = Ipv6Addr::from_str(self_imp.reset_address_address.text().as_str()) {
if let Some(addr) = conn.ipv6.address_data.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string()) {
addr.prefix = prefix as u32;
}
}
}
_ => handle_error()
}
set_row_name(&self_imp);
}));
let conn = connection.clone(); let conn = connection.clone();
self_imp.reset_address_remove.connect_clicked( self_imp.reset_address_prefix.connect_changed(clone!(
clone!(@weak self_imp, @weak self as what => move |_| { #[weak]
self_imp,
move |entry| {
let prefix_input = entry.text();
let prefix = prefix_input.parse::<u8>();
let mut conn = conn.borrow_mut();
let handle_error = || {
if self_imp.reset_address_prefix.text().is_empty() {
self_imp.reset_address_prefix.remove_css_class("error");
} else {
self_imp.reset_address_prefix.add_css_class("error");
}
self_imp.prefix.set((false, 0));
set_row_name(&self_imp);
};
if prefix_input.is_empty() || prefix.is_err() {
handle_error();
return;
}
let prefix = prefix.unwrap();
match self_imp.protocol.get() {
IpProtocol::IPv4 if prefix <= 32 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_address_prefix.remove_css_class("error");
if let Ok(address2) =
Ipv4Addr::from_str(self_imp.reset_address_address.text().as_str())
{
if let Some(addr) = conn
.ipv4
.address_data
.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string())
{
addr.prefix = prefix as u32;
}
}
}
IpProtocol::IPv6 if prefix <= 128 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_address_prefix.remove_css_class("error");
if let Ok(address2) =
Ipv6Addr::from_str(self_imp.reset_address_address.text().as_str())
{
if let Some(addr) = conn
.ipv6
.address_data
.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string())
{
addr.prefix = prefix as u32;
}
}
}
_ => handle_error(),
}
set_row_name(&self_imp);
}
));
let conn = connection.clone();
self_imp.reset_address_remove.connect_clicked(clone!(
#[weak]
self_imp,
#[weak(rename_to = entry)]
self,
move |_| {
let address = self_imp.reset_address_address.text(); let address = self_imp.reset_address_address.text();
let mut conn = conn.borrow_mut(); let mut conn = conn.borrow_mut();
conn.ipv4.address_data.retain(|addr| addr.address != address); conn.ipv4
what.unparent(); .address_data
}), .retain(|addr| addr.address != address);
); entry.unparent();
}
));
} }
} }

View file

@ -82,8 +82,12 @@ fn setup_callbacks(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) -> Arc<Wif
imp.reset_available_networks imp.reset_available_networks
.set_action_name(Some("navigation.pop")); .set_action_name(Some("navigation.pop"));
set_combo_row_ellipsis(imp.reset_wifi_device.get()); set_combo_row_ellipsis(imp.reset_wifi_device.get());
imp.reset_wifi_switch.connect_state_set( imp.reset_wifi_switch.connect_state_set(clone!(
clone!(@weak imp => @default-return glib::Propagation::Proceed, move |_, value| { #[weak]
imp,
#[upgrade_or]
glib::Propagation::Proceed,
move |_, value| {
if imp.reset_switch_initial.load(Ordering::SeqCst) { if imp.reset_switch_initial.load(Ordering::SeqCst) {
return glib::Propagation::Proceed; return glib::Propagation::Proceed;
} }
@ -105,8 +109,8 @@ fn setup_callbacks(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) -> Arc<Wif
scan_for_wifi(wifibox_ref.clone()); scan_for_wifi(wifibox_ref.clone());
} }
glib::Propagation::Proceed glib::Propagation::Proceed
}), }
); ));
wifi_box wifi_box
} }

View file

@ -94,26 +94,44 @@ impl WifiEntry {
entry_imp.access_point.set(access_point); entry_imp.access_point.set(access_point);
entry.set_activatable(true); entry.set_activatable(true);
entry.connect_activated(clone!(@weak entry_imp => move |_| { entry.connect_activated(clone!(
let access_point = entry_imp.access_point.borrow(); #[weak]
if *entry_imp.connected.borrow() { entry_imp,
click_disconnect(stored_entry.clone()); move |_| {
} else if access_point.stored { let access_point = entry_imp.access_point.borrow();
click_stored_network(stored_entry.clone()); if *entry_imp.connected.borrow() {
} else { click_disconnect(stored_entry.clone());
click_new_network(new_entry.clone()); } else if access_point.stored {
click_stored_network(stored_entry.clone());
} else {
click_new_network(new_entry.clone());
}
} }
})); ));
entry.setup_callbacks(wifi_box); entry.setup_callbacks(wifi_box);
entry entry
} }
pub fn setup_callbacks(&self, wifi_box: &WifiBox) { pub fn setup_callbacks(&self, wifi_box: &WifiBox) {
let self_imp = self.imp(); let self_imp = self.imp();
self_imp.reset_wifi_edit_button.borrow().connect_clicked(clone!(@ weak self_imp, @ weak wifi_box => move |_| { self_imp
let _option = get_connection_settings(self_imp.access_point.borrow().associated_connection.clone()); .reset_wifi_edit_button
wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(_option, self_imp.access_point.borrow().associated_connection.clone())); .borrow()
})); .connect_clicked(clone!(
#[weak]
self_imp,
#[weak]
wifi_box,
move |_| {
let _option = get_connection_settings(
self_imp.access_point.borrow().associated_connection.clone(),
);
wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(
_option,
self_imp.access_point.borrow().associated_connection.clone(),
));
}
));
} }
} }
@ -233,16 +251,33 @@ pub fn click_new_network(entry: Arc<WifiEntry>) {
let entry_imp = entry.imp(); let entry_imp = entry.imp();
let popup_imp = entry_imp.reset_wifi_popup.imp(); let popup_imp = entry_imp.reset_wifi_popup.imp();
popup_imp popup_imp.reset_popup_entry.connect_activate(clone!(
.reset_popup_entry #[weak(rename_to = orig_entry)]
.connect_activate(clone!(@weak entry as orig_entry, @weak entry_imp => move |entry| { entry,
connect_new_network(orig_entry, entry_imp.access_point.clone().take(), entry.text().to_string()); #[weak]
})); entry_imp,
popup_imp.reset_popup_button.connect_clicked( move |entry| {
clone!(@weak entry as orig_entry,@weak entry_imp, @weak popup_imp => move |_| { connect_new_network(
let entry = entry_imp.reset_wifi_popup.imp().reset_popup_entry.text().to_string(); orig_entry,
connect_new_network(orig_entry, entry_imp.access_point.clone().take(), entry); entry_imp.access_point.clone().take(),
}), entry.text().to_string(),
); );
}
));
popup_imp.reset_popup_button.connect_clicked(clone!(
#[weak(rename_to = orig_entry)]
entry,
#[weak]
entry_imp,
move |_| {
let entry = entry_imp
.reset_wifi_popup
.imp()
.reset_popup_entry
.text()
.to_string();
connect_new_network(orig_entry, entry_imp.access_point.clone().take(), entry);
}
));
entry_imp.reset_wifi_popup.popup(); entry_imp.reset_wifi_popup.popup();
} }

View file

@ -76,7 +76,7 @@ pub fn access_point_changed_handler(wifi_box: Arc<WifiBox>, ir: AccessPointChang
entry_imp entry_imp
.reset_wifi_strength .reset_wifi_strength
.borrow() .borrow()
.set_from_icon_name(match strength { .set_icon_name(match strength {
WifiStrength::Excellent => Some("network-wireless-signal-excellent-symbolic"), WifiStrength::Excellent => Some("network-wireless-signal-excellent-symbolic"),
WifiStrength::Ok => Some("network-wireless-signal-ok-symbolic"), WifiStrength::Ok => Some("network-wireless-signal-ok-symbolic"),
WifiStrength::Weak => Some("network-wireless-signal-weak-symbolic"), WifiStrength::Weak => Some("network-wireless-signal-weak-symbolic"),

View file

@ -235,31 +235,45 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
let imp = wifi_options.imp(); let imp = wifi_options.imp();
// General // General
imp.reset_wifi_auto_connect imp.reset_wifi_auto_connect.connect_active_notify(clone!(
.connect_active_notify(clone!(@weak imp => move |x| { #[weak]
imp,
move |x| {
imp.connection.borrow_mut().settings.autoconnect = x.is_active(); imp.connection.borrow_mut().settings.autoconnect = x.is_active();
})); }
imp.reset_wifi_metered ));
.connect_active_notify(clone!(@weak imp => move |x| { imp.reset_wifi_metered.connect_active_notify(clone!(
#[weak]
imp,
move |x| {
imp.connection.borrow_mut().settings.metered = if x.is_active() { 1 } else { 2 }; imp.connection.borrow_mut().settings.metered = if x.is_active() { 1 } else { 2 };
})); }
imp.wifi_options_apply_button ));
.connect_clicked(clone!(@weak imp => move |_| { imp.wifi_options_apply_button.connect_clicked(clone!(
#[weak]
imp,
move |_| {
let prop = imp.connection.borrow().convert_to_propmap(); let prop = imp.connection.borrow().convert_to_propmap();
set_connection_settings(path.clone(), prop); set_connection_settings(path.clone(), prop);
})); }
));
// IPv4 // IPv4
let wifi_options_ip4 = wifi_options.clone(); let wifi_options_ip4 = wifi_options.clone();
imp.reset_ip4_method imp.reset_ip4_method.connect_selected_notify(clone!(
.connect_selected_notify(clone!(@weak imp => move |dropdown| { #[weak]
imp,
move |dropdown| {
let selected = dropdown.selected(); let selected = dropdown.selected();
let mut conn = imp.connection.borrow_mut(); let mut conn = imp.connection.borrow_mut();
conn.ipv4.method = DNSMethod4::from_i32(selected as i32); conn.ipv4.method = DNSMethod4::from_i32(selected as i32);
wifi_options_ip4.set_ip4_visibility(selected); wifi_options_ip4.set_ip4_visibility(selected);
})); }
));
imp.reset_ip4_dns imp.reset_ip4_dns.connect_changed(clone!(
.connect_changed(clone!(@weak imp => move |entry| { #[weak]
imp,
move |entry| {
let dns_input = entry.text(); let dns_input = entry.text();
let mut conn = imp.connection.borrow_mut(); let mut conn = imp.connection.borrow_mut();
conn.ipv4.dns.clear(); conn.ipv4.dns.clear();
@ -275,15 +289,21 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
imp.reset_ip4_dns.add_css_class("error"); imp.reset_ip4_dns.add_css_class("error");
} }
} }
})); }
imp.reset_ip4_address_add_button ));
.connect_clicked(clone!(@weak imp => move |_| { imp.reset_ip4_address_add_button.connect_clicked(clone!(
#[weak]
imp,
move |_| {
let address = &WifiAddressEntry::new(None, imp.connection.clone(), IPv4); let address = &WifiAddressEntry::new(None, imp.connection.clone(), IPv4);
imp.reset_ip4_address_group.add(address); imp.reset_ip4_address_group.add(address);
})); }
));
imp.reset_ip4_gateway imp.reset_ip4_gateway.connect_changed(clone!(
.connect_changed(clone!(@weak imp => move |entry| { #[weak]
imp,
move |entry| {
let gateway_input = entry.text(); let gateway_input = entry.text();
let mut conn = imp.connection.borrow_mut(); let mut conn = imp.connection.borrow_mut();
conn.ipv4.gateway.clear(); conn.ipv4.gateway.clear();
@ -297,19 +317,25 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
} else { } else {
imp.reset_ip4_gateway.add_css_class("error"); imp.reset_ip4_gateway.add_css_class("error");
} }
})); }
));
// IPv6 // IPv6
let wifi_options_ip6 = wifi_options.clone(); let wifi_options_ip6 = wifi_options.clone();
imp.reset_ip6_method imp.reset_ip6_method.connect_selected_notify(clone!(
.connect_selected_notify(clone!(@weak imp => move |dropdown| { #[weak]
imp,
move |dropdown| {
let selected = dropdown.selected(); let selected = dropdown.selected();
let mut conn = imp.connection.borrow_mut(); let mut conn = imp.connection.borrow_mut();
conn.ipv6.method = DNSMethod6::from_i32(selected as i32); conn.ipv6.method = DNSMethod6::from_i32(selected as i32);
wifi_options_ip6.set_ip6_visibility(selected); wifi_options_ip6.set_ip6_visibility(selected);
})); }
));
imp.reset_ip6_dns imp.reset_ip6_dns.connect_changed(clone!(
.connect_changed(clone!(@weak imp => move |entry| { #[weak]
imp,
move |entry| {
let dns_input = entry.text(); let dns_input = entry.text();
let mut conn = imp.connection.borrow_mut(); let mut conn = imp.connection.borrow_mut();
conn.ipv6.dns.clear(); conn.ipv6.dns.clear();
@ -325,15 +351,21 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
imp.reset_ip6_dns.add_css_class("error"); imp.reset_ip6_dns.add_css_class("error");
} }
} }
})); }
imp.reset_ip6_address_add_button ));
.connect_clicked(clone!(@weak imp => move |_| { imp.reset_ip6_address_add_button.connect_clicked(clone!(
#[weak]
imp,
move |_| {
let address = &WifiAddressEntry::new(None, imp.connection.clone(), IPv4); let address = &WifiAddressEntry::new(None, imp.connection.clone(), IPv4);
imp.reset_ip6_address_group.add(address); imp.reset_ip6_address_group.add(address);
})); }
));
imp.reset_ip6_gateway imp.reset_ip6_gateway.connect_changed(clone!(
.connect_changed(clone!(@weak imp => move |entry| { #[weak]
imp,
move |entry| {
let gateway_input = entry.text(); let gateway_input = entry.text();
let mut conn = imp.connection.borrow_mut(); let mut conn = imp.connection.borrow_mut();
conn.ipv6.gateway.clear(); conn.ipv6.gateway.clear();
@ -347,31 +379,40 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
} else { } else {
imp.reset_ip6_gateway.add_css_class("error"); imp.reset_ip6_gateway.add_css_class("error");
} }
})); }
));
// Security // Security
imp.reset_wifi_security_dropdown imp.reset_wifi_security_dropdown
.connect_selected_notify(clone!(@weak imp => move |dropdown| { .connect_selected_notify(clone!(
let selected = dropdown.selected(); #[weak]
let mut conn = imp.connection.borrow_mut(); imp,
move |dropdown| {
let selected = dropdown.selected();
let mut conn = imp.connection.borrow_mut();
match selected { match selected {
0 => { // None 0 => {
imp.reset_wifi_password.set_visible(false); // None
conn.security.key_management = KeyManagement::NONE; imp.reset_wifi_password.set_visible(false);
conn.security.authentication_algorithm = String::from("none"); conn.security.key_management = KeyManagement::NONE;
}, conn.security.authentication_algorithm = String::from("none");
1 => { // WPA/WPA2 Personal }
imp.reset_wifi_password.set_visible(true); 1 => {
conn.security.key_management = KeyManagement::WPAPSK; // WPA/WPA2 Personal
conn.security.authentication_algorithm = String::from("none"); imp.reset_wifi_password.set_visible(true);
}, conn.security.key_management = KeyManagement::WPAPSK;
_ => {} conn.security.authentication_algorithm = String::from("none");
}
_ => {}
}
} }
})); ));
imp.reset_wifi_password imp.reset_wifi_password.connect_changed(clone!(
.connect_changed(clone!(@weak imp => move |entry| { #[weak]
imp,
move |entry| {
let password_input = entry.text(); let password_input = entry.text();
if password_input.len() < 8 && !password_input.is_empty() { if password_input.len() < 8 && !password_input.is_empty() {
entry.add_css_class("error"); entry.add_css_class("error");
@ -380,7 +421,8 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
} }
let mut conn = imp.connection.borrow_mut(); let mut conn = imp.connection.borrow_mut();
conn.security.psk = password_input.to_string(); conn.security.psk = password_input.to_string();
})); }
));
imp.reset_available_networks.set_activatable(true); imp.reset_available_networks.set_activatable(true);
imp.reset_available_networks imp.reset_available_networks

View file

@ -54,89 +54,115 @@ impl WifiRouteEntry {
fn setup_callbacks(&self, connection: Rc<RefCell<Connection>>) { fn setup_callbacks(&self, connection: Rc<RefCell<Connection>>) {
let self_imp = self.imp(); let self_imp = self.imp();
let conn = connection.clone(); let conn = connection.clone();
self_imp.reset_route_address.connect_changed(clone!(@weak self_imp => move |entry| { self_imp.reset_route_address.connect_changed(clone!(
let address_input = entry.text(); #[weak]
let mut conn = conn.borrow_mut(); self_imp,
move |entry| {
let address_input = entry.text();
let mut conn = conn.borrow_mut();
if address_input.is_empty() { if address_input.is_empty() {
self_imp.reset_route_address.remove_css_class("error");
self_imp.reset_route_row.set_title("Add new address");
return;
}
let result = match self_imp.protocol.get() {
IpProtocol::IPv4 => Ipv4Addr::from_str(address_input.as_str()).map(IpAddr::V4),
IpProtocol::IPv6 => Ipv6Addr::from_str(address_input.as_str()).map(IpAddr::V6),
};
match result {
Ok(ip_addr) => {
self_imp.reset_route_address.remove_css_class("error"); self_imp.reset_route_address.remove_css_class("error");
let address_data = match self_imp.protocol.get() { self_imp.reset_route_row.set_title("Add new address");
IpProtocol::IPv4 => &mut conn.ipv4.route_data, return;
IpProtocol::IPv6 => &mut conn.ipv6.route_data,
};
address_data.push(Address::new(ip_addr.to_string(), self_imp.prefix.get().1 as u32,self_imp.gateway.borrow().clone() ,self_imp.metric.get()));
*self_imp.address.borrow_mut() = (true, ip_addr.to_string());
} }
Err(_) => { let result = match self_imp.protocol.get() {
self_imp.reset_route_address.add_css_class("error"); IpProtocol::IPv4 => Ipv4Addr::from_str(address_input.as_str()).map(IpAddr::V4),
*self_imp.address.borrow_mut() = (false, String::default()); IpProtocol::IPv6 => Ipv6Addr::from_str(address_input.as_str()).map(IpAddr::V6),
};
match result {
Ok(ip_addr) => {
self_imp.reset_route_address.remove_css_class("error");
let address_data = match self_imp.protocol.get() {
IpProtocol::IPv4 => &mut conn.ipv4.route_data,
IpProtocol::IPv6 => &mut conn.ipv6.route_data,
};
address_data.push(Address::new(
ip_addr.to_string(),
self_imp.prefix.get().1,
self_imp.gateway.borrow().clone(),
self_imp.metric.get(),
));
*self_imp.address.borrow_mut() = (true, ip_addr.to_string());
}
Err(_) => {
self_imp.reset_route_address.add_css_class("error");
*self_imp.address.borrow_mut() = (false, String::default());
}
} }
}
set_row_title(&self_imp);
}));
let conn = connection.clone();
self_imp.reset_route_prefix.connect_changed(clone!(@weak self_imp => move |entry| {
let prefix_input = entry.text();
let prefix = prefix_input.parse::<u8>();
let mut conn = conn.borrow_mut();
let handle_error = || {
if self_imp.reset_route_prefix.text().is_empty() {
self_imp.reset_route_prefix.remove_css_class("error");
} else {
self_imp.reset_route_prefix.add_css_class("error");
}
self_imp.prefix.set((false, 0));
set_row_title(&self_imp); set_row_title(&self_imp);
};
if prefix_input.is_empty() || prefix.is_err() {
handle_error();
return;
} }
));
let prefix = prefix.unwrap();
match self_imp.protocol.get() {
IpProtocol::IPv4 if prefix <= 32 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_route_prefix.remove_css_class("error");
if let Ok(address2) = Ipv4Addr::from_str(self_imp.reset_route_address.text().as_str()) {
if let Some(addr) = conn.ipv4.route_data.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string()) {
addr.prefix = prefix as u32;
}
}
}
IpProtocol::IPv6 if prefix <= 128 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_route_prefix.remove_css_class("error");
if let Ok(address2) = Ipv6Addr::from_str(self_imp.reset_route_address.text().as_str()) {
if let Some(addr) = conn.ipv6.route_data.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string()) {
addr.prefix = prefix as u32;
}
}
}
_ => handle_error()
}
set_row_title(&self_imp);
}));
let conn = connection.clone(); let conn = connection.clone();
self_imp self_imp.reset_route_prefix.connect_changed(clone!(
.reset_route_gateway #[weak]
.connect_changed(clone!(@weak self_imp => move |entry| { self_imp,
move |entry| {
let prefix_input = entry.text();
let prefix = prefix_input.parse::<u8>();
let mut conn = conn.borrow_mut();
let handle_error = || {
if self_imp.reset_route_prefix.text().is_empty() {
self_imp.reset_route_prefix.remove_css_class("error");
} else {
self_imp.reset_route_prefix.add_css_class("error");
}
self_imp.prefix.set((false, 0));
set_row_title(&self_imp);
};
if prefix_input.is_empty() || prefix.is_err() {
handle_error();
return;
}
let prefix = prefix.unwrap();
match self_imp.protocol.get() {
IpProtocol::IPv4 if prefix <= 32 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_route_prefix.remove_css_class("error");
if let Ok(address2) =
Ipv4Addr::from_str(self_imp.reset_route_address.text().as_str())
{
if let Some(addr) = conn
.ipv4
.route_data
.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string())
{
addr.prefix = prefix as u32;
}
}
}
IpProtocol::IPv6 if prefix <= 128 => {
self_imp.prefix.set((true, prefix as u32));
self_imp.reset_route_prefix.remove_css_class("error");
if let Ok(address2) =
Ipv6Addr::from_str(self_imp.reset_route_address.text().as_str())
{
if let Some(addr) = conn
.ipv6
.route_data
.iter_mut()
.find(|conn_addr| *conn_addr.address == address2.to_string())
{
addr.prefix = prefix as u32;
}
}
}
_ => handle_error(),
}
set_row_title(&self_imp);
}
));
let conn = connection.clone();
self_imp.reset_route_gateway.connect_changed(clone!(
#[weak]
self_imp,
move |entry| {
let gateway_input = entry.text(); let gateway_input = entry.text();
let mut conn = conn.borrow_mut(); let mut conn = conn.borrow_mut();
@ -157,8 +183,9 @@ impl WifiRouteEntry {
IpProtocol::IPv4 => &mut conn.ipv4.route_data, IpProtocol::IPv4 => &mut conn.ipv4.route_data,
IpProtocol::IPv6 => &mut conn.ipv6.route_data, IpProtocol::IPv6 => &mut conn.ipv6.route_data,
}; };
if let Some(address) = address_data.iter_mut() if let Some(address) = address_data.iter_mut().find(|conn_addr| {
.find(|conn_addr| *conn_addr.address == self_imp.reset_route_address.text()) { *conn_addr.address == self_imp.reset_route_address.text()
}) {
address.gateway = Some(ip_addr.to_string()); address.gateway = Some(ip_addr.to_string());
} }
*self_imp.gateway.borrow_mut() = Some(ip_addr.to_string()); *self_imp.gateway.borrow_mut() = Some(ip_addr.to_string());
@ -169,12 +196,14 @@ impl WifiRouteEntry {
} }
} }
set_row_subtitle(&self_imp); set_row_subtitle(&self_imp);
})); }
));
let conn = connection.clone(); let conn = connection.clone();
self_imp self_imp.reset_route_metric.connect_changed(clone!(
.reset_route_metric #[weak]
.connect_changed(clone!(@weak self_imp => move |entry| { self_imp,
move |entry| {
let metric_input = entry.text(); let metric_input = entry.text();
let mut conn = conn.borrow_mut(); let mut conn = conn.borrow_mut();
@ -192,8 +221,9 @@ impl WifiRouteEntry {
IpProtocol::IPv4 => &mut conn.ipv4.route_data, IpProtocol::IPv4 => &mut conn.ipv4.route_data,
IpProtocol::IPv6 => &mut conn.ipv6.route_data, IpProtocol::IPv6 => &mut conn.ipv6.route_data,
}; };
if let Some(address) = address_data.iter_mut() if let Some(address) = address_data.iter_mut().find(|conn_addr| {
.find(|conn_addr| *conn_addr.address == self_imp.reset_route_address.text()) { *conn_addr.address == self_imp.reset_route_address.text()
}) {
address.metric = Some(metric); address.metric = Some(metric);
} }
self_imp.metric.set(Some(metric)); self_imp.metric.set(Some(metric));
@ -204,7 +234,8 @@ impl WifiRouteEntry {
} }
} }
set_row_subtitle(&self_imp); set_row_subtitle(&self_imp);
})); }
));
} }
} }

View file

@ -62,12 +62,12 @@ impl ReSetWindow {
self_imp.reset_sidebar_breakpoint.add_setter( self_imp.reset_sidebar_breakpoint.add_setter(
&Object::from(self_imp.reset_overlay_split_view.get()), &Object::from(self_imp.reset_overlay_split_view.get()),
"collapsed", "collapsed",
&true.to_value(), Some(&true.to_value()),
); );
self_imp.reset_sidebar_breakpoint.add_setter( self_imp.reset_sidebar_breakpoint.add_setter(
&Object::from(self_imp.reset_sidebar_toggle.get()), &Object::from(self_imp.reset_sidebar_toggle.get()),
"visible", "visible",
&true.to_value(), Some(&true.to_value()),
); );
} }
@ -202,11 +202,13 @@ impl ReSetWindow {
self_imp.position.clone(), self_imp.position.clone(),
); );
self_imp self_imp.reset_sidebar_list.connect_row_activated(clone!(
.reset_sidebar_list #[weak]
.connect_row_activated(clone!(@ weak self_imp => move |_, _| { self_imp,
move |_, _| {
self_imp.reset_search_entry.set_text(""); self_imp.reset_search_entry.set_text("");
})); }
));
let mut i = 0; let mut i = 0;
for info in sidebar_list { for info in sidebar_list {
if info.parent.is_none() && i != 0 { if info.parent.is_none() && i != 0 {

View file

@ -18,7 +18,7 @@ impl SidebarEntry {
entry_imp.reset_sidebar_label.get().set_text(info.name()); entry_imp.reset_sidebar_label.get().set_text(info.name());
entry_imp entry_imp
.reset_sidebar_image .reset_sidebar_image
.set_from_icon_name(Some(info.icon_name())); .set_icon_name(Some(info.icon_name()));
if let Some(boxes) = info.plugin_boxes() { if let Some(boxes) = info.plugin_boxes() {
entry_imp.plugin_boxes.borrow_mut().extend(boxes); entry_imp.plugin_boxes.borrow_mut().extend(boxes);
} }