From 55dc777bb31c83138c3c18963d1ae27a33c4a39f Mon Sep 17 00:00:00 2001 From: Michael Murphy Date: Mon, 29 Jan 2024 20:14:57 +0100 Subject: [PATCH] improv: update libcosmic with wallpaper page UI improvements --- Cargo.lock | 517 +++++++++++++------ Cargo.toml | 3 +- app/Cargo.toml | 6 +- app/src/app.rs | 130 +---- app/src/pages/desktop/appearance.rs | 4 +- app/src/pages/desktop/display/mod.rs | 4 +- app/src/pages/desktop/panel/applets_inner.rs | 24 +- app/src/pages/desktop/panel/inner.rs | 2 +- app/src/pages/desktop/wallpaper/mod.rs | 236 +++++---- i18n/cs/cosmic_settings.ftl | 3 - i18n/en/cosmic_settings.ftl | 3 +- page/Cargo.toml | 2 +- pages/desktop/Cargo.toml | 4 +- pages/desktop/src/wallpaper.rs | 4 +- pages/system/Cargo.toml | 2 +- pages/time/src/lib.rs | 10 +- rust-toolchain.toml | 2 +- 17 files changed, 533 insertions(+), 423 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index af8ab84..e90301e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -309,9 +309,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744" +checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" dependencies = [ "async-lock 3.3.0", "cfg-if", @@ -380,7 +380,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" dependencies = [ - "async-io 2.3.0", + "async-io 2.3.1", "async-lock 2.8.0", "atomic-waker", "cfg-if", @@ -409,6 +409,18 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "atk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -590,9 +602,9 @@ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-unit" -version = "5.1.3" +version = "5.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbda27216be70d08546aa506cecabce0c5eb0d494aaaedbd7ec82c8ae1a60b46" +checksum = "33ac19bdf0b2665407c39d82dbc937e951e7e2001609f0fb32edd0af45a2d63e" dependencies = [ "rust_decimal", "serde", @@ -623,9 +635,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9" dependencies = [ "bytemuck_derive", ] @@ -653,6 +665,16 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "libc", + "system-deps", +] + [[package]] name = "calendrical_calculations" version = "0.1.0" @@ -685,8 +707,8 @@ checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ "calloop", "rustix 0.38.30", - "wayland-backend 0.3.2", - "wayland-client 0.31.1", + "wayland-backend 0.3.3", + "wayland-client 0.31.2", ] [[package]] @@ -709,6 +731,16 @@ dependencies = [ "uuid", ] +[[package]] +name = "cfg-expr" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -870,6 +902,26 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-random" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + [[package]] name = "const_format" version = "0.2.32" @@ -960,13 +1012,13 @@ source = "git+https://github.com/pop-os/cosmic-protocols?rev=e65fa5e#e65fa5e2bb4 dependencies = [ "cosmic-protocols", "smithay-client-toolkit 0.18.0", - "wayland-client 0.31.1", + "wayland-client 0.31.2", ] [[package]] name = "cosmic-comp-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-comp#44bf1c316f3ca417c76fb45ec3f5e7efb6388e25" +source = "git+https://github.com/pop-os/cosmic-comp#ce74675b0ebc23e9bf547b9315450fd74d7ae49c" dependencies = [ "cosmic-config", "input", @@ -976,23 +1028,25 @@ dependencies = [ [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "atomicwrites", "calloop", "cosmic-config-derive", "dirs 5.0.1", "iced_futures", + "known-folders", "notify", "once_cell", "ron", "serde", + "xdg", ] [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "quote", "syn 1.0.109", @@ -1001,12 +1055,13 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#0b9dcfe06ff5642420278ce097bb65874ffdeff4" +source = "git+https://github.com/pop-os/cosmic-panel#f7c57a093ff88c6b403aad136ec45f15f73edb5e" dependencies = [ "anyhow", "cosmic-config", "ron", "serde", + "smithay-client-toolkit 0.18.0", "tracing", "wayland-protocols-wlr", "xdg-shell-wrapper-config", @@ -1018,10 +1073,10 @@ version = "0.1.0" source = "git+https://github.com/pop-os/cosmic-protocols?rev=e65fa5e#e65fa5e2bb47e51656221657049bd3f88ae9dae5" dependencies = [ "bitflags 2.4.2", - "wayland-backend 0.3.2", - "wayland-client 0.31.1", - "wayland-protocols 0.31.0", - "wayland-scanner 0.31.0", + "wayland-backend 0.3.3", + "wayland-client 0.31.2", + "wayland-protocols 0.31.2", + "wayland-scanner 0.31.1", "wayland-server", ] @@ -1063,7 +1118,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "image", - "itertools 0.12.0", + "itertools 0.12.1", "itoa", "libcosmic", "log", @@ -1096,7 +1151,7 @@ dependencies = [ "smithay-client-toolkit 0.18.0", "tokio", "tracing", - "wayland-client 0.31.1", + "wayland-client 0.31.2", ] [[package]] @@ -1138,7 +1193,7 @@ dependencies = [ [[package]] name = "cosmic-text" version = "0.10.0" -source = "git+https://github.com/pop-os/cosmic-text.git#6aadfaddac7ae68c3f97c0b9b2fa75033374a650" +source = "git+https://github.com/pop-os/cosmic-text.git#e0ae465f918cd1cffca3a8239547dcf8166d3f77" dependencies = [ "bitflags 2.4.2", "fontdb", @@ -1160,7 +1215,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "almost", "cosmic-config", @@ -1378,15 +1433,6 @@ dependencies = [ "dirs-sys 0.3.7", ] -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys 0.3.7", -] - [[package]] name = "dirs" version = "5.0.1" @@ -1419,6 +1465,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + [[package]] name = "displaydoc" version = "0.2.4" @@ -1441,9 +1493,12 @@ dependencies = [ [[package]] name = "dlv-list" -version = "0.3.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] [[package]] name = "downcast-rs" @@ -1776,11 +1831,11 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fontconfig-parser" -version = "0.5.3" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "674e258f4b5d2dcd63888c01c68413c51f565e8af99d2f7701c7b81d79ef41c4" +checksum = "6a595cb550439a117696039dfc69830492058211b771a2a165379f2a1a53d84d" dependencies = [ - "roxmltree 0.18.1", + "roxmltree", ] [[package]] @@ -1791,7 +1846,7 @@ checksum = "98b88c54a38407f7352dd2c4238830115a6377741098ffd1f997c813d0e088a6" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.9.3", + "memmap2 0.9.4", "slotmap", "tinyvec", "ttf-parser", @@ -1858,11 +1913,11 @@ dependencies = [ [[package]] name = "freedesktop-icons" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9d46a9ae065c46efb83854bb10315de6d333bb6f4526ebe320c004dab7857e" +checksum = "b5339cbd60b2ff6b95ef212ab96bc80bf1a9dff2821b9966c417cdfae2808796" dependencies = [ - "dirs 4.0.0", + "dirs 5.0.1", "once_cell", "rust-ini", "thiserror", @@ -2002,6 +2057,36 @@ dependencies = [ "slab", ] +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + [[package]] name = "generator" version = "0.7.5" @@ -2084,6 +2169,19 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + [[package]] name = "gl_generator" version = "0.14.0" @@ -2101,6 +2199,16 @@ version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + [[package]] name = "glow" version = "0.13.1" @@ -2133,6 +2241,17 @@ dependencies = [ "wgpu", ] +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + [[package]] name = "gpu-alloc" version = "0.6.0" @@ -2192,6 +2311,24 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df00eed8d1f0db937f6be10e46e8072b0671accb504cf0f959c5c52c679f5b9" +[[package]] +name = "gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + [[package]] name = "guillotiere" version = "0.6.2" @@ -2343,7 +2480,7 @@ dependencies = [ [[package]] name = "iced" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "iced_accessibility", "iced_core", @@ -2358,7 +2495,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "accesskit", "accesskit_unix", @@ -2367,7 +2504,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "bitflags 1.3.2", "iced_accessibility", @@ -2385,7 +2522,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "futures", "iced_core", @@ -2398,7 +2535,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "bitflags 1.3.2", "bytemuck", @@ -2421,7 +2558,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2434,7 +2571,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "iced_accessibility", "iced_core", @@ -2446,7 +2583,7 @@ dependencies = [ [[package]] name = "iced_sctk" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "enum-repr", "float-cmp", @@ -2462,15 +2599,15 @@ dependencies = [ "smithay-clipboard", "thiserror", "tracing", - "wayland-backend 0.3.2", - "wayland-protocols 0.31.0", + "wayland-backend 0.3.3", + "wayland-protocols 0.31.2", "xkeysym", ] [[package]] name = "iced_style" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "iced_core", "once_cell", @@ -2480,7 +2617,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "bytemuck", "cosmic-text", @@ -2498,7 +2635,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "bitflags 1.3.2", "bytemuck", @@ -2518,7 +2655,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "iced_renderer", "iced_runtime", @@ -2684,9 +2821,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "433de089bd45971eecf4668ee0ee8f4cec17db4f8bd8f7bc3197a6ce37aa7d9b" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -2737,12 +2874,9 @@ dependencies = [ [[package]] name = "input-sys" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f6c2a17e8aba7217660e32863af87b0febad811d4b8620ef76b386603fddc2" -dependencies = [ - "libc", -] +checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" [[package]] name = "instant" @@ -2800,9 +2934,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] @@ -2868,6 +3002,15 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "known-folders" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4397c789f2709d23cfcb703b316e0766a8d4b17db2d47b0ab096ef6047cae1d8" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "kqueue" version = "1.0.8" @@ -2918,7 +3061,7 @@ checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#994e93d6d2f90f947d56376094eb19877d708063" +source = "git+https://github.com/pop-os/libcosmic#1291a48d4d62f1da5ca178292a3ce0082204d8d4" dependencies = [ "apply", "ashpd", @@ -2940,6 +3083,7 @@ dependencies = [ "iced_widget", "lazy_static", "palette", + "rfd", "ron", "serde", "slotmap", @@ -3048,9 +3192,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lru" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2994eeba8ed550fd9b47a0b38f0242bc3344e496483c6180b69139cc2fa5d1d7" +checksum = "db2c024b41519440580066ba82aab04092b333e09066a5eb86c7c4890df31f22" dependencies = [ "hashbrown 0.14.3", ] @@ -3142,9 +3286,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45fd3a57831bf88bc63f8cebc0cf956116276e97fef3966103e96416209f7c92" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] @@ -3509,12 +3653,12 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-multimap" -version = "0.4.3" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" +checksum = "a4d6a8c22fc714f0c2373e6091bf6f5e9b37b1bc0b1184874b7e0a4e303d318f" dependencies = [ "dlv-list", - "hashbrown 0.12.3", + "hashbrown 0.14.3", ] [[package]] @@ -3565,9 +3709,9 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "palette" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e2f34147767aa758aa649415b50a69eeb46a67f9dc7db8011eeb3d84b351dc" +checksum = "3d38e6e5ca1612e2081cc31188f08c3cba630ce4ba44709a153f1a0f38d678f2" dependencies = [ "approx", "fast-srgb8", @@ -3578,15 +3722,27 @@ dependencies = [ [[package]] name = "palette_derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7db010ec5ff3d4385e4f133916faacd9dad0f6a09394c92d825b3aed310fa0a" +checksum = "e05d1c929301fee6830dafa764341118829b2535c216b0571e3821ecac5c885b" dependencies = [ "proc-macro2", "quote", "syn 2.0.48", ] +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "parking" version = "2.2.0" @@ -3703,18 +3859,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" dependencies = [ "proc-macro2", "quote", @@ -3850,9 +4006,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -3903,9 +4059,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] @@ -4030,9 +4186,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", @@ -4042,9 +4198,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", @@ -4089,6 +4245,30 @@ dependencies = [ "usvg", ] +[[package]] +name = "rfd" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0d8ab342bcc5436e04d3a4c1e09e17d74958bfaddf8d5fad6f85607df0f994f" +dependencies = [ + "ashpd", + "block", + "dispatch", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.48.0", +] + [[package]] name = "rgb" version = "0.8.37" @@ -4139,15 +4319,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "roxmltree" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862340e351ce1b271a378ec53f304a5558f7db87f3769dc655a8f6ecbb68b302" -dependencies = [ - "xmlparser", -] - [[package]] name = "roxmltree" version = "0.19.0" @@ -4190,9 +4361,9 @@ dependencies = [ [[package]] name = "rust-ini" -version = "0.18.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" dependencies = [ "cfg-if", "ordered-multimap", @@ -4326,18 +4497,18 @@ checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba" [[package]] name = "serde" -version = "1.0.195" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ "proc-macro2", "quote", @@ -4346,9 +4517,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ "itoa", "ryu", @@ -4462,9 +4633,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "smithay-client-toolkit" @@ -4496,17 +4667,17 @@ dependencies = [ "cursor-icon", "libc", "log", - "memmap2 0.9.3", + "memmap2 0.9.4", "pkg-config", "rustix 0.38.30", "thiserror", - "wayland-backend 0.3.2", - "wayland-client 0.31.1", + "wayland-backend 0.3.3", + "wayland-client 0.31.2", "wayland-csd-frame", - "wayland-cursor 0.31.0", - "wayland-protocols 0.31.0", + "wayland-cursor 0.31.1", + "wayland-protocols 0.31.2", "wayland-protocols-wlr", - "wayland-scanner 0.31.0", + "wayland-scanner 0.31.1", "xkbcommon", "xkeysym", ] @@ -4556,15 +4727,15 @@ dependencies = [ "foreign-types", "js-sys", "log", - "memmap2 0.9.3", + "memmap2 0.9.4", "objc", "raw-window-handle", "redox_syscall 0.4.1", "rustix 0.38.30", "tiny-xlib", "wasm-bindgen", - "wayland-backend 0.3.2", - "wayland-client 0.31.1", + "wayland-backend 0.3.3", + "wayland-client 0.31.2", "wayland-sys 0.31.1", "web-sys", "windows-sys 0.48.0", @@ -4741,6 +4912,19 @@ dependencies = [ "windows 0.52.0", ] +[[package]] +name = "system-deps" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.8", + "version-compare", +] + [[package]] name = "taffy" version = "0.3.11" @@ -4758,6 +4942,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[package]] +name = "target-lexicon" +version = "0.12.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" + [[package]] name = "temp-dir" version = "0.1.12" @@ -4836,6 +5026,15 @@ dependencies = [ "zbus", ] +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tiny-skia" version = "0.11.3" @@ -5213,7 +5412,7 @@ dependencies = [ "imagesize", "kurbo", "log", - "roxmltree 0.19.0", + "roxmltree", "simplecss", "siphasher", "svgtypes", @@ -5262,9 +5461,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" [[package]] name = "valuable" @@ -5272,6 +5471,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + [[package]] name = "version_check" version = "0.9.4" @@ -5398,13 +5603,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19152ddd73f45f024ed4534d9ca2594e0ef252c1847695255dae47f34df9fbe4" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" dependencies = [ "cc", "downcast-rs", - "nix 0.26.4", + "rustix 0.38.30", "scoped-tls", "smallvec", "wayland-sys 0.31.1", @@ -5440,14 +5645,14 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.1" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca7d52347346f5473bf2f56705f360e8440873052e575e55890c4fa57843ed3" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" dependencies = [ "bitflags 2.4.2", - "nix 0.26.4", - "wayland-backend 0.3.2", - "wayland-scanner 0.31.0", + "rustix 0.38.30", + "wayland-backend 0.3.3", + "wayland-scanner 0.31.1", ] [[package]] @@ -5470,7 +5675,7 @@ checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ "bitflags 2.4.2", "cursor-icon", - "wayland-backend 0.3.2", + "wayland-backend 0.3.3", ] [[package]] @@ -5486,12 +5691,12 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44aa20ae986659d6c77d64d808a046996a932aa763913864dc40c359ef7ad5b" +checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" dependencies = [ - "nix 0.26.4", - "wayland-client 0.31.1", + "rustix 0.38.30", + "wayland-client 0.31.2", "xcursor", ] @@ -5521,14 +5726,14 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.31.0" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" dependencies = [ "bitflags 2.4.2", - "wayland-backend 0.3.2", - "wayland-client 0.31.1", - "wayland-scanner 0.31.0", + "wayland-backend 0.3.3", + "wayland-client 0.31.2", + "wayland-scanner 0.31.1", "wayland-server", ] @@ -5539,10 +5744,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" dependencies = [ "bitflags 2.4.2", - "wayland-backend 0.3.2", - "wayland-client 0.31.1", - "wayland-protocols 0.31.0", - "wayland-scanner 0.31.0", + "wayland-backend 0.3.3", + "wayland-client 0.31.2", + "wayland-protocols 0.31.2", + "wayland-scanner 0.31.1", "wayland-server", ] @@ -5570,27 +5775,27 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8e28403665c9f9513202b7e1ed71ec56fde5c107816843fb14057910b2c09c" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" dependencies = [ "proc-macro2", - "quick-xml 0.30.0", + "quick-xml 0.31.0", "quote", ] [[package]] name = "wayland-server" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f3f0c52a445936ca1184c98f1a69cf4ad9c9130788884531ef04428468cb1ce" +checksum = "00e6e4d5c285bc24ba4ed2d5a4bd4febd5fd904451f465973225c8e99772fdb7" dependencies = [ "bitflags 2.4.2", "downcast-rs", "io-lifetimes 2.0.3", - "nix 0.26.4", - "wayland-backend 0.3.2", - "wayland-scanner 0.31.0", + "rustix 0.38.30", + "wayland-backend 0.3.3", + "wayland-scanner 0.31.1", ] [[package]] @@ -5639,9 +5844,9 @@ dependencies = [ [[package]] name = "weezl" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wgpu" @@ -5972,9 +6177,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.34" +version = "0.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +checksum = "1931d78a9c73861da0134f453bb1f790ce49b2e30eba8410b4b79bac72b46a2d" dependencies = [ "memchr", ] @@ -6045,7 +6250,7 @@ dependencies = [ [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/xdg-shell-wrapper#f2ca1c3dee8f66c40bdc91cb39de69a62aaaf22f" +source = "git+https://github.com/pop-os/xdg-shell-wrapper#b61b8ad1d679b306ae462b090514db728b4b93a4" dependencies = [ "serde", "wayland-protocols-wlr", @@ -6077,12 +6282,6 @@ version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" -[[package]] -name = "xmlparser" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" - [[package]] name = "xmlwriter" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index cd69490..d1e0fd3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,7 @@ [workspace] members = ["app", "page", "pages/*"] default-members = ["app"] +resolver = "2" [workspace.dependencies.libcosmic] git = "https://github.com/pop-os/libcosmic" @@ -26,5 +27,3 @@ rev = "2e9bf9f" [profile.release] opt-level = 3 -# debug = true -# lto = "thin" diff --git a/app/Cargo.toml b/app/Cargo.toml index 6f46f46..f8fb8f5 100644 --- a/app/Cargo.toml +++ b/app/Cargo.toml @@ -2,7 +2,7 @@ name = "cosmic-settings" version = "0.1.0" edition = "2021" -license = "GPL-3.0-only" +license = "GPL-3.0" rust-version = "1.65.0" [dependencies] @@ -22,7 +22,7 @@ i18n-embed-fl = "0.7.0" itertools = "0.12.0" libcosmic = {workspace = true} once_cell = "1.19.0" -regex = "1.10.2" +regex = "1.10.3" rust-embed = "8.2.0" slotmap = "1.0.7" tokio = "1.35.1" @@ -38,7 +38,7 @@ freedesktop-desktop-entry = "0.5.0" notify = "6.1.1" anyhow = "1.0" image = "0.24.8" -serde = { version = "1.0.195", features = ["derive"] } +serde = { version = "1.0.196", features = ["derive"] } ashpd = { version = "0.6.8", default-features = false } ron = "0.8" static_init = "1.0.3" diff --git a/app/src/app.rs b/app/src/app.rs index d8035b4..10e93fb 100644 --- a/app/src/app.rs +++ b/app/src/app.rs @@ -18,9 +18,8 @@ use crate::subscription::desktop_files; use crate::widget::{page_title, search_header}; use crate::PageCommands; use cosmic::app::DbusActivationMessage; -use cosmic::dialog::file_chooser; use cosmic::iced::Subscription; -use cosmic::widget::row; +use cosmic::widget::{button, row, text_input}; use cosmic::{ app::{Command, Core}, cosmic_config::config_subscription, @@ -30,7 +29,7 @@ use cosmic::{ window, Length, }, prelude::*, - widget::{column, container, icon, nav_bar, scrollable, search, segmented_button, settings}, + widget::{column, container, icon, nav_bar, scrollable, segmented_button, settings}, Element, }; use cosmic_panel_config::CosmicPanelConfig; @@ -44,7 +43,6 @@ pub struct SettingsApp { active_page: page::Entity, config: Config, core: Core, - file_chooser: Option<(file_chooser::Sender, page::Entity)>, nav_model: nav_bar::Model, pages: page::Binder, search_active: bool, @@ -70,7 +68,6 @@ impl SettingsApp { #[derive(Clone, Debug)] pub enum Message { DesktopInfo, - FileChooser(FileChooser), Error(String), Page(page::Entity), PageMessage(crate::pages::Message), @@ -79,28 +76,12 @@ pub enum Message { SearchChanged(String), SearchClear, SearchSubmit, - Search(search::Message), SetWindowTitle, OpenContextDrawer(Cow<'static, str>), CloseContextDrawer, SetTheme(cosmic::theme::Theme), } -#[derive(Clone, Debug)] -pub enum FileChooser { - Closed, - Init(file_chooser::Sender), - Open { - title: String, - accept_label: String, - include_directories: bool, - modal: bool, - multiple_files: bool, - }, - Opened, - Selected(Vec), -} - impl cosmic::Application for SettingsApp { type Executor = cosmic::executor::single::Executor; type Flags = crate::Args; @@ -121,7 +102,6 @@ impl cosmic::Application for SettingsApp { active_page: page::Entity::default(), config: Config::new(), core, - file_chooser: None, nav_model: nav_bar::Model::default(), pages: page::Binder::default(), search_active: false, @@ -158,7 +138,7 @@ impl cosmic::Application for SettingsApp { let mut widgets = Vec::new(); widgets.push(if self.search_active { - cosmic::widget::text_input::search_input("", &self.search_input) + text_input::search_input("", &self.search_input) .width(Length::Fixed(240.0)) .id(self.search_id.clone()) .on_clear(Message::SearchClear) @@ -166,7 +146,11 @@ impl cosmic::Application for SettingsApp { .on_submit(Message::SearchSubmit) .into() } else { - cosmic::widget::search::button(Message::SearchActivate) + icon::from_name("system-search-symbolic") + .apply(button::icon) + .padding([0, 16]) + .on_press(Message::SearchActivate) + .into() }); widgets @@ -234,53 +218,19 @@ impl cosmic::Application for SettingsApp { Subscription::batch(vec![ window_break, desktop_files(0).map(|_| Message::DesktopInfo), - config_subscription(0, "com.system76.CosmicPanel.Panel".into(), 1).map( - |(_, e)| match e { - Ok(config) => Message::PanelConfig(config), - Err((errors, config)) => { - for why in errors { - tracing::error!(?why, "panel config load error"); - } - Message::PanelConfig(config) - } - }, - ), - config_subscription(0, "com.system76.CosmicPanel.Dock".into(), 1).map( - |(_, e)| match e { - Ok(config) => Message::PanelConfig(config), - Err((errors, config)) => { - for why in errors { - tracing::error!(?why, "dock config load error"); - } - Message::PanelConfig(config) - } - }, - ), - file_chooser::subscription(|response| match response { - file_chooser::Message::Closed => Message::FileChooser(FileChooser::Closed), - - file_chooser::Message::Opened => Message::FileChooser(FileChooser::Opened), - - file_chooser::Message::Selected(files) => { - Message::FileChooser(FileChooser::Selected(files.uris().to_owned())) + config_subscription(0, "com.system76.CosmicPanel.Panel".into(), 1).map(|update| { + for why in update.errors { + tracing::error!(?why, "panel config load error"); } - file_chooser::Message::Err(why) => { - let mut source: &dyn std::error::Error = &why; - let mut string = - format!("open dialog subscription errored\n cause: {source}"); - - while let Some(new_source) = source.source() { - string.push_str(&format!("\n cause: {new_source}")); - source = new_source; - } - - Message::Error(string) + Message::PanelConfig(update.config) + }), + config_subscription(0, "com.system76.CosmicPanel.Dock".into(), 1).map(|update| { + for why in update.errors { + tracing::error!(?why, "dock config load error"); } - file_chooser::Message::Init(sender) => { - Message::FileChooser(FileChooser::Init(sender)) - } + Message::PanelConfig(update.config) }), ]) } @@ -381,50 +331,6 @@ impl cosmic::Application for SettingsApp { } }, - Message::FileChooser(message) => match message { - FileChooser::Selected(files) => { - return self.pages.page[self.active_page] - .file_chooser(files) - .map(crate::app::Message::PageMessage) - .map(cosmic::app::Message::App) - } - - FileChooser::Closed => {} - - FileChooser::Opened => { - if let Some((sender, _)) = self.file_chooser.as_mut() { - return sender.response().map(|_| cosmic::app::Message::None); - } - } - - FileChooser::Open { - title, - accept_label, - include_directories, - modal, - multiple_files, - } => { - if let Some((sender, entity)) = self.file_chooser.as_mut() { - if let Some(dialog) = file_chooser::open_file() { - *entity = self.active_page; - - return dialog - .title(title) - .accept_label(accept_label) - .include_directories(include_directories) - .modal(modal) - .multiple_files(multiple_files) - .create(sender) - .map(|_| cosmic::app::message::none()); - } - } - } - - FileChooser::Init(sender) => { - self.file_chooser = Some((sender, page::Entity::default())); - } - }, - Message::PanelConfig(config) if config.name.to_lowercase().contains("panel") => { page::update!( self.pages, @@ -477,7 +383,7 @@ impl cosmic::Application for SettingsApp { } } - Message::PanelConfig(_) | Message::Search(_) => {} + Message::PanelConfig(_) => {} Message::SetTheme(t) => return cosmic::app::command::set_theme(t), diff --git a/app/src/pages/desktop/appearance.rs b/app/src/pages/desktop/appearance.rs index 324a60e..840408a 100644 --- a/app/src/pages/desktop/appearance.rs +++ b/app/src/pages/desktop/appearance.rs @@ -719,7 +719,9 @@ impl Page { let Ok(path) = f.to_file_path() else { return Command::none(); }; - let Ok(builder) = ron::ser::to_string_pretty(&self.theme_builder, PrettyConfig::default()) else { + let Ok(builder) = + ron::ser::to_string_pretty(&self.theme_builder, PrettyConfig::default()) + else { return Command::none(); }; Command::perform( diff --git a/app/src/pages/desktop/display/mod.rs b/app/src/pages/desktop/display/mod.rs index a3a7bdd..2a14534 100644 --- a/app/src/pages/desktop/display/mod.rs +++ b/app/src/pages/desktop/display/mod.rs @@ -386,7 +386,7 @@ impl Page { /// View for the display configuration section. pub fn display_view(&self) -> Element { let Some(&active_id) = self.display_tabs.active_data::() else { - return column().into() + return column().into(); }; let active_output = &self.list.outputs[active_id]; @@ -467,7 +467,7 @@ impl Page { for (name, id) in sorted_outputs { let Some(output) = self.list.outputs.get(id) else { - continue + continue; }; let inches = diff --git a/app/src/pages/desktop/panel/applets_inner.rs b/app/src/pages/desktop/panel/applets_inner.rs index 3bd28e4..ab75dce 100644 --- a/app/src/pages/desktop/panel/applets_inner.rs +++ b/app/src/pages/desktop/panel/applets_inner.rs @@ -351,7 +351,13 @@ impl Page { return Command::none(); }; let Some((list, _)) = config.plugins_wings.as_mut() else { - config.plugins_wings = Some((start_list.into_iter().map(|a: Applet| a.id.into()).collect(), Vec::new())); + config.plugins_wings = Some(( + start_list + .into_iter() + .map(|a: Applet| a.id.into()) + .collect(), + Vec::new(), + )); return Command::none(); }; *list = start_list.into_iter().map(|a| a.id.into()).collect(); @@ -361,7 +367,12 @@ impl Page { return Command::none(); }; let Some(list) = config.plugins_center.as_mut() else { - config.plugins_center = Some(center_list.into_iter().map(|a: Applet| a.id.into()).collect()); + config.plugins_center = Some( + center_list + .into_iter() + .map(|a: Applet| a.id.into()) + .collect(), + ); return Command::none(); }; *list = center_list.into_iter().map(|a| a.id.into()).collect(); @@ -371,7 +382,10 @@ impl Page { return Command::none(); }; let Some((_, list)) = config.plugins_wings.as_mut() else { - config.plugins_wings = Some((Vec::new(), end_list.into_iter().map(|a: Applet| a.id.into()).collect())); + config.plugins_wings = Some(( + Vec::new(), + end_list.into_iter().map(|a: Applet| a.id.into()).collect(), + )); return Command::none(); }; *list = end_list.into_iter().map(|a| a.id.into()).collect(); @@ -504,9 +518,7 @@ pub fn lists< Section::default().view::

