diff --git a/Cargo.lock b/Cargo.lock index dbf69d3..e9205b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,7 +209,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.0", + "bitflags 2.11.1", "cc", "jni", "libc", @@ -388,7 +388,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.2", + "rand 0.9.4", "raw-window-handle", "serde", "serde_repr", @@ -406,7 +406,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.2", + "rand 0.9.4", "serde", "serde_repr", "tokio", @@ -696,7 +696,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ "annotate-snippets", - "bitflags 2.11.0", + "bitflags 2.11.1", "cexpr", "clang-sys", "itertools 0.13.0", @@ -737,20 +737,20 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" dependencies = [ "serde_core", ] [[package]] name = "bitstream-io" -version = "4.9.0" +version = "4.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" +checksum = "7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f" dependencies = [ - "core2", + "no_std_io2", ] [[package]] @@ -951,7 +951,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "polling", "rustix 1.1.4", "slab", @@ -981,9 +981,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.59" +version = "1.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" +checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" dependencies = [ "find-msvc-tools", "jobserver", @@ -1085,9 +1085,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", "clap_derive", @@ -1107,9 +1107,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -1337,20 +1337,11 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.10.1", "libc", ] -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - [[package]] name = "core_maths" version = "0.1.1" @@ -1363,7 +1354,7 @@ dependencies = [ [[package]] name = "cosmic-bg-config" version = "1.0.3" -source = "git+https://github.com/pop-os/cosmic-bg#644993abd84bf04d7b3f2211e3656002c2a6f00b" +source = "git+https://github.com/pop-os/cosmic-bg#06970d5945b45a634b9ed314f5ca3a86a8502fd8" dependencies = [ "cosmic-config", "derive_setters", @@ -1377,7 +1368,7 @@ name = "cosmic-client-toolkit" version = "0.1.0" source = "git+https://github.com/pop-os/cosmic-protocols//?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cosmic-protocols", "libc", "smithay-client-toolkit", @@ -1388,7 +1379,7 @@ dependencies = [ [[package]] name = "cosmic-comp-config" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-comp#3e84968dacb6a50a82ef5e35c0ac373c38172681" +source = "git+https://github.com/pop-os/cosmic-comp#4df95190db07f7410666cec4d3bf648de90f81dd" dependencies = [ "cosmic-config", "input", @@ -1400,7 +1391,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1421,7 +1412,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "quote", "syn 2.0.117", @@ -1440,7 +1431,7 @@ name = "cosmic-dbus-networkmanager" version = "0.1.0" source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "derive_builder", "jiff", "procfs", @@ -1451,7 +1442,7 @@ dependencies = [ [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#7a61a704f6d1ec41f71cbe766e3cc484858523fa" +source = "git+https://github.com/pop-os/freedesktop-icons#9c562fe3ecf03241a46a60c0078cd6ea10bd75ce" dependencies = [ "bstr", "btoi", @@ -1514,7 +1505,7 @@ name = "cosmic-protocols" version = "0.1.0" source = "git+https://github.com/pop-os/cosmic-protocols//?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -1529,7 +1520,7 @@ version = "0.1.0" source = "git+https://github.com/pop-os/cosmic-randr#6e8e795970fa06d434af22775e415b517f7552d3" dependencies = [ "cosmic-protocols", - "indexmap 2.13.1", + "indexmap 2.14.0", "thiserror 2.0.18", "tokio", "tracing", @@ -1593,7 +1584,7 @@ dependencies = [ "iced_winit", "icu", "image", - "indexmap 2.13.1", + "indexmap 2.14.0", "itertools 0.14.0", "itoa", "jiff", @@ -1726,7 +1717,7 @@ dependencies = [ name = "cosmic-settings-network-manager-subscription" version = "1.0.7" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cosmic-dbus-networkmanager", "futures", "iced_futures", @@ -1813,9 +1804,9 @@ dependencies = [ [[package]] name = "cosmic-text" version = "0.18.2" -source = "git+https://github.com/pop-os/cosmic-text.git#9a2ab09f06905e91f41d64ac6eee887726e7fd76" +source = "git+https://github.com/pop-os/cosmic-text.git#4d74f795cc771fdcc7ea0f9cacba63fcf036fad6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "fontdb", "harfrust", "linebender_resource_handle", @@ -1836,7 +1827,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "almost", "configparser", @@ -2182,7 +2173,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -2213,7 +2204,7 @@ name = "dnd" version = "0.1.0" source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "mime 0.1.0", "raw-window-handle", "smithay-client-toolkit", @@ -2244,7 +2235,7 @@ checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "dpi" version = "0.1.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" [[package]] name = "drm" @@ -2252,7 +2243,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "drm-ffi", "drm-fourcc", @@ -2608,9 +2599,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d9237c6d82152100c691fb77ea18037b402bcc7257d2c876a4ffac81bc22a1c" +checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" dependencies = [ "bytemuck", ] @@ -2695,7 +2686,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6d3a3635983a889f065aa9ce760384713f23a9b4a04f696f86c39a5d7a6a5a" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "nom 8.0.0", ] @@ -2907,9 +2898,9 @@ dependencies = [ [[package]] name = "gif" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" dependencies = [ "color_quant", "weezl", @@ -2971,7 +2962,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "gpu-alloc-types", ] @@ -2981,7 +2972,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -3002,7 +2993,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -3013,7 +3004,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -3050,7 +3041,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "core_maths", "read-fonts", @@ -3081,6 +3072,12 @@ dependencies = [ "foldhash 0.2.0", ] +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" + [[package]] name = "heck" version = "0.4.1" @@ -3253,7 +3250,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "dnd", "iced_accessibility", @@ -3274,7 +3271,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "accesskit", "accesskit_winit", @@ -3283,9 +3280,9 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytes", "cosmic-client-toolkit", "dnd", @@ -3308,7 +3305,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "iced_core", "iced_futures", @@ -3318,7 +3315,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "futures", "iced_core", @@ -3332,9 +3329,9 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cosmic-text", "half", @@ -3353,7 +3350,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "iced_graphics", "iced_runtime", @@ -3362,7 +3359,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3374,7 +3371,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3390,7 +3387,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "bytemuck", "cosmic-text", @@ -3407,10 +3404,10 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "as-raw-xcb-connection", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cosmic-client-toolkit", "cryoglyph", @@ -3438,7 +3435,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3458,7 +3455,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3930,7 +3927,7 @@ dependencies = [ "byteorder-lite", "color_quant", "exr", - "gif 0.14.1", + "gif 0.14.2", "image-webp", "moxcms", "num-traits", @@ -3944,6 +3941,15 @@ dependencies = [ "zune-jpeg 0.5.15", ] +[[package]] +name = "image-extras" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d29ba92ef6970a2685cc758b455d190842b8b9e96c865ffd31cdb9954b7548" +dependencies = [ + "image", +] + [[package]] name = "image-webp" version = "0.2.4" @@ -3985,12 +3991,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.0", "serde", "serde_core", ] @@ -4010,7 +4016,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "inotify-sys", "libc", ] @@ -4040,7 +4046,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "input-sys", "libc", "log", @@ -4247,9 +4253,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.94" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" dependencies = [ "cfg-if", "futures-util", @@ -4463,7 +4469,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "serde", ] @@ -4554,14 +4560,14 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libc" -version = "0.2.184" +version = "0.2.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#3f9e93067b31d9ba81a4e3a28653b3380c61c352" dependencies = [ "apply", "ashpd 0.12.3", @@ -4590,6 +4596,7 @@ dependencies = [ "iced_widget", "iced_winit", "image", + "image-extras", "jiff", "libc", "log", @@ -4644,7 +4651,7 @@ version = "2.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "909eb3049e16e373680fe65afe6e2a722ace06b671250cc4849557bc57d6a397" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "libpulse-sys", "num-derive", @@ -4667,14 +4674,14 @@ dependencies = [ [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.3", + "redox_syscall 0.7.4", ] [[package]] @@ -4683,7 +4690,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b8cfa2a7656627b4c92c6b9ef929433acd673d5ab3708cda1b18478ac00df4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cc", "convert_case", "cookie-factory", @@ -4818,9 +4825,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.16.3" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" +checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" [[package]] name = "lyon" @@ -4952,7 +4959,7 @@ version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -5037,14 +5044,14 @@ checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "cfg_aliases 0.2.1", "codespan-reporting", "half", "hashbrown 0.16.1", "hexf-parse", - "indexmap 2.13.1", + "indexmap 2.14.0", "libm", "log", "num-traits", @@ -5061,7 +5068,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -5097,7 +5104,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "cfg_aliases 0.2.1", "libc", @@ -5111,6 +5118,15 @@ dependencies = [ "zbus", ] +[[package]] +name = "no_std_io2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51ed7824b6e07d354605f4abb3d9d300350701299da96642ee084f5ce631550" +dependencies = [ + "memchr", +] + [[package]] name = "nom" version = "7.1.3" @@ -5142,7 +5158,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "fsevent-sys", "inotify", "kqueue", @@ -5160,7 +5176,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -5351,7 +5367,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -5367,7 +5383,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -5380,7 +5396,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5392,7 +5408,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "dispatch2", "objc2 0.6.4", @@ -5404,7 +5420,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "objc2-core-foundation", ] @@ -5427,7 +5443,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2-core-foundation", "objc2-core-graphics", ] @@ -5444,7 +5460,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -5456,7 +5472,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -5478,7 +5494,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5490,7 +5506,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5503,7 +5519,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -5834,7 +5850,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9688b89abf11d756499f7c6190711d6dbe5a3acdb30c8fbf001d6596d06a8d44" dependencies = [ "anyhow", - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "libspa", "libspa-sys", @@ -5857,9 +5873,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "plain" @@ -5886,7 +5902,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "crc32fast", "fdeflate", "flate2", @@ -5921,9 +5937,9 @@ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] @@ -6029,7 +6045,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "procfs-core", "rustix 1.1.4", ] @@ -6040,7 +6056,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "hex", ] @@ -6158,9 +6174,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -6243,7 +6259,7 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.2", + "rand 0.9.4", "rand_chacha 0.9.0", "simd_helpers", "thiserror 2.0.18", @@ -6274,9 +6290,9 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -6309,16 +6325,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] name = "redox_syscall" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" +checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -6444,7 +6460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" dependencies = [ "base64", - "bitflags 2.11.0", + "bitflags 2.11.1", "serde", "serde_derive", "unicode-ident", @@ -6456,7 +6472,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "once_cell", "serde", "serde_derive", @@ -6537,7 +6553,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -6550,7 +6566,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -6569,7 +6585,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "core_maths", "log", @@ -6728,7 +6744,7 @@ version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "itoa", "memchr", "serde", @@ -6766,7 +6782,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.13.1", + "indexmap 2.14.0", "schemars 0.9.0", "schemars 1.2.1", "serde_core", @@ -6932,7 +6948,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "calloop", "calloop-wayland-source", @@ -7023,7 +7039,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -7407,9 +7423,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.51.1" +version = "1.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c" +checksum = "a91135f59b1cbf38c91e73cf3386fca9bb77915c45ce2771460c9d92f0f3d776" dependencies = [ "bytes", "libc", @@ -7459,7 +7475,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "serde_core", "serde_spanned", "toml_datetime", @@ -7483,7 +7499,7 @@ version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ - "indexmap 2.13.1", + "indexmap 2.14.0", "toml_datetime", "toml_parser", "winnow 1.0.1", @@ -7811,9 +7827,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ "js-sys", "serde_core", @@ -7885,9 +7901,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" dependencies = [ "cfg-if", "once_cell", @@ -7898,9 +7914,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.67" +version = "0.4.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" +checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" dependencies = [ "js-sys", "wasm-bindgen", @@ -7908,9 +7924,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7918,9 +7934,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" dependencies = [ "bumpalo", "proc-macro2", @@ -7931,9 +7947,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" dependencies = [ "unicode-ident", ] @@ -7955,7 +7971,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", - "indexmap 2.13.1", + "indexmap 2.14.0", "wasm-encoder", "wasmparser", ] @@ -7966,9 +7982,9 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "hashbrown 0.15.5", - "indexmap 2.13.1", + "indexmap 2.14.0", "semver", ] @@ -8006,7 +8022,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -8018,7 +8034,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cursor-icon", "wayland-backend", ] @@ -8040,7 +8056,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -8053,7 +8069,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8066,7 +8082,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8079,7 +8095,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8092,7 +8108,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -8117,7 +8133,7 @@ version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc1846eb04c49182e04f4a099e2a830a2b745610bbc1d61246e206f29c7000a0" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "downcast-rs 1.2.1", "rustix 1.1.4", "wayland-backend", @@ -8138,9 +8154,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.94" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" dependencies = [ "js-sys", "wasm-bindgen", @@ -8169,7 +8185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" dependencies = [ "arrayvec", - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "cfg_aliases 0.2.1", "document-features", @@ -8200,12 +8216,12 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cfg_aliases 0.2.1", "document-features", "hashbrown 0.16.1", - "indexmap 2.13.1", + "indexmap 2.14.0", "log", "naga", "once_cell", @@ -8260,7 +8276,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.11.0", + "bitflags 2.11.1", "block", "bytemuck", "cfg-if", @@ -8305,7 +8321,7 @@ version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "js-sys", "log", @@ -8865,9 +8881,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg_aliases 0.2.1", "cursor-icon", "dpi", @@ -8891,10 +8907,10 @@ dependencies = [ [[package]] name = "winit-android" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ "android-activity", - "bitflags 2.11.0", + "bitflags 2.11.1", "dpi", "ndk", "raw-window-handle", @@ -8906,9 +8922,9 @@ dependencies = [ [[package]] name = "winit-appkit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "dispatch2", "dpi", @@ -8928,7 +8944,7 @@ dependencies = [ [[package]] name = "winit-common" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ "memmap2 0.9.10", "objc2 0.6.4", @@ -8943,9 +8959,9 @@ dependencies = [ [[package]] name = "winit-core" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cursor-icon", "dpi", "keyboard-types", @@ -8957,14 +8973,14 @@ dependencies = [ [[package]] name = "winit-orbital" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dpi", "libredox", "orbclient", "raw-window-handle", - "redox_syscall 0.7.3", + "redox_syscall 0.7.4", "smol_str", "tracing", "winit-core", @@ -8973,9 +8989,9 @@ dependencies = [ [[package]] name = "winit-uikit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "dispatch2", "dpi", @@ -8993,10 +9009,10 @@ dependencies = [ [[package]] name = "winit-wayland" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ "ahash", - "bitflags 2.11.0", + "bitflags 2.11.1", "calloop", "cursor-icon", "dpi", @@ -9019,10 +9035,10 @@ dependencies = [ [[package]] name = "winit-web" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ "atomic-waker", - "bitflags 2.11.0", + "bitflags 2.11.1", "concurrent-queue", "cursor-icon", "dpi", @@ -9041,9 +9057,9 @@ dependencies = [ [[package]] name = "winit-win32" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cursor-icon", "dpi", "raw-window-handle", @@ -9057,9 +9073,9 @@ dependencies = [ [[package]] name = "winit-x11" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "calloop", "cursor-icon", @@ -9132,7 +9148,7 @@ checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck 0.5.0", - "indexmap 2.13.1", + "indexmap 2.14.0", "prettyplease", "syn 2.0.117", "wasm-metadata", @@ -9162,8 +9178,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.0", - "indexmap 2.13.1", + "bitflags 2.11.1", + "indexmap 2.14.0", "log", "serde", "serde_derive", @@ -9182,7 +9198,7 @@ checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", - "indexmap 2.13.1", + "indexmap 2.14.0", "log", "semver", "serde", @@ -9322,7 +9338,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dlib", "log", "once_cell", diff --git a/Cargo.toml b/Cargo.toml index cb0afc9..c42187c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,11 +75,13 @@ cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", # cosmic-config = { path = "../libcosmic/cosmic-config" } # cosmic-theme = { path = "../libcosmic/cosmic-theme" } # iced_futures = { path = "../libcosmic/iced/futures" } -# -#iced_futures = { git = "https://github.com/pop-os/libcosmic//" } -#libcosmic = { git = "https://github.com/pop-os/libcosmic//" } -#cosmic-config = { git = "https://github.com/pop-os/libcosmic//" } -#cosmic-theme = { git = "https://github.com/pop-os/libcosmic//" } +# iced_winit = { path = "../libcosmic/iced/winit" } + +# libcosmic = { git = "https://github.com/pop-os/libcosmic//" } +# cosmic-config = { git = "https://github.com/pop-os/libcosmic//" } +# cosmic-theme = { git = "https://github.com/pop-os/libcosmic//" } +# iced_futures = { git = "https://github.com/pop-os/libcosmic//" } +# iced_winit = { git = "https://github.com/pop-os/libcosmic//" } # [patch.'https://github.com/pop-os/dbus-settings-bindings'] # cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" } diff --git a/cosmic-settings/src/pages/accessibility/magnifier.rs b/cosmic-settings/src/pages/accessibility/magnifier.rs index 5f9db8d..d476b71 100644 --- a/cosmic-settings/src/pages/accessibility/magnifier.rs +++ b/cosmic-settings/src/pages/accessibility/magnifier.rs @@ -219,19 +219,18 @@ pub fn magnifier( .add( settings::item::builder(&descriptions[magnifier]) .description(&descriptions[controls]) - .control( - widget::toggler(page.magnifier_state).on_toggle(Message::SetMagnifier), - ), + .toggler(page.magnifier_state, Message::SetMagnifier), + ) + .add( + settings::item::builder(&descriptions[scroll_controls]).toggler( + page.zoom_config.enable_mouse_zoom_shortcuts, + Message::SetMouseShortcuts, + ), + ) + .add( + settings::item::builder(&descriptions[show_overlay]) + .toggler(page.zoom_config.show_overlay, Message::SetOverlay), ) - .add(settings::item( - &descriptions[scroll_controls], - widget::toggler(page.zoom_config.enable_mouse_zoom_shortcuts) - .on_toggle(Message::SetMouseShortcuts), - )) - .add(settings::item( - &descriptions[show_overlay], - widget::toggler(page.zoom_config.show_overlay).on_toggle(Message::SetOverlay), - )) .add(settings::item( &descriptions[increment], widget::dropdown::popup_dropdown( @@ -247,10 +246,10 @@ pub fn magnifier( }, ), )) - .add(settings::item( - &descriptions[signin], - widget::toggler(page.zoom_config.start_on_login).on_toggle(Message::SetSignin), - )) + .add( + settings::item::builder(&descriptions[signin]) + .toggler(page.zoom_config.start_on_login, Message::SetSignin), + ) .apply(Element::from) .map(crate::pages::Message::AccessibilityMagnifier) }) @@ -300,36 +299,21 @@ pub fn view_movement() -> section::Section { settings::section() .title(§ion.title) - .add(widget::settings::item_row(vec![ - widget::radio( - text::body(&descriptions[continuous]), - ZoomMovement::Continuously, - Some(page.zoom_config.view_moves), - Message::SetMovement, - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item_row(vec![ - widget::radio( - text::body(&descriptions[onedge]), - ZoomMovement::OnEdge, - Some(page.zoom_config.view_moves), - Message::SetMovement, - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item_row(vec![ - widget::radio( - text::body(&descriptions[centered]), - ZoomMovement::Centered, - Some(page.zoom_config.view_moves), - Message::SetMovement, - ) - .width(Length::Fill) - .into(), - ])) + .add(settings::item::builder(&descriptions[continuous]).radio( + ZoomMovement::Continuously, + Some(page.zoom_config.view_moves), + Message::SetMovement, + )) + .add(settings::item::builder(&descriptions[onedge]).radio( + ZoomMovement::OnEdge, + Some(page.zoom_config.view_moves), + Message::SetMovement, + )) + .add(settings::item::builder(&descriptions[centered]).radio( + ZoomMovement::Centered, + Some(page.zoom_config.view_moves), + Message::SetMovement, + )) .apply(Element::from) .map(crate::pages::Message::AccessibilityMagnifier) }) diff --git a/cosmic-settings/src/pages/accessibility/mod.rs b/cosmic-settings/src/pages/accessibility/mod.rs index 889039a..a7bc8f6 100644 --- a/cosmic-settings/src/pages/accessibility/mod.rs +++ b/cosmic-settings/src/pages/accessibility/mod.rs @@ -1,11 +1,11 @@ use cosmic::{ - Task, + Apply, Element, Task, cosmic_theme::{CosmicPalette, ThemeBuilder}, iced::core::text::Wrapping, iced::stream, surface, theme::CosmicTheme, - widget::{dropdown, settings, text, toggler}, + widget::{dropdown, list, settings, text}, }; pub use cosmic_comp_config::ZoomMovement; use cosmic_config::CosmicConfigEntry; @@ -200,6 +200,22 @@ pub fn vision() -> section::Section { .view::(move |binder, page, section| { let descriptions = §ion.descriptions; + let (magnifier_entity, _magnifier_info) = binder + .info + .iter() + .find(|(_, v)| v.id == "accessibility_magnifier") + .expect("magnifier page not found"); + + let status_text = if page.wayland_available.is_some() { + if page.magnifier_state { + &descriptions[on] + } else { + &descriptions[off] + } + } else { + &descriptions[unavailable] + }; + settings::section() .title(§ion.title) .add( @@ -210,31 +226,13 @@ pub fn vision() -> section::Section { }, ), ) - .add({ - let (magnifier_entity, _magnifier_info) = binder - .info - .iter() - .find(|(_, v)| v.id == "accessibility_magnifier") - .expect("magnifier page not found"); - - let status_text = if page.wayland_available.is_some() { - if page.magnifier_state { - &descriptions[on] - } else { - &descriptions[off] - } - } else { - &descriptions[unavailable] - }; - - crate::widget::go_next_with_item( - &descriptions[magnifier], - text::body(status_text).wrapping(Wrapping::Word), - page.wayland_available - .is_some() - .then_some(crate::pages::Message::Page(magnifier_entity)), - ) - }) + .add(crate::widget::go_next_with_item( + &descriptions[magnifier], + text::body(status_text).wrapping(Wrapping::Word), + page.wayland_available + .is_some() + .then_some(crate::pages::Message::Page(magnifier_entity)), + )) .add( settings::item::builder(&descriptions[high_contrast]) .toggler(page.theme.is_high_contrast, |enable| { @@ -242,21 +240,19 @@ pub fn vision() -> section::Section { }), ) .add( - settings::item::builder(&descriptions[invert_colors]).control( - toggler(page.screen_inverted).on_toggle_maybe( - page.wayland_available - .is_some_and(|ver| ver >= 2) - .then_some(|set| Message::SetScreenInverted(set).into()), - ), + settings::item::builder(&descriptions[invert_colors]).toggler_maybe( + page.screen_inverted, + page.wayland_available + .is_some_and(|ver| ver >= 2) + .then_some(|set| Message::SetScreenInverted(set).into()), ), ) .add( - settings::item::builder(&descriptions[color_filters]).control( - toggler(page.screen_filter_active).on_toggle_maybe( - page.wayland_available - .is_some_and(|ver| ver >= 2) - .then_some(|set| Message::SetScreenFilterActive(set).into()), - ), + settings::item::builder(&descriptions[color_filters]).toggler_maybe( + page.screen_filter_active, + page.wayland_available + .is_some_and(|ver| ver >= 2) + .then_some(|set| Message::SetScreenFilterActive(set).into()), ), ) .add({ @@ -304,13 +300,11 @@ pub fn hearing() -> section::Section { settings::section() .title(§ion.title) .add( - cosmic::Element::from( - settings::item::builder(&descriptions[mono]) - .toggler(page.daemon_config.mono_sound, Message::SetSoundMono), - ) - .map(crate::pages::Message::Accessibility), + settings::item::builder(&descriptions[mono]) + .toggler(page.daemon_config.mono_sound, Message::SetSoundMono), ) - .into() + .apply(Element::from) + .map(crate::pages::Message::Accessibility) }) } diff --git a/cosmic-settings/src/pages/applications/legacy_applications.rs b/cosmic-settings/src/pages/applications/legacy_applications.rs index a2ea759..81bbcfe 100644 --- a/cosmic-settings/src/pages/applications/legacy_applications.rs +++ b/cosmic-settings/src/pages/applications/legacy_applications.rs @@ -14,7 +14,7 @@ use cosmic::{ cosmic_config::{self, ConfigGet, ConfigSet}, iced::{Length, stream}, surface, - widget::{self, dropdown, text}, + widget::{self, dropdown, settings, text}, }; use cosmic_comp_config::{EavesdroppingKeyboardMode, XwaylandDescaling, XwaylandEavesdropping}; use cosmic_randr_shell::List; @@ -277,61 +277,46 @@ pub fn legacy_application_global_shortcuts() -> Section { .title(fl!("legacy-app-global-shortcuts")) .descriptions(descriptions) .view::(move |_binder, page, section| { - let title = widget::text::body(§ion.title).font(cosmic::font::bold()); - let description = widget::text::body(§ion.descriptions[desc]); + let title = text::body(§ion.title).font(cosmic::font::bold()); + let description = text::body(§ion.descriptions[desc]); - let content = widget::settings::section::<'_, crate::pages::Message>() - .add(widget::settings::item_row(vec![ - widget::radio( - text::body(§ion.descriptions[none]), - EavesdroppingKeyboardMode::None, - Some(page.comp_config_xwayland_eavesdropping.keyboard), - |t| Message::SetXwaylandKeyboardMode(t).into(), - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item_row(vec![ - widget::radio( - text::body(§ion.descriptions[modifiers]), + let content = settings::section::<'_, crate::pages::Message>() + .add(settings::item::builder(§ion.descriptions[none]).radio( + EavesdroppingKeyboardMode::None, + Some(page.comp_config_xwayland_eavesdropping.keyboard), + |t| Message::SetXwaylandKeyboardMode(t).into(), + )) + .add( + settings::item::builder(§ion.descriptions[modifiers]).radio( EavesdroppingKeyboardMode::Modifiers, Some(page.comp_config_xwayland_eavesdropping.keyboard), |t| Message::SetXwaylandKeyboardMode(t).into(), - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item_row(vec![ - widget::radio( - text::body(§ion.descriptions[combination]), + ), + ) + .add( + settings::item::builder(§ion.descriptions[combination]).radio( EavesdroppingKeyboardMode::Combinations, Some(page.comp_config_xwayland_eavesdropping.keyboard), |t| Message::SetXwaylandKeyboardMode(t).into(), - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item_row(vec![ - widget::radio( - text::body(§ion.descriptions[all]), - EavesdroppingKeyboardMode::All, - Some(page.comp_config_xwayland_eavesdropping.keyboard), - |t| Message::SetXwaylandKeyboardMode(t).into(), - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item( - §ion.descriptions[mouse], - widget::toggler(page.comp_config_xwayland_eavesdropping.pointer) - .on_toggle(|t| Message::SetXwaylandMouseButtonMode(t).into()), - )); + ), + ) + .add(settings::item::builder(§ion.descriptions[all]).radio( + EavesdroppingKeyboardMode::All, + Some(page.comp_config_xwayland_eavesdropping.keyboard), + |t| Message::SetXwaylandKeyboardMode(t).into(), + )) + .add( + settings::item::builder(§ion.descriptions[mouse]) + .toggler(page.comp_config_xwayland_eavesdropping.pointer, |t| { + Message::SetXwaylandMouseButtonMode(t).into() + }), + ); widget::column::with_capacity(3) .push(title) .push(description) .push(content) - .spacing(cosmic::theme::active().cosmic().spacing.space_xxs) + .spacing(cosmic::theme::spacing().space_xxs) .apply(cosmic::Element::from) .map(Into::into) }) @@ -356,42 +341,33 @@ pub fn legacy_application_scaling() -> Section { let descriptions = §ion.descriptions; widget::settings::section() .title(§ion.title) - .add(widget::settings::item_row(vec![ - widget::radio( - widget::column::with_capacity(2) - .push(text::body(&descriptions[gaming])) - .push(text::caption(&descriptions[gaming_desc])), - XwaylandDescaling::Fractional, - Some(page.comp_config_descale_xwayland), - Message::SetXwaylandDescaling, - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item_row(vec![ - widget::radio( - widget::column::with_capacity(2) - .push(text::body(&descriptions[apps])) - .push(text::caption(&descriptions[apps_desc])), - XwaylandDescaling::Enabled, - Some(page.comp_config_descale_xwayland), - Message::SetXwaylandDescaling, - ) - .width(Length::Fill) - .into(), - ])) - .add(widget::settings::item_row(vec![ - widget::radio( - widget::column::with_capacity(2) - .push(text::body(&descriptions[compat])) - .push(text::caption(&descriptions[compat_desc])), - XwaylandDescaling::Disabled, - Some(page.comp_config_descale_xwayland), - Message::SetXwaylandDescaling, - ) - .width(Length::Fill) - .into(), - ])) + .add( + widget::settings::item::builder(&descriptions[gaming]) + .description(&descriptions[gaming_desc]) + .radio( + XwaylandDescaling::Fractional, + Some(page.comp_config_descale_xwayland), + Message::SetXwaylandDescaling, + ), + ) + .add( + widget::settings::item::builder(&descriptions[apps]) + .description(&descriptions[apps_desc]) + .radio( + XwaylandDescaling::Enabled, + Some(page.comp_config_descale_xwayland), + Message::SetXwaylandDescaling, + ), + ) + .add( + widget::settings::item::builder(&descriptions[compat]) + .description(&descriptions[compat_desc]) + .radio( + XwaylandDescaling::Disabled, + Some(page.comp_config_descale_xwayland), + Message::SetXwaylandDescaling, + ), + ) .add(widget::settings::item( &descriptions[preferred_display], dropdown::popup_dropdown( diff --git a/cosmic-settings/src/pages/bluetooth/mod.rs b/cosmic-settings/src/pages/bluetooth/mod.rs index 147f6af..f8d1338 100644 --- a/cosmic-settings/src/pages/bluetooth/mod.rs +++ b/cosmic-settings/src/pages/bluetooth/mod.rs @@ -772,12 +772,10 @@ fn status() -> Section { } widget::list_column() - .add( - bluetooth_toggle.control( - widget::toggler(matches!(status, Active::Enabling | Active::Enabled)) - .on_toggle(|active| Message::SetActive(active).into()), - ), - ) + .add(bluetooth_toggle.toggler( + matches!(status, Active::Enabling | Active::Enabled), + |active| Message::SetActive(active).into(), + )) .apply(Element::from) }) } diff --git a/cosmic-settings/src/pages/desktop/appearance/drawer.rs b/cosmic-settings/src/pages/desktop/appearance/drawer.rs index 7b7caa0..ad1cecb 100644 --- a/cosmic-settings/src/pages/desktop/appearance/drawer.rs +++ b/cosmic-settings/src/pages/desktop/appearance/drawer.rs @@ -4,7 +4,7 @@ use cosmic::cosmic_config::{Config, ConfigSet}; use cosmic::cosmic_theme::Spacing; use cosmic::iced::core::{Color, Length}; use cosmic::widget::{ - ColorPickerModel, color_picker::ColorPickerUpdate, container, flex_row, settings, text, + ColorPickerModel, color_picker::ColorPickerUpdate, container, flex_row, list, settings, text, }; use cosmic::{Apply, Task}; use cosmic::{Element, widget}; diff --git a/cosmic-settings/src/pages/desktop/appearance/font_config.rs b/cosmic-settings/src/pages/desktop/appearance/font_config.rs index 6d9846f..417a671 100644 --- a/cosmic-settings/src/pages/desktop/appearance/font_config.rs +++ b/cosmic-settings/src/pages/desktop/appearance/font_config.rs @@ -1,18 +1,18 @@ // Copyright 2024 System76 // SPDX-License-Identifier: GPL-3.0-only -use std::rc::Rc; use std::sync::Arc; use cosmic::{ Apply, Element, Task, config::{CosmicTk, FontConfig}, iced::core::text::Wrapping, - widget::{self, settings, space::horizontal as horizontal_space, svg}, + widget::{self, settings, svg}, }; use cosmic_config::ConfigSet; use crate::app; +use crate::widget::selection_context_item; use super::{ContextView, Message, drawer}; @@ -177,10 +177,6 @@ impl Model { context_view: &ContextView, callback: impl Fn(Arc) -> super::Message, ) -> Element<'_, super::Message> { - let svg_accent = Rc::new(|theme: &cosmic::Theme| svg::Style { - color: Some(theme.cosmic().accent_text_color().into()), - }); - let (mut families, current_font) = match *context_view { ContextView::MonospaceFont => { (&self.monospace_font_families, &self.monospace_font.family) @@ -193,36 +189,16 @@ impl Model { families = &self.font_filter; } - let list = families.iter().fold(widget::list_column(), |list, family| { - let selected = &**family == current_font; - list.add( - settings::item_row(vec![ - widget::text::body(&**family) - .class(if selected { - cosmic::theme::Text::Accent - } else { - cosmic::theme::Text::Default - }) - .wrapping(Wrapping::Word) - .width(cosmic::iced::Length::Fill) - .into(), - if selected { - widget::icon::from_name("object-select-symbolic") - .size(16) - .icon() - .class(cosmic::theme::Svg::Custom(svg_accent.clone())) - .into() - } else { - horizontal_space().width(16.).into() - }, - ]) - .apply(widget::container) - .class(cosmic::theme::Container::List) - .apply(widget::button::custom) - .class(cosmic::theme::Button::Transparent) - .on_press(callback(family.clone())), - ) - }); + let list = families.iter().fold( + widget::list_column::with_capacity(families.len()), + |list, family| { + let selected = &**family == current_font; + list.add( + widget::list::button(selection_context_item(&**family, selected)) + .on_press(callback(family.clone())), + ) + }, + ); list.into() } diff --git a/cosmic-settings/src/pages/desktop/appearance/mod.rs b/cosmic-settings/src/pages/desktop/appearance/mod.rs index 190f5ef..609a084 100644 --- a/cosmic-settings/src/pages/desktop/appearance/mod.rs +++ b/cosmic-settings/src/pages/desktop/appearance/mod.rs @@ -22,8 +22,8 @@ use cosmic::dialog::file_chooser::{self, FileFilter}; use cosmic::iced::Subscription; use cosmic::iced::core::{Alignment, Length}; use cosmic::widget::{ - button, color_picker::ColorPickerUpdate, container, radio, row, settings, - space::horizontal as horizontal_space, text, + button, color_picker::ColorPickerUpdate, container, list, row, settings, space::horizontal, + text, }; use cosmic::{Apply, Element, Task, widget}; #[cfg(feature = "wayland")] @@ -790,36 +790,21 @@ pub fn interface_density() -> Section { settings::section() .title(§ion.title) - .add(settings::item_row(vec![ - radio( - text::body(&descriptions[compact]), - Density::Compact, - Some(page.density), - Message::Density, - ) - .width(Length::Fill) - .into(), - ])) - .add(settings::item_row(vec![ - radio( - text::body(&descriptions[comfortable]), - Density::Standard, - Some(page.density), - Message::Density, - ) - .width(Length::Fill) - .into(), - ])) - .add(settings::item_row(vec![ - radio( - text::body(&descriptions[spacious]), - Density::Spacious, - Some(page.density), - Message::Density, - ) - .width(Length::Fill) - .into(), - ])) + .add(settings::item::builder(&descriptions[compact]).radio( + Density::Compact, + Some(page.density), + Message::Density, + )) + .add(settings::item::builder(&descriptions[comfortable]).radio( + Density::Standard, + Some(page.density), + Message::Density, + )) + .add(settings::item::builder(&descriptions[spacious]).radio( + Density::Spacious, + Some(page.density), + Message::Density, + )) .apply(Element::from) .map(crate::pages::Message::Appearance) }) @@ -933,7 +918,7 @@ pub fn reset_button() -> Section { .on_press(Message::Reset) .into() } else { - horizontal_space().width(1.).apply(Element::from) + horizontal().width(1.).apply(Element::from) } .map(crate::pages::Message::Appearance) }) diff --git a/cosmic-settings/src/pages/desktop/appearance/mode_and_colors.rs b/cosmic-settings/src/pages/desktop/appearance/mode_and_colors.rs index c8bdbd3..01b31d0 100644 --- a/cosmic-settings/src/pages/desktop/appearance/mode_and_colors.rs +++ b/cosmic-settings/src/pages/desktop/appearance/mode_and_colors.rs @@ -4,7 +4,7 @@ use cosmic::cosmic_theme::palette::Srgba; use cosmic::iced::ContentFit; use cosmic::iced::core::{Alignment, Length}; use cosmic::widget::icon::{from_name, icon}; -use cosmic::widget::{self, button, container, settings, text}; +use cosmic::widget::{self, button, container, list, settings, text}; use cosmic::{Apply, Element}; use cosmic_settings_page::Section; use cosmic_settings_wallpaper as wallpaper; @@ -64,105 +64,117 @@ fn container_background<'a>( page: &Page, section: &'a Section, labels: &HashMap, -) -> impl Into> { +) -> list::ListButton<'a, Message> { let descriptions = §ion.descriptions; let go_next_icon = from_name("go-next-symbolic").handle(); - settings::item::builder(&descriptions[labels["container_bg"]]) - .description(&descriptions[labels["container_bg_desc"]]) - .control( - if page - .drawer - .container_background - .get_applied_color() - .is_some() - { - Element::from( - page.drawer - .container_background - .picker_button( - |_| Message::DrawerOpen(ContextView::ContainerBackground), - Some(24), - ) - .width(Length::Fixed(48.0)) - .height(Length::Fixed(24.0)), - ) - } else { - container( - button::text(&descriptions[labels["auto"]]) - .trailing_icon(go_next_icon.clone()) - .on_press(Message::DrawerOpen(ContextView::ContainerBackground)), - ) - .into() - }, - ) + list::button( + settings::item::builder(&descriptions[labels["container_bg"]]) + .description(&descriptions[labels["container_bg_desc"]]) + .control( + if page + .drawer + .container_background + .get_applied_color() + .is_some() + { + Element::from( + page.drawer + .container_background + .picker_button( + |_| Message::DrawerOpen(ContextView::ContainerBackground), + Some(24), + ) + .width(Length::Fixed(48.0)) + .height(Length::Fixed(24.0)), + ) + } else { + container( + button::text(&descriptions[labels["auto"]]) + .trailing_icon(go_next_icon.clone()) + .on_press(Message::DrawerOpen(ContextView::ContainerBackground)), + ) + .into() + }, + ), + ) + .on_press(Message::DrawerOpen(ContextView::ContainerBackground)) } fn application_background<'a>( page: &Page, section: &'a Section, labels: &HashMap, -) -> impl Into> { +) -> list::ListButton<'a, Message> { let descriptions = §ion.descriptions; - settings::item::builder(&descriptions[labels["app_bg"]]).control( - page.drawer - .application_background - .picker_button( - |_| Message::DrawerOpen(ContextView::ApplicationBackground), - Some(24), - ) - .width(Length::Fixed(48.0)) - .height(Length::Fixed(24.0)), + list::button( + settings::item::builder(&descriptions[labels["app_bg"]]).control( + page.drawer + .application_background + .picker_button( + |_| Message::DrawerOpen(ContextView::ApplicationBackground), + Some(24), + ) + .width(Length::Fixed(48.0)) + .height(Length::Fixed(24.0)), + ), ) + .on_press(Message::DrawerOpen(ContextView::ApplicationBackground)) } fn control_tint<'a>( page: &Page, section: &'a Section, labels: &HashMap, -) -> impl Into> { +) -> list::ListButton<'a, Message> { let descriptions = §ion.descriptions; - settings::item::builder(&descriptions[labels["control_tint"]]) - .description(&descriptions[labels["control_tint_desc"]]) - .control( - page.drawer - .control_component - .picker_button( - |_| Message::DrawerOpen(ContextView::ControlComponent), - Some(24), - ) - .width(Length::Fixed(48.0)) - .height(Length::Fixed(24.0)), - ) + list::button( + settings::item::builder(&descriptions[labels["control_tint"]]) + .description(&descriptions[labels["control_tint_desc"]]) + .control( + page.drawer + .control_component + .picker_button( + |_| Message::DrawerOpen(ContextView::ControlComponent), + Some(24), + ) + .width(Length::Fixed(48.0)) + .height(Length::Fixed(24.0)), + ), + ) + .on_press(Message::DrawerOpen(ContextView::ControlComponent)) } fn interface_text<'a>( page: &Page, section: &'a Section, labels: &HashMap, -) -> impl Into> { +) -> list::ListButton<'a, Message> { let descriptions = §ion.descriptions; - settings::item::builder(&descriptions[labels["text_tint"]]) - .description(&descriptions[labels["text_tint_desc"]]) - .control( - page.drawer - .interface_text - .picker_button( - |_| Message::DrawerOpen(ContextView::InterfaceText), - Some(24), - ) - .width(Length::Fixed(48.0)) - .height(Length::Fixed(24.0)), - ) + list::button( + settings::item::builder(&descriptions[labels["text_tint"]]) + .description(&descriptions[labels["text_tint_desc"]]) + .control( + page.drawer + .interface_text + .picker_button( + |_| Message::DrawerOpen(ContextView::InterfaceText), + Some(24), + ) + .width(Length::Fixed(48.0)) + .height(Length::Fixed(24.0)), + ), + ) + .on_press(Message::DrawerOpen(ContextView::InterfaceText)) } fn auto_switch<'a>( page: &Page, section: &'a Section, labels: &HashMap, -) -> impl Into> { +) -> list::ListButton<'a, Message> { let descriptions = §ion.descriptions; settings::item::builder(&descriptions[labels["auto_switch"]]) diff --git a/cosmic-settings/src/pages/desktop/dock/mod.rs b/cosmic-settings/src/pages/desktop/dock/mod.rs index 5f94e07..40738aa 100644 --- a/cosmic-settings/src/pages/desktop/dock/mod.rs +++ b/cosmic-settings/src/pages/desktop/dock/mod.rs @@ -4,7 +4,7 @@ use cosmic::Apply; use cosmic::{ Element, Task, cosmic_config::{ConfigSet, CosmicConfigEntry}, - widget::{settings, text, toggler}, + widget::{settings, text}, }; use cosmic_panel_config::{CosmicPanelConfig, CosmicPanelContainerConfig}; use cosmic_settings_page::{self as page, Section, section}; @@ -170,16 +170,15 @@ pub(crate) fn enable() -> Section { }; settings::section() .title(§ion.title) - .add(settings::item( - &descriptions[dock], - toggler( + .add( + settings::item::builder(&descriptions[dock]).toggler( container_config .config_list .iter() .any(|e| e.name.as_str() == "Dock"), - ) - .on_toggle(Message::EnableDock), - )) + Message::EnableDock, + ), + ) .apply(Element::from) .map(crate::pages::Message::Dock) }) diff --git a/cosmic-settings/src/pages/desktop/panel/inner.rs b/cosmic-settings/src/pages/desktop/panel/inner.rs index e5d5d74..74f0c10 100644 --- a/cosmic-settings/src/pages/desktop/panel/inner.rs +++ b/cosmic-settings/src/pages/desktop/panel/inner.rs @@ -4,11 +4,8 @@ use cosmic::{ cosmic_config::{self, CosmicConfigEntry}, cosmic_theme::Density, iced::{Alignment, Length}, - surface, theme, - widget::{ - button, container, dropdown, icon, row, settings, slider, - space::horizontal as horizontal_space, text, toggler, - }, + surface, + widget::{button, container, dropdown, list, row, settings, slider, space, text}, }; use cosmic::Apply; @@ -119,10 +116,10 @@ pub(crate) fn behavior_and_position< }; settings::section() .title(§ion.title) - .add(settings::item( - &descriptions[autohide_label], - toggler(panel_config.autohide.is_some()).on_toggle(Message::AutoHidePanel), - )) + .add( + settings::item::builder(&descriptions[autohide_label]) + .toggler(panel_config.autohide.is_some(), Message::AutoHidePanel), + ) .add(settings::item( &descriptions[position], dropdown::popup_dropdown( @@ -180,14 +177,14 @@ pub(crate) fn style< }; settings::section() .title(§ion.title) - .add(settings::item( - &descriptions[gap_label], - toggler(panel_config.anchor_gap).on_toggle(Message::AnchorGap), - )) - .add(settings::item( - &descriptions[extend_label], - toggler(panel_config.expand_to_edges).on_toggle(Message::ExtendToEdge), - )) + .add( + settings::item::builder(&descriptions[gap_label]) + .toggler(panel_config.anchor_gap, Message::AnchorGap), + ) + .add( + settings::item::builder(&descriptions[extend_label]) + .toggler(panel_config.expand_to_edges, Message::ExtendToEdge), + ) .add(settings::item( &descriptions[appearance], dropdown::popup_dropdown( @@ -292,24 +289,10 @@ pub(crate) fn configuration + PanelPage>( .iter() .find(|(_, v)| v.id == page.applets_page_id()) { - let control = row::with_children(vec![ - horizontal_space().into(), - icon::from_name("go-next-symbolic").size(16).into(), - ]); - - settings.add( - settings::item::builder(&*descriptions[applets_label]) - .control(control) - .spacing(16) - .width(Length::Fill) - .apply(container) - .class(theme::Container::List) - .apply(button::custom) - .width(Length::Fill) - .class(theme::Button::Transparent) - .width(Length::Fill) - .on_press(crate::pages::Message::Page(panel_applets_entity)), - ) + settings.add(crate::widget::go_next_item( + &*descriptions[applets_label], + crate::pages::Message::Page(panel_applets_entity), + )) } else { settings }; @@ -358,7 +341,7 @@ pub fn reset_button< let descriptions = §ion.descriptions; let inner = page.inner(); if inner.system_default == inner.panel_config { - Element::from(horizontal_space().width(1.)) + Element::from(space()) } else { button::standard(&descriptions[reset_to_default]) .on_press(Message::ResetPanel) diff --git a/cosmic-settings/src/pages/desktop/wallpaper/mod.rs b/cosmic-settings/src/pages/desktop/wallpaper/mod.rs index 3894fa3..7f99b25 100644 --- a/cosmic-settings/src/pages/desktop/wallpaper/mod.rs +++ b/cosmic-settings/src/pages/desktop/wallpaper/mod.rs @@ -28,7 +28,7 @@ use cosmic::{ segmented_button::{self, SingleSelectModel}, settings, space::horizontal as horizontal_space, - tab_bar, text, toggler, + tab_bar, text, }, }; use cosmic::{ @@ -1275,18 +1275,17 @@ pub fn settings() -> Section { children.push({ let mut column = list_column() - .add(settings::item( - &descriptions[same_label], - toggler(page.wallpaper_service_config.same_on_all) - .on_toggle(Message::SameWallpaper), + .add(settings::item::builder(&descriptions[same_label]).toggler( + page.wallpaper_service_config.same_on_all, + Message::SameWallpaper, )) .add(settings::item(&descriptions[fit_label], wallpaper_fit)); if show_slideshow_toggle { - column = column.add(settings::item( - &descriptions[slide_label], - toggler(slideshow_enabled).on_toggle(Message::Slideshow), - )); + column = column.add( + settings::item::builder(&descriptions[slide_label]) + .toggler(slideshow_enabled, Message::Slideshow), + ); } // The rotation frequency dropdown should only be shown when the slideshow is enabled. diff --git a/cosmic-settings/src/pages/desktop/window_management.rs b/cosmic-settings/src/pages/desktop/window_management.rs index 354972c..e5d5092 100644 --- a/cosmic-settings/src/pages/desktop/window_management.rs +++ b/cosmic-settings/src/pages/desktop/window_management.rs @@ -5,7 +5,7 @@ use cosmic::{ Apply, Element, iced::{Alignment, Length}, surface, - widget::{self, settings, toggler}, + widget::{self, settings}, }; use cosmic_comp_config::CosmicCompConfig; @@ -259,13 +259,10 @@ pub fn window_management() -> Section { ), )) .add( - settings::flex_item( - &descriptions[edge_gravity], - toggler(page.edge_snap_threshold != 0).on_toggle(|is_enabled| { + settings::item::builder(&descriptions[edge_gravity]) + .toggler(page.edge_snap_threshold != 0, |is_enabled| { Message::SetEdgeSnapThreshold(if is_enabled { 10 } else { 0 }) }), - ) - .align_items(Alignment::Center), ) .apply(Element::from) .map(crate::pages::Message::WindowManagement) @@ -287,18 +284,18 @@ pub fn window_controls() -> Section { settings::section() .title(§ion.title) - .add(settings::item( - &descriptions[active_window_hint], - toggler(page.show_active_hint).on_toggle(Message::ShowActiveWindowHint), - )) - .add(settings::item( - &descriptions[maximize], - toggler(cosmic::config::show_maximize()).on_toggle(Message::ShowMaximizeButton), - )) - .add(settings::item( - &descriptions[minimize], - toggler(cosmic::config::show_minimize()).on_toggle(Message::ShowMinimizeButton), - )) + .add( + settings::item::builder(&descriptions[active_window_hint]) + .toggler(page.show_active_hint, Message::ShowActiveWindowHint), + ) + .add( + settings::item::builder(&descriptions[maximize]) + .toggler(cosmic::config::show_maximize(), Message::ShowMaximizeButton), + ) + .add( + settings::item::builder(&descriptions[minimize]) + .toggler(cosmic::config::show_minimize(), Message::ShowMinimizeButton), + ) .apply(Element::from) .map(crate::pages::Message::WindowManagement) }) @@ -319,10 +316,10 @@ pub fn focus_navigation() -> Section { settings::section() .title(§ion.title) - .add(settings::item( - &descriptions[focus_follows_cursor], - toggler(page.focus_follows_cursor).on_toggle(Message::SetFocusFollowsCursor), - )) + .add( + settings::item::builder(&descriptions[focus_follows_cursor]) + .toggler(page.focus_follows_cursor, Message::SetFocusFollowsCursor), + ) .add(settings::item( &descriptions[focus_follows_cursor_delay], widget::editable_input("", &page.focus_delay_text, false, |editing| { @@ -333,10 +330,10 @@ pub fn focus_navigation() -> Section { .on_submit(|_| Message::SaveFocusFollowsCursorDelay(true)) .width(Length::Fixed(80.0)), )) - .add(settings::item( - &descriptions[cursor_follows_focus], - toggler(page.cursor_follows_focus).on_toggle(Message::SetCursorFollowsFocus), - )) + .add( + settings::item::builder(&descriptions[cursor_follows_focus]) + .toggler(page.cursor_follows_focus, Message::SetCursorFollowsFocus), + ) .apply(Element::from) .map(crate::pages::Message::WindowManagement) }) diff --git a/cosmic-settings/src/pages/desktop/workspaces.rs b/cosmic-settings/src/pages/desktop/workspaces.rs index 081d526..230ac7f 100644 --- a/cosmic-settings/src/pages/desktop/workspaces.rs +++ b/cosmic-settings/src/pages/desktop/workspaces.rs @@ -8,7 +8,7 @@ use cosmic::{ cosmic_config::{self, ConfigGet, ConfigSet}, iced::Length, surface, - widget::{self, radio, settings, text}, + widget::{self, settings, text}, }; use cosmic_comp_config::workspace::{Action, WorkspaceConfig, WorkspaceLayout, WorkspaceMode}; use cosmic_settings_page::Section; @@ -209,26 +209,16 @@ fn multi_behavior() -> Section { let descriptions = §ion.descriptions; settings::section() .title(§ion.title) - .add(settings::item_row(vec![ - radio( - text::body(&descriptions[span]), - WorkspaceMode::Global, - Some(page.comp_workspace_config.workspace_mode), - Message::SetWorkspaceMode, - ) - .width(Length::Fill) - .into(), - ])) - .add(settings::item_row(vec![ - radio( - text::body(&descriptions[separate]), - WorkspaceMode::OutputBound, - Some(page.comp_workspace_config.workspace_mode), - Message::SetWorkspaceMode, - ) - .width(Length::Fill) - .into(), - ])) + .add(settings::item::builder(&descriptions[span]).radio( + WorkspaceMode::Global, + Some(page.comp_workspace_config.workspace_mode), + Message::SetWorkspaceMode, + )) + .add(settings::item::builder(&descriptions[separate]).radio( + WorkspaceMode::OutputBound, + Some(page.comp_workspace_config.workspace_mode), + Message::SetWorkspaceMode, + )) .apply(Element::from) .map(crate::pages::Message::DesktopWorkspaces) }) @@ -247,26 +237,16 @@ fn workspace_orientation() -> Section { let descriptions = §ion.descriptions; settings::section() .title(§ion.title) - .add(settings::item_row(vec![ - radio( - text::body(&descriptions[vertical]), - WorkspaceLayout::Vertical, - Some(page.comp_workspace_config.workspace_layout), - Message::SetWorkspaceLayout, - ) - .width(Length::Fill) - .into(), - ])) - .add(settings::item_row(vec![ - radio( - text::body(&descriptions[horizontal]), - WorkspaceLayout::Horizontal, - Some(page.comp_workspace_config.workspace_layout), - Message::SetWorkspaceLayout, - ) - .width(Length::Fill) - .into(), - ])) + .add(settings::item::builder(&descriptions[vertical]).radio( + WorkspaceLayout::Vertical, + Some(page.comp_workspace_config.workspace_layout), + Message::SetWorkspaceLayout, + )) + .add(settings::item::builder(&descriptions[horizontal]).radio( + WorkspaceLayout::Horizontal, + Some(page.comp_workspace_config.workspace_layout), + Message::SetWorkspaceLayout, + )) .apply(Element::from) .map(crate::pages::Message::DesktopWorkspaces) }) diff --git a/cosmic-settings/src/pages/display/mod.rs b/cosmic-settings/src/pages/display/mod.rs index 30e5db6..1b73211 100644 --- a/cosmic-settings/src/pages/display/mod.rs +++ b/cosmic-settings/src/pages/display/mod.rs @@ -10,7 +10,7 @@ use cosmic::iced::core::text::{Ellipsize, EllipsizeHeightLimit}; use cosmic::iced::widget::scrollable::RelativeOffset; use cosmic::iced::{Alignment, Length, stream, time}; use cosmic::widget::{ - self, column, container, dropdown, list_column, segmented_button, tab_bar, text, toggler, + self, column, container, dropdown, list_column, segmented_button, tab_bar, text, }; use cosmic::{Apply, Element, Task, surface}; use cosmic_randr_shell::{ @@ -1370,10 +1370,10 @@ pub fn display_configuration() -> Section { || !active_output.enabled { list_column() - .add(widget::settings::item( - &descriptions[enable_label], - toggler(active_output.enabled).on_toggle(Message::DisplayToggle), - )) + .add( + widget::settings::item::builder(&descriptions[enable_label]) + .toggler(active_output.enabled, Message::DisplayToggle), + ) .add(widget::settings::item( &descriptions[mirroring_label], widget::dropdown::multi::dropdown( diff --git a/cosmic-settings/src/pages/input/keyboard/mod.rs b/cosmic-settings/src/pages/input/keyboard/mod.rs index ddb355e..22080f8 100644 --- a/cosmic-settings/src/pages/input/keyboard/mod.rs +++ b/cosmic-settings/src/pages/input/keyboard/mod.rs @@ -11,7 +11,7 @@ use cosmic::{ cosmic_config::{self, ConfigSet}, iced::{Alignment, Length}, theme, - widget::{self, ListColumn, button, container, icon, radio, row, settings}, + widget::{self, ListColumn, button, container, icon, list, row, settings}, }; use cosmic_comp_config::{KeyboardConfig, NumlockState, XkbConfig}; use cosmic_settings_page::{self as page, Section, section}; @@ -243,15 +243,10 @@ fn special_char_radio_row<'a>( desc: &'a str, value: Option<&'static str>, current_value: Option<&'a str>, -) -> cosmic::Element<'a, Message> { - settings::item_row(vec![ - radio(desc, value, Some(current_value), |_| { - Message::SpecialCharacterSelect(value) - }) - .width(Length::Fill) - .into(), - ]) - .into() +) -> list::ListButton<'a, Message> { + settings::item::builder(desc).radio(value, Some(current_value), |_| { + Message::SpecialCharacterSelect(value) + }) } impl page::Page for Page { @@ -552,9 +547,11 @@ impl Page { pub fn add_input_source_view(&self) -> Element<'_, crate::pages::Message> { let space_l = theme::spacing().space_l; - let toggler = settings::item::builder(fl!("show-extended-input-sources")).toggler( - self.show_extended_input_sources, - Message::SetShowExtendedInputSources, + let toggler = settings::section().add( + settings::item::builder(fl!("show-extended-input-sources")).toggler( + self.show_extended_input_sources, + Message::SetShowExtendedInputSources, + ), ); let mut list = widget::list_column(); @@ -653,16 +650,11 @@ impl Page { let mut list = cosmic::widget::list_column(); for (desc, state) in options { - list = list.add(settings::item_row(vec![ - radio( - cosmic::widget::text(desc), - Some(state), - Some(Some(current)), - |_| Message::SetNumlockState(state), - ) - .width(Length::Fill) - .into(), - ])); + list = list.add(settings::item::builder(desc).radio( + Some(state), + Some(Some(current)), + |_| Message::SetNumlockState(state), + )); } list.into() diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs index 9e8923c..70e1952 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs @@ -779,10 +779,7 @@ fn context_drawer<'a>( show_action: bool, ) -> Element<'a, ShortcutMessage> { let cosmic::cosmic_theme::Spacing { - space_xxs, - space_xs, - space_l, - .. + space_xs, space_l, .. } = theme::spacing(); let model = &shortcuts[id]; @@ -798,7 +795,7 @@ fn context_drawer<'a>( }); let bindings = model.bindings.iter().enumerate().fold( - widget::list_column().spacing(space_xxs), + widget::list_column(), |section, (_, (bind_id, shortcut))| { let editing = editing == Some(bind_id); let text: Cow<'_, str> = if !editing && shortcut.binding.is_set() { diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs index a3b835f..7b04dea 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/custom.rs @@ -452,7 +452,7 @@ impl Page { .padding([16, 24]); let keys = self.add_shortcut.keys.iter().fold( - widget::list_column().spacing(0), + widget::list_column(), |column, (id, (text, widget_id))| { let key_combination = widget::editable_input( fl!("type-key-combination"), @@ -474,7 +474,7 @@ impl Page { }, ); - let controls = widget::list_column().add(input_fields).add(keys).spacing(0); + let controls = widget::list_column().add(input_fields).add(keys); let add_keybinding_button = widget::button::standard(fl!("add-another-keybinding")) .on_press(Message::AddShortcut) diff --git a/cosmic-settings/src/pages/input/touchpad.rs b/cosmic-settings/src/pages/input/touchpad.rs index e1cf4d3..ba667ef 100644 --- a/cosmic-settings/src/pages/input/touchpad.rs +++ b/cosmic-settings/src/pages/input/touchpad.rs @@ -166,27 +166,17 @@ fn click_behavior() -> Section { settings::section() .title(&*section.title) // Secondary click via two fingers, and middle-click via three fingers - .add(settings::item_row(vec![ - widget::radio( - text::body(&descriptions[click_finger]), - ClickMethod::Clickfinger, - page.input_touchpad.click_method, - |option| Message::SetSecondaryClickBehavior(Some(option), true), - ) - .width(Length::Fill) - .into(), - ])) + .add(settings::item::builder(&descriptions[click_finger]).radio( + ClickMethod::Clickfinger, + page.input_touchpad.click_method, + |option| Message::SetSecondaryClickBehavior(Some(option), true), + )) // Secondary and middle-click via button areas. - .add(settings::item_row(vec![ - widget::radio( - text::body(&descriptions[button_areas]), - ClickMethod::ButtonAreas, - page.input_touchpad.click_method, - |option| Message::SetSecondaryClickBehavior(Some(option), true), - ) - .width(Length::Fill) - .into(), - ])) + .add(settings::item::builder(&descriptions[button_areas]).radio( + ClickMethod::ButtonAreas, + page.input_touchpad.click_method, + |option| Message::SetSecondaryClickBehavior(Some(option), true), + )) .add( settings::item::builder(&descriptions[tap_to_click]).toggler( page.input_touchpad @@ -222,33 +212,27 @@ fn scrolling() -> Section { settings::section() .title(§ion.title) // Two-finger scrolling toggle - .add(settings::item_row(vec![ - widget::radio( - text::body(&descriptions[two_finger]), + .add( + settings::item::builder(&descriptions[two_finger]).radio( ScrollMethod::TwoFinger, page.input_touchpad .scroll_config .as_ref() .and_then(|x| x.method), |option| Message::SetScrollMethod(Some(option), true), - ) - .width(Length::Fill) - .into(), - ])) + ), + ) // Edge scrolling toggle - .add(settings::item_row(vec![ - widget::radio( - text::body(&descriptions[edge]), + .add( + settings::item::builder(&descriptions[edge]).radio( ScrollMethod::Edge, page.input_touchpad .scroll_config .as_ref() .and_then(|x| x.method), |option| Message::SetScrollMethod(Some(option), true), - ) - .width(Length::Fill) - .into(), - ])) + ), + ) // Scroll speed slider .add(settings::item(&descriptions[scroll_speed], { let value = page diff --git a/cosmic-settings/src/pages/networking/wifi.rs b/cosmic-settings/src/pages/networking/wifi.rs index 1e5a9e0..cc1f43b 100644 --- a/cosmic-settings/src/pages/networking/wifi.rs +++ b/cosmic-settings/src/pages/networking/wifi.rs @@ -13,7 +13,7 @@ use cosmic::{ iced::core::text::Wrapping, iced::{Alignment, Length, widget::operation::focus_next}, task, - widget::{self, column, icon, space::horizontal as horizontal_space, text_input::focus}, + widget::{self, column, icon, space::horizontal, text_input::focus}, }; use cosmic_settings_network_manager_subscription::{ self as network_manager, NetworkManagerState, @@ -195,7 +195,7 @@ impl page::Page for Page { widget::button::standard(fl!("cancel")).on_press(Message::CancelDialog); let control: Element<_> = if let Some(identity) = identity { - widget::Column::new() + column::with_capacity(2) .spacing(8) .push( widget::text_input::text_input(fl!("identity"), identity) @@ -883,7 +883,7 @@ fn devices_view() -> Section { let spacing = cosmic::theme::spacing(); let wifi_enable = widget::settings::item::builder(§ion.descriptions[wifi_txt]) - .control(widget::toggler(state.wifi_enabled).on_toggle(Message::WiFiEnable)); + .toggler(state.wifi_enabled, Message::WiFiEnable); let mut view = widget::column::with_capacity(4) .push(widget::list_column().add(wifi_enable)) @@ -1019,7 +1019,7 @@ fn devices_view() -> Section { let item = widget::settings::item_row(vec![ identifier.into(), - horizontal_space().into(), + horizontal().into(), controls.into(), ]); @@ -1124,7 +1124,7 @@ fn devices_view() -> Section { let item = widget::settings::item_row(vec![ identifier.into(), - horizontal_space().into(), + horizontal().into(), controls.into(), ]); @@ -1234,7 +1234,7 @@ fn devices_view() -> Section { let item = widget::settings::item_row(vec![ identifier.into(), - horizontal_space().into(), + horizontal().into(), connect, ]); diff --git a/cosmic-settings/src/pages/power/mod.rs b/cosmic-settings/src/pages/power/mod.rs index b2a42d7..b68b135 100644 --- a/cosmic-settings/src/pages/power/mod.rs +++ b/cosmic-settings/src/pages/power/mod.rs @@ -7,7 +7,7 @@ use cosmic::Task; use cosmic::iced::core::text::{Ellipsize, EllipsizeHeightLimit}; use cosmic::iced::widget::{column, row}; use cosmic::iced::{self, Alignment, Length, stream}; -use cosmic::widget::{self, radio, settings, space::horizontal as horizontal_space, text}; +use cosmic::widget::{self, settings, space, text}; use cosmic::{Apply, surface}; use cosmic_config::{Config, CosmicConfigEntry}; use cosmic_idle_config::CosmicIdleConfig; @@ -508,12 +508,8 @@ fn connected_devices() -> Section { .map(|mut device_row| { cosmic::Element::from( row!( - device_row.next().unwrap_or( - horizontal_space().width(Length::Fill).into() - ), - device_row.next().unwrap_or( - horizontal_space().width(Length::Fill).into() - ), + device_row.next().unwrap_or(space::horizontal().into()), + device_row.next().unwrap_or(space::horizontal().into()), ) .spacing(8), ) @@ -543,18 +539,9 @@ fn profiles() -> Section { section = profiles .into_iter() .map(|profile| { - settings::item_row(vec![ - radio( - widget::column::with_capacity(2) - .push(text::body(profile.title())) - .push(text::caption(profile.description())), - profile, - Some(current_profile), - Message::PowerProfileChange, - ) - .width(Length::Fill) - .into(), - ]) + settings::item::builder(profile.title()) + .description(profile.description()) + .radio(profile, Some(current_profile), Message::PowerProfileChange) }) .fold(section, settings::Section::add); } diff --git a/cosmic-settings/src/pages/sound/mod.rs b/cosmic-settings/src/pages/sound/mod.rs index 6793a91..a2a7699 100644 --- a/cosmic-settings/src/pages/sound/mod.rs +++ b/cosmic-settings/src/pages/sound/mod.rs @@ -320,10 +320,9 @@ fn input() -> Section { controls = controls.add( settings::item::builder(&*section.descriptions[amplification]) .description(&*section.descriptions[amplification_desc]) - .control( - widget::toggler(page.amplification_source) - .on_toggle(|t| Message::ToggleOverAmplificationSource(t).into()), - ), + .toggler(page.amplification_source, |t| { + Message::ToggleOverAmplificationSource(t).into() + }), ); Element::from(controls) @@ -435,10 +434,9 @@ fn output() -> Section { controls = controls.add( settings::item::builder(&*section.descriptions[amplification]) .description(&*section.descriptions[amplification_desc]) - .control( - widget::toggler(page.amplification_sink) - .on_toggle(|t| Message::ToggleOverAmplificationSink(t).into()), - ), + .toggler(page.amplification_sink, |t| { + Message::ToggleOverAmplificationSink(t).into() + }), ); Element::from(controls) diff --git a/cosmic-settings/src/pages/system/users/mod.rs b/cosmic-settings/src/pages/system/users/mod.rs index 079c39c..5d23597 100644 --- a/cosmic-settings/src/pages/system/users/mod.rs +++ b/cosmic-settings/src/pages/system/users/mod.rs @@ -8,7 +8,7 @@ use cosmic::{ Apply, Element, dialog::file_chooser, iced::{Alignment, Length}, - widget::{self, column, icon, row, settings, space::horizontal as horizontal_space, text}, + widget::{self, column, icon, list, row, settings, space::horizontal, text}, }; use cosmic_settings_page::{self as page, Section, section}; use image::GenericImageView; @@ -322,7 +322,7 @@ impl page::Page for Page { ))) .width(Length::Fill), ) - .push(horizontal_space().width(5.)) + .push(horizontal().width(5.)) .push(admin_toggler) .align_y(Alignment::Center), ), @@ -785,16 +785,13 @@ fn user_list() -> Section { .descriptions(descriptions) .view::(move |_binder, page, section| { let descriptions = §ion.descriptions; - - let cosmic::cosmic_theme::Spacing { - space_xxs, space_m, .. - } = cosmic::theme::active().cosmic().spacing; + let space_xxs = cosmic::theme::spacing().space_xxs; let users_list = page .users .iter() .enumerate() - .flat_map(|(idx, user)| { + .map(|(idx, user)| { let expanded = matches!(page.selected_user_idx, Some(user_idx) if user_idx == idx); @@ -832,37 +829,6 @@ fn user_list() -> Section { &descriptions[user_type_standard] }); - let expanded_details = expanded.then(|| { - let mut details_list = widget::list_column() - .add(settings::item(&page.fullname_label, fullname)) - .add(settings::item(&page.username_label, username)) - .add(settings::item(&page.password_label, password)) - .add(settings::item_row(vec![ - column::with_capacity(2) - .push(text::body(crate::fl!("administrator"))) - .push(text::caption(crate::fl!("administrator", "desc"))) - .width(Length::Fill) - .into(), - horizontal_space().width(5.).into(), - widget::toggler(user.is_admin) - .on_toggle(|enabled| { - Message::SelectedUserSetAdmin(user.id, enabled) - }) - .into(), - ])); - - if page.users.len() > 1 { - details_list = details_list.add(settings::item_row(vec![ - horizontal_space().width(Length::Fill).into(), - widget::button::destructive(crate::fl!("remove-user")) - .on_press(Message::SelectedUserDelete(user.id)) - .into(), - ])); - } - - details_list.apply(Element::from) - }); - let profile_icon_handle = user .profile_icon .clone() @@ -884,8 +850,8 @@ fn user_list() -> Section { ) .align_y(Alignment::Center) .spacing(space_xxs) + .width(Length::Fill) .into(), - horizontal_space().width(Length::Fill).into(), icon::from_name(if expanded { "go-up-symbolic" } else { @@ -896,28 +862,49 @@ fn user_list() -> Section { .into(), ]); - let account_details = Some( - widget::button::custom(account_details_content) - .padding([space_xxs, space_m]) - .on_press(Message::SelectUser(idx)) - .class(cosmic::theme::Button::ListItem) - .width(Length::Fill) + let mut user_list = widget::list_column().add( + list::button(account_details_content) .selected(expanded) - .apply(Element::from), + .on_press(Message::SelectUser(idx)), ); - vec![account_details, expanded_details] + if expanded { + user_list = user_list + .add(settings::item(&page.fullname_label, fullname)) + .add(settings::item(&page.username_label, username)) + .add(settings::item(&page.password_label, password)) + .add(settings::item_row(vec![ + column::with_capacity(2) + .push(text::body(crate::fl!("administrator"))) + .push(text::caption(crate::fl!("administrator", "desc"))) + .width(Length::Fill) + .into(), + horizontal().width(5.).into(), + widget::toggler(user.is_admin) + .on_toggle(|enabled| { + Message::SelectedUserSetAdmin(user.id, enabled) + }) + .into(), + ])); + + if page.users.len() > 1 { + user_list = user_list.add(settings::item_row(vec![ + horizontal().width(Length::Fill).into(), + widget::button::destructive(crate::fl!("remove-user")) + .on_press(Message::SelectedUserDelete(user.id)) + .into(), + ])); + } + } + + Element::from(user_list) }) - .flatten() .fold( - widget::list_column() - .spacing(0) - .padding([8, 0]) - .divider_padding(0) - .list_item_padding(0), - widget::ListColumn::add, + widget::column::with_capacity(page.users.len()), + |col, user| col.push(user), ) - .apply(|list| Element::from(settings::section::with_column(list))); + .spacing(space_xxs) + .width(Length::Fill); let add_user = widget::button::standard(crate::fl!("add-user")) .on_press(Message::Dialog(Some(Dialog::AddNewUser(User::default())))) @@ -928,7 +915,7 @@ fn user_list() -> Section { widget::column::with_capacity(2) .push(users_list) .push(add_user) - .spacing(space_m) + .spacing(space_xxs) .apply(Element::from) .map(crate::pages::Message::User) }) diff --git a/cosmic-settings/src/pages/time/date.rs b/cosmic-settings/src/pages/time/date.rs index d63f0d5..d2f83ff 100644 --- a/cosmic-settings/src/pages/time/date.rs +++ b/cosmic-settings/src/pages/time/date.rs @@ -1,13 +1,14 @@ // Copyright 2023 System76 // SPDX-License-Identifier: GPL-3.0-only +use crate::widget::selection_context_item; use cosmic::{ Apply, Element, Task, app::ContextDrawer, cosmic_config::{self, ConfigGet, ConfigSet}, iced::core::text::Wrapping, surface, - widget::{self, dropdown, settings, space::horizontal as horizontal_space}, + widget::{self, dropdown, list, settings}, }; use cosmic_settings_page::{self as page, Section, section}; use icu::{ @@ -20,7 +21,6 @@ use icu::{ locale::{Locale, preferences::extensions::unicode::keywords::HourCycle}, }; use slotmap::{Key, SlotMap}; -use std::rc::Rc; pub use timedate_zbus::TimeDateProxy; use tracing::error; @@ -335,7 +335,10 @@ impl Page { for (id, timezone) in self.timezone_list.iter().enumerate() { if search_input.is_empty() || timezone.to_lowercase().contains(search_input) { - list = list.add(self.timezone_context_item(id, timezone)); + list = list.add( + list::button(selection_context_item(timezone, Some(id) == self.timezone)) + .on_press(Message::Timezone(id)), + ); } } @@ -343,40 +346,6 @@ impl Page { .map(crate::pages::Message::DateAndTime) } - fn timezone_context_item<'a>(&self, id: usize, timezone: &'a str) -> Element<'a, Message> { - let svg_accent = Rc::new(|theme: &cosmic::Theme| cosmic::widget::svg::Style { - color: Some(theme.cosmic().accent_text_color().into()), - }); - let selected = Some(id) == self.timezone; - - widget::settings::item_row(vec![ - widget::text::body(timezone) - .class(if selected { - cosmic::theme::Text::Accent - } else { - cosmic::theme::Text::Default - }) - .wrapping(Wrapping::Word) - .width(cosmic::iced::Length::Fill) - .into(), - if selected { - widget::icon::from_name("object-select-symbolic") - .size(16) - .icon() - .class(cosmic::theme::Svg::Custom(svg_accent.clone())) - .into() - } else { - horizontal_space().width(16.).into() - }, - ]) - .apply(widget::container) - .class(cosmic::theme::Container::List) - .apply(widget::button::custom) - .class(cosmic::theme::Button::Transparent) - .on_press(Message::Timezone(id)) - .into() - } - fn update_local_time(&mut self) { self.local_time = Some(update_local_time()); @@ -498,30 +467,19 @@ fn timezone() -> Section { .title(fl!("time-zone")) .descriptions(descriptions) .view::(move |_binder, page, section| { - let timezone_context_button = widget::row::with_capacity(2) - .spacing(12) - .push( + settings::section() + .title(§ion.title) + // Time zone select + .add(crate::widget::go_next_with_item( + &*section.descriptions[time_zone], widget::text::body( page.timezone .map(|id| &*page.timezone_list[id]) .unwrap_or_default(), ) .wrapping(Wrapping::Word), - ) - .push(widget::icon::from_name("go-next-symbolic").size(16).icon()) - .apply(widget::container) - .class(cosmic::theme::Container::List) - .apply(widget::button::custom) - .class(cosmic::theme::Button::Transparent) - .on_press(Message::TimezoneContext); - - settings::section() - .title(§ion.title) - // Time zone select - .add( - settings::item::builder(&*section.descriptions[time_zone]) - .control(timezone_context_button), - ) + Message::TimezoneContext, + )) .apply(cosmic::Element::from) .map(crate::pages::Message::DateAndTime) }) diff --git a/cosmic-settings/src/pages/time/region.rs b/cosmic-settings/src/pages/time/region.rs index 9f618c9..86d4e8f 100644 --- a/cosmic-settings/src/pages/time/region.rs +++ b/cosmic-settings/src/pages/time/region.rs @@ -2,13 +2,12 @@ // SPDX-License-Identifier: GPL-3.0-only use std::collections::{BTreeMap, BTreeSet}; -use std::rc::Rc; use std::sync::Arc; +use crate::widget::selection_context_item; use cosmic::app::{ContextDrawer, context_drawer}; -use cosmic::iced::core::text::Wrapping; use cosmic::iced::{Alignment, Length}; -use cosmic::widget::{self, button, space::horizontal as horizontal_space}; +use cosmic::widget::{self, button, list}; use cosmic::{Apply, Element}; use cosmic_config::{ConfigGet, ConfigSet}; use cosmic_settings_page::Section; @@ -361,14 +360,9 @@ impl Page { } fn add_language_view(&self) -> cosmic::Element<'_, crate::pages::Message> { - let mut list = widget::list_column(); - + let mut list = widget::list_column::with_capacity(self.available_languages.len()); let search_input = &self.add_language_search.trim().to_lowercase(); - let svg_accent = Rc::new(|theme: &cosmic::Theme| cosmic::widget::svg::Style { - color: Some(theme.cosmic().accent_text_color().into()), - }); - for (id, available_language) in &self.available_languages { if search_input.is_empty() || available_language @@ -381,37 +375,17 @@ impl Page { .as_ref() .is_some_and(|(_, locales)| locales.contains(&available_language.lang_code)); - let button = widget::settings::item_row(vec![ - widget::text::body(&available_language.display_name) - .class(if is_installed { - cosmic::theme::Text::Accent - } else { - cosmic::theme::Text::Default - }) - .wrapping(Wrapping::Word) - .width(Length::Fill) - .into(), - if is_installed { - widget::icon::from_name("object-select-symbolic") - .size(16) - .icon() - .class(cosmic::theme::Svg::Custom(svg_accent.clone())) - .into() + list = list.add( + list::button(selection_context_item( + &available_language.display_name, + is_installed, + )) + .on_press(if is_installed { + Message::RemoveLanguage(id) } else { - horizontal_space().width(16.).into() - }, - ]) - .apply(widget::container) - .class(cosmic::theme::Container::List) - .apply(widget::button::custom) - .class(cosmic::theme::Button::Transparent) - .on_press(if is_installed { - Message::RemoveLanguage(id) - } else { - Message::AddLanguage(id) - }); - - list = list.add(button) + Message::AddLanguage(id) + }), + ) } } @@ -492,12 +466,7 @@ impl Page { } fn region_view(&self) -> cosmic::Element<'_, crate::pages::Message> { - let svg_accent = Rc::new(|theme: &cosmic::Theme| { - let color = theme.cosmic().accent_text_color().into(); - cosmic::widget::svg::Style { color: Some(color) } - }); - - let mut list = widget::list_column(); + let mut list = widget::list_column::with_capacity(self.available_languages.len()); let search_input = &self.add_language_search.trim().to_lowercase(); @@ -509,37 +478,14 @@ impl Page { .as_ref() .is_some_and(|l| l.lang_code == locale.lang_code); - let button = widget::settings::item_row(vec![ - widget::text::body(&locale.region_name) - .class(if is_selected { - cosmic::theme::Text::Accent + list = list.add( + list::button(selection_context_item(&locale.region_name, is_selected)) + .on_press_maybe(if is_selected { + None } else { - cosmic::theme::Text::Default - }) - .wrapping(Wrapping::Word) - .width(Length::Fill) - .into(), - if is_selected { - widget::icon::from_name("object-select-symbolic") - .size(16) - .icon() - .class(cosmic::theme::Svg::Custom(svg_accent.clone())) - .into() - } else { - horizontal_space().width(16.).into() - }, - ]) - .apply(widget::container) - .class(cosmic::theme::Container::List) - .apply(widget::button::custom) - .class(cosmic::theme::Button::Transparent) - .on_press_maybe(if is_selected { - None - } else { - Some(Message::SelectRegion(id)) - }); - - list = list.add(button) + Some(Message::SelectRegion(id)) + }), + ) } } diff --git a/cosmic-settings/src/widget/mod.rs b/cosmic-settings/src/widget/mod.rs index 59c1283..80a5ca2 100644 --- a/cosmic-settings/src/widget/mod.rs +++ b/cosmic-settings/src/widget/mod.rs @@ -2,14 +2,15 @@ // SPDX-License-Identifier: GPL-3.0-only use std::borrow::Cow; +use std::rc::Rc; use cosmic::cosmic_theme::Spacing; use cosmic::iced::core::text::Wrapping; use cosmic::iced::{Alignment, Length}; use cosmic::widget::color_picker::ColorPickerUpdate; use cosmic::widget::{ - self, ColorPickerModel, button, column, container, divider, icon, row, settings, - space::{horizontal as horizontal_space, vertical as vertical_space}, + self, ColorPickerModel, button, column, container, divider, icon, list, row, settings, + space::{horizontal, vertical}, text, }; use cosmic::{Apply, Element, theme}; @@ -75,7 +76,7 @@ pub fn search_header( .into(), ); - column_children.push(vertical_space().height(Length::Fixed(8.)).into()); + column_children.push(vertical().height(Length::Fixed(8.)).into()); column_children.push(divider::horizontal::heavy().into()); column::with_children(column_children).into() @@ -89,12 +90,12 @@ pub fn search_page_link(title: &str) -> button::TextButton<'_, pub fn page_title(page: &page::Info) -> Element<'_, Message> { row::with_capacity(2) .push(text::title3(page.title.as_str())) - .push(horizontal_space()) + .push(horizontal()) .into() } #[must_use] -pub fn unimplemented_page() -> Element<'static, Message> { +pub fn unimplemented_page() -> Element<'static, Message> { settings::section().title("") .add(text::body("We haven't created that panel yet, and/or it is using a similar idea as current Pop! designs.")) .into() @@ -184,50 +185,68 @@ pub fn sub_page_header<'a, Message: 'static + Clone>( .into() } -pub fn go_next_item( +pub fn go_next_item( description: &str, msg_opt: impl Into>, -) -> cosmic::Element<'_, Msg> { +) -> list::ListButton<'_, Msg> { settings::item_row(vec![ - text::body(description).wrapping(Wrapping::Word).into(), - horizontal_space().into(), + text::body(description) + .width(Length::Fill) + .wrapping(Wrapping::Word) + .into(), icon::from_name("go-next-symbolic").size(16).icon().into(), ]) - .width(Length::Fill) - .apply(widget::container) - .class(cosmic::theme::Container::List) - .width(Length::Fill) - .apply(button::custom) - .width(Length::Fill) - .padding(0) - .class(theme::Button::Transparent) + .apply(list::button) + .on_press_maybe(msg_opt.into()) +} + +pub fn go_next_with_item<'a, Msg: 'static>( + description: &'a str, + item: impl Into>, + msg_opt: impl Into>, +) -> list::ListButton<'_, Msg> { + settings::item_row(vec![ + text::body(description).wrapping(Wrapping::Word).into(), + horizontal().into(), + row::with_capacity(2) + .push(item) + .push(icon::from_name("go-next-symbolic").size(16).icon()) + .align_y(Alignment::Center) + .spacing(theme::spacing().space_s) + .into(), + ]) + .apply(list::button) .on_press_maybe(msg_opt.into()) .into() } -pub fn go_next_with_item<'a, Msg: Clone + 'static>( - description: &'a str, - item: impl Into>, - msg_opt: impl Into>, +pub fn selection_context_item<'a, Msg: 'static>( + name: &'a str, + selected: bool, ) -> cosmic::Element<'a, Msg> { + let svg_accent = Rc::new(|theme: &cosmic::Theme| widget::svg::Style { + color: Some(theme.cosmic().accent_text_color().into()), + }); + settings::item_row(vec![ - text::body(description).wrapping(Wrapping::Word).into(), - horizontal_space().into(), - widget::row::with_capacity(2) - .push(item) - .push(icon::from_name("go-next-symbolic").size(16).icon()) - .align_y(Alignment::Center) - .spacing(cosmic::theme::spacing().space_s) + text::body(name) + .class(if selected { + theme::Text::Accent + } else { + theme::Text::Default + }) + .wrapping(Wrapping::Word) + .width(Length::Fill) .into(), + if selected { + icon::from_name("object-select-symbolic") + .size(16) + .icon() + .class(theme::Svg::Custom(svg_accent.clone())) + .into() + } else { + horizontal().width(16.).into() + }, ]) - .width(Length::Fill) - .apply(widget::container) - .class(cosmic::theme::Container::List) - .width(Length::Fill) - .apply(button::custom) - .padding(0) - .width(Length::Fill) - .class(theme::Button::Transparent) - .on_press_maybe(msg_opt.into()) .into() } diff --git a/page/src/section.rs b/page/src/section.rs index 3492e3a..c8cf839 100644 --- a/page/src/section.rs +++ b/page/src/section.rs @@ -40,7 +40,7 @@ pub struct Section { pub search_ignore: bool, } -impl Default for Section { +impl Default for Section { fn default() -> Self { Self { title: String::new(), @@ -120,7 +120,7 @@ impl Section { #[must_use] #[inline] -pub fn unimplemented<'a, Message: 'static>( +pub fn unimplemented<'a, Message: Clone + 'static>( _binder: &'a Binder, _page: &'a dyn Page, _section: &'a Section,