(move |_binder, page, _section| { let page = page.inner(); let Some(config) = page.current_config.as_ref() else { - return Element::from( - text(fl!("unknown")) - ); + return Element::from(text(fl!("unknown"))); }; let button = button::standard(fl!("add-applet")); diff --git a/app/src/pages/desktop/panel/inner.rs b/app/src/pages/desktop/panel/inner.rs index 41adce4..01bc1ac 100644 --- a/app/src/pages/desktop/panel/inner.rs +++ b/app/src/pages/desktop/panel/inner.rs @@ -350,7 +350,7 @@ impl PageInner { pub fn update(&mut self, message: Message) { let helper = self.config_helper.as_ref().unwrap(); let Some(mut panel_config) = self.panel_config.as_mut() else { - return + return; }; match message { diff --git a/app/src/pages/desktop/wallpaper/mod.rs b/app/src/pages/desktop/wallpaper/mod.rs index d67abf9..4da640e 100644 --- a/app/src/pages/desktop/wallpaper/mod.rs +++ b/app/src/pages/desktop/wallpaper/mod.rs @@ -5,6 +5,7 @@ mod config; pub mod widgets; pub use config::Config; +use url::Url; use std::{ collections::HashMap, @@ -13,12 +14,15 @@ use std::{ }; use apply::Apply; -use cosmic::widget::{ - button, dropdown, list_column, row, - segmented_button::{self, SingleSelectModel}, - segmented_selection, settings, text, toggler, -}; use cosmic::{command, Command}; +use cosmic::{ + dialog::file_chooser, + widget::{ + button, dropdown, list_column, row, + segmented_button::{self, SingleSelectModel}, + settings, text, toggler, view_switcher, + }, +}; use cosmic::{ iced::{wayland::actions::window::SctkWindowSettings, window, Color, Length}, prelude::CollectionWidget, @@ -45,8 +49,7 @@ use slotmap::{DefaultKey, SecondaryMap, SlotMap}; use static_init::dynamic; const FIT: usize = 0; -const STRETCH: usize = 1; -const ZOOM: usize = 2; +const ZOOM: usize = 1; const SIMULATED_WIDTH: u16 = 300; const SIMULATED_HEIGHT: u16 = 169; @@ -63,6 +66,10 @@ pub type Image = ImageBuffer, Vec>; /// Messages for the wallpaper view. #[derive(Clone, Debug)] pub enum Message { + /// Adds a new wallpaper folder. + AddFolder(Arc>), + /// Adds a new image file the system wallpaper folder. + AddFile(Arc>), /// Selects an option in the category dropdown menu. ChangeCategory(Category), /// Changes the displayed images in the wallpaper view. @@ -112,17 +119,6 @@ pub enum Category { Wallpapers, } -/// The status of active dialog requests. -#[derive(Copy, Clone)] -enum ActiveDialog { - /// The active dialog is a folder dialog. - AddFolder, - /// The active dialog is an image dialog. - AddImage, - /// No request has been made for a dialog. - None, -} - /// The page struct for the wallpaper view. pub struct Page { /// The display that is currently being configured. @@ -130,9 +126,6 @@ pub struct Page { /// If set to `None`, all displays will have the same wallpaper. active_output: Option, - /// The state of an active dialog request. - active_dialog: ActiveDialog, - /// Configuration parameters used by the cosmic-bg service. wallpaper_service_config: wallpaper::Config, @@ -187,67 +180,6 @@ impl page::Page for Page { .description(fl!("wallpaper", "desc")) } - fn file_chooser(&mut self, selections: Vec) -> Command { - let active_dialog = self.active_dialog; - self.active_dialog = ActiveDialog::None; - - if let Some(selection) = selections.first() { - let Ok(path) = selection.to_file_path() else { - tracing::error!(path = selection.path(), "not a valid file path"); - return Command::none(); - }; - - match active_dialog { - ActiveDialog::AddFolder => { - if path.is_dir() { - tracing::info!(?path, "opening new folder"); - - let _res = self.config.set_current_folder(Some(path.clone())); - - // Add the selected folder to the recent folders list. - self.add_recent_folder(path.clone()); - - // Select that folder in the recent folders list. - for (id, recent) in self.config.recent_folders().iter().enumerate() { - if &path == recent { - self.categories.selected = Some(Category::RecentFolder(id)); - } - } - - // Load the wallpapers from the selected folder into the view. - return cosmic::command::future(async move { - crate::pages::Message::DesktopWallpaper(Message::ChangeFolder( - change_folder(path).await, - )) - }); - } - } - - ActiveDialog::AddImage => { - if path.is_file() { - tracing::info!(?path, "opening custom image"); - - // Loads a single custom image and its thumbnail for display in the backgrounds view. - return cosmic::command::future(async move { - let result = - wallpaper::load_image_with_thumbnail(&mut Vec::new(), path).await; - - crate::pages::Message::DesktopWallpaper(Message::ImageAdd( - result.map(Arc::new), - )) - }); - } - } - - ActiveDialog::None => { - tracing::error!("not actively handling a dialog"); - } - } - } - - Command::none() - } - fn reload(&mut self, _page: page::Entity) -> Command { let current_folder = self.config.current_folder().to_owned(); @@ -270,7 +202,6 @@ impl page::AutoBind for Page {} impl Default for Page { fn default() -> Self { let mut page = Page { - active_dialog: ActiveDialog::None, active_output: None, cached_display_handle: None, categories: { @@ -304,7 +235,7 @@ impl Default for Page { color_dialog: window::Id::unique(), color_model: ColorPickerModel::new(fl!("hex"), fl!("rgb"), None, Some(Color::WHITE)), config: Config::new(), - fit_options: vec![fl!("fit-to-screen"), fl!("stretch"), fl!("zoom")], + fit_options: vec![fl!("fill"), fl!("fit-to-screen")], outputs: SingleSelectModel::default(), rotation_frequency: 300, rotation_options: vec![ @@ -380,18 +311,6 @@ impl Page { let temp_image; let image = match self.selected_fit { - FIT => image, - - STRETCH => { - temp_image = image::imageops::resize( - image, - SIMULATED_WIDTH as u32, - SIMULATED_HEIGHT as u32, - Lanczos3, - ); - &temp_image - } - ZOOM => { let (w, h) = (image.width(), image.height()); @@ -417,6 +336,8 @@ impl Page { &temp_image } + FIT => image, + _ => return, }; @@ -585,16 +506,19 @@ impl Page { } Category::AddFolder => { - self.active_dialog = ActiveDialog::AddFolder; - return cosmic::command::message(crate::Message::FileChooser( - crate::app::FileChooser::Open { - title: fl!("wallpaper", "folder-dialog"), - accept_label: fl!("dialog-add"), - include_directories: true, - modal: false, - multiple_files: false, - }, - )); + return cosmic::command::future(async { + let dialog_result = file_chooser::open::Dialog::new() + .title(fl!("wallpaper", "folder-dialog")) + .accept_label(fl!("dialog-add")) + .modal(false) + .open_folder() + .await + .map(|response| response.url().to_owned()); + + let message = Message::AddFolder(Arc::new(dialog_result)); + let page_message = crate::pages::Message::DesktopWallpaper(message); + crate::Message::PageMessage(page_message) + }); } } @@ -628,9 +552,8 @@ impl Page { /// Updates configuration for wallpaper image. fn config_wallpaper_entry(&self, output: String, path: PathBuf) -> Option { let scaling_mode = match self.selected_fit { - FIT => ScalingMode::Fit([0.0, 0.0, 0.0]), - STRETCH => ScalingMode::Stretch, ZOOM => ScalingMode::Zoom, + FIT => ScalingMode::Fit([0.0, 0.0, 0.0]), _ => return None, }; @@ -749,16 +672,19 @@ impl Page { } Message::ImageAddDialog => { - self.active_dialog = ActiveDialog::AddImage; - return cosmic::command::message(crate::Message::FileChooser( - crate::app::FileChooser::Open { - title: fl!("wallpaper", "image-dialog"), - accept_label: fl!("dialog-add"), - include_directories: false, - modal: false, - multiple_files: false, - }, - )); + return cosmic::command::future(async { + let dialog_result = file_chooser::open::Dialog::new() + .title(fl!("wallpaper", "image-dialog")) + .accept_label(fl!("dialog-add")) + .modal(false) + .open_file() + .await + .map(|response| response.url().to_owned()); + + let message = Message::AddFile(Arc::new(dialog_result)); + let page_message = crate::pages::Message::DesktopWallpaper(message); + crate::Message::PageMessage(page_message) + }); } Message::ImageRemove(image) => { @@ -806,6 +732,75 @@ impl Page { } } + Message::AddFolder(result) => { + let selection = match Arc::into_inner(result) { + Some(Ok(response)) => response, + Some(Err(why)) => { + // TODO: + return Command::none(); + } + None => return Command::none(), + }; + + let Ok(path) = selection.to_file_path() else { + tracing::error!(path = selection.path(), "not a valid file path"); + return Command::none(); + }; + + if path.is_dir() { + tracing::info!(?path, "opening new folder"); + + let _res = self.config.set_current_folder(Some(path.clone())); + + // Add the selected folder to the recent folders list. + self.add_recent_folder(path.clone()); + + // Select that folder in the recent folders list. + for (id, recent) in self.config.recent_folders().iter().enumerate() { + if &path == recent { + self.categories.selected = Some(Category::RecentFolder(id)); + } + } + + // Load the wallpapers from the selected folder into the view. + return cosmic::command::future(async move { + let message = Message::ChangeFolder(change_folder(path).await); + let page_message = crate::pages::Message::DesktopWallpaper(message); + crate::Message::PageMessage(page_message) + }); + } + } + + Message::AddFile(result) => { + let selection = match Arc::into_inner(result) { + Some(Ok(response)) => response, + Some(Err(why)) => { + // TODO: + return Command::none(); + } + None => return Command::none(), + }; + + let Ok(path) = selection.to_file_path() else { + tracing::error!(path = selection.path(), "not a valid file path"); + return Command::none(); + }; + + if path.is_file() { + tracing::info!(?path, "opening custom image"); + + // Loads a single custom image and its thumbnail for display in the backgrounds view. + return cosmic::command::future(async move { + let result = + wallpaper::load_image_with_thumbnail(&mut Vec::new(), path).await; + + let message = Message::ImageAdd(result.map(Arc::new)); + let page_message = crate::pages::Message::DesktopWallpaper(message); + crate::Message::PageMessage(page_message) + }); + } + } + Message::Init(update) => { self.wallpaper_service_config_update(update.0, update.1, update.2); self.config_apply(); @@ -905,9 +900,8 @@ impl Page { }; match entry.scaling_mode { + ScalingMode::Zoom | ScalingMode::Stretch => self.selected_fit = ZOOM, ScalingMode::Fit(_) => self.selected_fit = FIT, - ScalingMode::Stretch => self.selected_fit = STRETCH, - ScalingMode::Zoom => self.selected_fit = ZOOM, } match entry.rotation_frequency { @@ -1079,7 +1073,7 @@ pub fn settings() -> Section { .height(Length::Fixed(32.0)) .into() } else { - segmented_selection::horizontal(&page.outputs) + view_switcher::horizontal(&page.outputs) .on_activate(Message::Output) .into() }); diff --git a/i18n/cs/cosmic_settings.ftl b/i18n/cs/cosmic_settings.ftl index e978e6e..08f70ef 100644 --- a/i18n/cs/cosmic_settings.ftl +++ b/i18n/cs/cosmic_settings.ftl @@ -18,7 +18,6 @@ appearance = Vzhled notifications = Oznámení .desc = Nerušit, oznámení na zamykací obrazovce, a nastavení pro specifické aplikace. - ## Desktop: Options desktop-panel-options = Plocha a Panel @@ -111,8 +110,6 @@ wallpaper = Tapeta all-displays = Všechny monitory colors = Barvy fit-to-screen = Vyplnit obrazovku -stretch = Roztáhnout -zoom = Přiblížení x-minutes = { $number } minut x-hours = { $number -> diff --git a/i18n/en/cosmic_settings.ftl b/i18n/en/cosmic_settings.ftl index aab0136..4275898 100644 --- a/i18n/en/cosmic_settings.ftl +++ b/i18n/en/cosmic_settings.ftl @@ -228,11 +228,10 @@ add-image = Add image all-displays = All Displays colors = Colors dialog-add = _Add +fill = Fill fit-to-screen = Fit to Screen open-new-folder = Open new folder recent-folders = Recent Folders -stretch = Stretch -zoom = Zoom x-minutes = { $number } minutes x-hours = { $number -> diff --git a/page/Cargo.toml b/page/Cargo.toml index 3b8e233..ca0b78a 100644 --- a/page/Cargo.toml +++ b/page/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] derive_setters = "0.1.6" -regex = "1.10.2" +regex = "1.10.3" slotmap = "1.0.7" libcosmic = { workspace = true } generator = "0.7.5" diff --git a/pages/desktop/Cargo.toml b/pages/desktop/Cargo.toml index 0ae9d64..5be7246 100644 --- a/pages/desktop/Cargo.toml +++ b/pages/desktop/Cargo.toml @@ -9,7 +9,7 @@ edition = "2021" cosmic-bg-config = { workspace = true } cosmic-config = { workspace = true } dirs = "5.0.1" -freedesktop-icons = "0.2.4" +freedesktop-icons = "0.2.5" futures-lite = "2.2.0" image = "0.24.8" infer = "0.15.0" @@ -17,4 +17,4 @@ rayon = "1.8.1" sctk = { workspace = true } tokio = { version = "1.35.1", features = ["sync"] } tracing = "0.1.40" -wayland-client = "0.31.1" +wayland-client = "0.31.2" diff --git a/pages/desktop/src/wallpaper.rs b/pages/desktop/src/wallpaper.rs index cd3ec65..c175462 100644 --- a/pages/desktop/src/wallpaper.rs +++ b/pages/desktop/src/wallpaper.rs @@ -104,7 +104,7 @@ pub fn load_each_from_path(path: PathBuf) -> Receiver<(PathBuf, RgbaImage, RgbaI if let Ok(dir) = path.read_dir() { for entry in dir.filter_map(Result::ok) { let Ok(file_type) = entry.file_type() else { - continue + continue; }; let path = entry.path(); @@ -114,7 +114,7 @@ pub fn load_each_from_path(path: PathBuf) -> Receiver<(PathBuf, RgbaImage, RgbaI paths.push(path); } else if file_type.is_file() { let Ok(Some(kind)) = infer::get_from_path(&path) else { - continue + continue; }; if infer::MatcherType::Image == kind.matcher_type() { diff --git a/pages/system/Cargo.toml b/pages/system/Cargo.toml index de5bbb3..951a84a 100644 --- a/pages/system/Cargo.toml +++ b/pages/system/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0-only" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -byte-unit = "5.1.3" +byte-unit = "5.1.4" const_format = "0.2.32" concat-in-place = "1.1.0" sysinfo = "0.30.5" diff --git a/pages/time/src/lib.rs b/pages/time/src/lib.rs index d612e8f..67ed577 100644 --- a/pages/time/src/lib.rs +++ b/pages/time/src/lib.rs @@ -17,12 +17,14 @@ impl Info { pub async fn load(proxy: &TimeDateProxy<'_>) -> Option { let can_ntp = proxy.can_ntp().await.unwrap_or_default(); - let Ok(timezone) = proxy.timezone() + let Ok(timezone) = proxy + .timezone() .await .unwrap_or_default() - .parse::() else { - return None; - }; + .parse::() + else { + return None; + }; let Ok(duration) = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH) else { return None; diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 5299106..f743517 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.70.0" +channel = "1.75.0" components = ["clippy", "rustfmt"]