From ce51b784b77893e86b5795731c7fa4640bd9b6c7 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 28 Apr 2026 15:03:33 +0200 Subject: [PATCH 01/84] chore: update MSRV to Rust 1.93 --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index ff100edc..79d20990 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.90.0" +channel = "1.93" From b7b768a998d3c86d374da0315c26235138ffe848 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 28 Apr 2026 15:04:21 +0200 Subject: [PATCH 02/84] chore: update libcosmic --- Cargo.lock | 260 +++++++++++++++++++++++++---------------------------- 1 file changed, 124 insertions(+), 136 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1a265c94..6e0f3c5c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -146,6 +146,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "almost" version = "0.2.0" @@ -1394,7 +1400,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1415,7 +1421,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "quote", "syn", @@ -1445,7 +1451,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", @@ -1657,8 +1663,9 @@ dependencies = [ [[package]] name = "cosmic-text" -version = "0.18.2" -source = "git+https://github.com/pop-os/cosmic-text.git#4d74f795cc771fdcc7ea0f9cacba63fcf036fad6" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ "bitflags 2.11.0", "fontdb", @@ -1681,7 +1688,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "almost", "configparser", @@ -1728,7 +1735,7 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "cryoglyph" version = "0.1.0" -source = "git+https://github.com/pop-os/glyphon.git?tag=cosmic-0.14#c49de15bce4d8254ac136d1be9911960cc85ce12" +source = "git+https://github.com/iced-rs/cryoglyph.git?rev=e429a025df36ab8145708acb309080ae3deec17a#e429a025df36ab8145708acb309080ae3deec17a" dependencies = [ "cosmic-text", "etagere", @@ -2100,7 +2107,7 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[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" @@ -2762,35 +2769,18 @@ dependencies = [ "gl_generator", ] -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.11.0", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.11.0", -] - [[package]] name = "gpu-allocator" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" +checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" dependencies = [ + "ash", + "hashbrown 0.16.1", "log", "presser", - "thiserror 1.0.69", - "windows 0.58.0", + "thiserror 2.0.18", + "windows 0.61.3", ] [[package]] @@ -2875,6 +2865,8 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ + "allocator-api2", + "equivalent", "foldhash 0.2.0", ] @@ -3032,7 +3024,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "dnd", "iced_accessibility", @@ -3053,7 +3045,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "accesskit", "accesskit_winit", @@ -3062,7 +3054,7 @@ 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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "bitflags 2.11.0", "bytes", @@ -3086,7 +3078,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "iced_core", "iced_futures", @@ -3096,7 +3088,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "futures", "iced_core", @@ -3110,7 +3102,7 @@ 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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "bitflags 2.11.0", "bytemuck", @@ -3131,7 +3123,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "iced_graphics", "iced_runtime", @@ -3140,7 +3132,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3152,7 +3144,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3167,7 +3159,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "bytemuck", "cosmic-text", @@ -3184,7 +3176,7 @@ 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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.0", @@ -3215,7 +3207,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3233,7 +3225,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#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3709,6 +3701,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" @@ -4091,7 +4092,7 @@ checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#6caccaba337ed9bab21c5fe3c2aa7392e322e89c" +source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "apply", "ashpd 0.12.3", @@ -4120,6 +4121,7 @@ dependencies = [ "iced_widget", "iced_winit", "image", + "image-extras", "jiff", "libc", "log", @@ -4423,9 +4425,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.32.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" +checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ "bitflags 2.11.0", "block", @@ -4509,9 +4511,9 @@ checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" [[package]] name = "naga" -version = "27.0.3" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" +checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", @@ -6247,7 +6249,7 @@ dependencies = [ [[package]] name = "softbuffer" version = "0.4.1" -source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#a3f77e251e7422803f693df6e3fc313c010c4dcb" +source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#c2b2c19ddb38ff17495643699f97cb1f2064a1be" dependencies = [ "as-raw-xcb-connection", "bytemuck", @@ -7350,12 +7352,13 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" -version = "27.0.1" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" +checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", "bitflags 2.11.0", + "bytemuck", "cfg-if", "cfg_aliases", "document-features", @@ -7379,9 +7382,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "27.0.3" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" +checksum = "d23f4642f53f666adcfd2d3218ab174d1e6681101aef18696b90cbe64d1c10f9" dependencies = [ "arrayvec", "bit-set", @@ -7411,36 +7414,36 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" +checksum = "87b7b696b918f337c486bf93142454080a32a37832ba8a31e4f48221890047da" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-emscripten" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" +checksum = "34b251c331f84feac147de3c4aa3aa45112622a95dd7ee1b74384fa0458dbd79" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" +checksum = "68ca976e72b2c9964eb243e281f6ce7f14a514e409920920dcda12ae40febaae" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "27.0.4" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" +checksum = "44d6cb474beb218824dcc9e1ce679d973f719262789bfb27407da560cac20eeb" dependencies = [ "android_system_properties", "arrayvec", @@ -7454,7 +7457,6 @@ dependencies = [ "core-graphics-types 0.2.0", "glow", "glutin_wgl_sys", - "gpu-alloc", "gpu-allocator", "gpu-descriptor", "hashbrown 0.16.1", @@ -7481,21 +7483,20 @@ dependencies = [ "wasm-bindgen", "web-sys", "wgpu-types", - "windows 0.58.0", - "windows-core 0.58.0", + "windows 0.62.2", + "windows-core 0.62.2", ] [[package]] name = "wgpu-types" -version = "27.0.1" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" +checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ "bitflags 2.11.0", "bytemuck", "js-sys", "log", - "thiserror 2.0.18", "web-sys", ] @@ -7545,27 +7546,29 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "windows" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" -dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-collections", + "windows-collections 0.2.0", "windows-core 0.61.2", - "windows-future", + "windows-future 0.2.1", "windows-link 0.1.3", - "windows-numerics", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", ] [[package]] @@ -7578,16 +7581,12 @@ dependencies = [ ] [[package]] -name = "windows-core" -version = "0.58.0" +name = "windows-collections" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-core 0.62.2", ] [[package]] @@ -7596,8 +7595,8 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", + "windows-implement", + "windows-interface", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -7609,8 +7608,8 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", + "windows-implement", + "windows-interface", "windows-link 0.2.1", "windows-result 0.4.1", "windows-strings 0.5.1", @@ -7624,18 +7623,18 @@ checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ "windows-core 0.61.2", "windows-link 0.1.3", - "windows-threading", + "windows-threading 0.1.0", ] [[package]] -name = "windows-implement" -version = "0.58.0" +name = "windows-future" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ - "proc-macro2", - "quote", - "syn", + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", ] [[package]] @@ -7649,17 +7648,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-interface" version = "0.59.3" @@ -7694,12 +7682,13 @@ dependencies = [ ] [[package]] -name = "windows-result" -version = "0.2.0" +name = "windows-numerics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-targets 0.52.6", + "windows-core 0.62.2", + "windows-link 0.2.1", ] [[package]] @@ -7720,16 +7709,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-strings" version = "0.4.2" @@ -7850,6 +7829,15 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -7991,7 +7979,7 @@ 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", "cfg_aliases", @@ -8017,7 +8005,7 @@ 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", @@ -8032,7 +8020,7 @@ 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", "block2 0.6.2", @@ -8054,7 +8042,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", @@ -8069,7 +8057,7 @@ 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", "cursor-icon", @@ -8083,7 +8071,7 @@ 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", "dpi", @@ -8099,7 +8087,7 @@ 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", "block2 0.6.2", @@ -8119,7 +8107,7 @@ 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", @@ -8145,7 +8133,7 @@ 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", @@ -8167,7 +8155,7 @@ 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", "cursor-icon", @@ -8183,7 +8171,7 @@ 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", "bytemuck", From 11d99c5df3797a2f417a2668eec35fe4c7ecfc2f Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 28 Apr 2026 15:04:31 +0200 Subject: [PATCH 03/84] chore: add zed editor config --- .zed/settings.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .zed/settings.json diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 00000000..2cc7b98d --- /dev/null +++ b/.zed/settings.json @@ -0,0 +1,15 @@ +{ + "format_on_save": "on", + "lsp": { + "rust-analyzer": { + "initialization_options": { + "check": { + "command": "clippy", + }, + "rustfmt": { + "extraArgs": ["+nightly"], + }, + }, + }, + }, +} From 0932bf4edf74a1526ded167afc180bd39de4893e Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 28 Apr 2026 15:11:51 +0200 Subject: [PATCH 04/84] debian: update changelog --- debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/debian/changelog b/debian/changelog index e3d8e02e..147363a2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +cosmic-applets (1.0.12) noble; urgency=medium + + * Update changelog + + -- Michael Murphy Tue, 28 Apr 2026 15:11:17 +0200 + cosmic-applets (1.0.2) noble; urgency=medium [ Ashley Wulber ] From c003924f0816efff1cf5bbfcdf1d7e1f1f36cae5 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Tue, 28 Apr 2026 15:22:17 +0200 Subject: [PATCH 05/84] chore: update all dependencies --- Cargo.lock | 399 ++++++++++++++++++++++++++--------------------------- 1 file changed, 198 insertions(+), 201 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6e0f3c5c..1ac89c6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -165,7 +165,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", @@ -274,7 +274,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.2", + "rand 0.9.4", "raw-window-handle", "serde", "serde_repr", @@ -292,7 +292,7 @@ dependencies = [ "enumflags2", "futures-channel", "futures-util", - "rand 0.9.2", + "rand 0.9.4", "serde", "serde_repr", "tokio", @@ -538,7 +538,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", @@ -573,9 +573,9 @@ 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", ] @@ -754,7 +754,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", @@ -784,9 +784,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.60" +version = "1.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", "jobserver", @@ -1039,7 +1039,7 @@ 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", ] @@ -1379,7 +1379,7 @@ name = "cosmic-client-toolkit" version = "0.2.0" source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#160b086abe03cd34a8a375d7fbe47b24308d1f38" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cosmic-protocols", "libc", "smithay-client-toolkit", @@ -1440,7 +1440,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", @@ -1465,7 +1465,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#6046bb29d570161196ab98d60806f6d6489df7a6" +source = "git+https://github.com/pop-os/cosmic-notifications#dbd0658f0dc2671f32f514261bd9b3fa664264bd" dependencies = [ "cosmic-config", "serde", @@ -1474,7 +1474,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#6046bb29d570161196ab98d60806f6d6489df7a6" +source = "git+https://github.com/pop-os/cosmic-notifications#dbd0658f0dc2671f32f514261bd9b3fa664264bd" dependencies = [ "fast_image_resize", "libcosmic", @@ -1515,7 +1515,7 @@ dependencies = [ [[package]] name = "cosmic-pipewire" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ "intmap", "libspa", @@ -1531,7 +1531,7 @@ name = "cosmic-protocols" version = "0.2.0" source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#160b086abe03cd34a8a375d7fbe47b24308d1f38" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -1543,7 +1543,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1557,7 +1557,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1570,7 +1570,7 @@ dependencies = [ [[package]] name = "cosmic-settings-airplane-mode-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ "futures", "iced_futures", @@ -1603,7 +1603,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ "futures", "iced_futures", @@ -1616,9 +1616,9 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cosmic-dbus-networkmanager", "futures", "iced_futures", @@ -1635,7 +1635,7 @@ dependencies = [ [[package]] name = "cosmic-settings-sound-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ "cosmic-pipewire", "futures", @@ -1650,7 +1650,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#3639bafcfa3b27fd6a8a9bca7e77589b903975e8" +source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" dependencies = [ "futures", "iced_futures", @@ -1667,7 +1667,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "fontdb", "harfrust", "linebender_resource_handle", @@ -1773,10 +1773,13 @@ dependencies = [ ] [[package]] -name = "ctor-lite" -version = "0.1.2" +name = "ctor" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e162d0c2e2068eb736b71e5597eff0b9944e6b973cd9f37b6a288ab9bf20e300" +checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" +dependencies = [ + "dtor", +] [[package]] name = "cursor-icon" @@ -1918,15 +1921,15 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "dbus" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b3aa68d7e7abee336255bd7248ea965cc393f3e70411135a6f6a4b651345d4" +checksum = "b942602992bb7acfd1f51c49811c58a610ef9181b6e66f3e519d79b540a3bf73" dependencies = [ "futures-channel", "futures-util", "libc", "libdbus-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2051,7 +2054,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", @@ -2082,7 +2085,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", @@ -2115,7 +2118,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 0.7.1", "drm-fourcc", @@ -2128,7 +2131,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "drm-ffi 0.9.1", "drm-fourcc", @@ -2182,6 +2185,12 @@ dependencies = [ "linux-raw-sys 0.9.4", ] +[[package]] +name = "dtor" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" + [[package]] name = "dyn-clone" version = "1.0.20" @@ -2438,9 +2447,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", ] @@ -2780,7 +2789,7 @@ dependencies = [ "log", "presser", "thiserror 2.0.18", - "windows 0.61.3", + "windows 0.62.2", ] [[package]] @@ -2789,7 +2798,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", ] @@ -2800,14 +2809,14 @@ 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]] name = "grid" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e2d4c0a8296178d8802098410ca05d86b17a10bb5ab559b3fb404c1f948220" +checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" [[package]] name = "guillotiere" @@ -2837,7 +2846,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", @@ -3056,7 +3065,7 @@ name = "iced_core" version = "0.14.0" source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytes", "cosmic-client-toolkit", "dnd", @@ -3104,7 +3113,7 @@ name = "iced_graphics" version = "0.14.0" source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cosmic-text", "half", @@ -3179,7 +3188,7 @@ version = "0.14.0" source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" dependencies = [ "as-raw-xcb-connection", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cosmic-client-toolkit", "cryoglyph", @@ -3678,9 +3687,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -3755,7 +3764,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", ] @@ -3785,7 +3794,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", @@ -3866,9 +3875,9 @@ checksum = "2ceaf4c6c48465bead8cb6a0b7c4ee0c86ecbb31239032b9c66ab9a08d2f3ee1" [[package]] name = "jiff" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" +checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -3881,9 +3890,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" +checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" dependencies = [ "proc-macro2", "quote", @@ -3975,9 +3984,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.94" +version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "a1840c94c045fbcf8ba2812c95db44499f7c64910a912551aaaa541decebcacf" dependencies = [ "cfg-if", "futures-util", @@ -4000,7 +4009,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", ] @@ -4085,9 +4094,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.184" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" @@ -4175,7 +4184,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "plain", "redox_syscall 0.7.4", @@ -4187,7 +4196,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", @@ -4310,9 +4319,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" @@ -4429,7 +4438,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -4517,7 +4526,7 @@ checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -4541,7 +4550,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", @@ -4571,7 +4580,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if", "cfg_aliases", "libc", @@ -4583,7 +4592,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", "libc", @@ -4622,7 +4631,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", @@ -4640,7 +4649,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]] @@ -4822,7 +4831,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", @@ -4838,7 +4847,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", @@ -4851,7 +4860,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", @@ -4863,7 +4872,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", @@ -4875,7 +4884,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", ] @@ -4898,7 +4907,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", ] @@ -4915,7 +4924,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", @@ -4927,7 +4936,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", @@ -4939,7 +4948,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", @@ -4951,7 +4960,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", @@ -4964,7 +4973,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", @@ -4993,9 +5002,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.51" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59aed3b33578edcfa1bc96a321d590d31832b6ad55a26f0313362ce687e9abd6" +checksum = "12c6933ddbbd16539a7672e697bb8d41ac3a4e99ac43eeb40c07236bd7fcb2dd" dependencies = [ "libc", "libredox", @@ -5147,7 +5156,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared 0.11.3", - "rand 0.8.5", + "rand 0.8.6", ] [[package]] @@ -5262,7 +5271,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", @@ -5285,9 +5294,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" @@ -5314,7 +5323,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", @@ -5349,9 +5358,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", ] @@ -5457,7 +5466,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", ] @@ -5468,7 +5477,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", ] @@ -5480,9 +5489,9 @@ checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" [[package]] name = "pxfm" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" +checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" [[package]] name = "quick-error" @@ -5490,16 +5499,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" -[[package]] -name = "quick-xml" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quick-xml" version = "0.39.2" @@ -5507,6 +5506,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" dependencies = [ "memchr", + "serde", ] [[package]] @@ -5532,18 +5532,18 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "rand_core 0.6.4", ] [[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", "rand_core 0.9.5", @@ -5609,7 +5609,7 @@ 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]] @@ -5618,7 +5618,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -5744,7 +5744,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", @@ -5756,7 +5756,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", @@ -5831,7 +5831,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", @@ -5844,7 +5844,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", @@ -5863,7 +5863,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", @@ -6191,7 +6191,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", @@ -6282,7 +6282,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]] @@ -6581,12 +6581,12 @@ dependencies = [ [[package]] name = "tiny-xlib" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0324504befd01cab6e0c994f34b2ffa257849ee019d3fb3b64fb2c858887d89e" +checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" dependencies = [ "as-raw-xcb-connection", - "ctor-lite", + "ctor", "libloading", "pkg-config", "tracing", @@ -6626,9 +6626,9 @@ checksum = "b130bd8a58c163224b44e217b4239ca7b927d82bf6cc2fea1fc561d15056e3f7" [[package]] name = "tokio" -version = "1.51.1" +version = "1.52.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c" +checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" dependencies = [ "bytes", "libc", @@ -6685,7 +6685,7 @@ dependencies = [ "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.1", + "winnow", ] [[package]] @@ -6706,7 +6706,7 @@ dependencies = [ "indexmap 2.14.0", "toml_datetime", "toml_parser", - "winnow 1.0.1", + "winnow", ] [[package]] @@ -6715,7 +6715,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.1", + "winnow", ] [[package]] @@ -6812,9 +6812,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "udev" @@ -7009,9 +7009,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[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 = [ "getrandom 0.4.2", "js-sys", @@ -7055,11 +7055,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -7068,14 +7068,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "df52b6d9b87e0c74c9edfa1eb2d9bf85e5d63515474513aa50fa181b3c4f5db1" dependencies = [ "cfg-if", "once_cell", @@ -7086,9 +7086,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.67" +version = "0.4.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" +checksum = "af934872acec734c2d80e6617bbb5ff4f12b052dd8e6332b0817bce889516084" dependencies = [ "js-sys", "wasm-bindgen", @@ -7096,9 +7096,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "78b1041f495fb322e64aca85f5756b2172e35cd459376e67f2a6c9dffcedb103" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7106,9 +7106,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "9dcd0ff20416988a18ac686d4d4d0f6aae9ebf08a389ff5d29012b05af2a1b41" dependencies = [ "bumpalo", "proc-macro2", @@ -7119,9 +7119,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "49757b3c82ebf16c57d69365a142940b384176c24df52a087fb748e2085359ea" dependencies = [ "unicode-ident", ] @@ -7154,7 +7154,7 @@ 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.14.0", "semver", @@ -7194,7 +7194,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", @@ -7206,7 +7206,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", ] @@ -7228,7 +7228,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", @@ -7241,7 +7241,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", @@ -7254,7 +7254,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", @@ -7267,7 +7267,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", @@ -7280,7 +7280,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", @@ -7295,7 +7295,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", - "quick-xml 0.39.2", + "quick-xml", "quote", ] @@ -7305,7 +7305,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", "rustix 1.1.4", "wayland-backend", @@ -7326,9 +7326,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.94" +version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +checksum = "2eadbac71025cd7b0834f20d1fe8472e8495821b4e9801eb0a60bd1f19827602" dependencies = [ "js-sys", "wasm-bindgen", @@ -7357,7 +7357,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cfg-if", "cfg_aliases", @@ -7389,7 +7389,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cfg_aliases", "document-features", @@ -7449,7 +7449,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.11.0", + "bitflags 2.11.1", "block", "bytemuck", "cfg-if", @@ -7493,7 +7493,7 @@ version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "js-sys", "log", @@ -7981,7 +7981,7 @@ name = "winit" version = "0.31.0-beta.2" 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", "cursor-icon", "dpi", @@ -8008,7 +8008,7 @@ version = "0.31.0-beta.2" 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", @@ -8022,7 +8022,7 @@ name = "winit-appkit" version = "0.31.0-beta.2" 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", @@ -8059,7 +8059,7 @@ name = "winit-core" version = "0.31.0-beta.2" 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", @@ -8073,7 +8073,7 @@ name = "winit-orbital" version = "0.31.0-beta.2" 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", @@ -8089,7 +8089,7 @@ name = "winit-uikit" version = "0.31.0-beta.2" 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", @@ -8110,7 +8110,7 @@ version = "0.31.0-beta.2" 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", @@ -8136,7 +8136,7 @@ version = "0.31.0-beta.2" 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", @@ -8157,7 +8157,7 @@ name = "winit-win32" version = "0.31.0-beta.2" 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", @@ -8173,7 +8173,7 @@ name = "winit-x11" version = "0.31.0-beta.2" 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", @@ -8193,18 +8193,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.15" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] @@ -8218,6 +8209,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" @@ -8267,7 +8264,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.0", + "bitflags 2.11.1", "indexmap 2.14.0", "log", "serde", @@ -8427,7 +8424,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", @@ -8507,9 +8504,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.14.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" +checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1" dependencies = [ "async-broadcast", "async-executor", @@ -8535,7 +8532,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 0.7.15", + "winnow", "zbus_macros", "zbus_names", "zvariant", @@ -8567,9 +8564,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.14.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" +checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8582,22 +8579,22 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.1" +version = "4.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" dependencies = [ "serde", - "winnow 0.7.15", + "winnow", "zvariant", ] [[package]] name = "zbus_xml" -version = "5.1.0" +version = "5.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441a0064125265655bccc3a6af6bef56814d9277ac83fce48b1cd7e160b80eac" +checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" dependencies = [ - "quick-xml 0.38.4", + "quick-xml", "serde", "zbus_names", "zvariant", @@ -8729,24 +8726,24 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.10.0" +version = "5.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" +checksum = "c4db0ecb8987cf5e92653c57c098f7f0e39a03112edb796f4fe089fb7eaa14ff" dependencies = [ "endi", "enumflags2", "serde", "url", - "winnow 0.7.15", + "winnow", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.10.0" +version = "5.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" +checksum = "5b949b639ab1b4bed763aa7481ba0e368af68d8b55532f8ed4bec86a59f2ca98" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8757,13 +8754,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691" dependencies = [ "proc-macro2", "quote", "serde", "syn", - "winnow 0.7.15", + "winnow", ] From 737aaff4b02efe867c3cf5f060f5ddfa71df657e Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 11 May 2026 12:24:01 +0200 Subject: [PATCH 06/84] i18n: translation updates from weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adolfo Jayme Barrientos Co-authored-by: Baurzhan Muftakhidinov Co-authored-by: BoneNI Co-authored-by: Dan Co-authored-by: Fedorov Alexei Co-authored-by: Feike Donia Co-authored-by: Geeson Wan Co-authored-by: Hosted Weblate Co-authored-by: Isaac Subirana Co-authored-by: Jim Spentzos Co-authored-by: Julien Brouillard Co-authored-by: Konstantinos Co-authored-by: Nara Díaz Viñolas Co-authored-by: therealmate Co-authored-by: Димко Co-authored-by: Марко М. Костић Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/fr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/kk/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/ru/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/uk/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/uk/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-notifications/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-notifications/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-time/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-time/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/uk/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-input-sources-applet/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-input-sources-applet/sr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces-applet/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces-applet/sr/ Translation: Pop OS/COSMIC Accessibility Applet Translation: Pop OS/COSMIC App List Applet Translation: Pop OS/COSMIC Applets Desktop Entries Translation: Pop OS/COSMIC Audio Applet Translation: Pop OS/COSMIC Battery Applet Translation: Pop OS/COSMIC Bluetooth Applet Translation: Pop OS/COSMIC Input Sources Applet Translation: Pop OS/COSMIC Network Applet Translation: Pop OS/COSMIC Notifications Applet Translation: Pop OS/COSMIC Power Applet Translation: Pop OS/COSMIC Tiling Applet Translation: Pop OS/COSMIC Time Applet Translation: Pop OS/COSMIC Workspaces Applet --- cosmic-app-list/i18n/ca/cosmic_app_list.ftl | 8 +++ cosmic-app-list/i18n/el/cosmic_app_list.ftl | 7 +++ cosmic-app-list/i18n/fr/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/kk/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/lo/cosmic_app_list.ftl | 0 cosmic-app-list/i18n/ru/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/sr/cosmic_app_list.ftl | 8 +++ cosmic-app-list/i18n/uk/cosmic_app_list.ftl | 2 +- .../i18n/el/cosmic_applet_a11y.ftl | 6 +++ .../i18n/lo/cosmic_applet_a11y.ftl | 0 .../i18n/sr/cosmic_applet_a11y.ftl | 6 +++ .../i18n/el/cosmic_applet_audio.ftl | 7 +++ .../i18n/lo/cosmic_applet_audio.ftl | 0 .../i18n/sr/cosmic_applet_audio.ftl | 7 +++ .../i18n/el/cosmic_applet_battery.ftl | 14 +++++ .../i18n/lo/cosmic_applet_battery.ftl | 0 .../i18n/sr/cosmic_applet_battery.ftl | 14 +++++ .../i18n/zh-TW/cosmic_applet_battery.ftl | 2 +- .../i18n/ca/cosmic_applet_bluetooth.ftl | 12 +++++ .../i18n/el/cosmic_applet_bluetooth.ftl | 10 ++++ .../i18n/lo/cosmic_applet_bluetooth.ftl | 0 .../i18n/sr/cosmic_applet_bluetooth.ftl | 12 +++++ .../i18n/el/cosmic_applet_input_sources.ftl | 2 + .../i18n/lo/cosmic_applet_input_sources.ftl | 0 .../i18n/sr/cosmic_applet_input_sources.ftl | 2 + .../i18n/ca/cosmic_applet_network.ftl | 4 ++ .../i18n/el/cosmic_applet_network.ftl | 23 +++++++++ .../i18n/lo/cosmic_applet_network.ftl | 0 .../i18n/sr/cosmic_applet_network.ftl | 24 +++++++++ .../i18n/uk/cosmic_applet_network.ftl | 10 ++-- .../i18n/el/cosmic_applet_notifications.ftl | 19 +++++++ .../i18n/lo/cosmic_applet_notifications.ftl | 0 .../i18n/sr/cosmic_applet_notifications.ftl | 19 +++++++ .../i18n/ca/cosmic_applet_power.ftl | 2 + .../i18n/el/cosmic_applet_power.ftl | 30 +++++++++++ .../i18n/lo/cosmic_applet_power.ftl | 0 .../i18n/sr/cosmic_applet_power.ftl | 36 +++++++++++++ .../i18n/el/cosmic_applet_tiling.ftl | 20 ++++++++ .../i18n/lo/cosmic_applet_tiling.ftl | 0 .../i18n/sr/cosmic_applet_tiling.ftl | 20 ++++++++ .../i18n/el/cosmic_applet_time.ftl | 1 + .../i18n/lo/cosmic_applet_time.ftl | 0 .../i18n/sr/cosmic_applet_time.ftl | 1 + .../i18n/el/cosmic_applet_workspaces.ftl | 1 + .../i18n/lo/cosmic_applet_workspaces.ftl | 0 .../i18n/sr/cosmic_applet_workspaces.ftl | 1 + i18n/ca/desktop_entries.ftl | 1 + i18n/el/desktop_entries.ftl | 51 +++++++++++++++++++ i18n/hu/desktop_entries.ftl | 34 ++++++------- i18n/lo/desktop_entries.ftl | 0 i18n/sr/desktop_entries.ftl | 51 +++++++++++++++++++ i18n/uk/desktop_entries.ftl | 4 +- 52 files changed, 448 insertions(+), 29 deletions(-) create mode 100644 cosmic-app-list/i18n/lo/cosmic_app_list.ftl create mode 100644 cosmic-applet-a11y/i18n/lo/cosmic_applet_a11y.ftl create mode 100644 cosmic-applet-audio/i18n/lo/cosmic_applet_audio.ftl create mode 100644 cosmic-applet-battery/i18n/lo/cosmic_applet_battery.ftl create mode 100644 cosmic-applet-bluetooth/i18n/lo/cosmic_applet_bluetooth.ftl create mode 100644 cosmic-applet-input-sources/i18n/lo/cosmic_applet_input_sources.ftl create mode 100644 cosmic-applet-network/i18n/lo/cosmic_applet_network.ftl create mode 100644 cosmic-applet-notifications/i18n/lo/cosmic_applet_notifications.ftl create mode 100644 cosmic-applet-power/i18n/lo/cosmic_applet_power.ftl create mode 100644 cosmic-applet-tiling/i18n/lo/cosmic_applet_tiling.ftl create mode 100644 cosmic-applet-time/i18n/lo/cosmic_applet_time.ftl create mode 100644 cosmic-applet-workspaces/i18n/lo/cosmic_applet_workspaces.ftl create mode 100644 i18n/lo/desktop_entries.ftl diff --git a/cosmic-app-list/i18n/ca/cosmic_app_list.ftl b/cosmic-app-list/i18n/ca/cosmic_app_list.ftl index e69de29b..340e296c 100644 --- a/cosmic-app-list/i18n/ca/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/ca/cosmic_app_list.ftl @@ -0,0 +1,8 @@ +new-window = Nova Finestra +quit = Surt +run = Executa +run-on = Executa a { $gpu } +quit-all = Surt de totes +run-on-default = (Per defecte) +cosmic-app-list = Safata d'Aplicacions +pin = Ancora a la safata diff --git a/cosmic-app-list/i18n/el/cosmic_app_list.ftl b/cosmic-app-list/i18n/el/cosmic_app_list.ftl index 6a425d48..e77f522a 100644 --- a/cosmic-app-list/i18n/el/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/el/cosmic_app_list.ftl @@ -1 +1,8 @@ new-window = Νέο παράθυρο +quit = Έξοδος +cosmic-app-list = Περιοχή εφαρμογών +run = Εκτέλεση +run-on = Εκτέλεση με { $gpu } +quit-all = Έξοδος από όλα +run-on-default = (Προεπιλογή) +pin = Καρφίτσωμα στην περιοχή εφαρμογών diff --git a/cosmic-app-list/i18n/fr/cosmic_app_list.ftl b/cosmic-app-list/i18n/fr/cosmic_app_list.ftl index a065b203..39cac491 100644 --- a/cosmic-app-list/i18n/fr/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/fr/cosmic_app_list.ftl @@ -3,6 +3,6 @@ pin = Épingler à la barre d'applis quit = Quitter quit-all = Tout quitter new-window = Nouvelle fenêtre -run = Lancer +run = Exécuter run-on = Lancer avec { $gpu } run-on-default = (Défaut) diff --git a/cosmic-app-list/i18n/kk/cosmic_app_list.ftl b/cosmic-app-list/i18n/kk/cosmic_app_list.ftl index c0e5a033..a1b070a2 100644 --- a/cosmic-app-list/i18n/kk/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/kk/cosmic_app_list.ftl @@ -1,5 +1,5 @@ quit = Шығу -run = Іске қосу +run = Орындау run-on = { $gpu } арқылы іске қосу run-on-default = (Әдепкі) cosmic-app-list = Қолданбалар сөресі diff --git a/cosmic-app-list/i18n/lo/cosmic_app_list.ftl b/cosmic-app-list/i18n/lo/cosmic_app_list.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-app-list/i18n/ru/cosmic_app_list.ftl b/cosmic-app-list/i18n/ru/cosmic_app_list.ftl index a7d98a5b..c1195520 100644 --- a/cosmic-app-list/i18n/ru/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/ru/cosmic_app_list.ftl @@ -3,6 +3,6 @@ pin = Закрепить на панели приложений quit = Выйти quit-all = Завершить все new-window = Новое окно -run = Запустить +run = Выполнить run-on = Запустить на { $gpu } run-on-default = (По умолчанию) diff --git a/cosmic-app-list/i18n/sr/cosmic_app_list.ftl b/cosmic-app-list/i18n/sr/cosmic_app_list.ftl index e69de29b..4cf077b9 100644 --- a/cosmic-app-list/i18n/sr/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/sr/cosmic_app_list.ftl @@ -0,0 +1,8 @@ +new-window = Нови прозор +quit = Изађи +run = Покрени +run-on = Покрени на { $gpu } +quit-all = Изађи из свега +run-on-default = (подразумевано) +cosmic-app-list = Системска касета +pin = Закачи у системску касету diff --git a/cosmic-app-list/i18n/uk/cosmic_app_list.ftl b/cosmic-app-list/i18n/uk/cosmic_app_list.ftl index aed01bf2..ec1833cd 100644 --- a/cosmic-app-list/i18n/uk/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/uk/cosmic_app_list.ftl @@ -3,6 +3,6 @@ pin = Закріпити quit = Вийти quit-all = Закрити всі new-window = Нове вікно -run = Запустити +run = Виконати run-on = Запустити на { $gpu } run-on-default = (Основна) diff --git a/cosmic-applet-a11y/i18n/el/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/el/cosmic_applet_a11y.ftl index e69de29b..609965b5 100644 --- a/cosmic-applet-a11y/i18n/el/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/el/cosmic_applet_a11y.ftl @@ -0,0 +1,6 @@ +screen-reader = Ανάγνωση οθόνης +invert-colors = Αναστροφή χρωμάτων +high-contrast = Υψηλή αντίθεση +settings = Ρυθμίσεις προσβασιμότητας... +magnifier = Μεγεθυντικός φακός +filter-colors = Φίλτρο χρωμάτων diff --git a/cosmic-applet-a11y/i18n/lo/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/lo/cosmic_applet_a11y.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-a11y/i18n/sr/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/sr/cosmic_applet_a11y.ftl index e69de29b..76d163eb 100644 --- a/cosmic-applet-a11y/i18n/sr/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/sr/cosmic_applet_a11y.ftl @@ -0,0 +1,6 @@ +screen-reader = Читач екрана +invert-colors = Обрни боје +high-contrast = Високи контраст +filter-colors = Филтрирај боје +settings = Подешавања приступачности... +magnifier = Увеличавач diff --git a/cosmic-applet-audio/i18n/el/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/el/cosmic_applet_audio.ftl index e69de29b..1bdfccf1 100644 --- a/cosmic-applet-audio/i18n/el/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/el/cosmic_applet_audio.ftl @@ -0,0 +1,7 @@ +output = Έξοδος +show-media-controls = Εμφάνιση στοιχείων ελέγχου πολυμέσων στη γραμμή συστήματος +disconnected = Το PulseAudio αποσυνδέθηκε +no-device = Καμία επιλεγμένη συσκευή +input = Είσοδος +unknown-artist = Άγνωστος +sound-settings = Ρυθμίσεις ήχου... diff --git a/cosmic-applet-audio/i18n/lo/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/lo/cosmic_applet_audio.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-audio/i18n/sr/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/sr/cosmic_applet_audio.ftl index e69de29b..9ddf8185 100644 --- a/cosmic-applet-audio/i18n/sr/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/sr/cosmic_applet_audio.ftl @@ -0,0 +1,7 @@ +show-media-controls = Прикажи управљања медијима на траци +disconnected = Пулс-аудио откачен +no-device = Ниједан уређај није изабран +input = Улаз +output = Излаз +unknown-artist = Непознато +sound-settings = Подешавања звука... diff --git a/cosmic-applet-battery/i18n/el/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/el/cosmic_applet_battery.ftl index e69de29b..06eca770 100644 --- a/cosmic-applet-battery/i18n/el/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/el/cosmic_applet_battery.ftl @@ -0,0 +1,14 @@ +battery = Μπαταρία +power-settings = Ρυθμίσεις ενέργειας και μπαταρίας... +hours = ώ +until-empty = μέχρι την αποφόρτιση +battery-desc = Μειωμένη χρήση ενέργειας και επιδόσεις. +max-charge = Επεκτείνετε τη διάρκεια ζωής της μπαταρίας σας ορίζοντας ως μέγιστη τιμή φόρτισης το 80% +balanced = Ισορροπημένη +seconds = δ +dgpu-running = Η ανεξάρτητη GPU είναι ενεργή και μπορεί να μειώσει τη διάρκεια ζωής της μπαταρίας +performance = Υψηλές επιδόσεις +performance-desc = Υψηλές επιδόσεις και χρήση ενέργειας. +minutes = λ +balanced-desc = Τυπικές επιδόσεις και χρήση μπαταρίας. +dgpu-applications = Εφαρμογές που χρησιμοποιούν την ανεξάρτητη GPU { $gpu_name } diff --git a/cosmic-applet-battery/i18n/lo/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/lo/cosmic_applet_battery.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-battery/i18n/sr/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/sr/cosmic_applet_battery.ftl index e69de29b..3d242270 100644 --- a/cosmic-applet-battery/i18n/sr/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/sr/cosmic_applet_battery.ftl @@ -0,0 +1,14 @@ +power-settings = Подешавања напајања и батерије... +hours = ч +until-empty = до празне +battery-desc = Смањен учинак и употреба струје. +balanced = Уравнотежено +battery = Батерија +seconds = с +performance = Најбрже +performance-desc = Висок учинак и употреба струје. +minutes = м +balanced-desc = Уобичајени учинак и употреба батерије. +max-charge = Повећајте век трајања батерије подешавањем највише вредности пуњења на 80% +dgpu-running = Засебна графичка је покренута и може умањити век трајања батерије +dgpu-applications = Програми који користе засебну графичку { $gpu_name } diff --git a/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl index 33c18ba3..f5378e27 100644 --- a/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl @@ -1,4 +1,4 @@ -battery = 省電 +battery = 電池 battery-desc = 降低效能與耗電量。 balanced = 平衡 balanced-desc = 標準效能與耗電量。 diff --git a/cosmic-applet-bluetooth/i18n/ca/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/ca/cosmic_applet_bluetooth.ftl index e69de29b..b069b4bf 100644 --- a/cosmic-applet-bluetooth/i18n/ca/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/ca/cosmic_applet_bluetooth.ftl @@ -0,0 +1,12 @@ +confirm-pin = Si us plau, verifiqueu que el següent PIN coincideix amb el mostrat a { $deviceName } +bluetooth = Bluetooth +unsuccessful = Error d'Emparellament +pairable = Emparellable +try-again = Reintentar +check-device = Si us plau, verifiqueu que { $deviceName } estigui encès, a l'abast i llest per emparellar-se. +other-devices = Altres dispositius Bluetooth +cancel = Cancel·lar +connected = Connectat +confirm = Confirmar +settings = Configuració del Bluetooth... +discoverable = Descobrible diff --git a/cosmic-applet-bluetooth/i18n/el/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/el/cosmic_applet_bluetooth.ftl index 98df71af..84134b90 100644 --- a/cosmic-applet-bluetooth/i18n/el/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/el/cosmic_applet_bluetooth.ftl @@ -1,2 +1,12 @@ cancel = Ακύρωση confirm = Επιβεβαίωση +bluetooth = Bluetooth +confirm-pin = Επιβεβαιώστε ότι το ακόλουθο PIN είναι ίδιο με αυτό που εμφανίζεται στο { $deviceName } +unsuccessful = Ανεπιτυχής σύζευξη +pairable = Συνδέσιμο +try-again = Δοκιμή ξανά +check-device = Βεβαιωθείτε ότι το { $deviceName } είναι ενεργοποιημένο, βρίσκεται εντός εμβέλειας και είναι έτοιμο για σύζευξη. +other-devices = Άλλες συσκευές Bluetooth +connected = Συνδέθηκε +settings = Ρυθμίσεις Bluetooth... +discoverable = Ορατό diff --git a/cosmic-applet-bluetooth/i18n/lo/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/lo/cosmic_applet_bluetooth.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-bluetooth/i18n/sr/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/sr/cosmic_applet_bluetooth.ftl index e69de29b..b6515b52 100644 --- a/cosmic-applet-bluetooth/i18n/sr/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/sr/cosmic_applet_bluetooth.ftl @@ -0,0 +1,12 @@ +confirm-pin = Потврдите да се овај ПИН подудара са оним приказаним на { $deviceName } +bluetooth = Блутут +unsuccessful = Неуспешно упаривање +pairable = Упарив +try-again = Покушај поново +check-device = Постарајте се да је { $deviceName } укључен, у домету и спреман за упаривање. +other-devices = Други блутут уређаји +cancel = Откажи +connected = Повезано +confirm = Потврди +settings = Подешавања блутута... +discoverable = Откривљив diff --git a/cosmic-applet-input-sources/i18n/el/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/el/cosmic_applet_input_sources.ftl index e69de29b..546be28d 100644 --- a/cosmic-applet-input-sources/i18n/el/cosmic_applet_input_sources.ftl +++ b/cosmic-applet-input-sources/i18n/el/cosmic_applet_input_sources.ftl @@ -0,0 +1,2 @@ +show-keyboard-layout = Εμφάνιση διάταξης πληκτρολογίου... +keyboard-settings = Ρυθμίσεις πληκτρολογίου... diff --git a/cosmic-applet-input-sources/i18n/lo/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/lo/cosmic_applet_input_sources.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-input-sources/i18n/sr/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/sr/cosmic_applet_input_sources.ftl index e69de29b..4d552b47 100644 --- a/cosmic-applet-input-sources/i18n/sr/cosmic_applet_input_sources.ftl +++ b/cosmic-applet-input-sources/i18n/sr/cosmic_applet_input_sources.ftl @@ -0,0 +1,2 @@ +show-keyboard-layout = Прикажи распоред тастатуре... +keyboard-settings = Подешавања тастатуре... diff --git a/cosmic-applet-network/i18n/ca/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/ca/cosmic_applet_network.ftl index e69de29b..ae3bd5dd 100644 --- a/cosmic-applet-network/i18n/ca/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/ca/cosmic_applet_network.ftl @@ -0,0 +1,4 @@ +cancel = Cancel·lar +connected = Connectat +wifi = Wi-Fi +identity = Identitat diff --git a/cosmic-applet-network/i18n/el/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/el/cosmic_applet_network.ftl index c7ed802d..8eac3a7a 100644 --- a/cosmic-applet-network/i18n/el/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/el/cosmic_applet_network.ftl @@ -1 +1,24 @@ cancel = Ακύρωση +connect = Σύνδεση +network = Δίκτυο +check-wifi-connection = Βεβαιωθείτε ότι το Wi-Fi είναι συνδεδεμένο στο διαδίκτυο και ότι ο κωδικός πρόσβασης είναι σωστός +reset = Επαναφορά +visible-wireless-networks = Ορατά ασύρματα δίκτυα +enter-password = Εισαγάγετε τον κωδικό πρόσβασης ή το κλειδί κρυπτογράφησης +ipv6 = Διεύθυνση IPv6 +airplane-mode-on = Η λειτουργία πτήσης είναι ενεργή +connecting = Σύνδεση +airplane-mode = Λειτουργία πτήσης +wifi = Wi-Fi +ipv4 = Διεύθυνση IPv4 +identity = Ταυτότητα +unable-to-connect = Δεν είναι δυνατή η σύνδεση στο δίκτυο +turn-off-airplane-mode = Απενεργοποιήστε τη για ενεργοποίηση του Wi-Fi, του Bluetooth και της κινητής ευρυζωνικής σύνδεσης. +connected = Συνδέθηκε +vpn-connections = Συνδέσεις VPN +mac = MAC +router-wps-button = Μπορείτε επίσης να συνδεθείτε πατώντας το κουμπί «WPS» του δρομολογητή +settings = Ρυθμίσεις δικτύου... +megabits-per-second = Mbps +gigabits-per-second = Gbps +terabits-per-second = Tbps diff --git a/cosmic-applet-network/i18n/lo/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/lo/cosmic_applet_network.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-network/i18n/sr/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/sr/cosmic_applet_network.ftl index e69de29b..b79b0ddd 100644 --- a/cosmic-applet-network/i18n/sr/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/sr/cosmic_applet_network.ftl @@ -0,0 +1,24 @@ +cancel = Откажи +connected = Повезано +connect = Повежи +identity = Идентитет +wifi = Бежична +check-wifi-connection = Уверите се да је бежична мрежа повезана са интернетом и да је лозинка тачна +reset = Врати +visible-wireless-networks = Видљиве бежичне мреже +enter-password = Унесите лозинку или кључ за шифровање +ipv6 = ИПв6 адреса +airplane-mode-on = Авионски режим је укључен +connecting = Повезује се +airplane-mode = Авио режим +ipv4 = ИПв4 адреса +unable-to-connect = Немогуће повезати се са мрежом +turn-off-airplane-mode = Искључите да бисте омогућили Блутут, бежичну и мобилни интернет. +network = Мрежа +vpn-connections = ВПН везе +mac = МАК +router-wps-button = Такође се можете повезати притиском на дугме „WPS“ на рутеру +settings = Подешавања мреже... +megabits-per-second = Mbps +gigabits-per-second = Gbps +terabits-per-second = Tbps diff --git a/cosmic-applet-network/i18n/uk/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/uk/cosmic_applet_network.ftl index 687539ca..cebc8087 100644 --- a/cosmic-applet-network/i18n/uk/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/uk/cosmic_applet_network.ftl @@ -8,15 +8,15 @@ ipv6 = IPv6-адреса mac = MAC megabits-per-second = Мбіт/с connected = З'єднано -connecting = Підключення -connect = З'єднати +connecting = З’єднання +connect = З’єднати cancel = Скасувати settings = Налаштування мережі... visible-wireless-networks = Видимі бездротові мережі enter-password = Введіть пароль або ключ шифрування -router-wps-button = Також можна підключитися, натиснувши кнопку «WPS» на маршрутизаторі -unable-to-connect = Не вдалося підключитися до мережі -check-wifi-connection = Переконайтеся, що Wi-Fi підключено до Інтернету, а пароль — правильний +router-wps-button = Також можна під’єднатися, натиснувши кнопку «WPS» на маршрутизаторі +unable-to-connect = Не вдалося під’єднатися до мережі +check-wifi-connection = Переконайтеся, що Wi-Fi під’єднано до Інтернету, а пароль — правильний reset = Скинути identity = Ідентичність vpn-connections = VPN-з'єднання diff --git a/cosmic-applet-notifications/i18n/el/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/el/cosmic_applet_notifications.ftl index e69de29b..56feb284 100644 --- a/cosmic-applet-notifications/i18n/el/cosmic_applet_notifications.ftl +++ b/cosmic-applet-notifications/i18n/el/cosmic_applet_notifications.ftl @@ -0,0 +1,19 @@ +hours-ago = + { $duration -> + [0] Μόλις τώρα + [one] Πριν από 1 ώρα + *[other] Πριν από { $duration } ώρες + } +show-more = Εμφάνιση { $more } ακόμη +clear-all = Απαλοιφή όλων των ειδοποιήσεων +notification-settings = Ρυθμίσεις ειδοποιήσεων... +no-notifications = Καμία ειδοποίηση +do-not-disturb = Μην ενοχλείτε +show-less = Εμφάνιση λιγότερων +clear-group = Απαλοιφή ομάδας +minutes-ago = + { $duration -> + [0] Μόλις τώρα + [one] Πριν από 1 λεπτό + *[other] Πριν από { $duration } λεπτά + } diff --git a/cosmic-applet-notifications/i18n/lo/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/lo/cosmic_applet_notifications.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-notifications/i18n/sr/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/sr/cosmic_applet_notifications.ftl index e69de29b..39408d17 100644 --- a/cosmic-applet-notifications/i18n/sr/cosmic_applet_notifications.ftl +++ b/cosmic-applet-notifications/i18n/sr/cosmic_applet_notifications.ftl @@ -0,0 +1,19 @@ +show-more = Прикажи још { $more } +clear-all = Очисти сва обавештења +notification-settings = Подешавања обавештења... +no-notifications = Без обавештења +do-not-disturb = Не узнемиравај +show-less = Прикажи мање +clear-group = Очисти групу +hours-ago = + { $duration -> + [0] Управо сада + [one] Пре 1 сата + *[other] Пре { $duration } сати + } +minutes-ago = + { $duration -> + [0] Управо сада + [one] Пре 1 минута + *[other] Пре { $duration } минута + } diff --git a/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl index e69de29b..2c45ddba 100644 --- a/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl @@ -0,0 +1,2 @@ +cancel = Cancel·lar +confirm = Confirmar diff --git a/cosmic-applet-power/i18n/el/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/el/cosmic_applet_power.ftl index 41e6b281..bc5a945c 100644 --- a/cosmic-applet-power/i18n/el/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/el/cosmic_applet_power.ftl @@ -4,3 +4,33 @@ log-out = Αποσύνδεση restart = Επανεκκίνηση suspend = Αναστολή confirm = Επιβεβαίωση +confirm-button = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] Τερματισμός + [log-out] { log-out } + *[other] { confirm } + } +power = Ενέργεια +confirm-body = + Θα εκτελεστεί αυτόματα { $action -> + [restart] επανεκκίνηση + [suspend] αναστολή + [shutdown] τερματισμός + [lock-screen] κλείδωμα της οθόνης + [log-out] αποσύνδεση + *[other] η επιλεγμένη ενέργεια + } του συστήματος σε { $countdown } δευτερόλεπτα. +lock-screen = Κλείδωμα οθόνης +log-out-shortcut = Super + Shift + Escape +settings = Ρυθμίσεις... +lock-screen-shortcut = Super + Escape +confirm-title = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] { shutdown } + [log-out] Έξοδος από όλες τις εφαρμογές και αποσύνδεση + *[other] Εφαρμογή της επιλεγμένης ενέργειας + } τώρα; diff --git a/cosmic-applet-power/i18n/lo/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/lo/cosmic_applet_power.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-power/i18n/sr/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/sr/cosmic_applet_power.ftl index e69de29b..800b2900 100644 --- a/cosmic-applet-power/i18n/sr/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/sr/cosmic_applet_power.ftl @@ -0,0 +1,36 @@ +power = Напајање +lock-screen = Закључај екран +shutdown = Угаси +log-out = Одјава +restart = Поново покрени +log-out-shortcut = Супер + Shift + Esc +cancel = Откажи +suspend = Обустави +confirm = Потврди +settings = Подешавања... +lock-screen-shortcut = Супер + Esc +confirm-button = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] Искључи + [log-out] { log-out } + *[other] { confirm } + } +confirm-body = + Систем ће { $action -> + [restart] поново покренути + [suspend] обуставити + [shutdown] искључити + [lock-screen] закључати екран + [log-out] одјавити се + *[other] применити изабрану радњу + } самостално за { $countdown } секунде. +confirm-title = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] { shutdown } + [log-out] Затвори све програме и одјави се + *[other] Примени изабрану радњу + } сада? diff --git a/cosmic-applet-tiling/i18n/el/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/el/cosmic_applet_tiling.ftl index e69de29b..9c9d7e68 100644 --- a/cosmic-applet-tiling/i18n/el/cosmic_applet_tiling.ftl +++ b/cosmic-applet-tiling/i18n/el/cosmic_applet_tiling.ftl @@ -0,0 +1,20 @@ +arrow-keys = βέλη +move-window = Μετακίνηση παραθύρου +shift = Shift +super = Super +new-workspace = Συμπεριφορά νέων χώρων εργασίας +tiled = Παράθεση +active-hint = Ένδειξη ενεργού παραθύρου +navigate-windows = Πλοήγηση στα παράθυρα +toggle-floating-window = Εναλλαγή αιώρησης παραθύρων +all-workspaces = Όλοι οι χώροι εργασίας +per-workspace = Ανά χώρο εργασίας +autotile-behavior = Παράθεση παραθύρων στους χώρους εργασίας +tile-current = Παράθεση στον τρέχοντα χώρο εργασίας +floating = Αιώρηση +gaps = Κενά +tile-windows = Αυτόματη παράθεση παραθύρων +view-all-shortcuts = Προβολή όλων των συντομεύσεων... +shortcuts = Συντομεύσεις +floating-window-exceptions = Εξαιρέσεις αιωρούμενων παραθύρων... +window-management-settings = Ρυθμίσεις διαχείρισης παραθύρων... diff --git a/cosmic-applet-tiling/i18n/lo/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/lo/cosmic_applet_tiling.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-tiling/i18n/sr/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/sr/cosmic_applet_tiling.ftl index e69de29b..394e8fd9 100644 --- a/cosmic-applet-tiling/i18n/sr/cosmic_applet_tiling.ftl +++ b/cosmic-applet-tiling/i18n/sr/cosmic_applet_tiling.ftl @@ -0,0 +1,20 @@ +arrow-keys = стрелице +tiled = Поплочано +active-hint = Активна помоћ +navigate-windows = Крећите се прозорима +toggle-floating-window = Окини пловни прозор +all-workspaces = Сви радни простори +per-workspace = По радном простору +autotile-behavior = Поплочај прозоре на радним просторима +tile-current = Поплочај тренутни радни простор +floating = Плутајуће +gaps = Размаци +move-window = Премести прозор +tile-windows = Самостално поплочај прозоре +view-all-shortcuts = Прикажи све пречице... +shortcuts = Пречице +shift = Shift +floating-window-exceptions = Изузеци за пловне прозоре... +super = Супер +window-management-settings = Подешавања за управљање прозорима... +new-workspace = Понашање новог радног простора diff --git a/cosmic-applet-time/i18n/el/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/el/cosmic_applet_time.ftl index e69de29b..1e7405f3 100644 --- a/cosmic-applet-time/i18n/el/cosmic_applet_time.ftl +++ b/cosmic-applet-time/i18n/el/cosmic_applet_time.ftl @@ -0,0 +1 @@ +datetime-settings = Ρυθμίσεις ημερομηνίας, ώρας και ημερολογίου... diff --git a/cosmic-applet-time/i18n/lo/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/lo/cosmic_applet_time.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-time/i18n/sr/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/sr/cosmic_applet_time.ftl index e69de29b..014ee726 100644 --- a/cosmic-applet-time/i18n/sr/cosmic_applet_time.ftl +++ b/cosmic-applet-time/i18n/sr/cosmic_applet_time.ftl @@ -0,0 +1 @@ +datetime-settings = Датум, време и подешавања календара... diff --git a/cosmic-applet-workspaces/i18n/el/cosmic_applet_workspaces.ftl b/cosmic-applet-workspaces/i18n/el/cosmic_applet_workspaces.ftl index e69de29b..84c57d03 100644 --- a/cosmic-applet-workspaces/i18n/el/cosmic_applet_workspaces.ftl +++ b/cosmic-applet-workspaces/i18n/el/cosmic_applet_workspaces.ftl @@ -0,0 +1 @@ +cosmic-applet-workspaces = Χώροι εργασίας COSMIC diff --git a/cosmic-applet-workspaces/i18n/lo/cosmic_applet_workspaces.ftl b/cosmic-applet-workspaces/i18n/lo/cosmic_applet_workspaces.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-workspaces/i18n/sr/cosmic_applet_workspaces.ftl b/cosmic-applet-workspaces/i18n/sr/cosmic_applet_workspaces.ftl index e69de29b..98c21cf2 100644 --- a/cosmic-applet-workspaces/i18n/sr/cosmic_applet_workspaces.ftl +++ b/cosmic-applet-workspaces/i18n/sr/cosmic_applet_workspaces.ftl @@ -0,0 +1 @@ +cosmic-applet-workspaces = КОСМИК радни простори diff --git a/i18n/ca/desktop_entries.ftl b/i18n/ca/desktop_entries.ftl index e69de29b..8e680471 100644 --- a/i18n/ca/desktop_entries.ftl +++ b/i18n/ca/desktop_entries.ftl @@ -0,0 +1 @@ +cosmic-app-list = Safata d'Aplicacions diff --git a/i18n/el/desktop_entries.ftl b/i18n/el/desktop_entries.ftl index e69de29b..d5257105 100644 --- a/i18n/el/desktop_entries.ftl +++ b/i18n/el/desktop_entries.ftl @@ -0,0 +1,51 @@ +cosmic-app-list = Περιοχή εφαρμογών +cosmic-app-list-comment = Εκκίνηση καρφιτσωμένων εφαρμογών και διαχείριση ανοικτών παραθύρων +cosmic-applet-a11y = Προσβασιμότητα +cosmic-applet-audio = Ήχος +cosmic-applet-bluetooth = Bluetooth +cosmic-applet-bluetooth-comment = Διαχείριση συσκευών Bluetooth +cosmic-applet-minimize = Ελαχιστοποιημένα παράθυρα +cosmic-applet-minimize-comment = Διαχείριση ελαχιστοποιημένων παραθύρων +cosmic-applet-network = Δίκτυο +cosmic-applet-network-comment = Διαχείριση συνδέσεων δικτύου +cosmic-applet-time = Ημερομηνία, ώρα και ημερολόγιο +cosmic-applet-workspaces = Αριθμημένοι χώροι εργασίας +cosmic-panel-workspaces-button = Κουμπί χώρων εργασίας +cosmic-applet-audio-comment = Επιλογή συσκευής ήχου, έλεγχος έντασης και στοιχεία ελέγχου πολυμέσων MPRIS +cosmic-applet-audio-keywords = Μικροεφαρμογή;Ήχος;COSMIC;Applet;Sound;Audio;MPRIS; +cosmic-applet-bluetooth-keywords = Μικροεφαρμογή;COSMIC;Applet;Bluetooth; +cosmic-applet-input-sources = Πηγές εισόδου +cosmic-applet-input-sources-comment = Εναλλαγή μεταξύ πηγών εισόδου +cosmic-applet-input-sources-keywords = Μικροεφαρμογή;Πηγή;Είσοδος;COSMIC;Applet;Input;Source; +cosmic-applet-minimize-keywords = Μικροεφαρμογή;Ελαχιστοποίηση;COSMIC;Applet;Minimize; +cosmic-applet-network-keywords = Μικροεφαρμογή;Δίκτυο;COSMIC;Applet;Network; +cosmic-applet-notifications = Κέντρο ειδοποιήσεων +cosmic-applet-notifications-comment = Διαχείριση ειδοποιήσεων και λειτουργία «Μην ενοχλείτε» +cosmic-applet-notifications-keywords = Μικροεφαρμογή;Ειδοποίηση;COSMIC;Applet;Notification; +cosmic-applet-power = Συνεδρία χρήστη +cosmic-applet-power-comment = Κλείδωμα οθόνης, αποσύνδεση, αναστολή, επανεκκίνηση και τερματισμός +cosmic-applet-power-keywords = Μικροεφαρμογή;Χρήστης;Συνεδρία;Κλείδωμα;Αποσύνδεση;Επανεκκίνηση;Τερματισμός;Αναστολή;COSMIC;Applet;User;Session;Lock;Log;Reboot;Shutdown;Suspend; +cosmic-applet-status-area = Περιοχή ειδοποιήσεων +cosmic-applet-workspaces-keywords = Μικροεφαρμογή;Χώρος;Εργασίας;COSMIC;Applet;Workspace; +cosmic-panel-app-button = Κουμπί βιβλιοθήκης εφαρμογών +cosmic-panel-workspaces-button-keywords = Μικροεφαρμογή;Χώρος;Εργασίας;Επισκόπηση;COSMIC;Applet;Workspace;Overview; +cosmic-app-list-keywords = Μικροεφαρμογή;Εφαρμογή;Περιοχή;Λίστα;Εργασία;Γραμμή;COSMIC;Applet;App;Tray;List;Task;Bar; +cosmic-applet-a11y-keywords = Μικροεφαρμογή;Προσβασιμότητα;Προσιτότητα;Οθόνη;Ανάγνωση;Αναγνώστης;Μεγεθυντικός;Φακός;Αντίθεση;Χρώμα;COSMIC;Applet;Accessibility;A11y;Screen;Reader;Magnifier;Contrast;Color; +cosmic-applet-battery = Ενέργεια και μπαταρία +cosmic-applet-battery-comment = Λειτουργίες ενέργειας και επιλογές εξοικονόμησης ενέργειας +cosmic-applet-battery-keywords = Μικροεφαρμογή;Ενέργεια;Ισχύς;Μπαταρία;COSMIC;Applet;Power;Battery; +cosmic-applet-status-area-keywords = Μικροεφαρμογή;Εφαρμογή;Ένδειξη;Ειδοποίηση;Περιοχή;Κατάσταση;COSMIC;Applet;App;Indicator;Notification;Tray;Status; +cosmic-applet-time-keywords = Μικροεφαρμογή;Ημερομηνία;Ώρα;Ημερολόγιο;COSMIC;Applet;Date;Time;Calendar; +cosmic-panel-app-button-comment = Άνοιγμα της βιβλιοθήκης εφαρμογών για εκκίνηση εγκατεστημένων εφαρμογών +cosmic-panel-app-button-keywords = Μικροεφαρμογή;Εφαρμογή;Βιβλιοθήκη;Περιοχή;COSMIC;Applet;App;Library;Tray; +cosmic-applet-a11y-comment = Διαμόρφωση των ρυθμίσεων προσβασιμότητας από τη γραμμή συστήματος +cosmic-applet-status-area-comment = Ενδείξεις εφαρμογών που ενδέχεται να εξάγουν μενού στη γραμμή συστήματος +cosmic-applet-tiling = Παράθεση +cosmic-applet-tiling-comment = Διαχείριση της ένδειξης ενεργού παραθύρου, αυτόματη παράθεση παραθύρων στον τρέχοντα χώρο εργασίας και ανά χώρο εργασίας +cosmic-applet-tiling-keywords = Μικροεφαρμογή;Παράθεση;Ένδειξη;Χώρος;Εργασίας;COSMIC;Applet;Tiling;Hint;Workspace; +cosmic-applet-time-comment = Προβολή της τρέχουσας ώρας στη γραμμή συστήματος με αναδυόμενο ημερολόγιο +cosmic-applet-workspaces-comment = Εναλλαγή μεταξύ των αριθμημένων χώρων εργασίας στη γραμμή συστήματος +cosmic-panel-launcher-button = Κουμπί μενού εκκίνησης +cosmic-panel-launcher-button-comment = Άνοιγμα του μενού εκκίνησης για αναζήτηση εφαρμογών και εκτέλεση εντολών +cosmic-panel-launcher-button-keywords = Μικροεφαρμογή;Μενού;Εκκίνηση;Εκτέλεση;COSMIC;Applet;Launcher;Runner; +cosmic-panel-workspaces-button-comment = Άνοιγμα των χώρων εργασίας για διαχείριση και εναλλαγή χώρων εργασίας diff --git a/i18n/hu/desktop_entries.ftl b/i18n/hu/desktop_entries.ftl index 8dd220f7..637e262e 100644 --- a/i18n/hu/desktop_entries.ftl +++ b/i18n/hu/desktop_entries.ftl @@ -15,20 +15,20 @@ cosmic-applet-workspaces = Számozott Munkaterületek cosmic-panel-app-button = Alkalmazáskönyvtár gomb cosmic-panel-launcher-button = Indító gomb cosmic-panel-workspaces-button = Munkaterületek gomb -cosmic-app-list-keywords = COSMIC;Kisalkalmazás;Alkalmazás;App;Tálca;Lista;Sáv; -cosmic-applet-a11y-keywords = COSMIC;Kisalkalmazás;Akadálymentesség;Akadálymentesítés;Képernyő;Olvasó;Nagyító;Szín; -cosmic-applet-audio-keywords = COSMIC;Kisalkalmazás;Hang;MPRIS; -cosmic-applet-battery-keywords = COSMIC;Kisalkalmazás;Energia;Akkumulátor; +cosmic-app-list-keywords = COSMIC;kisalkalmazás;alkalmazás;app;tálca;lista;sáv; +cosmic-applet-a11y-keywords = COSMIC;kisalkalmazás;akadálymentesség;akadálymentesítés;képernyő;olvasó;nagyító;szín; +cosmic-applet-audio-keywords = COSMIC;kisalkalmazás;hang;MPRIS; +cosmic-applet-battery-keywords = COSMIC;kisalkalmazás;energia;akkumulátor; cosmic-applet-bluetooth-comment = Bluetooth-eszközök kezelése -cosmic-applet-bluetooth-keywords = COSMIC;Kisalkalmazás;Bluetooth; -cosmic-applet-input-sources-keywords = COSMIC;Kisalkalmazás;Beviteli;Forrás; -cosmic-applet-minimize-keywords = COSMIC;Kisalkalmazás;Minimizálás; -cosmic-applet-network-keywords = COSMIC;Kisalkalmazás;Hálózat;Internet; -cosmic-applet-notifications-keywords = COSMIC;Kisalkalmazás;Értesítések; -cosmic-applet-power-keywords = COSMIC;Kisalkalmazás;Felhasználói munkamenet;Zárolás;Kijelentkezés;Újraindítás;Leállítás;Felfüggesztés; -cosmic-panel-app-button-keywords = COSMIC;Kisalkalmazás;Alkalmazás;Könyvtár;Tálca; -cosmic-panel-launcher-button-keywords = COSMIC;Kisalkalmazás;Indító;Futtató; -cosmic-panel-workspaces-button-keywords = COSMIC;Kisalkalmazás;Munkaterületek;Áttekintés; +cosmic-applet-bluetooth-keywords = COSMIC;kisalkalmazás;bluetooth; +cosmic-applet-input-sources-keywords = COSMIC;kisalkalmazás;beviteli forrás; +cosmic-applet-minimize-keywords = COSMIC;kisalkalmazás;minimizálás; +cosmic-applet-network-keywords = COSMIC;kisalkalmazás;hálózat;internet; +cosmic-applet-notifications-keywords = COSMIC;kisalkalmazás;értesítések; +cosmic-applet-power-keywords = COSMIC;kisalkalmazás;felhasználói munkamenet;zárolás;kijelentkezés;újraindítás;leállítás;felfüggesztés; +cosmic-panel-app-button-keywords = COSMIC;kisalkalmazás;alkalmazás;könyvtár;tálca; +cosmic-panel-launcher-button-keywords = COSMIC;kisalkalmazás;indító;futtató; +cosmic-panel-workspaces-button-keywords = COSMIC;kisalkalmazás;munkaterületek;áttekintés; cosmic-applet-a11y-comment = Akadálymentességi beállítások kezelése a panelen cosmic-applet-audio-comment = Hangeszköz kiválasztása, hangerőszabályozás és MPRIS médiavezérlés cosmic-applet-battery-comment = Energiamódok és energiagazdálkodási beállítások @@ -39,13 +39,13 @@ cosmic-applet-notifications-comment = Értesítések és a Ne zavarjanak kezelé cosmic-applet-power-comment = Képernyő zárolása, kijelentkezés, felfüggesztés, újraindítás és leállítás cosmic-app-list-comment = Rögzített alkalmazások indítása és a megnyitott ablakok kezelése cosmic-applet-status-area-comment = Alkalmazásjelzők, melyek menüt is megjeleníthetnek a panelen -cosmic-applet-status-area-keywords = COSMIC;Kisalkalmazás;Alkalmazás;App;Jelző;Értesítések;Tálca;Állapot; +cosmic-applet-status-area-keywords = COSMIC;kisalkalmazás;alkalmazás;app;jelző;értesítések;tálca;állapot; cosmic-applet-tiling-comment = Az aktív ablak kiemelésének, valamint az aktuális és munkaterületenkénti automatikus csempézés kezelése -cosmic-applet-tiling-keywords = COSMIC;Kisalkalmazás;Csempézés;Kiemelés;Munkaterületek; +cosmic-applet-tiling-keywords = COSMIC;kisalkalmazás;csempézés;kiemelés;munkaterületek; cosmic-applet-time-comment = Az aktuális idő megjelenítése a panelen, felugró naptárral -cosmic-applet-time-keywords = COSMIC;Kisalkalmazás;Dátum;Idő;Naptár; +cosmic-applet-time-keywords = COSMIC;kisalkalmazás;dátum;idő;naptár; cosmic-applet-workspaces-comment = Váltás számozott munkaterületek között a panelen -cosmic-applet-workspaces-keywords = COSMIC;Kisalkalmazás;Munkaterületek; +cosmic-applet-workspaces-keywords = COSMIC;kisalkalmazás;munkaterületek; cosmic-panel-app-button-comment = Az alkalmazáskönyvtár megnyitása a telepített alkalmazások indításához cosmic-panel-launcher-button-comment = Az indító megnyitása alkalmazások kereséséhez és parancsok futtatásához cosmic-panel-workspaces-button-comment = A munkaterületek áttekintőjének megnyitása munkaterületek kezeléséhez és váltásához diff --git a/i18n/lo/desktop_entries.ftl b/i18n/lo/desktop_entries.ftl new file mode 100644 index 00000000..e69de29b diff --git a/i18n/sr/desktop_entries.ftl b/i18n/sr/desktop_entries.ftl index e69de29b..10c8d1eb 100644 --- a/i18n/sr/desktop_entries.ftl +++ b/i18n/sr/desktop_entries.ftl @@ -0,0 +1,51 @@ +cosmic-app-list = Системска касета +cosmic-app-list-comment = Покрени закачене програме и управљај отвореним прозорима +cosmic-app-list-keywords = COSMIC;Applet;App;Tray;List;Task;Bar;Космик;Програмчић;Програм;Касета;Списак;Задатак;Трака;kosmik;programčić;program;kaseta;spisak;zadatak;traka; +cosmic-applet-a11y = Приступачност +cosmic-applet-a11y-comment = Подеси подешавања приступачности из траке +cosmic-applet-a11y-keywords = COSMIC;Applet;Accessibility;A11y;Screen;Reader;Magnifier;Contrast;Color;Космик;Програмчић;Приступачност;А11ј;Екран;Читач;Лупа;Контраст;Боја;kosmik;programčić;pristupačnost;a11j;ekran;čitač;lupa;kontrast;boja; +cosmic-applet-audio = Звук +cosmic-applet-audio-comment = Избор уређаја звука, управљање јачином звука и MPRIS контроле медија +cosmic-applet-audio-keywords = COSMIC;Applet;Sound;Audio;MPRIS;Космик;Програмчић;Аудио;Звук;Јачина звука;МПРИС;Медија;kosmik;programčić;audio;zvuk;jačina zvuka;medija; +cosmic-applet-battery = Напајање и батерија +cosmic-applet-battery-comment = Режими напајања и могућности уштеде енергије +cosmic-applet-battery-keywords = COSMIC;Applet;Power;Battery;Космик;Програмчић;Напајање;Батерија;kosmik;programčić;napajanje;baterija; +cosmic-applet-bluetooth = Блутут +cosmic-applet-bluetooth-comment = Управљај Блутут уређајима +cosmic-applet-bluetooth-keywords = COSMIC;Applet;Bluetooth;Космик;Програмчић;Блутут;kosmik;programčić;blutut; +cosmic-applet-input-sources = Извори уноса +cosmic-applet-input-sources-comment = Пребацивање између извора уноса +cosmic-applet-input-sources-keywords = COSMIC;Applet;Input;Source;Космик;Програмчић;Унос;Извор;kosmik;programčić;unos;izvor; +cosmic-applet-minimize = Умањени прозори +cosmic-applet-minimize-comment = Управљај умањеним прозорима +cosmic-applet-minimize-keywords = COSMIC;Applet;Minimize;Космик;Програмчић;Умањи;kosmik;programčić;umanji; +cosmic-applet-network = Мрежа +cosmic-applet-network-comment = Управљај мрежним везама +cosmic-applet-network-keywords = COSMIC;Applet;Network;Космик;Програмчић;Мрежа;kosmik;programčić;mreža; +cosmic-applet-notifications = Центар за обавештења +cosmic-applet-notifications-comment = Управљај обавештењима и режимом „Не узнемиравај“ +cosmic-applet-notifications-keywords = COSMIC;Applet;Notification;Космик;Програмчић;Обавештење;kosmik;programčić;obaveštenje; +cosmic-applet-power = Корисничка сесија +cosmic-applet-power-comment = Закључај екран, одјави се, обустави, поново покрени и искључи +cosmic-applet-power-keywords = COSMIC;Applet;User;Session;Lock;Log;Reboot;Shutdown;Suspend;Космик;Програмчић;Корисник;Сесија;Закључавање;Одјава;Поновно покретање;Искључивање;Обустава;kosmik;programčić;korisnik;sesija;zaključavanje;odjava;ponovno pokretanje;isključivanje;obustava; +cosmic-applet-status-area = Обавештајна касета +cosmic-applet-status-area-comment = Показивачи програма који могу извести изборнике у површ +cosmic-applet-status-area-keywords = COSMIC;Applet;App;Indicator;Notification;Tray;Status;Космик;Програмчић;Програм;Показатељ;Обавештење;Пољце;Статус;kosmik;programčić;program;pokazatelj;obaveštenje;poljce;status; +cosmic-applet-tiling = Поплочавање +cosmic-applet-tiling-comment = Управљај активним саветом, тренутним и самопоплочавањем по радном простору +cosmic-applet-tiling-keywords = COSMIC;Applet;Tiling;Hint;Workspace;Космик;Програмчић;Поплочавање;Помоћ;Радни простор;kosmik;programčić;popločavanje;pomoć;radni prostor; +cosmic-applet-time = Датум, време и календар +cosmic-applet-time-comment = Приказује тренутно време у површи са искакућим календаром +cosmic-applet-time-keywords = COSMIC;Applet;Date;Time;Calendar;Космик;Програмчић;Датум;Време;Календар;kosmik;programčić;datum;vreme;kalendar; +cosmic-applet-workspaces = Радни простори обележени бројевима +cosmic-applet-workspaces-comment = Пребаците између радних простора обележених бројевима у траци +cosmic-applet-workspaces-keywords = COSMIC;Applet;Workspace;Космик;Програмчић;радни простор;kosmik;programčić;radni prostor; +cosmic-panel-app-button = Дугме за библиотеку програма +cosmic-panel-app-button-comment = Отвори библиотеку програма за покретање инсталираних програма +cosmic-panel-app-button-keywords = COSMIC;Applet;App;Library;Tray;Космик;Програмчић;Програм;Библиотека;Касета;kosmik;programčić;program;biblioteka;kaseta; +cosmic-panel-launcher-button = Дугме покретача +cosmic-panel-launcher-button-comment = Отвори покретач да бисте претражили програме и покренули наредбе +cosmic-panel-launcher-button-keywords = COSMIC;Applet;Launcher;Runner;Космик;Програмчић;Покретач;Покретач;kosmik;programčić;pokretač;pokretač; +cosmic-panel-workspaces-button = Дугме радних простора +cosmic-panel-workspaces-button-comment = Отвори преглед радних простора за управљање и пребацивање радних простора +cosmic-panel-workspaces-button-keywords = COSMIC;Applet;Workspace;Overview;Космик;Програмчић;радни простор;Преглед;kosmik;programčić;radni prostor;pregled; diff --git a/i18n/uk/desktop_entries.ftl b/i18n/uk/desktop_entries.ftl index b6b177b5..c6088440 100644 --- a/i18n/uk/desktop_entries.ftl +++ b/i18n/uk/desktop_entries.ftl @@ -30,9 +30,9 @@ cosmic-applet-input-sources-comment = Перемикання джерел вве cosmic-applet-input-sources-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Джерело;Введення;Розкладка;Клавіатура; cosmic-applet-minimize-comment = Керування згорнутими вікнами cosmic-applet-minimize-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Згорнути;Згорнуті;Вікна;Вікно; -cosmic-applet-network-comment = Керування мережевими підключеннями +cosmic-applet-network-comment = Керування мережевими з’єднаннями cosmic-applet-network-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Мережа;Інтернет; -cosmic-applet-notifications-comment = Керування сповіщеннями та режимом Не турбувати +cosmic-applet-notifications-comment = Керування сповіщеннями та режимом «Не турбувати» cosmic-applet-notifications-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Сповіщення; cosmic-applet-power-comment = Блокування екрана, вихід із сеансу, призупинення, перезапуск і вимкнення cosmic-applet-power-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Сеанс;Користувач;Блокування;Вихід;Перезапуск;Вимкнення;Призупинення;Сон; From 8b2ff3df73309bb2f5f12271bc81d7c89b658be5 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 12 May 2026 11:13:18 -0400 Subject: [PATCH 07/84] chore(battery): update deps with fix --- Cargo.lock | 188 ++++++++++++++++--------------- cosmic-applet-battery/src/app.rs | 4 + 2 files changed, 103 insertions(+), 89 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ac89c6e..89fea16a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -674,6 +674,15 @@ dependencies = [ "cfg_aliases", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bstr" version = "1.12.1" @@ -784,9 +793,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.61" +version = "1.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" dependencies = [ "find-msvc-tools", "jobserver", @@ -1377,7 +1386,7 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#160b086abe03cd34a8a375d7fbe47b24308d1f38" +source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#c253ec1d6804afbcdf250f5cc37ae1194bba7bd2" dependencies = [ "bitflags 2.11.1", "cosmic-protocols", @@ -1400,7 +1409,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1421,7 +1430,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "quote", "syn", @@ -1465,7 +1474,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#dbd0658f0dc2671f32f514261bd9b3fa664264bd" +source = "git+https://github.com/pop-os/cosmic-notifications#a899bfbc6715c36b1f02d7a0f4d3601a3ea0295f" dependencies = [ "cosmic-config", "serde", @@ -1474,7 +1483,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#dbd0658f0dc2671f32f514261bd9b3fa664264bd" +source = "git+https://github.com/pop-os/cosmic-notifications#a899bfbc6715c36b1f02d7a0f4d3601a3ea0295f" dependencies = [ "fast_image_resize", "libcosmic", @@ -1501,7 +1510,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#d518c7d25ef96f1a9696aa8cce008656bf66ece4" +source = "git+https://github.com/pop-os/cosmic-panel#2358f0473bf68b79f54a0906994a218de211de34" dependencies = [ "anyhow", "cosmic-config", @@ -1515,7 +1524,7 @@ dependencies = [ [[package]] name = "cosmic-pipewire" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "intmap", "libspa", @@ -1529,7 +1538,7 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#160b086abe03cd34a8a375d7fbe47b24308d1f38" +source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#c253ec1d6804afbcdf250f5cc37ae1194bba7bd2" dependencies = [ "bitflags 2.11.1", "wayland-backend", @@ -1543,7 +1552,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1557,7 +1566,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1570,7 +1579,7 @@ dependencies = [ [[package]] name = "cosmic-settings-airplane-mode-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "futures", "iced_futures", @@ -1603,7 +1612,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "futures", "iced_futures", @@ -1616,7 +1625,7 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "bitflags 2.11.1", "cosmic-dbus-networkmanager", @@ -1635,7 +1644,7 @@ dependencies = [ [[package]] name = "cosmic-settings-sound-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "cosmic-pipewire", "futures", @@ -1650,7 +1659,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1a44f8634fad6ed04560db4b99b5c46c8e550836" +source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" dependencies = [ "futures", "iced_futures", @@ -1688,7 +1697,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "almost", "configparser", @@ -2300,9 +2309,9 @@ checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" [[package]] name = "fast_image_resize" -version = "5.5.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc7fe45cf92b43817ff62a3723e862b85bd1d06288f63007f7645d1d2f7a060" +checksum = "12dd43e5011e8d8411a3215a0d57a2ec5c68282fb90eb5d7221fab0113442174" dependencies = [ "cfg-if", "document-features", @@ -2881,9 +2890,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -3033,7 +3042,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "dnd", "iced_accessibility", @@ -3054,7 +3063,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "accesskit", "accesskit_winit", @@ -3063,7 +3072,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "bitflags 2.11.1", "bytes", @@ -3087,7 +3096,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "iced_core", "iced_futures", @@ -3097,7 +3106,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "futures", "iced_core", @@ -3111,7 +3120,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "bitflags 2.11.1", "bytemuck", @@ -3132,7 +3141,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "iced_graphics", "iced_runtime", @@ -3141,7 +3150,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3153,7 +3162,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3168,7 +3177,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "bytemuck", "cosmic-text", @@ -3185,7 +3194,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.1", @@ -3216,7 +3225,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3234,7 +3243,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3712,9 +3721,9 @@ dependencies = [ [[package]] name = "image-extras" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d29ba92ef6970a2685cc758b455d190842b8b9e96c865ffd31cdb9954b7548" +checksum = "60d02eb2c9ccbbab470538fce34c7bc3be7b4e59268e65a3171367b296cdb842" dependencies = [ "image", ] @@ -3753,7 +3762,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.0", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -3984,9 +3993,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.97" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1840c94c045fbcf8ba2812c95db44499f7c64910a912551aaaa541decebcacf" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" dependencies = [ "cfg-if", "futures-util", @@ -4051,11 +4060,11 @@ dependencies = [ [[package]] name = "kqueue-sys" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +checksum = "285efcf12ef41bec907b3000d5ffaeb54191d4d9d83c0d6157e6cbc2db255e64" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.11.1", "libc", ] @@ -4101,7 +4110,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#564ef834cec33a948dc10c9b401cf29db5d18373" +source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" dependencies = [ "apply", "ashpd 0.12.3", @@ -4187,7 +4196,7 @@ dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.4", + "redox_syscall 0.7.5", ] [[package]] @@ -4335,9 +4344,9 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9815fac08e6fd96733a11dce4f9d15a3f338e96a2e2311ee21e1b738efc2bc0f" +checksum = "8575c0d003ae459399623c4def180c63b77f343b1a7fee64f249b349e7699a31" dependencies = [ "lyon_path", "num-traits", @@ -5002,9 +5011,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c6933ddbbd16539a7672e697bb8d41ac3a4e99ac43eeb40c07236bd7fcb2dd" +checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329" dependencies = [ "libc", "libredox", @@ -5223,18 +5232,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.11" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.11" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" dependencies = [ "proc-macro2", "quote", @@ -5483,9 +5492,9 @@ dependencies = [ [[package]] name = "profiling" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" [[package]] name = "pxfm" @@ -5501,9 +5510,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.39.2" +version = "0.39.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", "serde", @@ -5614,9 +5623,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" +checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" dependencies = [ "bitflags 2.11.1", ] @@ -6052,11 +6061,12 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.18.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" +checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" dependencies = [ "base64", + "bs58", "chrono", "hex", "indexmap 1.9.3", @@ -6071,9 +6081,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.18.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" +checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" dependencies = [ "darling 0.23.0", "proc-macro2", @@ -6150,9 +6160,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "skrifa" @@ -6626,9 +6636,9 @@ checksum = "b130bd8a58c163224b44e217b4239ca7b927d82bf6cc2fea1fc561d15056e3f7" [[package]] name = "tokio" -version = "1.52.1" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -7073,9 +7083,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df52b6d9b87e0c74c9edfa1eb2d9bf85e5d63515474513aa50fa181b3c4f5db1" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" dependencies = [ "cfg-if", "once_cell", @@ -7086,9 +7096,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.70" +version = "0.4.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af934872acec734c2d80e6617bbb5ff4f12b052dd8e6332b0817bce889516084" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" dependencies = [ "js-sys", "wasm-bindgen", @@ -7096,9 +7106,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b1041f495fb322e64aca85f5756b2172e35cd459376e67f2a6c9dffcedb103" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7106,9 +7116,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcd0ff20416988a18ac686d4d4d0f6aae9ebf08a389ff5d29012b05af2a1b41" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" dependencies = [ "bumpalo", "proc-macro2", @@ -7119,9 +7129,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.120" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49757b3c82ebf16c57d69365a142940b384176c24df52a087fb748e2085359ea" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" dependencies = [ "unicode-ident", ] @@ -7326,9 +7336,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.97" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eadbac71025cd7b0834f20d1fe8472e8495821b4e9801eb0a60bd1f19827602" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" dependencies = [ "js-sys", "wasm-bindgen", @@ -8078,7 +8088,7 @@ dependencies = [ "libredox", "orbclient", "raw-window-handle", - "redox_syscall 0.7.4", + "redox_syscall 0.7.5", "smol_str", "tracing", "winit-core", @@ -8357,7 +8367,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#d518c7d25ef96f1a9696aa8cce008656bf66ece4" +source = "git+https://github.com/pop-os/cosmic-panel#2358f0473bf68b79f54a0906994a218de211de34" dependencies = [ "serde", "wayland-protocols-wlr", @@ -8442,9 +8452,9 @@ dependencies = [ [[package]] name = "xml" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8aa498d22c9bbaf482329839bc5620c46be275a19a812e9a22a2b07529a642a" +checksum = "636f85e5ca6488e96401b61eb7de54f4e44755c988af0f52cf90230c312a1a89" [[package]] name = "xml-rs" @@ -8628,9 +8638,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] @@ -8726,9 +8736,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.10.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db0ecb8987cf5e92653c57c098f7f0e39a03112edb796f4fe089fb7eaa14ff" +checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" dependencies = [ "endi", "enumflags2", @@ -8741,9 +8751,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.10.1" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b949b639ab1b4bed763aa7481ba0e368af68d8b55532f8ed4bec86a59f2ca98" +checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/cosmic-applet-battery/src/app.rs b/cosmic-applet-battery/src/app.rs index 67e513c3..9233a33f 100644 --- a/cosmic-applet-battery/src/app.rs +++ b/cosmic-applet-battery/src/app.rs @@ -368,6 +368,10 @@ impl cosmic::Application for CosmicBatteryApplet { let _ = tx.send(()); } let mut tasks = vec![get_popup(popup_settings)]; + if let Some(tx) = &self.settings_daemon_sender { + let _ = tx.send(settings_daemon::Request::GetDisplayBrightness); + let _ = tx.send(settings_daemon::Request::GetMaxDisplayBrightness); + } // Try again every time a popup is opened if self.charging_limit.is_none() { tasks.push(Task::perform(get_charging_limit(), |limit| { From 78a6f786212b6d01696b9339b3af8b5b6eacfce1 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 12 May 2026 14:16:40 -0400 Subject: [PATCH 08/84] chore: release profile --- Cargo.toml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5e6940de..569cb3b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,10 +62,9 @@ cosmic-config = { git = "https://github.com/pop-os/libcosmic" } serde = { version = "1.0.228", features = ["derive"] } [profile.release] -# opt-level = 3 -# panic = "abort" -# lto = "thin" -opt-level = 1 +opt-level = 3 +panic = "abort" +lto = "thin" [workspace.metadata.cargo-machete] ignored = ["libcosmic"] From 666f0110d647724d6217832d17df315339e8c7df Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 12 May 2026 14:32:26 -0400 Subject: [PATCH 09/84] clippy --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 754b859e..f4f19141 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,11 +19,11 @@ jobs: - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@master with: - toolchain: 1.90.0 + toolchain: 1.93.1 components: clippy - name: install dependencies run: sudo apt update && sudo apt install -y libxkbcommon-dev libwayland-dev libdbus-1-dev libpulse-dev libpipewire-0.3-dev libinput-dev - uses: actions-rs-plus/clippy-check@v2 with: - toolchain: 1.90.0 + toolchain: 1.93.1 args: --all --all-targets --all-features From 65a9e142b536ff86d316c2408789036af70b3335 Mon Sep 17 00:00:00 2001 From: Andrei Ivanou Date: Sun, 17 May 2026 16:41:25 +0200 Subject: [PATCH 10/84] fix(process): prevent zombie shell processes --- cosmic-panel-button/src/lib.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/cosmic-panel-button/src/lib.rs b/cosmic-panel-button/src/lib.rs index 718744b0..45ee1ca2 100644 --- a/cosmic-panel-button/src/lib.rs +++ b/cosmic-panel-button/src/lib.rs @@ -123,11 +123,15 @@ impl cosmic::Application for Button { fn update(&mut self, message: Msg) -> app::Task { match message { Msg::Press => { - let _ = Command::new("sh") + if let Ok(mut child) = Command::new("sh") .arg("-c") - .arg(&self.desktop.exec) + .arg(format!("exec {}", self.desktop.exec)) .spawn() - .unwrap(); + { + std::thread::spawn(move || { + let _ = child.wait(); + }); + } } Msg::ConfigUpdated(conf) => { self.config = conf From 8d84396e5784f899b021e8204fa68b8c003a112c Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Sat, 25 Apr 2026 01:04:18 -0400 Subject: [PATCH 11/84] feat(network): integrate nmrs for VPN, airplane mode, and secret agent Replace cosmic-settings-network-manager-subscription channel-based NetworkManager calls with direct nmrs API calls: - VPN list: nm.list_saved_connections() instead of hand-walking NetworkManagerSettings over D-Bus. - VPN connect/disconnect: nm.connect_vpn_by_uuid / disconnect_vpn_by_uuid. - Forget Wi-Fi: nm.forget(&ssid). - Wi-Fi radio toggle: nm.set_wireless_enabled. - Airplane mode: nm.set_airplane_mode, dropping cosmic-settings-airplane-mode-subscription. - Secret agent: nmrs::agent::SecretAgent registered per-popup, replacing nm-secret-agent-manager. VPN secrets are replied via responder.vpn_secrets(...); the applets own Authenticate flow still drives Wi-Fi password handoff and releases NM with NoSecrets. --- Cargo.lock | 64 ++- cosmic-applet-network/Cargo.toml | 7 +- cosmic-applet-network/src/app.rs | 718 +++++++++++++++---------------- 3 files changed, 387 insertions(+), 402 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 89fea16a..c105ba5b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1221,7 +1221,6 @@ dependencies = [ "anyhow", "async-fn-stream", "cosmic-dbus-networkmanager", - "cosmic-settings-airplane-mode-subscription", "cosmic-settings-network-manager-subscription", "futures", "futures-util", @@ -1229,7 +1228,7 @@ dependencies = [ "i18n-embed-fl", "indexmap 2.14.0", "libcosmic", - "nm-secret-agent-manager", + "nmrs", "rust-embed", "rustc-hash 2.1.2", "secure-string", @@ -1576,18 +1575,6 @@ dependencies = [ "zbus", ] -[[package]] -name = "cosmic-settings-airplane-mode-subscription" -version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" -dependencies = [ - "futures", - "iced_futures", - "log", - "rustix 1.1.4", - "tokio", -] - [[package]] name = "cosmic-settings-config" version = "0.1.0" @@ -2054,7 +2041,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2252,7 +2239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2640,6 +2627,12 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + [[package]] name = "futures-util" version = "0.3.32" @@ -3894,7 +3887,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4045,7 +4038,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4615,6 +4608,26 @@ dependencies = [ "zbus", ] +[[package]] +name = "nmrs" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e844f47ab7f54da2a16de939f5b52ad6c84b844be68e9338e3d32160ddcd68" +dependencies = [ + "async-trait", + "base64", + "bitflags 2.11.1", + "futures", + "futures-timer", + "log", + "serde", + "thiserror 2.0.18", + "tokio", + "uuid", + "zbus", + "zvariant", +] + [[package]] name = "nom" version = "7.1.3" @@ -4667,7 +4680,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5857,7 +5870,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -6091,6 +6104,12 @@ dependencies = [ "syn", ] +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + [[package]] name = "sha2" version = "0.10.9" @@ -6463,7 +6482,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -7026,6 +7045,7 @@ dependencies = [ "getrandom 0.4.2", "js-sys", "serde_core", + "sha1_smol", "wasm-bindgen", ] @@ -7532,7 +7552,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index 659dd076..c89cb12c 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -26,16 +26,13 @@ tracing-log.workspace = true tracing-subscriber.workspace = true tracing.workspace = true zbus.workspace = true -nm-secret-agent-manager = { git = "https://github.com/pop-os/dbus-settings-bindings/" } indexmap = "2.13.0" secure-string = "0.3.0" uuid = { version = "1.21.0", features = ["v4"] } +nmrs = "3.0" + [dependencies.cosmic-settings-network-manager-subscription] git = "https://github.com/pop-os/cosmic-settings/" # path = "../../cosmic-settings/subscriptions/network-manager" - -[dependencies.cosmic-settings-airplane-mode-subscription] -git = "https://github.com/pop-os/cosmic-settings/" -# path = "../../cosmic-settings/subscriptions/airplane-mode" diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 727d9b10..6939f5e3 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -1,21 +1,21 @@ use anyhow::Context; -use cosmic_dbus_networkmanager::settings::{NetworkManagerSettings, connection::Settings}; use cosmic_settings_network_manager_subscription::{ self as network_manager, NetworkManagerState, UUID, - active_conns::active_conns_subscription, available_wifi::{AccessPoint, NetworkType}, current_networks::ActiveConnectionInfo, hw_address::HwAddress, - nm_secret_agent::{self, PasswordFlag, SecretSender}, }; use indexmap::IndexMap; +use nmrs::{ + NetworkManager as NmrsManager, SettingsSummary, + agent::{SecretAgent, SecretAgentCapabilities, SecretRequest, SecretResponder, SecretSetting}, +}; use rustc_hash::FxHashSet; use secure_string::SecureString; use std::{ borrow::Cow, - collections::{BTreeMap, BTreeSet}, + collections::{BTreeMap, HashMap}, sync::{Arc, LazyLock}, - time::Duration, }; use cosmic::{ @@ -33,18 +33,17 @@ use cosmic::{ }, surface, theme, widget::{ - Column, Id, Row, button, column, container, divider, + Id, button, column, container, divider, icon::{self, from_name}, row, scrollable, secure_input, text, text_input, toggler, }, }; -use cosmic_dbus_networkmanager::interface::{ - access_point, - enums::{ActiveConnectionState, DeviceState, NmConnectivityState, NmState}, +use cosmic_dbus_networkmanager::interface::enums::{ + ActiveConnectionState, DeviceState, NmConnectivityState, }; -use futures::{StreamExt, channel::mpsc::TrySendError}; -use zbus::{Connection, zvariant::ObjectPath}; +use futures::{StreamExt, lock::Mutex as AsyncMutex}; +use zbus::Connection; use crate::{config, fl}; @@ -74,14 +73,6 @@ impl NewConnectionState { } .ssid } - pub fn hw_address(&self) -> HwAddress { - match self { - Self::EnterPassword { access_point, .. } => access_point, - Self::Waiting(ap) => ap, - Self::Failure(ap) => ap, - } - .hw_address - } } impl From for AccessPoint { @@ -101,51 +92,53 @@ pub struct MyNetworkState { pub known_vpns: IndexMap, pub ssid_to_uuid: BTreeMap, Box>, pub devices: Vec>, - pub password: Option, - pub connecting: BTreeSet, pub nm_state: NetworkManagerState, pub requested_vpn: Option, } +/// Shared, take-once handle to an `nmrs` [`SecretResponder`]. Cloned freely +/// across `Message` boundaries; the first consumer to `lock().take()` it owns +/// the reply to NetworkManager. +pub type SecretResponderHandle = Arc>>; + #[derive(Debug, Clone)] pub struct RequestedVpn { - name: String, uuid: Arc, description: Option, password: SecureString, password_hidden: bool, - tx: SecretSender, + responder: SecretResponderHandle, + /// VPN secret keys NM hinted as needed (e.g. `["password"]`). When empty, + /// `"password"` is used as a fallback. + secret_keys: Vec, } #[derive(Clone, Debug)] pub enum ConnectionSettings { - Vpn(VpnConnectionSettings), + Vpn { id: String }, Wireguard { id: String }, } -#[derive(Clone, Debug, Default)] -pub struct VpnConnectionSettings { - id: String, - username: Option, - connection_type: Option, - password_flag: Option, +/// Local mirror of the secret-agent events the applet cares about. Sourced +/// from `nmrs::agent` instead of the previous `nm_secret_agent` subscription. +#[derive(Debug, Clone)] +pub enum NmAgentEvent { + RequestSecret { + connection_uuid: String, + connection_id: String, + setting: AgentSetting, + responder: SecretResponderHandle, + }, + CancelGetSecrets, + Failed(String), } -#[derive(Clone, Debug, Eq, PartialEq)] -enum ConnectionType { - Password, -} - -impl VpnConnectionSettings { - fn password_flag(&self) -> Option { - self.connection_type - .as_ref() - .is_some_and(|ct| match ct { - ConnectionType::Password => true, - }) - .then_some(self.password_flag) - .flatten() - } +#[derive(Debug, Clone)] +pub enum AgentSetting { + WifiPsk { ssid: String }, + WifiEap, + Vpn { secret_keys: Vec }, + Other, } #[derive(Default)] @@ -157,7 +150,6 @@ struct CosmicNetworkApplet { // NM state nm_sender: Option>, nm_task: Option>, - secret_tx: Option>, nm_state: MyNetworkState, // UI state @@ -264,8 +256,9 @@ fn vpn_section<'a>( if show_available_vpns { for (uuid, connection) in &nm_state.known_vpns { let id = match connection { - ConnectionSettings::Vpn(connection) => connection.id.as_str(), - ConnectionSettings::Wireguard { id } => id.as_str(), + ConnectionSettings::Vpn { id } | ConnectionSettings::Wireguard { id } => { + id.as_str() + } }; // Check if this VPN is currently active let is_active = nm_state.nm_state.active_conns.iter().any( @@ -366,15 +359,12 @@ impl CosmicNetworkApplet { } fn update_togglers(&mut self, state: &NetworkManagerState) { - let mut changed = false; if self.nm_state.nm_state.wifi_enabled != state.wifi_enabled { self.nm_state.nm_state.wifi_enabled = state.wifi_enabled; - changed = true; } if self.nm_state.nm_state.airplane_mode != state.airplane_mode { self.nm_state.nm_state.airplane_mode = state.airplane_mode; - changed = true; } } @@ -397,55 +387,90 @@ impl CosmicNetworkApplet { } fn connect_vpn(&mut self, uuid: Arc) -> Task> { - if let Some((tx, conn)) = self.nm_sender.clone().zip(self.conn.clone()) { - cosmic::task::future(async move { - // Find the connection by UUID - if let Ok(nm_settings) = NetworkManagerSettings::new(&conn).await { - if let Ok(connections) = nm_settings.list_connections().await { - for connection in connections { - if let Ok(settings) = connection.get_settings().await { - let settings = Settings::new(settings); - if let Some(conn_settings) = &settings.connection { - if conn_settings.uuid.as_ref().is_some_and(|conn_uuid| { - conn_uuid.as_str() == uuid.as_ref() - }) { - let path = connection.inner().path().clone().to_owned(); - if let Err(err) = - tx.unbounded_send(network_manager::Request::Activate( - ObjectPath::try_from("/").unwrap(), - path, - )) - { - if err.is_disconnected() { - return zbus::Connection::system() - .await - .context( - "failed to create system dbus connection", - ) - .map_or_else( - |why| Message::Error(why.to_string()), - Message::NetworkManagerConnect, - ); - } - - tracing::error!("{err:?}"); - } - break; - } - } - } - } - } - } - Message::Refresh - }) - } else { - tracing::warn!("No sender available to activate VPN."); - Task::none() - } + cosmic::task::future(async move { + match NmrsManager::new().await { + Ok(nm) => match nm.connect_vpn_by_uuid(&uuid).await { + Ok(()) => Message::Refresh, + Err(e) => Message::Error(format!("activate VPN {uuid}: {e}")), + }, + Err(e) => Message::Error(format!("nmrs init: {e}")), + } + }) } } +/// Registers an `nmrs` secret agent on the system bus and yields its +/// requests + cancellations as [`NmAgentEvent`] for the applet to handle. +fn secret_agent_task(identifier: String) -> Task { + cosmic::Task::stream(async_fn_stream::fn_stream(move |emitter| async move { + let registration = SecretAgent::builder() + .with_identifier(identifier) + .with_capabilities(SecretAgentCapabilities::VPN_HINTS) + .register() + .await; + + let (mut handle, mut requests) = match registration { + Ok(pair) => pair, + Err(e) => { + let _ = emitter.emit(NmAgentEvent::Failed(e.to_string())).await; + return; + } + }; + + loop { + tokio::select! { + req = requests.next() => match req { + Some(req) => { + let event = secret_request_to_event(req); + let _ = emitter.emit(event).await; + } + None => break, + }, + cancel = handle.cancellations().next() => match cancel { + Some(_reason) => { + let _ = emitter.emit(NmAgentEvent::CancelGetSecrets).await; + } + None => break, + }, + } + } + + if let Err(e) = handle.unregister().await { + tracing::warn!("failed to unregister secret agent: {e}"); + } + })) +} + +fn secret_request_to_event(req: SecretRequest) -> NmAgentEvent { + let setting = match req.setting { + SecretSetting::WifiPsk { ssid } => AgentSetting::WifiPsk { ssid }, + SecretSetting::WifiEap { .. } => AgentSetting::WifiEap, + SecretSetting::Vpn { .. } => AgentSetting::Vpn { + secret_keys: req.hints.clone(), + }, + _ => AgentSetting::Other, + }; + + NmAgentEvent::RequestSecret { + connection_uuid: req.connection_uuid, + connection_id: req.connection_id, + setting, + responder: Arc::new(AsyncMutex::new(Some(req.responder))), + } +} + +/// Reply with [`NoSecrets`](nmrs::agent::SecretResponder::no_secrets) to free +/// NetworkManager when the applet decides not to use the responder. Dropping +/// it would also auto-reply, but doing it explicitly keeps the log clean. +fn release_responder(responder: SecretResponderHandle) -> Task> { + cosmic::task::future(async move { + if let Some(r) = responder.lock().await.take() { + let _ = r.no_secrets().await; + } + Message::NoOp + }) +} + #[derive(Debug, Clone)] pub(crate) enum Message { TogglePopup, @@ -460,12 +485,13 @@ pub(crate) enum Message { TogglePasswordVisibility, FocusSecureInput, NoOp, + #[allow(dead_code)] // required by `cosmic::applet` surface path; not always emitted Surface(surface::Action), ActivateVpn(Arc), // UUID of VPN to activate DeactivateVpn(Arc), // UUID of VPN to deactivate ToggleVpnList, // Show/hide available VPNs /// An update from the secret agent - SecretAgent(network_manager::nm_secret_agent::Event), + SecretAgent(NmAgentEvent), /// Connect to a WiFi network access point. Connect(network_manager::SSID, HwAddress), /// Connect with a password @@ -501,16 +527,6 @@ pub(crate) enum Message { SelectDevice(Option>), } -#[derive(Debug, Clone)] -struct Password { - ssid: network_manager::SSID, - hw_address: HwAddress, - identity: Option, - password: SecureString, - password_hidden: bool, - tx: SecretSender, -} - fn connection_settings(conn: zbus::Connection) -> Task { let settings = async move { let settings = network_manager::dbus::settings::NetworkManagerSettings::new(&conn).await?; @@ -634,109 +650,30 @@ impl CosmicNetworkApplet { } } -fn load_vpns(conn: zbus::Connection) -> Task { - let settings = async move { - let settings = network_manager::dbus::settings::NetworkManagerSettings::new(&conn).await?; - - _ = settings.load_connections(&[]).await; - - let settings = settings - // Get a list of known connections. - .list_connections() - .await? - // Prepare for wrapping in a concurrent stream. - .into_iter() - .map(|conn| async move { conn }) - // Create a concurrent stream for each connection. - .apply(futures::stream::FuturesOrdered::from_iter) - // Concurrently fetch settings for each connection, and filter for VPN. - .filter_map(|conn| async move { - let settings = conn.get_settings().await.ok()?; - - let connection = settings.get("connection")?; - - match connection - .get("type")? - .downcast_ref::() - .ok()? - .as_str() - { - "vpn" => (), - - "wireguard" => { - let id = connection.get("id")?.downcast_ref::().ok()?; - let uuid = connection.get("uuid")?.downcast_ref::().ok()?; - return Some((Arc::from(uuid), ConnectionSettings::Wireguard { id })); - } - - _ => return None, - } - - let vpn = settings.get("vpn")?; - let id = connection.get("id")?.downcast_ref::().ok()?; - let uuid = connection.get("uuid")?.downcast_ref::().ok()?; - - let (connection_type, username, password_flag) = vpn - .get("data") - .and_then(|data| data.downcast_ref::().ok()) - .map(|dict| { - let (mut connection_type, mut password_flag) = (None, None); - let mut username = vpn - .get("user-name") - .and_then(|u| u.downcast_ref::().ok()); - if dict - .get::(&String::from("connection-type")) - .ok() - .flatten() - .as_deref() - // may be "password" or "password-tls" - .is_some_and(|p| p.starts_with("password")) - { - connection_type = Some(ConnectionType::Password); - username = Some(username.unwrap_or_default()); - - password_flag = dict - .get::(&String::from("password-flags")) - .ok() - .flatten() - .and_then(|value| match value.as_str() { - "0" => Some(PasswordFlag::None), - "1" => Some(PasswordFlag::AgentOwned), - "2" => Some(PasswordFlag::NotSaved), - "4" => Some(PasswordFlag::NotRequired), - _ => None, - }); - } - - (connection_type, username, password_flag) - }) - .unwrap_or_default(); - - Some(( - Arc::from(uuid), - ConnectionSettings::Vpn(VpnConnectionSettings { - id, - connection_type, - password_flag, - username, - }), - )) - }) - // Reduce the settings list into - .fold(IndexMap::new(), |mut set, (uuid, data)| async move { - set.insert(uuid, data); - set - }) - .await; - - Ok::<_, zbus::Error>(settings) - }; - +fn load_vpns(_conn: zbus::Connection) -> Task { cosmic::task::future(async move { - settings.await.map_or_else( - |why| Message::Error(why.to_string()), - Message::KnownConnections, - ) + let nm = match NmrsManager::new().await { + Ok(nm) => nm, + Err(e) => return Message::Error(format!("nmrs init: {e}")), + }; + + let saved = match nm.list_saved_connections().await { + Ok(saved) => saved, + Err(e) => return Message::Error(format!("list saved connections: {e}")), + }; + + let mut map: IndexMap = IndexMap::new(); + for c in saved { + let uuid: UUID = Arc::from(c.uuid.as_str()); + let entry = match c.summary { + SettingsSummary::WireGuard { .. } => ConnectionSettings::Wireguard { id: c.id }, + SettingsSummary::Vpn { .. } => ConnectionSettings::Vpn { id: c.id }, + _ => continue, + }; + map.insert(uuid, entry); + } + + Message::KnownConnections(map) }) } @@ -759,7 +696,7 @@ impl cosmic::Application for CosmicNetworkApplet { const APP_ID: &'static str = config::APP_ID; fn init(core: cosmic::app::Core, _flags: ()) -> (Self, app::Task) { - let mut applet = Self { + let applet = Self { core, icon_name: "network-wired-disconnected-symbolic".to_string(), token_tx: None, @@ -789,19 +726,11 @@ impl cosmic::Application for CosmicNetworkApplet { tasks.push(update_state(conn.clone())); tasks.push(update_devices(conn.clone())); tasks.push(load_vpns(conn)); - let (tx, rx) = tokio::sync::mpsc::channel(4); - self.secret_tx = Some(tx); let my_id = format!( "com.system76.CosmicSettings.Applet.{}.NetworkManager.SecretAgent", uuid::Uuid::new_v4() ); - tasks.push( - cosmic::Task::stream(nm_secret_agent::secret_agent_stream( - my_id.clone(), - rx, - )) - .map(Message::SecretAgent), - ); + tasks.push(secret_agent_task(my_id).map(Message::SecretAgent)); } // TODO request update of state maybe let new_id = window::Id::unique(); @@ -823,17 +752,20 @@ impl cosmic::Application for CosmicNetworkApplet { } Message::ToggleAirplaneMode(enabled) => { self.toggle_wifi_ctr += 1; - if let Some(tx) = self.nm_sender.as_mut() { - if let Err(err) = - tx.unbounded_send(network_manager::Request::SetAirplaneMode(enabled)) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + self.nm_state.nm_state.airplane_mode = enabled; + return cosmic::task::future(async move { + match NmrsManager::new().await { + Ok(nm) => match nm.set_airplane_mode(enabled).await { + Ok(()) => Message::Refresh, + Err(e) => { + tracing::warn!("set_airplane_mode partial failure: {e}"); + Message::Refresh + } + }, + Err(e) => Message::Error(format!("nmrs init: {e}")), } - } + }) + .map(cosmic::Action::App); } Message::SelectWirelessAccessPoint(access_point) => { let Some(tx) = self.nm_sender.as_ref() else { @@ -845,7 +777,7 @@ impl cosmic::Application for CosmicNetworkApplet { tx.unbounded_send(network_manager::Request::SelectAccessPoint( access_point.ssid.clone(), access_point.network_type, - self.secret_tx.clone(), + None, self.active_device.as_ref().map(|d| d.interface.clone()), )) { @@ -862,21 +794,19 @@ impl cosmic::Application for CosmicNetworkApplet { .nm_state .known_access_points .contains(&access_point) - { - if let Err(err) = + && let Err(err) = tx.unbounded_send(network_manager::Request::SelectAccessPoint( access_point.ssid.clone(), access_point.network_type, - self.secret_tx.clone(), + None, self.active_device.as_ref().map(|d| d.interface.clone()), )) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + { + if err.is_disconnected() { + return system_conn().map(cosmic::Action::App); } + + tracing::error!("{err:?}"); } self.new_connection = Some(NewConnectionState::EnterPassword { access_point, @@ -915,7 +845,6 @@ impl cosmic::Application for CosmicNetworkApplet { _ = cancel.send(()); } - self.secret_tx = None; return system_conn().map(cosmic::Action::App); } } @@ -981,19 +910,23 @@ impl cosmic::Application for CosmicNetworkApplet { tracing::warn!("Failed to find known access point with ssid: {}", ssid); return Task::none(); }; - if let Some(tx) = self.nm_sender.as_ref() { - if let Err(err) = - tx.unbounded_send(network_manager::Request::Forget(ssid.into())) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + self.show_visible_networks = true; + let ssid_for_task = ssid.clone(); + let forget_task = cosmic::task::future(async move { + match NmrsManager::new().await { + Ok(nm) => match nm.forget(&ssid_for_task).await { + Ok(()) => Message::Refresh, + Err(e) => { + tracing::warn!("forget {ssid_for_task} failed: {e}"); + Message::Refresh + } + }, + Err(e) => Message::Error(format!("nmrs init: {e}")), } - self.show_visible_networks = true; - return self.update(Message::SelectWirelessAccessPoint(ap)); - } + }) + .map(cosmic::Action::App); + let reconnect_task = self.update(Message::SelectWirelessAccessPoint(ap)); + return Task::batch(vec![forget_task, reconnect_task]); } Message::Surface(a) => { return cosmic::task::message(cosmic::Action::Cosmic( @@ -1003,17 +936,17 @@ impl cosmic::Application for CosmicNetworkApplet { Message::ActivateVpn(uuid) => { return self.connect_vpn(uuid.clone()); } - Message::DeactivateVpn(name) => { - if let Some(tx) = self.nm_sender.as_ref() { - if let Err(err) = tx.unbounded_send(network_manager::Request::Deactivate(name)) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + Message::DeactivateVpn(uuid) => { + return cosmic::task::future(async move { + match NmrsManager::new().await { + Ok(nm) => match nm.disconnect_vpn_by_uuid(&uuid).await { + Ok(()) => Message::Refresh, + Err(e) => Message::Error(format!("disconnect VPN {uuid}: {e}")), + }, + Err(e) => Message::Error(format!("nmrs init: {e}")), } - } + }) + .map(cosmic::Action::App); } Message::ToggleVpnList => { self.show_available_vpns = !self.show_available_vpns; @@ -1038,7 +971,7 @@ impl cosmic::Application for CosmicNetworkApplet { if let Err(err) = tx.unbounded_send(network_manager::Request::SelectAccessPoint( ssid, network_type, - self.secret_tx.clone(), + None, self.active_device.as_ref().map(|d| d.interface.clone()), )) { if err.is_disconnected() { @@ -1067,7 +1000,7 @@ impl cosmic::Application for CosmicNetworkApplet { ssid: access_point.ssid.to_string(), identity: is_enterprise.then(|| identity.clone()), password, - secret_tx: self.secret_tx.clone(), + secret_tx: None, interface: self.active_device.as_ref().map(|d| d.interface.clone()), }) { if err.is_disconnected() { @@ -1153,9 +1086,9 @@ impl cosmic::Application for CosmicNetworkApplet { } => { if let network_manager::Request::SelectAccessPoint( ssid, - hw_address, + _hw_address, _network_type, - secret_tx, + _secret_tx, ) = &req { let conn_match = self @@ -1167,15 +1100,7 @@ impl cosmic::Application for CosmicNetworkApplet { if let Some(ActiveConnectionInfo::WiFi { state, .. }) = state .active_conns .iter_mut() - .find(|ap| { - let ap_hw_address = match ap { - ActiveConnectionInfo::Wired { hw_address, .. } - | ActiveConnectionInfo::WiFi { hw_address, .. } => { - HwAddress::from_str(&hw_address).unwrap() - } - ActiveConnectionInfo::Vpn { .. } => HwAddress::default(), - }; - ap.name().as_str() == ssid.as_ref()}) + .find(|ap| ap.name().as_str() == ssid.as_ref()) { *state = ActiveConnectionState::Activated; } @@ -1192,8 +1117,8 @@ impl cosmic::Application for CosmicNetworkApplet { ssid, identity: _, password: _, - secret_tx, - interface + secret_tx: _, + interface: _, } = &req { if let Some(NewConnectionState::Waiting(access_point)) = @@ -1207,14 +1132,13 @@ impl cosmic::Application for CosmicNetworkApplet { } else { self.show_visible_networks = false; } - } else if let Some(NewConnectionState::EnterPassword { - access_point, .. - }) = self.new_connection.as_ref() + } else if let Some(NewConnectionState::EnterPassword { access_point, .. }) = + self.new_connection.as_ref() + && success + && ssid.as_str() == access_point.ssid.as_ref() { - if success && ssid.as_str() == access_point.ssid.as_ref() { - self.new_connection = None; - self.show_visible_networks = false; - } + self.new_connection = None; + self.show_visible_networks = false; } } else if self .new_connection @@ -1246,9 +1170,9 @@ impl cosmic::Application for CosmicNetworkApplet { } } cosmic_settings_network_manager_subscription::Event::WiFiCredentials { - ssid, - password, - security_type, + ssid: _, + password: _, + security_type: _, } => {} }, Message::NetworkManagerConnect(connection) => { @@ -1271,72 +1195,91 @@ impl cosmic::Application for CosmicNetworkApplet { self.nm_state.devices = device_infos.into_iter().map(Arc::new).collect(); } Message::WiFiEnable(enable) => { - if let Some(sender) = self.nm_sender.as_mut() { - if let Err(err) = - sender.unbounded_send(network_manager::Request::SetWiFi(enable)) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + self.nm_state.nm_state.wifi_enabled = enable; + return cosmic::task::future(async move { + match NmrsManager::new().await { + Ok(nm) => match nm.set_wireless_enabled(enable).await { + Ok(()) => Message::Refresh, + Err(e) => Message::Error(format!("set_wireless_enabled: {e}")), + }, + Err(e) => Message::Error(format!("nmrs init: {e}")), } - if let Err(err) = sender.unbounded_send(network_manager::Request::Reload) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); - } - } + }) + .map(cosmic::Action::App); } Message::SecretAgent(agent_event) => match agent_event { - nm_secret_agent::Event::RequestSecret { - uuid, - name, - description, - previous, - tx, - .. + NmAgentEvent::RequestSecret { + connection_uuid, + connection_id, + setting, + responder, } => { + let description = (!connection_id.is_empty()).then_some(connection_id); + let known_vpn = self + .nm_state + .known_vpns + .contains_key(connection_uuid.as_str()); + + let mut consumed = false; + if let Some(state) = self.new_connection.as_mut() { match state { NewConnectionState::EnterPassword { access_point, .. } | NewConnectionState::Waiting(access_point) | NewConnectionState::Failure(access_point) => { - if self + let matches_ssid = matches!( + &setting, + AgentSetting::WifiPsk { ssid } + if ssid == access_point.ssid.as_ref() + ); + let matches_uuid = self .nm_state .ssid_to_uuid .get(access_point.ssid.as_ref()) - .is_some_and(|ap_uuid| ap_uuid.as_ref() == uuid.as_str()) - { + .is_some_and(|ap_uuid| { + ap_uuid.as_ref() == connection_uuid.as_str() + }); + + if matches_ssid || matches_uuid { *state = NewConnectionState::EnterPassword { access_point: access_point.clone(), - description, + description: description.clone(), identity: String::new(), password: String::new().into(), password_hidden: true, - } + }; } } } - } else if self.nm_state.known_vpns.contains_key(uuid.as_str()) { + } else if known_vpn { + let secret_keys = match &setting { + AgentSetting::Vpn { secret_keys } => secret_keys.clone(), + _ => Vec::new(), + }; self.nm_state.requested_vpn = Some(RequestedVpn { - name, - uuid: uuid.into(), + uuid: connection_uuid.into(), description, - password: previous, + password: SecureString::from(String::new()), password_hidden: true, - tx, + responder: responder.clone(), + secret_keys, }); + consumed = true; + } + + // The applet's Wi-Fi flow re-issues the password through + // `Authenticate` rather than the agent. Free NM with + // `NoSecrets` so it doesn't sit on a stalled GetSecrets call. + if !consumed { + return release_responder(responder); } } - nm_secret_agent::Event::CancelGetSecrets { .. } => { + NmAgentEvent::CancelGetSecrets => { self.new_connection = None; self.nm_state.requested_vpn = None; } - nm_secret_agent::Event::Failed(error) => { - tracing::error!("Error from secret agent: {error:?}"); + NmAgentEvent::Failed(error) => { + tracing::error!("Error from secret agent: {error}"); } }, Message::KnownConnections(index_map) => { @@ -1358,12 +1301,30 @@ impl cosmic::Application for CosmicNetworkApplet { } } Message::ConnectVPNWithPassword => { - if let Some(RequestedVpn { password, tx, .. }) = self.nm_state.requested_vpn.take() + if let Some(RequestedVpn { + password, + responder, + secret_keys, + .. + }) = self.nm_state.requested_vpn.take() { return Task::future(async move { - let mut guard = tx.lock().await; - if let Some(tx) = guard.take() { - let _ = tx.send(password); + let Some(responder) = responder.lock().await.take() else { + return Message::Refresh; + }; + + let mut secrets: HashMap = HashMap::new(); + let value = password.unsecure().to_owned(); + if secret_keys.is_empty() { + secrets.insert("password".to_owned(), value); + } else { + for key in secret_keys { + secrets.insert(key, value.clone()); + } + } + + if let Err(e) = responder.vpn_secrets(secrets).await { + tracing::error!("vpn secret reply failed: {e}"); } Message::Refresh }) @@ -1376,7 +1337,15 @@ impl cosmic::Application for CosmicNetworkApplet { } } Message::CancelVPNConnection => { - self.nm_state.requested_vpn = None; + if let Some(req) = self.nm_state.requested_vpn.take() { + return Task::future(async move { + if let Some(responder) = req.responder.lock().await.take() { + let _ = responder.cancel().await; + } + Message::NoOp + }) + .map(cosmic::Action::App); + } } } Task::none() @@ -1441,7 +1410,7 @@ impl cosmic::Application for CosmicNetworkApplet { } ActiveConnectionInfo::Wired { name, - hw_address, + hw_address: _, speed, ip_addresses, } => { @@ -1561,7 +1530,7 @@ impl cosmic::Application for CosmicNetworkApplet { .icon_size(16) .on_press(Message::ResetFailedKnownSsid( name.clone(), - HwAddress::from_str(&hw_address).unwrap(), + HwAddress::from_str(hw_address).unwrap(), )) .into(), ); @@ -1576,7 +1545,7 @@ impl cosmic::Application for CosmicNetworkApplet { ) .on_press(Message::Disconnect( Arc::from(name.as_str()), - HwAddress::from_str(&hw_address).unwrap(), + HwAddress::from_str(hw_address).unwrap(), )), )]) .align_x(Alignment::Center), @@ -1733,14 +1702,13 @@ impl cosmic::Application for CosmicNetworkApplet { } for known in &self.nm_state.nm_state.known_access_points { - if let Some(active_device) = self.active_device.as_ref() { - if active_device + if let Some(active_device) = self.active_device.as_ref() + && active_device .known_connections .iter() - .all(|c| &c.id != known.ssid.as_ref()) - { - continue; - } + .all(|c| c.id != *known.ssid) + { + continue; } let mut btn_content = Vec::with_capacity(2); let ssid = text::body(known.ssid.as_ref()).width(Length::Fill); @@ -1872,43 +1840,43 @@ impl cosmic::Application for CosmicNetworkApplet { content = content.push(id); let is_enterprise = matches!(access_point.network_type, NetworkType::EAP); - let enter_password_col = - cosmic::widget::column::with_capacity(4) - .push_maybe(is_enterprise.then(|| text::body(fl!("identity")))) - .push_maybe(is_enterprise.then(|| { - text_input::text_input("", identity) - .on_input(|i| Message::IdentityUpdate(i)) - })) - .push(text::body(fl!("enter-password"))) - .push_maybe(description.as_ref().map(|d| text::body(d.clone()))) - .push( - text_input::secure_input( - "", - password.unsecure(), - Some(Message::TogglePasswordVisibility), - *password_hidden, - ) - .id(SECURE_INPUT_WIFI.clone()) - .on_input(|s| Message::PasswordUpdate(SecureString::from(s))) - .on_paste(|s| Message::PasswordUpdate(SecureString::from(s))) - .on_submit(|_| Message::ConnectWithPassword), + let enter_password_col = cosmic::widget::column::with_capacity(4) + .push_maybe(is_enterprise.then(|| text::body(fl!("identity")))) + .push_maybe(is_enterprise.then(|| { + text_input::text_input("", identity).on_input(Message::IdentityUpdate) + })) + .push(text::body(fl!("enter-password"))) + .push_maybe(description.as_ref().map(|d| text::body(d.clone()))) + .push( + text_input::secure_input( + "", + password.unsecure(), + Some(Message::TogglePasswordVisibility), + *password_hidden, ) - .push_maybe(access_point.wps_push.then(|| { + .id(SECURE_INPUT_WIFI.clone()) + .on_input(|s| Message::PasswordUpdate(SecureString::from(s))) + .on_paste(|s| Message::PasswordUpdate(SecureString::from(s))) + .on_submit(|_| Message::ConnectWithPassword), + ) + .push_maybe( + access_point.wps_push.then(|| { container(text::body(fl!("router-wps-button"))).padding(8) - })) - .push( - row::with_children([ - Element::from( - button::standard(fl!("cancel")) - .on_press(Message::CancelNewConnection), - ), - Element::from( - button::suggested(fl!("connect")) - .on_press(Message::ConnectWithPassword), - ), - ]) - .spacing(24), - ); + }), + ) + .push( + row::with_children([ + Element::from( + button::standard(fl!("cancel")) + .on_press(Message::CancelNewConnection), + ), + Element::from( + button::suggested(fl!("connect")) + .on_press(Message::ConnectWithPassword), + ), + ]) + .spacing(24), + ); let col = padded_control(enter_password_col.spacing(8).align_x(Alignment::Center)) .align_x(Alignment::Center); @@ -1987,7 +1955,7 @@ impl cosmic::Application for CosmicNetworkApplet { .filter(|ap| { let among_active = self.nm_state.nm_state.active_conns.iter().any(|a| { let hw_address = active_conn_hw_address(a); - ap.ssid.as_ref() == &a.name() && ap.hw_address == hw_address + ap.ssid.as_ref() == a.name() && ap.hw_address == hw_address }); let among_known = self.nm_state From 8a39826623e0bd5bf2e7ad715f71c1316fc4c267 Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Fri, 8 May 2026 16:56:46 -0400 Subject: [PATCH 12/84] chore: bump `nmrs` version --- Cargo.lock | 20 ++++++++++---------- cosmic-applet-network/Cargo.toml | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c105ba5b..2611669f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2041,7 +2041,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2239,7 +2239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3887,7 +3887,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4038,7 +4038,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4610,9 +4610,9 @@ dependencies = [ [[package]] name = "nmrs" -version = "3.0.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7e844f47ab7f54da2a16de939f5b52ad6c84b844be68e9338e3d32160ddcd68" +checksum = "63093610025149e5cd106080c7f389950a2f20fe9636af3872c6d85d33a060ae" dependencies = [ "async-trait", "base64", @@ -4680,7 +4680,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5870,7 +5870,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6482,7 +6482,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -7552,7 +7552,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index c89cb12c..a04829b0 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -29,7 +29,7 @@ zbus.workspace = true indexmap = "2.13.0" secure-string = "0.3.0" uuid = { version = "1.21.0", features = ["v4"] } -nmrs = "3.0" +nmrs = "3.1" From 2362e7ce40043347c499c29d733d4bbd9a75416c Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Thu, 14 May 2026 15:18:26 -0400 Subject: [PATCH 13/84] chore(deps): bump nmrs version to include patch --- Cargo.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2611669f..a4f23e46 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2041,7 +2041,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2239,7 +2239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3887,7 +3887,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4038,7 +4038,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4610,9 +4610,9 @@ dependencies = [ [[package]] name = "nmrs" -version = "3.1.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63093610025149e5cd106080c7f389950a2f20fe9636af3872c6d85d33a060ae" +checksum = "71ad6f103b786897c6411e0f9974f9720bb2025db567f2b8723c8e9ec6d861f9" dependencies = [ "async-trait", "base64", @@ -4680,7 +4680,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5870,7 +5870,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6272,7 +6272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6479,10 +6479,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.3.4", "once_cell", "rustix 1.1.4", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6865,7 +6865,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7552,7 +7552,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] From 03c302d13880d143cb624c827a899742a80d529f Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Thu, 14 May 2026 15:41:16 -0400 Subject: [PATCH 14/84] chore(deps): bump nmrs to 3.1.3 --- Cargo.lock | 26 +++++++++++++------------- cosmic-applet-network/Cargo.toml | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a4f23e46..1cac6c0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2041,7 +2041,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2239,7 +2239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3887,7 +3887,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -4038,7 +4038,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4610,9 +4610,9 @@ dependencies = [ [[package]] name = "nmrs" -version = "3.1.1" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71ad6f103b786897c6411e0f9974f9720bb2025db567f2b8723c8e9ec6d861f9" +checksum = "bd5e0c4453d1edf1b13767c4a10905a55c847d942d751cb220a78074f194d523" dependencies = [ "async-trait", "base64", @@ -4680,7 +4680,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5870,7 +5870,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6272,7 +6272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -6479,10 +6479,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6865,7 +6865,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -7552,7 +7552,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index a04829b0..44f08b53 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -29,7 +29,7 @@ zbus.workspace = true indexmap = "2.13.0" secure-string = "0.3.0" uuid = { version = "1.21.0", features = ["v4"] } -nmrs = "3.1" +nmrs = "3.1.3" From 88da7797bd72c42e4dbe0167de5be361eb93d014 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 25 May 2026 13:13:13 +0200 Subject: [PATCH 15/84] i18n: translation updates from weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Hosted Weblate Co-authored-by: Isaac Subirana Co-authored-by: therealmate Co-authored-by: Димко Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-notifications/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/uk/ Translation: Pop OS/COSMIC Applets Desktop Entries Translation: Pop OS/COSMIC Audio Applet Translation: Pop OS/COSMIC Battery Applet Translation: Pop OS/COSMIC Bluetooth Applet Translation: Pop OS/COSMIC Network Applet Translation: Pop OS/COSMIC Notifications Applet Translation: Pop OS/COSMIC Power Applet Translation: Pop OS/COSMIC Tiling Applet --- .../i18n/hu/cosmic_applet_audio.ftl | 4 ++-- .../i18n/hu/cosmic_applet_battery.ftl | 14 +++++++------- .../i18n/hu/cosmic_applet_bluetooth.ftl | 2 +- .../i18n/hu/cosmic_applet_network.ftl | 8 ++++---- .../i18n/hu/cosmic_applet_notifications.ftl | 12 ++++++------ .../i18n/ca/cosmic_applet_power.ftl | 2 ++ .../i18n/hu/cosmic_applet_power.ftl | 2 +- .../i18n/hu/cosmic_applet_tiling.ftl | 4 ++-- i18n/hu/desktop_entries.ftl | 2 +- i18n/uk/desktop_entries.ftl | 2 +- 10 files changed, 27 insertions(+), 25 deletions(-) diff --git a/cosmic-applet-audio/i18n/hu/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/hu/cosmic_applet_audio.ftl index c26f9fb0..b3fdb11d 100644 --- a/cosmic-applet-audio/i18n/hu/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/hu/cosmic_applet_audio.ftl @@ -2,6 +2,6 @@ output = Kimenet input = Bemenet show-media-controls = Médiavezérlők megjelenítése a panelen sound-settings = Hangbeállítások… -disconnected = PulseAudio nincs csatlakozva -no-device = Nincs kiválasztott eszköz +disconnected = A PulseAudio-kapcsolat megszakadt +no-device = Nincs eszköz kiválasztva unknown-artist = Ismeretlen diff --git a/cosmic-applet-battery/i18n/hu/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/hu/cosmic_applet_battery.ftl index 814d3605..01626a96 100644 --- a/cosmic-applet-battery/i18n/hu/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/hu/cosmic_applet_battery.ftl @@ -1,13 +1,13 @@ battery = Akkumulátor -battery-desc = Csökkentett energiafogyasztás és teljesítmény +battery-desc = Csökkentett energiafogyasztás és teljesítmény. balanced = Kiegyensúlyozott -balanced-desc = Normál teljesítmény és akkumulátorhasználat +balanced-desc = Normál teljesítmény és akkumulátorhasználat. performance = Nagy teljesítmény -performance-desc = Nagy teljesítmény és energiafogyasztás -max-charge = Az akkumulátor élettartamának növelése érdekében állítsa a maximális töltési szintet 80%-ra -seconds = másodperc -minutes = perc -hours = óra +performance-desc = Nagy teljesítmény és energiafogyasztás. +max-charge = Az akkumulátor élettartamának növelése érdekében állítsd a maximális töltési szintet 80%-ra +seconds = mp +minutes = p +hours = ó until-empty = a lemerülésig power-settings = Energia- és akkumulátorbeállítások… dgpu-running = A dedikált GPU aktív, ami csökkentheti az akkumulátor élettartamát diff --git a/cosmic-applet-bluetooth/i18n/hu/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/hu/cosmic_applet_bluetooth.ftl index ada54d0b..f12b24b3 100644 --- a/cosmic-applet-bluetooth/i18n/hu/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/hu/cosmic_applet_bluetooth.ftl @@ -1,7 +1,7 @@ bluetooth = Bluetooth other-devices = Egyéb Bluetooth-eszközök settings = Bluetooth-beállítások… -connected = Csatlakoztatva +connected = Kapcsolódva confirm-pin = Ellenőrizd, hogy a következő PIN-kód megegyezik-e a(z) { $deviceName } eszközön megjelenő PIN-kóddal confirm = Megerősítés cancel = Mégse diff --git a/cosmic-applet-network/i18n/hu/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/hu/cosmic_applet_network.ftl index e9a61812..4ad41d3f 100644 --- a/cosmic-applet-network/i18n/hu/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/hu/cosmic_applet_network.ftl @@ -1,16 +1,16 @@ network = Hálózat airplane-mode = Repülőgép-üzemmód airplane-mode-on = A repülőgép-üzemmód be van kapcsolva -turn-off-airplane-mode = Kapcsold ki a Wi-Fi, Bluetooth és mobil szélessáv engedélyezéséhez. +turn-off-airplane-mode = Kapcsold ki a Wi-Fi, Bluetooth és mobil széles sáv engedélyezéséhez. wifi = Wi-Fi identity = Azonosító ipv4 = IPv4-cím ipv6 = IPv6-cím mac = MAC megabits-per-second = Mbps -connected = Csatlakoztatva -connecting = Csatlakozás… -connect = Csatlakozás +connected = Kapcsolódva +connecting = Kapcsolódás +connect = Kapcsolódás cancel = Mégse settings = Hálózati beállítások… visible-wireless-networks = Látható vezeték nélküli hálózatok diff --git a/cosmic-applet-notifications/i18n/hu/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/hu/cosmic_applet_notifications.ftl index ec1f5a91..0ff88aa1 100644 --- a/cosmic-applet-notifications/i18n/hu/cosmic_applet_notifications.ftl +++ b/cosmic-applet-notifications/i18n/hu/cosmic_applet_notifications.ftl @@ -1,14 +1,14 @@ hours-ago = { $duration -> - [0] Most - [one] 1 órával ezelőtt - *[other] { $duration } órával ezelőtt + [0] Épp most + [one] 1 órája + *[other] { $duration } órája } minutes-ago = { $duration -> - [0] Most - [one] 1 perccel ezelőtt - *[other] { $duration } perccel ezelőtt + [0] Épp most + [one] 1 perce + *[other] { $duration } perce } show-less = Kevesebb megjelenítése show-more = { $more } további megjelenítése diff --git a/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl index 2c45ddba..c1084630 100644 --- a/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl @@ -1,2 +1,4 @@ cancel = Cancel·lar confirm = Confirmar +restart = Reinicia +suspend = Suspèn diff --git a/cosmic-applet-power/i18n/hu/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/hu/cosmic_applet_power.ftl index 9019650a..9791f43f 100644 --- a/cosmic-applet-power/i18n/hu/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/hu/cosmic_applet_power.ftl @@ -33,4 +33,4 @@ confirm-body = [lock-screen] zárolni fogja a képernyőt [log-out] kijelentkezik *[other] alkalmazni fogja a kiválasztott műveletet - } { $countdown } másodperc múlva + } { $countdown } másodperc múlva. diff --git a/cosmic-applet-tiling/i18n/hu/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/hu/cosmic_applet_tiling.ftl index 7d622463..a2d0d4bc 100644 --- a/cosmic-applet-tiling/i18n/hu/cosmic_applet_tiling.ftl +++ b/cosmic-applet-tiling/i18n/hu/cosmic_applet_tiling.ftl @@ -3,11 +3,11 @@ tile-current = Jelenlegi munkaterület csempézése shortcuts = Gyorsbillentyűk navigate-windows = Ablakok navigálása move-window = Ablak mozgatása -toggle-floating-window = Az ablakok lebegtetésének be- és kikapcsolása +toggle-floating-window = Lebegő ablak be/ki view-all-shortcuts = Az összes gyorsbillentyű megtekintése… active-hint = Aktív ablak kiemelése gaps = Hézagok -floating-window-exceptions = Lebegő ablak kivételek… +floating-window-exceptions = Lebegőablak-kivételek… window-management-settings = Ablakkezelési beállítások… all-workspaces = Összes munkaterület per-workspace = Munkaterületenként diff --git a/i18n/hu/desktop_entries.ftl b/i18n/hu/desktop_entries.ftl index 637e262e..82b4bfdb 100644 --- a/i18n/hu/desktop_entries.ftl +++ b/i18n/hu/desktop_entries.ftl @@ -40,7 +40,7 @@ cosmic-applet-power-comment = Képernyő zárolása, kijelentkezés, felfüggesz cosmic-app-list-comment = Rögzített alkalmazások indítása és a megnyitott ablakok kezelése cosmic-applet-status-area-comment = Alkalmazásjelzők, melyek menüt is megjeleníthetnek a panelen cosmic-applet-status-area-keywords = COSMIC;kisalkalmazás;alkalmazás;app;jelző;értesítések;tálca;állapot; -cosmic-applet-tiling-comment = Az aktív ablak kiemelésének, valamint az aktuális és munkaterületenkénti automatikus csempézés kezelése +cosmic-applet-tiling-comment = Az aktív ablakkiemelés, valamint a jelenlegi és munkaterületenkénti automatikus csempézés kezelése cosmic-applet-tiling-keywords = COSMIC;kisalkalmazás;csempézés;kiemelés;munkaterületek; cosmic-applet-time-comment = Az aktuális idő megjelenítése a panelen, felugró naptárral cosmic-applet-time-keywords = COSMIC;kisalkalmazás;dátum;idő;naptár; diff --git a/i18n/uk/desktop_entries.ftl b/i18n/uk/desktop_entries.ftl index c6088440..72bfb5ba 100644 --- a/i18n/uk/desktop_entries.ftl +++ b/i18n/uk/desktop_entries.ftl @@ -32,7 +32,7 @@ cosmic-applet-minimize-comment = Керування згорнутими вік cosmic-applet-minimize-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Згорнути;Згорнуті;Вікна;Вікно; cosmic-applet-network-comment = Керування мережевими з’єднаннями cosmic-applet-network-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Мережа;Інтернет; -cosmic-applet-notifications-comment = Керування сповіщеннями та режимом «Не турбувати» +cosmic-applet-notifications-comment = Керування сповіщеннями та режимом Не турбувати cosmic-applet-notifications-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Сповіщення; cosmic-applet-power-comment = Блокування екрана, вихід із сеансу, призупинення, перезапуск і вимкнення cosmic-applet-power-keywords = COSMIC;КОСМІК;КОСМОС;КОСМІЧНЕ;Віджет;Віджети;Сеанс;Користувач;Блокування;Вихід;Перезапуск;Вимкнення;Призупинення;Сон; From d73ef7dcfb060bb76236e7a099adb839b6d14262 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Mon, 18 May 2026 13:53:50 -0600 Subject: [PATCH 16/84] fix: search the theme path provided by the app to find status-area icons --- .../src/components/status_menu.rs | 18 +++++++++++++----- .../src/subscriptions/status_notifier_item.rs | 7 ++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cosmic-applet-status-area/src/components/status_menu.rs b/cosmic-applet-status-area/src/components/status_menu.rs index fedd79e4..e706f37b 100644 --- a/cosmic-applet-status-area/src/components/status_menu.rs +++ b/cosmic-applet-status-area/src/components/status_menu.rs @@ -26,6 +26,7 @@ pub struct State { expanded: Option, // TODO handle icon with multiple sizes? icon_handle: icon::Handle, + icon_theme_path: Option, click_event: Option<(i32, bool)>, } @@ -39,6 +40,7 @@ impl State { icon_handle: icon::from_name("application-default") .prefer_svg(true) .handle(), + icon_theme_path: None, click_event: None, }, iced::Task::none(), @@ -63,6 +65,7 @@ impl State { } Msg::Icon(update) => { let icon_name = update.name.unwrap_or_default(); + self.icon_theme_path = update.theme_path; // Use the icon pixmap if an icon was not defined by name. if icon_name.is_empty() { @@ -93,13 +96,18 @@ impl State { self.icon_handle = if Path::new(&icon_name).exists() { icon::from_path(Path::new(&icon_name).to_path_buf()).symbolic(true) } else { - icon::from_name(icon_name) - .prefer_svg(true) - .fallback(Some(IconFallback::Names(vec![ + let mut builder = icon::from_name(icon_name).prefer_svg(true).fallback(Some( + IconFallback::Names(vec![ "application-default".into(), "application-x-executable".into(), - ]))) - .handle() + ]), + )); + + if let Some(ref theme_path) = self.icon_theme_path { + builder = builder.with_extra_paths(vec![theme_path.clone()]); + } + + builder.handle() }; iced::Task::none() diff --git a/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs b/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs index fd51390e..c03f0f54 100644 --- a/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs +++ b/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only use std::hash::Hash; +use std::path::PathBuf; use cosmic::iced::{self, Subscription}; use futures::{FutureExt, StreamExt}; @@ -27,7 +28,7 @@ pub struct Icon { pub struct IconUpdate { pub name: Option, pub pixmap: Option>, - // pub theme_path: Option, + pub theme_path: Option, } impl StatusNotifierItem { @@ -118,11 +119,11 @@ impl StatusNotifierItem { async fn icon_events(item_proxy: StatusNotifierItemProxy<'static>) -> IconUpdate { let icon_name = item_proxy.icon_name().await; let icon_pixmap = item_proxy.icon_pixmap().await; - // let icon_theme_path = item_proxy.icon_theme_path().await.map(PathBuf::from); + let icon_theme_path = item_proxy.icon_theme_path().await.map(PathBuf::from); IconUpdate { name: icon_name.ok(), pixmap: icon_pixmap.ok(), - // theme_path: icon_theme_path.ok().filter(|x| !x.as_os_str().is_empty()), + theme_path: icon_theme_path.ok().filter(|x| !x.as_os_str().is_empty()), } } From 46a8b9182b037196bd962b01bb8d1ff12e13aa79 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Thu, 21 May 2026 18:50:03 -0600 Subject: [PATCH 17/84] chore: update libcosmic --- Cargo.lock | 93 +++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1cac6c0d..0f7a41e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1408,7 +1408,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1429,7 +1429,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "quote", "syn", @@ -1459,7 +1459,7 @@ dependencies = [ [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#9c562fe3ecf03241a46a60c0078cd6ea10bd75ce" +source = "git+https://github.com/pop-os/freedesktop-icons#739e266210d471c09af61d529d8f41dccd815b90" dependencies = [ "bstr", "btoi", @@ -1509,7 +1509,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#2358f0473bf68b79f54a0906994a218de211de34" +source = "git+https://github.com/pop-os/cosmic-panel#26fee6c0c310620e8b3ce3e5fbab432248a88195" dependencies = [ "anyhow", "cosmic-config", @@ -1523,7 +1523,7 @@ dependencies = [ [[package]] name = "cosmic-pipewire" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "intmap", "libspa", @@ -1551,7 +1551,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1565,7 +1565,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1578,7 +1578,7 @@ dependencies = [ [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#716da6d6af0b252e2f78aba2ad72ee19ae0241e0" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#fa82bdf9fe7b5f5bd6008f32f393efd5e7a71c47" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1599,7 +1599,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "futures", "iced_futures", @@ -1612,7 +1612,7 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "bitflags 2.11.1", "cosmic-dbus-networkmanager", @@ -1631,7 +1631,7 @@ dependencies = [ [[package]] name = "cosmic-settings-sound-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "cosmic-pipewire", "futures", @@ -1646,7 +1646,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#703a934b096b8681b1b8d16d8625118c8073151a" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "futures", "iced_futures", @@ -1684,7 +1684,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "almost", "configparser", @@ -2195,9 +2195,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "endi" @@ -2629,9 +2629,9 @@ checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" @@ -3035,7 +3035,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "dnd", "iced_accessibility", @@ -3056,7 +3056,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "accesskit", "accesskit_winit", @@ -3065,7 +3065,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "bitflags 2.11.1", "bytes", @@ -3082,6 +3082,7 @@ dependencies = [ "serde", "smol_str", "thiserror 2.0.18", + "unicode-segmentation", "web-time", "window_clipboard", ] @@ -3089,7 +3090,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "iced_core", "iced_futures", @@ -3099,7 +3100,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "futures", "iced_core", @@ -3113,7 +3114,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "bitflags 2.11.1", "bytemuck", @@ -3134,7 +3135,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "iced_graphics", "iced_runtime", @@ -3143,7 +3144,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3155,7 +3156,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3170,7 +3171,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "bytemuck", "cosmic-text", @@ -3187,7 +3188,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.1", @@ -3218,7 +3219,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3236,7 +3237,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -4053,9 +4054,9 @@ dependencies = [ [[package]] name = "kqueue-sys" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "285efcf12ef41bec907b3000d5ffaeb54191d4d9d83c0d6157e6cbc2db255e64" +checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ "bitflags 2.11.1", "libc", @@ -4103,7 +4104,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#4fab6c777dbd1a023440f08fb2b729c86492366c" +source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" dependencies = [ "apply", "ashpd 0.12.3", @@ -4610,9 +4611,9 @@ dependencies = [ [[package]] name = "nmrs" -version = "3.1.3" +version = "3.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5e0c4453d1edf1b13767c4a10905a55c847d942d751cb220a78074f194d523" +checksum = "d907d6da103106d84189d3fd229d9aac921f9131b8ba38b40341c53d24409077" dependencies = [ "async-trait", "base64", @@ -4718,9 +4719,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-derive" @@ -5245,18 +5246,18 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.12" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", @@ -6040,9 +6041,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "indexmap 2.14.0", "itoa", @@ -8223,9 +8224,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" dependencies = [ "memchr", ] @@ -8387,7 +8388,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#2358f0473bf68b79f54a0906994a218de211de34" +source = "git+https://github.com/pop-os/cosmic-panel#26fee6c0c310620e8b3ce3e5fbab432248a88195" dependencies = [ "serde", "wayland-protocols-wlr", From 010931d6d025d39a13e28cb99f805d5c7f4893a3 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Tue, 26 May 2026 13:31:21 -0600 Subject: [PATCH 18/84] chore: update cosmic-freedesktop-icons to fix dropbox tray icon --- Cargo.lock | 140 ++++++++++++++++++++++++++++------------------------- 1 file changed, 75 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f7a41e5..49356cf3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -512,9 +512,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base64" @@ -705,9 +705,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "by_address" @@ -1408,7 +1408,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1429,7 +1429,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "quote", "syn", @@ -1459,7 +1459,7 @@ dependencies = [ [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#739e266210d471c09af61d529d8f41dccd815b90" +source = "git+https://github.com/pop-os/freedesktop-icons#cb0a2f299dbc443697ce1674065e0d4f82915c02" dependencies = [ "bstr", "btoi", @@ -1523,7 +1523,7 @@ dependencies = [ [[package]] name = "cosmic-pipewire" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" dependencies = [ "intmap", "libspa", @@ -1551,7 +1551,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1565,7 +1565,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1599,7 +1599,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" dependencies = [ "futures", "iced_futures", @@ -1612,7 +1612,7 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" dependencies = [ "bitflags 2.11.1", "cosmic-dbus-networkmanager", @@ -1631,7 +1631,7 @@ dependencies = [ [[package]] name = "cosmic-settings-sound-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" dependencies = [ "cosmic-pipewire", "futures", @@ -1646,7 +1646,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" dependencies = [ "futures", "iced_futures", @@ -1684,7 +1684,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "almost", "configparser", @@ -2106,7 +2106,7 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" [[package]] name = "drm" @@ -3035,7 +3035,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "dnd", "iced_accessibility", @@ -3056,7 +3056,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "accesskit", "accesskit_winit", @@ -3065,7 +3065,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "bitflags 2.11.1", "bytes", @@ -3090,7 +3090,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "iced_core", "iced_futures", @@ -3100,7 +3100,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "futures", "iced_core", @@ -3114,7 +3114,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "bitflags 2.11.1", "bytemuck", @@ -3135,7 +3135,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "iced_graphics", "iced_runtime", @@ -3144,7 +3144,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3156,7 +3156,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3171,7 +3171,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "bytemuck", "cosmic-text", @@ -3188,7 +3188,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.1", @@ -3219,7 +3219,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3237,7 +3237,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3878,9 +3878,9 @@ checksum = "2ceaf4c6c48465bead8cb6a0b7c4ee0c86ecbb31239032b9c66ab9a08d2f3ee1" [[package]] name = "jiff" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" +checksum = "392c70591e8749fe235ddaf513e6f58b26bce3dcc16524cecc8936f75afa161e" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -3888,14 +3888,14 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.61.2", + "windows-link 0.2.1", ] [[package]] name = "jiff-static" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" +checksum = "47b605b0c050d845fc355bb11eb3f9a8deddc218ea60c76e61aa1f2adfb2c96a" dependencies = [ "proc-macro2", "quote", @@ -3987,9 +3987,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" dependencies = [ "cfg-if", "futures-util", @@ -4104,7 +4104,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8fa6a01d049905ce99eb9adf8415b2fa73611818" +source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" dependencies = [ "apply", "ashpd 0.12.3", @@ -4306,9 +4306,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" [[package]] name = "logind-zbus" @@ -5025,9 +5025,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.54" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329" +checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" dependencies = [ "libc", "libredox", @@ -5626,6 +5626,16 @@ dependencies = [ "font-types", ] +[[package]] +name = "redox_event" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea3e412d205440c7b0218af26247226f979ed1201674cda7a33cc70609084b5" +dependencies = [ + "bitflags 2.11.1", + "libredox", +] + [[package]] name = "redox_syscall" version = "0.5.18" @@ -7104,9 +7114,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" dependencies = [ "cfg-if", "once_cell", @@ -7117,9 +7127,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" dependencies = [ "js-sys", "wasm-bindgen", @@ -7127,9 +7137,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7137,9 +7147,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" dependencies = [ "bumpalo", "proc-macro2", @@ -7150,9 +7160,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" dependencies = [ "unicode-ident", ] @@ -7357,9 +7367,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" dependencies = [ "js-sys", "wasm-bindgen", @@ -8010,7 +8020,7 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "cfg_aliases", @@ -8036,7 +8046,7 @@ dependencies = [ [[package]] name = "winit-android" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "android-activity", "bitflags 2.11.1", @@ -8051,7 +8061,7 @@ dependencies = [ [[package]] name = "winit-appkit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "block2 0.6.2", @@ -8073,7 +8083,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#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "memmap2 0.9.10", "objc2 0.6.4", @@ -8088,7 +8098,7 @@ dependencies = [ [[package]] name = "winit-core" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "cursor-icon", @@ -8102,14 +8112,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#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "dpi", "libredox", "orbclient", "raw-window-handle", - "redox_syscall 0.7.5", + "redox_event", "smol_str", "tracing", "winit-core", @@ -8118,7 +8128,7 @@ dependencies = [ [[package]] name = "winit-uikit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "block2 0.6.2", @@ -8138,7 +8148,7 @@ dependencies = [ [[package]] name = "winit-wayland" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "ahash", "bitflags 2.11.1", @@ -8164,7 +8174,7 @@ dependencies = [ [[package]] name = "winit-web" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "atomic-waker", "bitflags 2.11.1", @@ -8186,7 +8196,7 @@ dependencies = [ [[package]] name = "winit-win32" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "cursor-icon", @@ -8202,7 +8212,7 @@ dependencies = [ [[package]] name = "winit-x11" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#261cda54017f98a12dc55569c864430fe6770366" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "bytemuck", From a4e6ecb28079d645137223c630ba2b4b28020b84 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 28 May 2026 19:38:30 -0400 Subject: [PATCH 19/84] fix(network): align name with spec --- cosmic-applet-network/src/app.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 6939f5e3..608ed79f 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -726,9 +726,10 @@ impl cosmic::Application for CosmicNetworkApplet { tasks.push(update_state(conn.clone())); tasks.push(update_devices(conn.clone())); tasks.push(load_vpns(conn)); + let uuid = uuid::Uuid::new_v4().to_string().replace("-", "_"); + let my_id = format!( - "com.system76.CosmicSettings.Applet.{}.NetworkManager.SecretAgent", - uuid::Uuid::new_v4() + "com.system76.CosmicSettings.Applet._{uuid}.NetworkManager.SecretAgent", ); tasks.push(secret_agent_task(my_id).map(Message::SecretAgent)); } From a50c3d499c948f6b794abec98dd2ea1af4a8aef1 Mon Sep 17 00:00:00 2001 From: Priyam Sarkar Date: Fri, 29 May 2026 20:43:51 +0530 Subject: [PATCH 20/84] fix(bluetooth): bluetooth toggle is off despite active connection --- cosmic-applet-bluetooth/src/bluetooth.rs | 26 +++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/cosmic-applet-bluetooth/src/bluetooth.rs b/cosmic-applet-bluetooth/src/bluetooth.rs index b3648acd..cc3b693d 100644 --- a/cosmic-applet-bluetooth/src/bluetooth.rs +++ b/cosmic-applet-bluetooth/src/bluetooth.rs @@ -568,22 +568,21 @@ impl BluerSessionState { tick(&mut interval).await; let new_status = adapter_clone.is_powered().await.unwrap_or_default(); devices = build_device_list(devices, &adapter_clone).await; - if new_status != status { - status = new_status; - let state = BluerState { - devices: devices.clone(), - bluetooth_enabled: status, - }; - if state.bluetooth_enabled { - for d in &state.devices { - if d.paired_and_trusted() { - _ = req_tx.send(BluerRequest::ConnectDevice(d.address)).await; - } + let power_changed = new_status != status; + status = new_status; + let state = BluerState { + devices: devices.clone(), + bluetooth_enabled: status, + }; + if power_changed && state.bluetooth_enabled { + for d in &state.devices { + if d.paired_and_trusted() { + _ = req_tx.send(BluerRequest::ConnectDevice(d.address)).await; } } _ = wake_up_discover_tx.send(()).await; - let _ = tx.send(BluerSessionEvent::ChangesProcessed(state)).await; } + let _ = tx.send(BluerSessionEvent::ChangesProcessed(state)).await; } }); } @@ -674,6 +673,9 @@ impl BluerSessionState { } } + // Always refresh power state from the adapter + // to avoid stale cached is_powered values + is_powered = adapter_clone.is_powered().await.unwrap_or_default(); let _ = tx .send(BluerSessionEvent::ChangesProcessed(BluerState { devices: devices.clone(), From c86daef96a3849f456a86471c2a34fb9f1aa6264 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 28 May 2026 19:29:36 +0200 Subject: [PATCH 21/84] build: use cargo vendor --locked --- justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/justfile b/justfile index 83a9f819..91f0958f 100644 --- a/justfile +++ b/justfile @@ -65,7 +65,7 @@ install: (_install_bin 'cosmic-applets') (_link_applet 'cosmic-panel-button') (_ # Vendor Cargo dependencies locally vendor: mkdir -p .cargo - cargo vendor | head -n -1 > .cargo/config + cargo vendor --locked | head -n -1 > .cargo/config echo 'directory = "vendor"' >> .cargo/config tar pcf vendor.tar vendor rm -rf vendor From 61bd9b0dfdd8ac2283f04bf3eeb0176e015c78f7 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 28 May 2026 19:30:23 +0200 Subject: [PATCH 22/84] chore: update dependencies with fix for battery applet panic --- Cargo.lock | 94 +++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 49356cf3..99de6eb4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1408,7 +1408,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1429,7 +1429,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "quote", "syn", @@ -1509,7 +1509,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#26fee6c0c310620e8b3ce3e5fbab432248a88195" +source = "git+https://github.com/pop-os/cosmic-panel#546a6c45210574caed9a3e51446aa8ad622d3627" dependencies = [ "anyhow", "cosmic-config", @@ -1523,7 +1523,7 @@ dependencies = [ [[package]] name = "cosmic-pipewire" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "intmap", "libspa", @@ -1551,7 +1551,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1565,7 +1565,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1599,7 +1599,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "futures", "iced_futures", @@ -1612,7 +1612,7 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "bitflags 2.11.1", "cosmic-dbus-networkmanager", @@ -1631,7 +1631,7 @@ dependencies = [ [[package]] name = "cosmic-settings-sound-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "cosmic-pipewire", "futures", @@ -1646,7 +1646,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#60a7de5adbb39a0939e01a6af2418221c80c2c97" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "futures", "iced_futures", @@ -1684,7 +1684,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "almost", "configparser", @@ -2058,9 +2058,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -3035,7 +3035,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "dnd", "iced_accessibility", @@ -3056,7 +3056,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "accesskit", "accesskit_winit", @@ -3065,7 +3065,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "bitflags 2.11.1", "bytes", @@ -3090,7 +3090,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "iced_core", "iced_futures", @@ -3100,7 +3100,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "futures", "iced_core", @@ -3114,7 +3114,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "bitflags 2.11.1", "bytemuck", @@ -3135,7 +3135,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "iced_graphics", "iced_runtime", @@ -3144,7 +3144,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3156,7 +3156,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3171,7 +3171,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "bytemuck", "cosmic-text", @@ -3188,7 +3188,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.1", @@ -3219,7 +3219,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3237,7 +3237,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -4104,7 +4104,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8379ae7b0b6541310a7ae7212e59714a0c31e49a" +source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" dependencies = [ "apply", "ashpd 0.12.3", @@ -4183,14 +4183,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.5", + "redox_syscall 0.8.0", ] [[package]] @@ -4404,9 +4404,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "memmap2" @@ -4482,9 +4482,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "log", @@ -5628,9 +5628,9 @@ dependencies = [ [[package]] name = "redox_event" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea3e412d205440c7b0218af26247226f979ed1201674cda7a33cc70609084b5" +checksum = "8c07d0d6d291e3a951bd847b1cd4af32fc6243d64116cf7702838c02797688b7" dependencies = [ "bitflags 2.11.1", "libredox", @@ -5647,9 +5647,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4666a1a60d8412eab19d94f6d13dcc9cea0a5ef4fdf6a5db306537413c661b1b" +checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" dependencies = [ "bitflags 2.11.1", ] @@ -6278,9 +6278,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -6739,9 +6739,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap 2.14.0", "toml_datetime", @@ -8398,7 +8398,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#26fee6c0c310620e8b3ce3e5fbab432248a88195" +source = "git+https://github.com/pop-os/cosmic-panel#546a6c45210574caed9a3e51446aa8ad622d3627" dependencies = [ "serde", "wayland-protocols-wlr", @@ -8649,18 +8649,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "bce33a6288fa3f072a8c2c7d0f2fdbb90e28298f0135c1f99b96c3db2efcc60b" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "8fd425244944f4ab65ccff928e7323354c5a018c75838362fdce749dfad2ee1e" dependencies = [ "proc-macro2", "quote", From 5428a86370b86d579ba3e60d148f218d47ea5a8e Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 28 May 2026 19:34:44 +0200 Subject: [PATCH 23/84] chore: bump versions to 1.0.15 --- Cargo.lock | 36 +++++++++---------- cosmic-app-list/Cargo.toml | 2 +- .../cosmic-app-list-config/Cargo.toml | 2 +- cosmic-applet-a11y/Cargo.toml | 2 +- cosmic-applet-audio/Cargo.toml | 2 +- cosmic-applet-battery/Cargo.toml | 2 +- cosmic-applet-bluetooth/Cargo.toml | 2 +- cosmic-applet-input-sources/Cargo.toml | 2 +- cosmic-applet-minimize/Cargo.toml | 2 +- cosmic-applet-network/Cargo.toml | 2 +- cosmic-applet-notifications/Cargo.toml | 2 +- cosmic-applet-power/Cargo.toml | 2 +- cosmic-applet-status-area/Cargo.toml | 2 +- cosmic-applet-tiling/Cargo.toml | 2 +- cosmic-applet-time/Cargo.toml | 2 +- cosmic-applet-workspaces/Cargo.toml | 2 +- cosmic-applets-config/Cargo.toml | 2 +- cosmic-applets/Cargo.toml | 2 +- cosmic-panel-button/Cargo.toml | 2 +- debian/changelog | 6 ++++ 20 files changed, 42 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 99de6eb4..60a28098 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1064,7 +1064,7 @@ dependencies = [ [[package]] name = "cosmic-app-list" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "cosmic-app-list-config", @@ -1091,7 +1091,7 @@ dependencies = [ [[package]] name = "cosmic-app-list-config" -version = "1.0.2" +version = "1.0.15" dependencies = [ "libcosmic", "serde", @@ -1099,7 +1099,7 @@ dependencies = [ [[package]] name = "cosmic-applet-a11y" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -1118,7 +1118,7 @@ dependencies = [ [[package]] name = "cosmic-applet-audio" -version = "1.0.2" +version = "1.0.15" dependencies = [ "cosmic-settings-sound-subscription", "i18n-embed", @@ -1138,7 +1138,7 @@ dependencies = [ [[package]] name = "cosmic-applet-battery" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "cosmic-applets-config", @@ -1163,7 +1163,7 @@ dependencies = [ [[package]] name = "cosmic-applet-bluetooth" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "bluer", @@ -1182,7 +1182,7 @@ dependencies = [ [[package]] name = "cosmic-applet-input-sources" -version = "1.0.2" +version = "1.0.15" dependencies = [ "cosmic-comp-config", "i18n-embed", @@ -1198,7 +1198,7 @@ dependencies = [ [[package]] name = "cosmic-applet-minimize" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "i18n-embed", @@ -1216,7 +1216,7 @@ dependencies = [ [[package]] name = "cosmic-applet-network" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "async-fn-stream", @@ -1242,7 +1242,7 @@ dependencies = [ [[package]] name = "cosmic-applet-notifications" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "cosmic-notifications-config", @@ -1262,7 +1262,7 @@ dependencies = [ [[package]] name = "cosmic-applet-power" -version = "1.0.2" +version = "1.0.15" dependencies = [ "i18n-embed", "i18n-embed-fl", @@ -1279,7 +1279,7 @@ dependencies = [ [[package]] name = "cosmic-applet-status-area" -version = "1.0.2" +version = "1.0.15" dependencies = [ "futures", "libcosmic", @@ -1294,7 +1294,7 @@ dependencies = [ [[package]] name = "cosmic-applet-tiling" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -1313,7 +1313,7 @@ dependencies = [ [[package]] name = "cosmic-applet-time" -version = "1.0.2" +version = "1.0.15" dependencies = [ "cosmic-applets-config", "i18n-embed", @@ -1333,7 +1333,7 @@ dependencies = [ [[package]] name = "cosmic-applet-workspaces" -version = "1.0.2" +version = "1.0.15" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -1350,7 +1350,7 @@ dependencies = [ [[package]] name = "cosmic-applets" -version = "1.0.2" +version = "1.0.15" dependencies = [ "cosmic-app-list", "cosmic-applet-a11y", @@ -1376,7 +1376,7 @@ dependencies = [ [[package]] name = "cosmic-applets-config" -version = "1.0.2" +version = "1.0.15" dependencies = [ "cosmic-config", "serde", @@ -1495,7 +1495,7 @@ dependencies = [ [[package]] name = "cosmic-panel-button" -version = "1.0.2" +version = "1.0.15" dependencies = [ "cosmic-config", "libcosmic", diff --git a/cosmic-app-list/Cargo.toml b/cosmic-app-list/Cargo.toml index 7c398b97..499d9f30 100644 --- a/cosmic-app-list/Cargo.toml +++ b/cosmic-app-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-app-list" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-app-list/cosmic-app-list-config/Cargo.toml b/cosmic-app-list/cosmic-app-list-config/Cargo.toml index 08d87f2e..86b302ef 100644 --- a/cosmic-app-list/cosmic-app-list-config/Cargo.toml +++ b/cosmic-app-list/cosmic-app-list-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-app-list-config" -version = "1.0.2" +version = "1.0.15" edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/cosmic-applet-a11y/Cargo.toml b/cosmic-applet-a11y/Cargo.toml index a5bb12b4..f7e3e50f 100644 --- a/cosmic-applet-a11y/Cargo.toml +++ b/cosmic-applet-a11y/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-a11y" -version = "1.0.2" +version = "1.0.15" edition = "2024" [dependencies] diff --git a/cosmic-applet-audio/Cargo.toml b/cosmic-applet-audio/Cargo.toml index 96d37cad..edf97955 100644 --- a/cosmic-applet-audio/Cargo.toml +++ b/cosmic-applet-audio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-audio" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-battery/Cargo.toml b/cosmic-applet-battery/Cargo.toml index 2218f638..8c8f6e1d 100644 --- a/cosmic-applet-battery/Cargo.toml +++ b/cosmic-applet-battery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-battery" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-bluetooth/Cargo.toml b/cosmic-applet-bluetooth/Cargo.toml index 03b67388..e2108576 100644 --- a/cosmic-applet-bluetooth/Cargo.toml +++ b/cosmic-applet-bluetooth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-bluetooth" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-input-sources/Cargo.toml b/cosmic-applet-input-sources/Cargo.toml index 92a7daf3..8fdb1dd9 100644 --- a/cosmic-applet-input-sources/Cargo.toml +++ b/cosmic-applet-input-sources/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-input-sources" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-minimize/Cargo.toml b/cosmic-applet-minimize/Cargo.toml index 783be11b..bd564bdf 100644 --- a/cosmic-applet-minimize/Cargo.toml +++ b/cosmic-applet-minimize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-minimize" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index 44f08b53..3ba86f2b 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-network" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-or-later" diff --git a/cosmic-applet-notifications/Cargo.toml b/cosmic-applet-notifications/Cargo.toml index 094cfa14..2e472b24 100644 --- a/cosmic-applet-notifications/Cargo.toml +++ b/cosmic-applet-notifications/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-notifications" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-power/Cargo.toml b/cosmic-applet-power/Cargo.toml index 041c0474..693692e0 100644 --- a/cosmic-applet-power/Cargo.toml +++ b/cosmic-applet-power/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-power" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-status-area/Cargo.toml b/cosmic-applet-status-area/Cargo.toml index fe85ad48..d643f70d 100644 --- a/cosmic-applet-status-area/Cargo.toml +++ b/cosmic-applet-status-area/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-status-area" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-tiling/Cargo.toml b/cosmic-applet-tiling/Cargo.toml index 23e689e0..2ce1c452 100644 --- a/cosmic-applet-tiling/Cargo.toml +++ b/cosmic-applet-tiling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-tiling" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-time/Cargo.toml b/cosmic-applet-time/Cargo.toml index ff5e6298..a6ca4dfd 100644 --- a/cosmic-applet-time/Cargo.toml +++ b/cosmic-applet-time/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-time" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-workspaces/Cargo.toml b/cosmic-applet-workspaces/Cargo.toml index ee9e04db..857b668d 100644 --- a/cosmic-applet-workspaces/Cargo.toml +++ b/cosmic-applet-workspaces/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-workspaces" -version = "1.0.2" +version = "1.0.15" authors = ["Ashley Wulber "] edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applets-config/Cargo.toml b/cosmic-applets-config/Cargo.toml index b6999f16..724da32a 100644 --- a/cosmic-applets-config/Cargo.toml +++ b/cosmic-applets-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applets-config" -version = "1.0.2" +version = "1.0.15" edition = "2024" [dependencies] diff --git a/cosmic-applets/Cargo.toml b/cosmic-applets/Cargo.toml index 2d950afc..c2129dff 100644 --- a/cosmic-applets/Cargo.toml +++ b/cosmic-applets/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applets" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-panel-button/Cargo.toml b/cosmic-panel-button/Cargo.toml index dc6ffd9a..9fa73486 100644 --- a/cosmic-panel-button/Cargo.toml +++ b/cosmic-panel-button/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-panel-button" -version = "1.0.2" +version = "1.0.15" edition = "2024" license = "GPL-3.0-only" diff --git a/debian/changelog b/debian/changelog index 147363a2..3d46c583 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +cosmic-applets (1.0.15) noble; urgency=medium + + * Update changelog + + -- Michael Murphy Thu, 28 May 2026 19:33:02 +0200 + cosmic-applets (1.0.12) noble; urgency=medium * Update changelog From 8981b0b48ec21ac2c93cad56d82b33c6ef705888 Mon Sep 17 00:00:00 2001 From: BrianHotopp Date: Fri, 29 May 2026 13:23:45 -0400 Subject: [PATCH 24/84] fix(network): skip assumed connections in VPN list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `cosmic-applet-network` listed every connection from `nm.list_saved_connections()` in the VPN dropdown, including the in-memory-only profiles NetworkManager auto-generates for externally-managed interfaces (e.g. a `wg-quick@wg0.service` tunnel). Toggling such an "assumed" connection off deletes it from NM — it was never persisted — leaving a dead toggle with no way back through the applet or `nmcli con up`. Skip connections flagged `unsaved` (in-memory only) at the `load_vpns()` site so they no longer get a togglable entry. The active-connections section still shows the interface as connected (read-only). One-line change in `cosmic-applet-network/src/app.rs`. ## Test plan - Built on Pop!_OS and ran the patched `cosmic-applet-network`: with `wg-quick@wg0` up and NM tracking `wg0` as connected-externally, the VPN dropdown no longer shows the destructive `wg0` toggle; the active-connections section still shows `wg0`; Wi-Fi toggling is unaffected. Co-authored-by: Claude Opus 4.7 (1M context) --- cosmic-applet-network/src/app.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 608ed79f..a550859d 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -664,6 +664,13 @@ fn load_vpns(_conn: zbus::Connection) -> Task { let mut map: IndexMap = IndexMap::new(); for c in saved { + // Skip in-memory-only NM connections — assumed connections that NM + // auto-generated from externally-managed interfaces (e.g. one + // brought up by wg-quick@wg0.service) report unsaved=true and + // evaporate on deactivate, leaving the applet's toggle dead. + if c.unsaved { + continue; + } let uuid: UUID = Arc::from(c.uuid.as_str()); let entry = match c.summary { SettingsSummary::WireGuard { .. } => ConnectionSettings::Wireguard { id: c.id }, From 95eda4087814f624b52e97e8f65d75432fd01eb2 Mon Sep 17 00:00:00 2001 From: Michael Murphy Date: Mon, 15 Jun 2026 21:09:25 +0200 Subject: [PATCH 25/84] feat(sound): use cosmic-settings-daemon's varlink API --- Cargo.lock | 576 ++++++++++---------------- Cargo.toml | 1 + cosmic-applet-audio/Cargo.toml | 10 +- cosmic-applet-audio/src/lib.rs | 228 ++++++---- cosmic-applet-audio/src/model.rs | 393 ++++++++++++++++++ cosmic-applet-audio/src/mouse_area.rs | 2 +- 6 files changed, 762 insertions(+), 448 deletions(-) create mode 100644 cosmic-applet-audio/src/model.rs diff --git a/Cargo.lock b/Cargo.lock index 60a28098..bdd37740 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -192,22 +192,6 @@ dependencies = [ "libc", ] -[[package]] -name = "annotate-snippets" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "710e8eae58854cdc1790fcb56cca04d712a17be849eeb81da2a724bf4bae2bc4" -dependencies = [ - "anstyle", - "unicode-width", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - [[package]] name = "anyhow" version = "1.0.102" @@ -512,9 +496,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" @@ -531,25 +515,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.72.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" -dependencies = [ - "annotate-snippets", - "bitflags 2.11.1", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.2", - "shlex", - "syn", -] - [[package]] name = "bit-set" version = "0.8.0" @@ -652,7 +617,7 @@ dependencies = [ "libc", "log", "macaddr", - "nix 0.29.0", + "nix", "num-derive", "num-traits", "pin-project", @@ -705,9 +670,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.3" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "by_address" @@ -803,25 +768,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom 7.1.3", -] - -[[package]] -name = "cfg-expr" -version = "0.20.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6b04e07d8080154ed4ac03546d9a2b303cc2fe1901ba0b35b301516e289368" -dependencies = [ - "smallvec", - "target-lexicon", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -856,17 +802,6 @@ dependencies = [ "inout", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clipboard-win" version = "5.4.1" @@ -977,21 +912,6 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e57e3272f0190c3f1584272d613719ba5fc7df7f4942fe542e63d949cf3a649b" -[[package]] -name = "convert_case" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "cookie-factory" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" - [[package]] name = "core-foundation" version = "0.9.4" @@ -1120,9 +1040,11 @@ dependencies = [ name = "cosmic-applet-audio" version = "1.0.15" dependencies = [ - "cosmic-settings-sound-subscription", + "cosmic-settings-audio-client", + "futures", "i18n-embed", "i18n-embed-fl", + "intmap", "libcosmic", "mpris2-zbus", "rust-embed", @@ -1134,6 +1056,7 @@ dependencies = [ "url", "urlencoding", "zbus", + "zlink", ] [[package]] @@ -1408,7 +1331,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1429,7 +1352,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "quote", "syn", @@ -1438,7 +1361,7 @@ dependencies = [ [[package]] name = "cosmic-dbus-a11y" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -1446,7 +1369,7 @@ dependencies = [ [[package]] name = "cosmic-dbus-networkmanager" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "bitflags 2.11.1", "derive_builder", @@ -1520,20 +1443,6 @@ dependencies = [ "xdg-shell-wrapper-config", ] -[[package]] -name = "cosmic-pipewire" -version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" -dependencies = [ - "intmap", - "libspa", - "libspa-sys", - "pipewire", - "serde", - "serde_json", - "tracing", -] - [[package]] name = "cosmic-protocols" version = "0.2.0" @@ -1551,7 +1460,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" +source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1565,7 +1474,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" +source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1575,6 +1484,33 @@ dependencies = [ "zbus", ] +[[package]] +name = "cosmic-settings-audio-client" +version = "1.0.0" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#e7936f0d4f01c8c5a436908c7ee9f6ad43e6a7d8" +dependencies = [ + "cosmic-settings-audio-core", + "dirs", + "futures-util", + "ron 0.12.1", + "serde", + "tokio", + "tokio-util", + "tracing", + "zlink", +] + +[[package]] +name = "cosmic-settings-audio-core" +version = "1.0.0" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#e7936f0d4f01c8c5a436908c7ee9f6ad43e6a7d8" +dependencies = [ + "dirs", + "ron 0.12.1", + "serde", + "zlink", +] + [[package]] name = "cosmic-settings-config" version = "0.1.0" @@ -1591,7 +1527,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -1599,7 +1535,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" +source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "futures", "iced_futures", @@ -1612,13 +1548,13 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" +source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "bitflags 2.11.1", "cosmic-dbus-networkmanager", "futures", "iced_futures", - "itertools 0.14.0", + "itertools", "nm-secret-agent-manager", "secret-service", "secure-string", @@ -1628,25 +1564,10 @@ dependencies = [ "zbus", ] -[[package]] -name = "cosmic-settings-sound-subscription" -version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" -dependencies = [ - "cosmic-pipewire", - "futures", - "intmap", - "libcosmic", - "numtoa", - "rustix 1.1.4", - "tokio", - "tracing", -] - [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" +source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "futures", "iced_futures", @@ -1684,7 +1605,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "almost", "configparser", @@ -2041,7 +1962,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2058,9 +1979,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.6" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", @@ -2195,9 +2116,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.16.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "endi" @@ -2239,7 +2160,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2327,7 +2248,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" dependencies = [ - "toml 0.5.11", + "toml", ] [[package]] @@ -2531,7 +2452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc6d3a3635983a889f065aa9ce760384713f23a9b4a04f696f86c39a5d7a6a5a" dependencies = [ "indexmap 2.14.0", - "nom 8.0.0", + "nom", ] [[package]] @@ -2629,9 +2550,9 @@ checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" -version = "3.0.4" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" @@ -2753,12 +2674,6 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - [[package]] name = "glow" version = "0.16.0" @@ -3035,7 +2950,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "dnd", "iced_accessibility", @@ -3056,7 +2971,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "accesskit", "accesskit_winit", @@ -3065,7 +2980,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bitflags 2.11.1", "bytes", @@ -3090,7 +3005,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "iced_core", "iced_futures", @@ -3100,7 +3015,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "futures", "iced_core", @@ -3114,7 +3029,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bitflags 2.11.1", "bytemuck", @@ -3135,7 +3050,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "iced_graphics", "iced_runtime", @@ -3144,7 +3059,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3156,7 +3071,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3171,7 +3086,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bytemuck", "cosmic-text", @@ -3188,7 +3103,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.1", @@ -3219,7 +3134,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3237,7 +3152,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3846,15 +3761,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -3878,9 +3784,9 @@ checksum = "2ceaf4c6c48465bead8cb6a0b7c4ee0c86ecbb31239032b9c66ab9a08d2f3ee1" [[package]] name = "jiff" -version = "0.2.27" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "392c70591e8749fe235ddaf513e6f58b26bce3dcc16524cecc8936f75afa161e" +checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -3888,14 +3794,14 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-link 0.2.1", + "windows-sys 0.59.0", ] [[package]] name = "jiff-static" -version = "0.2.27" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b605b0c050d845fc355bb11eb3f9a8deddc218ea60c76e61aa1f2adfb2c96a" +checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" dependencies = [ "proc-macro2", "quote", @@ -3987,9 +3893,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.99" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" dependencies = [ "cfg-if", "futures-util", @@ -4039,7 +3945,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4104,7 +4010,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#59bebbdffeb8ed4abd3f2577c099745b9a2f2c37" +source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "apply", "ashpd 0.12.3", @@ -4190,35 +4096,7 @@ dependencies = [ "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.8.0", -] - -[[package]] -name = "libspa" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b8cfa2a7656627b4c92c6b9ef929433acd673d5ab3708cda1b18478ac00df4" -dependencies = [ - "bitflags 2.11.1", - "cc", - "convert_case", - "cookie-factory", - "libc", - "libspa-sys", - "nix 0.30.1", - "nom 8.0.0", - "system-deps", -] - -[[package]] -name = "libspa-sys" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "901049455d2eb6decf9058235d745237952f4804bc584c5fcb41412e6adcc6e0" -dependencies = [ - "bindgen", - "cc", - "system-deps", + "redox_syscall 0.8.1", ] [[package]] @@ -4306,9 +4184,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.30" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "logind-zbus" @@ -4404,9 +4282,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" @@ -4464,12 +4342,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -4482,9 +4354,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "log", @@ -4505,7 +4377,7 @@ dependencies = [ [[package]] name = "mpris2-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "futures-util", "jiff", @@ -4589,31 +4461,19 @@ dependencies = [ "libc", ] -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.11.1", - "cfg-if", - "cfg_aliases", - "libc", -] - [[package]] name = "nm-secret-agent-manager" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] [[package]] name = "nmrs" -version = "3.1.5" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d907d6da103106d84189d3fd229d9aac921f9131b8ba38b40341c53d24409077" +checksum = "f9493a0dfbe50783b53ef52ec8ddb8d1f85fd45098be8210205236ff0f43bb7b" dependencies = [ "async-trait", "base64", @@ -4629,16 +4489,6 @@ dependencies = [ "zvariant", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nom" version = "8.0.0" @@ -4681,7 +4531,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4797,12 +4647,6 @@ dependencies = [ "syn", ] -[[package]] -name = "numtoa" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e4d8a81ede501fad07191e746a299f4d79f6dcd053bab1b97af4ff5a90099f2" - [[package]] name = "objc" version = "0.2.7" @@ -5025,9 +4869,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.55" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" +checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329" dependencies = [ "libc", "libredox", @@ -5287,34 +5131,6 @@ dependencies = [ "futures-io", ] -[[package]] -name = "pipewire" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9688b89abf11d756499f7c6190711d6dbe5a3acdb30c8fbf001d6596d06a8d44" -dependencies = [ - "anyhow", - "bitflags 2.11.1", - "libc", - "libspa", - "libspa-sys", - "nix 0.30.1", - "once_cell", - "pipewire-sys", - "thiserror 2.0.18", -] - -[[package]] -name = "pipewire-sys" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb028afee0d6ca17020b090e3b8fa2d7de23305aef975c7e5192a5050246ea36" -dependencies = [ - "bindgen", - "libspa-sys", - "system-deps", -] - [[package]] name = "pkg-config" version = "0.3.33" @@ -5647,9 +5463,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d" +checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" dependencies = [ "bitflags 2.11.1", ] @@ -5881,7 +5697,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -5908,6 +5724,12 @@ dependencies = [ "unicode-script", ] +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + [[package]] name = "same-file" version = "1.0.6" @@ -6051,9 +5873,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "indexmap 2.14.0", "itoa", @@ -6074,15 +5896,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_spanned" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" -dependencies = [ - "serde_core", -] - [[package]] name = "serde_with" version = "3.20.0" @@ -6278,9 +6091,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", "windows-sys 0.61.2", @@ -6410,7 +6223,7 @@ dependencies = [ [[package]] name = "switcheroo-control" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -6446,19 +6259,6 @@ dependencies = [ "libc", ] -[[package]] -name = "system-deps" -version = "7.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7" -dependencies = [ - "cfg-expr", - "heck 0.5.0", - "pkg-config", - "toml 1.1.2+spec-1.1.0", - "version-compare", -] - [[package]] name = "taffy" version = "0.9.2" @@ -6471,12 +6271,6 @@ dependencies = [ "slotmap", ] -[[package]] -name = "target-lexicon" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" - [[package]] name = "temp-dir" version = "0.1.16" @@ -6490,10 +6284,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.3.4", "once_cell", "rustix 1.1.4", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -6588,7 +6382,7 @@ dependencies = [ [[package]] name = "timedate-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -6702,6 +6496,20 @@ dependencies = [ "futures-core", "pin-project-lite", "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", ] [[package]] @@ -6713,21 +6521,6 @@ dependencies = [ "serde", ] -[[package]] -name = "toml" -version = "1.1.2+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" -dependencies = [ - "indexmap 2.14.0", - "serde_core", - "serde_spanned", - "toml_datetime", - "toml_parser", - "toml_writer", - "winnow", -] - [[package]] name = "toml_datetime" version = "1.1.1+spec-1.1.0" @@ -6739,9 +6532,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap 2.14.0", "toml_datetime", @@ -6758,12 +6551,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "toml_writer" -version = "1.1.1+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" - [[package]] name = "tracing" version = "0.1.44" @@ -6982,7 +6769,7 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "upower_dbus" version = "0.3.2" -source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "serde", "serde_repr", @@ -7066,12 +6853,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "version-compare" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" - [[package]] name = "version_check" version = "0.9.5" @@ -7114,9 +6895,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.122" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" dependencies = [ "cfg-if", "once_cell", @@ -7127,9 +6908,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.72" +version = "0.4.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" dependencies = [ "js-sys", "wasm-bindgen", @@ -7137,9 +6918,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.122" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7147,9 +6928,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.122" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" dependencies = [ "bumpalo", "proc-macro2", @@ -7160,9 +6941,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.122" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" dependencies = [ "unicode-ident", ] @@ -7367,9 +7148,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.99" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" dependencies = [ "js-sys", "wasm-bindgen", @@ -7563,7 +7344,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] @@ -8649,18 +8430,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.49" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bce33a6288fa3f072a8c2c7d0f2fdbb90e28298f0135c1f99b96c3db2efcc60b" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.49" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd425244944f4ab65ccff928e7323354c5a018c75838362fdce749dfad2ee1e" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", @@ -8729,6 +8510,73 @@ dependencies = [ "syn", ] +[[package]] +name = "zlink" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b895b99588dceb73f4d349b8323eabad9a97d48ce83698d475c7223727c6148" +dependencies = [ + "zlink-smol", + "zlink-tokio", +] + +[[package]] +name = "zlink-core" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd12701bd1d42a982b931f0159cf5054bf13d90e7828a8377dfc02ed4b00342d" +dependencies = [ + "futures-util", + "itoa", + "libc", + "pin-project-lite", + "rustix 1.1.4", + "ryu", + "serde", + "serde_json", + "tracing", + "zlink-macros", +] + +[[package]] +name = "zlink-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f2416a5f504dfd7e04fee49f31abafe3314a3f62b4ddaa8e9a5fd496d4dd50" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zlink-smol" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bc53cd0d636ad753f759aab0abb1f456e985c3938a279d11ebda92340ae37b1" +dependencies = [ + "async-broadcast", + "async-channel", + "async-io", + "futures-lite", + "futures-util", + "pin-project-lite", + "zlink-core", +] + +[[package]] +name = "zlink-tokio" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cbf366ac77ab41bf9a8d43535d3d620a072f7957813e03355d3d010c16cc4f" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", + "tokio-stream", + "zlink-core", +] + [[package]] name = "zmij" version = "1.0.21" diff --git a/Cargo.toml b/Cargo.toml index 569cb3b4..f97b6b28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,6 +60,7 @@ tokio = { version = "1.49.0", features = ["full"] } # cosmic-config = { path = "../libcosmic/cosmic-config" } cosmic-config = { git = "https://github.com/pop-os/libcosmic" } serde = { version = "1.0.228", features = ["derive"] } +zlink = "0.5.0" [profile.release] opt-level = 3 diff --git a/cosmic-applet-audio/Cargo.toml b/cosmic-applet-audio/Cargo.toml index edf97955..c47da57b 100644 --- a/cosmic-applet-audio/Cargo.toml +++ b/cosmic-applet-audio/Cargo.toml @@ -5,11 +5,11 @@ edition = "2024" license = "GPL-3.0-only" [dependencies] +futures.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true libcosmic.workspace = true mpris2-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings" } -# mpris2-zbus = { path = "../../dbus-settings-bindings/mpris2" } rust-embed.workspace = true serde.workspace = true tokio.workspace = true @@ -19,7 +19,9 @@ tracing.workspace = true url = "2" urlencoding = "2.1.3" zbus.workspace = true +zlink.workspace = true +intmap = "3.1.3" -[dependencies.cosmic-settings-sound-subscription] -git = "https://github.com/pop-os/cosmic-settings" -# path = "../../cosmic-settings/subscriptions/sound" +[dependencies.cosmic-settings-audio-client] +git = "https://github.com/pop-os/cosmic-settings-daemon" +features = ["codec"] diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index 5f49d0f9..3fd7b963 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -2,12 +2,13 @@ // SPDX-License-Identifier: GPL-3.0-only mod localize; +mod model; mod mouse_area; use crate::localize::localize; use config::{AudioAppletConfig, amplification_sink, amplification_source}; use cosmic::{ - Element, Renderer, Task, Theme, app, + Apply, Element, Renderer, Task, Theme, app, applet::{ column as applet_column, cosmic_panel_config::PanelAnchor, @@ -26,10 +27,12 @@ use cosmic::{ surface, theme, widget::{Row, button, container, divider, icon, space, text, toggler}, }; -use cosmic_settings_sound_subscription as css; +use cosmic_settings_audio_client::{self as audio_client, CosmicAudioProxy}; +use futures::SinkExt; use iced::platform_specific::shell::wayland::commands::popup::{destroy_popup, get_popup}; use mpris_subscription::{MprisRequest, MprisUpdate}; use mpris2_zbus::player::PlaybackStatus; +use std::{cell::RefCell, rc::Rc, sync::Arc}; mod config; mod mpris_subscription; @@ -50,8 +53,10 @@ pub struct Audio { core: cosmic::app::Core, /// Track the applet's popup window. popup: Option, - /// The model from cosmic-settings for managing pipewire devices. - model: css::Model, + /// Varlink connection to `com.system76.CosmicSettings.Audio`. + audio_client: Option>>, + /// Known audio device state + model: model::Model, /// Whether to expand the revealer of a source or sink device. is_open: IsOpen, /// Max slider volume for the sink device, as determined by the amplification property. @@ -72,8 +77,8 @@ pub struct Audio { impl Audio { fn output_icon_name(&self) -> &'static str { - let volume = self.model.sink_volume; - let mute = self.model.sink_mute; + let volume = self.model.active_sink.volume; + let mute = self.model.active_sink.mute; if mute || volume == 0 { "audio-volume-muted-symbolic" } else if volume < 33 { @@ -88,8 +93,8 @@ impl Audio { } fn input_icon_name(&self) -> &'static str { - let volume = self.model.source_volume; - let mute = self.model.source_mute; + let volume = self.model.active_source.volume; + let mute = self.model.active_source.mute; if mute || volume == 0 { "microphone-sensitivity-muted-symbolic" } else if volume < 33 { @@ -110,8 +115,10 @@ enum IsOpen { Input, } -#[derive(Debug, Clone)] +#[derive(Clone, Debug)] pub enum Message { + /// Connection to `com.system76.CosmicSettings`. + Client(Arc), Ignore, SetSinkVolume(u32), SetSourceVolume(u32), @@ -129,7 +136,7 @@ pub enum Message { MprisRequest(MprisRequest), Token(TokenUpdate), OpenSettings, - Subscription(css::Message), + Subscription(audio_client::Event), Surface(surface::Action), } @@ -242,15 +249,9 @@ impl cosmic::Application for Audio { const APP_ID: &'static str = "com.system76.CosmicAppletAudio"; fn init(core: cosmic::app::Core, _flags: ()) -> (Self, app::Task) { - let mut model = css::Model::default(); - model.unplugged_text = "Unplugged".into(); - model.hd_audio_text = "HD Audio".into(); - model.usb_audio_text = "USB Audio".into(); - ( Self { core, - model, ..Default::default() }, Task::none(), @@ -318,52 +319,74 @@ impl cosmic::Application for Audio { } } Message::Subscription(message) => { - return self - .model - .update(message) - .map(|message| Message::Subscription(message).into()); + self.model.update(message); } Message::SetDefaultSink(pos) => { - return self - .model - .set_default_sink(pos) - .map(|message| Message::Subscription(message).into()); + if let Some(&pos) = self.model.sinks.sorted_index.get(pos) + && let Some(&node_id) = self.model.sinks.id.get(pos as usize) + && let Some(client) = self.audio_client.as_mut() + { + futures::executor::block_on(async { + _ = client.borrow_mut().conn.set_default(node_id, true).await; + }); + } } Message::SetDefaultSource(pos) => { - return self - .model - .set_default_source(pos) - .map(|message| Message::Subscription(message).into()); + if let Some(&pos) = self.model.sources.sorted_index.get(pos) + && let Some(&node_id) = self.model.sources.id.get(pos as usize) + && let Some(client) = self.audio_client.as_mut() + { + futures::executor::block_on(async { + _ = client.borrow_mut().conn.set_default(node_id, true).await; + }); + } } - Message::ToggleSinkMute => self.model.toggle_sink_mute(), + Message::ToggleSinkMute => { + if let Some(ref mut client) = self.audio_client { + futures::executor::block_on(async { + _ = client.borrow_mut().conn.sink_mute_toggle().await; + }); + } + } - Message::ToggleSourceMute => self.model.toggle_source_mute(), + Message::ToggleSourceMute => { + if let Some(ref mut client) = self.audio_client { + futures::executor::block_on(async { + _ = client.borrow_mut().conn.source_mute_toggle().await; + }); + } + } Message::SetSinkVolume(volume) => { - return self - .model - .set_sink_volume(volume) - .map(|message| Message::Subscription(message).into()); + if let Some(ref mut client) = self.audio_client { + self.model.active_sink.volume = volume; + self.model.active_sink.volume_text = volume.to_string(); + futures::executor::block_on(async { + _ = client.borrow_mut().conn.set_sink_volume(volume).await; + }); + } } Message::SetSourceVolume(volume) => { - return self - .model - .set_source_volume(volume) - .map(|message| Message::Subscription(message).into()); + if let Some(ref mut client) = self.audio_client { + self.model.active_source.volume = volume; + self.model.active_source.volume_text = volume.to_string(); + futures::executor::block_on(async { + _ = client.borrow_mut().conn.set_source_volume(volume).await; + }); + } } Message::ToggleMediaControlsInTopPanel(enabled) => { self.config.show_media_controls_in_top_panel = enabled; if let Ok(helper) = cosmic::cosmic_config::Config::new(Self::APP_ID, AudioAppletConfig::VERSION) + && let Err(err) = self.config.write_entry(&helper) { - if let Err(err) = self.config.write_entry(&helper) { - tracing::error!(?err, "Error writing config"); - } + tracing::error!(?err, "Error writing config"); } } Message::CloseRequested(id) => { @@ -461,6 +484,12 @@ impl cosmic::Application for Audio { cosmic::app::Action::Surface(a), )); } + Message::Client(client) => { + if let Some(client) = Arc::into_inner(client) { + self.audio_client = Some(Rc::new(RefCell::new(client))); + self.model = model::Model::default(); + } + } } Task::none() @@ -476,7 +505,49 @@ impl cosmic::Application for Audio { }), mpris_subscription::mpris_subscription(0).map(Message::Mpris), activation_token_subscription(0).map(Message::Token), - Subscription::run(|| css::watch().map(Message::Subscription)), + Subscription::run(|| { + iced::stream::channel( + 1, + move |mut emitter: futures::channel::mpsc::Sender<_>| async move { + loop { + let mut client = match audio_client::connect().await { + Ok(client) => client, + Err(why) => { + if let zlink::Error::Io(ref why) = why + && why.kind() == std::io::ErrorKind::NotFound + { + tracing::error!( + "cosmic-settings-daemon varlink service not found." + ); + } else { + tracing::error!( + ?why, + "failed to connect to cosmic-settings's varlink service" + ); + } + + tokio::time::sleep(std::time::Duration::from_secs(3)).await; + continue; + } + }; + + if let Ok(Ok(mut stream)) = client.recv_events().await { + _ = emitter.send(Message::Client(Arc::new(client))).await; + while let Some(message) = stream.next().await { + match message { + Ok(event) => { + _ = emitter.send(Message::Subscription(event)).await; + } + Err(why) => { + tracing::error!(?why, "event error"); + } + } + } + } + } + }, + ) + }), ]) } @@ -497,7 +568,7 @@ impl cosmic::Application for Audio { return Message::Ignore; } - let new_volume = (self.model.sink_volume as f64 + (scroll_vector as f64)) + let new_volume = (self.model.active_sink.volume as f64 + (scroll_vector as f64)) .clamp(0.0, self.max_sink_volume as f64); Message::SetSinkVolume(new_volume as u32) }); @@ -551,19 +622,21 @@ impl cosmic::Application for Audio { space_xxs, space_s, .. } = theme::active().cosmic().spacing; - let sink = self + let sink: Option<&str> = self .model - .active_sink() - .and_then(|pos| self.model.sinks().get(pos)); - let source = self + .sinks + .active() + .map(|pos| self.model.sinks.sorted_display[pos].as_ref()); + let source: Option<&str> = self .model - .active_source() - .and_then(|pos| self.model.sources().get(pos)); + .sources + .active() + .map(|pos| self.model.sources.sorted_display[pos].as_ref()); let mut audio_content = { let output_slider = slider( 0..=self.max_sink_volume, - self.model.sink_volume, + self.model.active_sink.volume, Message::SetSinkVolume, ) .width(Length::FillPortion(5)) @@ -571,7 +644,7 @@ impl cosmic::Application for Audio { let input_slider = slider( 0..=self.max_source_volume, - self.model.source_volume, + self.model.active_source.volume, Message::SetSourceVolume, ) .width(Length::FillPortion(5)) @@ -590,7 +663,7 @@ impl cosmic::Application for Audio { .line_height(24) .on_press(Message::ToggleSinkMute), output_slider, - container(text(&self.model.sink_volume_text).size(16)) + container(text(&self.model.active_sink.volume_text).size(16)) .width(Length::FillPortion(1)) .align_x(Alignment::End) ] @@ -609,7 +682,7 @@ impl cosmic::Application for Audio { .line_height(24) .on_press(Message::ToggleSourceMute), input_slider, - container(text(&self.model.source_volume_text).size(16)) + container(text(&self.model.active_source.volume_text).size(16)) .width(Length::FillPortion(1)) .align_x(Alignment::End) ] @@ -624,7 +697,7 @@ impl cosmic::Application for Audio { Some(sink) => sink.to_owned(), None => fl!("no-device"), }, - self.model.sinks(), + &self.model.sinks.sorted_display, Message::OutputToggle, Message::SetDefaultSink, ), @@ -635,7 +708,7 @@ impl cosmic::Application for Audio { Some(source) => source.to_owned(), None => fl!("no-device"), }, - self.model.sources(), + &self.model.sources.sorted_display, Message::InputToggle, Message::SetDefaultSource, ) @@ -691,19 +764,15 @@ impl cosmic::Application for Audio { } if let Some(play) = self.is_play() { control_elements.push( - button::icon( - icon::from_name(if play { PLAY } else { PAUSE }) - .size(32) - .symbolic(true), - ) - .extra_small() - .class(cosmic::theme::Button::AppletIcon) - .on_press(if play { - Message::MprisRequest(MprisRequest::Play) - } else { - Message::MprisRequest(MprisRequest::Pause) - }) - .into(), + button::icon(icon::from_name(if play { PLAY } else { PAUSE }).symbolic(true)) + .extra_small() + .class(cosmic::theme::Button::AppletIcon) + .on_press(if play { + Message::MprisRequest(MprisRequest::Play) + } else { + Message::MprisRequest(MprisRequest::Pause) + }) + .into(), ); } if let Some(go_next) = self.go_next(32) { @@ -754,20 +823,21 @@ impl cosmic::Application for Audio { } } -fn revealer( +fn revealer<'a>( open: bool, title: String, selected: String, - devices: &[String], + devices: &'a [Arc], toggle: Message, mut change: impl FnMut(usize) -> Message + 'static, -) -> widget::Column<'static, Message, crate::Theme, Renderer> { +) -> widget::Column<'a, Message, crate::Theme, Renderer> { if open { - devices.iter().cloned().enumerate().fold( + devices.iter().enumerate().fold( column![revealer_head(open, title, selected, toggle)].width(Length::Fill), - |col, (id, name)| { + move |col, (id, name)| { col.push( - menu_button(text::body(name)) + text::body(name.as_ref()) + .apply(menu_button) .on_press(change(id)) .width(Length::Fill) .padding([8, 48]), @@ -785,9 +855,9 @@ fn revealer_head( selected: String, toggle: Message, ) -> cosmic::widget::Button<'static, Message> { - menu_button(column![ - text::body(title).width(Length::Fill), - text::caption(selected), - ]) - .on_press(toggle) + cosmic::widget::column::with_capacity(2) + .push(text::body(title).width(Length::Fill)) + .push(text::caption(selected)) + .apply(menu_button) + .on_press(toggle) } diff --git a/cosmic-applet-audio/src/model.rs b/cosmic-applet-audio/src/model.rs new file mode 100644 index 00000000..42c76b3c --- /dev/null +++ b/cosmic-applet-audio/src/model.rs @@ -0,0 +1,393 @@ +// Copyright 2026 System76 +// SPDX-License-Identifier: GPL-3.0-only + +use std::sync::Arc; + +use cosmic_settings_audio_client::{self as audio_client, Availability, RouteInfo}; +use intmap::IntMap; + +pub type DeviceId = u32; +pub type NodeId = u32; + +#[derive(Debug, Default)] +pub struct Model { + pub device_routes: IntMap>, + pub node_devices: IntMap>, + pub sinks: Nodes, + pub sources: Nodes, + pub active_sink: ActiveNode, + pub active_source: ActiveNode, + pub default_sink: Option, + pub default_source: Option, +} + +#[derive(Debug, Default)] +pub struct Nodes { + active: Option, + pub sorted_display: Box<[Arc]>, + pub sorted_index: Box<[u16]>, + pub balance: Vec>, + pub card_profile_device: Vec>, + pub description: Vec, + pub devices: Vec>, + pub display: Vec>, + pub mute: Vec, + pub name: Vec, + pub id: Vec, + pub volume: Vec, +} + +impl Nodes { + pub fn active(&self) -> Option { + self.active.and_then(|active| { + self.sorted_index + .iter() + .position(|idx| *idx as usize == active) + }) + } + + pub fn dropdown_sort(&mut self) { + let mut enumerated_displays = self + .display + .clone() + .into_iter() + .enumerate() + .map(|(index, display)| (index as u16, display)) + .collect::>(); + enumerated_displays.sort_by_key(|v| v.1.clone()); + let (indexes, displays): (Vec<_>, Vec<_>) = enumerated_displays.into_iter().unzip(); + self.sorted_display = displays.into_boxed_slice(); + self.sorted_index = indexes.into_boxed_slice(); + } + + pub fn remove(&mut self, node_id: u32) -> bool { + let Some(pos) = self.id.iter().position(|id| node_id == *id) else { + return false; + }; + self.balance.remove(pos); + self.card_profile_device.remove(pos); + self.description.remove(pos); + self.devices.remove(pos); + self.display.remove(pos); + self.mute.remove(pos); + self.name.remove(pos); + self.id.remove(pos); + self.volume.remove(pos); + self.dropdown_sort(); + if self.active == Some(pos) { + self.active = None; + } + true + } +} + +#[derive(Debug, Default)] +pub struct ActiveNode { + pub volume_text: String, + pub volume: u32, + pub mute: bool, +} + +impl Model { + pub fn update(&mut self, event: audio_client::Event) { + tracing::debug!(?event, "update"); + match event { + audio_client::Event::NodeMute(node_id, mute) => { + if let Some(pos) = self.sinks.id.iter().position(|id| node_id == *id) { + self.sinks.mute[pos] = mute; + if self.sinks.active == Some(pos) { + self.active_sink.mute = mute; + } + } else if let Some(pos) = self.sources.id.iter().position(|id| node_id == *id) { + self.sources.mute[pos] = mute; + if self.sources.active == Some(pos) { + self.active_source.mute = mute; + } + } + } + + audio_client::Event::NodeVolume(node_id, volume, balance) => { + if let Some(pos) = self.sinks.id.iter().position(|id| node_id == *id) { + self.sinks.volume[pos] = volume; + self.sinks.balance[pos] = balance; + if self.default_sink.as_ref().is_some_and(|&id| id == node_id) + && let Some(pos) = self.sinks.active + { + self.active_sink.mute = self.sinks.mute[pos]; + self.active_sink.volume = self.sinks.volume[pos]; + self.active_sink.volume_text = self.active_sink.volume.to_string(); + } + } else if let Some(pos) = self.sources.id.iter().position(|id| node_id == *id) { + self.sources.volume[pos] = volume; + self.sources.balance[pos] = balance; + if self + .default_source + .as_ref() + .is_some_and(|&id| id == node_id) + && let Some(pos) = self.sources.active + { + self.active_source.mute = self.sources.mute[pos]; + self.active_source.volume = self.sources.volume[pos]; + self.active_source.volume_text = self.active_source.volume.to_string(); + } + } + } + + audio_client::Event::DefaultSink(node_id) => { + self.default_sink = Some(node_id); + if let Some(pos) = self.sinks.id.iter().position(|&id| id == node_id) { + self.sinks.active = Some(pos); + self.active_sink.mute = self.sinks.mute[pos]; + self.active_sink.volume = self.sinks.volume[pos]; + self.active_sink.volume_text = self.active_sink.volume.to_string(); + } + } + + audio_client::Event::DefaultSource(node_id) => { + self.default_source = Some(node_id); + if let Some(pos) = self.sources.id.iter().position(|&id| id == node_id) { + self.sources.active = Some(pos); + self.active_source.mute = self.sources.mute[pos]; + self.active_source.volume = self.sources.volume[pos]; + self.active_source.volume_text = self.active_source.volume.to_string(); + } + } + + audio_client::Event::Node(node_id, node) => { + self.node_devices.insert(node_id, node.device_id); + if node.is_sink { + let pos = if let Some(pos) = self.sinks.id.iter().position(|&id| id == node_id) + { + self.sinks.description[pos] = self.translate(&node.description); + self.sinks.name[pos] = node.name; + self.sinks.card_profile_device[pos] = node.card_profile_device; + pos + } else { + self.sinks.display.push(Arc::default()); + self.sinks + .description + .push(self.translate(&node.description)); + self.sinks.id.push(node_id); + self.sinks.volume.push(0); + self.sinks.balance.push(None); + self.sinks.mute.push(false); + self.sinks.name.push(node.name); + self.sinks.devices.push(node.device_id); + self.sinks + .card_profile_device + .push(node.card_profile_device); + self.sinks.id.len() - 1 + }; + + self.sinks.display[pos] = node + .device_id + .zip(node.card_profile_device) + .and_then(|(device_id, node_card_profile_device)| { + let routes = self.device_routes.get(device_id)?; + for route in routes { + if matches!(route.availability, Availability::No) || !route.is_sink + { + continue; + } + + if route.devices.contains(&node_card_profile_device) { + return Some(node_name( + &self.translate(&route.description), + &self.sinks.description[pos], + )); + } + } + + None + }) + .unwrap_or_else(|| { + node_name( + &node.device_profile_description, + &self.sinks.description[pos], + ) + }); + + self.sinks.dropdown_sort(); + + if let Some(default_node_id) = self.default_sink + && default_node_id == node_id + { + self.sinks.active = Some(pos); + self.active_sink.mute = self.sinks.mute[pos]; + self.active_sink.volume = self.sinks.volume[pos]; + self.active_sink.volume_text = self.active_sink.volume.to_string(); + } + } else { + let pos = + if let Some(pos) = self.sources.id.iter().position(|&id| id == node_id) { + self.sources.description[pos] = self.translate(&node.description); + self.sources.name[pos] = node.name; + self.sources.card_profile_device[pos] = node.card_profile_device; + pos + } else { + self.sources + .description + .push(self.translate(&node.description)); + self.sources.display.push(Arc::default()); + self.sources.id.push(node_id); + self.sources.volume.push(0); + self.sources.balance.push(None); + self.sources.mute.push(false); + self.sources.name.push(node.name); + self.sources.devices.push(node.device_id); + self.sources + .card_profile_device + .push(node.card_profile_device); + self.sources.id.len() - 1 + }; + + if let Some(name) = node + .device_id + .zip(node.card_profile_device) + .map(|(device_id, node_card_profile_device)| { + let routes = self.device_routes.get(device_id)?; + for route in routes { + if route.is_sink || matches!(route.availability, Availability::No) { + continue; + } + + if route.devices.contains(&node_card_profile_device) { + return Some(node_name( + &self.translate(&route.description), + &self.sources.description[pos], + )); + } + } + + None + }) + .unwrap_or_else(|| { + Some(node_name( + &node.device_profile_description, + &self.sources.description[pos], + )) + }) + { + self.sources.display[pos] = name; + self.sources.dropdown_sort(); + } else { + // Remove sources that are unplugged. + self.sources.remove(node_id); + return; + } + + if let Some(default_node_id) = self.default_source + && default_node_id == node_id + { + self.sources.active = Some(pos); + self.active_source.mute = self.sources.mute[pos]; + self.active_source.volume = self.sources.volume[pos]; + self.active_source.volume_text = self.active_source.volume.to_string(); + } + } + } + + audio_client::Event::ActiveRoute(device_id, _index, route) => { + self.update_device_names(device_id, &route); + } + + audio_client::Event::Route(device_id, index, route) => { + let routes = self.device_routes.entry(device_id).or_default(); + if index == 0 { + *routes = vec![route]; + } else { + if routes.len() < index as usize + 1 { + let additional = (index as usize + 1) - routes.capacity(); + routes.reserve_exact(additional); + routes.extend(std::iter::repeat_n(RouteInfo::default(), additional)); + } + routes[index as usize] = route; + } + } + + audio_client::Event::RemoveNode(node_id) => { + self.node_devices.remove(node_id); + + if !self.sinks.remove(node_id) { + self.sources.remove(node_id); + } + } + + audio_client::Event::RemoveDevice(device_id) => { + self.device_routes.remove(device_id); + } + + _ => (), + } + } + + fn update_device_names(&mut self, device_id: DeviceId, route: &RouteInfo) { + if matches!(route.availability, Availability::No) { + return; + } + + let compatible_nodes = self.node_devices.iter().filter_map(|(node, &dev_id)| { + if dev_id? == device_id { + Some(node) + } else { + None + } + }); + + if route.is_sink { + for n_id in compatible_nodes { + let Some(pos) = self.sinks.id.iter().position(|&node| node == n_id) else { + continue; + }; + + let Some(card_profile_device) = self.sinks.card_profile_device[pos] else { + continue; + }; + + if route.devices.contains(&card_profile_device) { + self.sinks.display[pos] = node_name( + &self.translate(&route.description), + &self.sinks.description[pos], + ); + self.sinks.dropdown_sort(); + break; + } + } + } else { + for n_id in compatible_nodes { + let Some(pos) = self.sources.id.iter().position(|&node| node == n_id) else { + continue; + }; + + let Some(card_profile_device) = self.sources.card_profile_device[pos] else { + continue; + }; + + if route.devices.contains(&card_profile_device) { + self.sources.display[pos] = node_name( + &self.translate(&route.description), + &self.sources.description[pos], + ); + self.sources.dropdown_sort(); + break; + } + } + } + } + + pub fn translate(&self, description: &str) -> String { + description + .replace("High Definition", "HD") + .replace("DisplayPort", "DP") + .replace("Controller", "") + } +} + +fn node_name(route: &str, node: &str) -> Arc { + if route.is_empty() { + node.to_owned() + } else { + [route, " - ", node].concat() + } + .into() +} diff --git a/cosmic-applet-audio/src/mouse_area.rs b/cosmic-applet-audio/src/mouse_area.rs index 6ae8547a..38306e45 100644 --- a/cosmic-applet-audio/src/mouse_area.rs +++ b/cosmic-applet-audio/src/mouse_area.rs @@ -5,7 +5,7 @@ use cosmic::iced::core::Point; use cosmic::iced::core::{ Clipboard, Element, Layout, Length, Rectangle, Shell, Size, Widget, - event::{self, Event}, + event::Event, layout, mouse, overlay, renderer, touch, widget::{Operation, Tree, tree}, }; From 456d0525357bfad0f9687b3c49cfbdc3c078a608 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Wed, 17 Jun 2026 20:56:08 -0400 Subject: [PATCH 26/84] improv(audio): adjust popup size based on window size --- cosmic-applet-audio/src/lib.rs | 112 +++++++++++++++++++++------------ 1 file changed, 73 insertions(+), 39 deletions(-) diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index 3fd7b963..9bd585d9 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -19,13 +19,17 @@ use cosmic::{ cosmic_config::CosmicConfigEntry, cosmic_theme::Spacing, iced::{ - self, Alignment, Length, Subscription, + self, Alignment, Length, Rectangle, Subscription, futures::StreamExt, widget::{self, column, row, slider}, window, }, surface, theme, - widget::{Row, button, container, divider, icon, space, text, toggler}, + widget::{ + Row, button, container, divider, icon, + rectangle_tracker::{RectangleTracker, RectangleUpdate, rectangle_tracker_subscription}, + space, text, toggler, + }, }; use cosmic_settings_audio_client::{self as audio_client, CosmicAudioProxy}; use futures::SinkExt; @@ -73,6 +77,8 @@ pub struct Audio { player_status: Option, /// Used to request an activation token for opening cosmic-settings. token_tx: Option>, + rectangle_tracker: Option>, + rectangle: Option, } impl Audio { @@ -138,6 +144,7 @@ pub enum Message { OpenSettings, Subscription(audio_client::Event), Surface(surface::Action), + Rectangle(RectangleUpdate), } // TODO @@ -272,6 +279,14 @@ impl cosmic::Application for Audio { fn update(&mut self, message: Message) -> app::Task { match message { + Message::Rectangle(u) => match u { + RectangleUpdate::Rectangle(r) => { + self.rectangle = Some(r.1); + } + RectangleUpdate::Init(tracker) => { + self.rectangle_tracker.replace(tracker); + } + }, Message::Ignore => {} Message::TogglePopup => { if let Some(p) = self.popup.take() { @@ -292,14 +307,21 @@ impl cosmic::Application for Audio { (100, &[][..]) }; - let popup_settings = self.core.applet.get_popup_settings( + let mut popup_settings = self.core.applet.get_popup_settings( self.core.main_window_id().unwrap(), new_id, None, None, None, ); - + if let Some(r) = self.rectangle { + popup_settings.positioner.anchor_rect = Rectangle { + x: r.x as i32, + y: r.y as i32, + width: r.width as i32, + height: r.height as i32, + }; + } return get_popup(popup_settings); } } @@ -548,6 +570,7 @@ impl cosmic::Application for Audio { }, ) }), + rectangle_tracker_subscription(0).map(|update| Message::Rectangle(update.1)), ]) } @@ -573,48 +596,59 @@ impl cosmic::Application for Audio { Message::SetSinkVolume(new_volume as u32) }); + let mut has_playback_buttons = false; let playback_buttons = (!self.core.applet.suggested_bounds.as_ref().is_some_and(|c| { // if we have a configure for width and height, we're in a overflow popup c.width > 0. && c.height > 0. })) .then(|| self.playback_buttons()); - self.core - .applet - .autosize_window( - if let Some(playback_buttons) = playback_buttons - && !playback_buttons.is_empty() - { - match self.core.applet.anchor { - PanelAnchor::Left | PanelAnchor::Right => Element::from( - applet_column::Column::with_children(playback_buttons) - .push(btn) - .align_x(Alignment::Center) - .height(Length::Shrink) - // TODO configurable variable from the panel? - .spacing( - -(self.core.applet.suggested_padding(true).0 as f32) - * self.core.applet.padding_overlap, - ), + let mut ret = if let Some(playback_buttons) = playback_buttons + && !playback_buttons.is_empty() + { + has_playback_buttons = true; + Element::from(match self.core.applet.anchor { + PanelAnchor::Left | PanelAnchor::Right => Element::from( + applet_column::Column::with_children(playback_buttons) + .push(btn) + .align_x(Alignment::Center) + .height(Length::Shrink) + // TODO configurable variable from the panel? + .spacing( + -(self.core.applet.suggested_padding(true).0 as f32) + * self.core.applet.padding_overlap, ), - PanelAnchor::Top | PanelAnchor::Bottom => { - applet_row::Row::with_children(playback_buttons) - .push(btn) - .align_y(Alignment::Center) - .width(Length::Shrink) - // TODO configurable variable from the panel? - .spacing( - -(self.core.applet.suggested_padding(true).0 as f32) - * self.core.applet.padding_overlap, - ) - .into() - } - } - } else { - btn.into() - }, - ) - .into() + ), + PanelAnchor::Top | PanelAnchor::Bottom => { + applet_row::Row::with_children(playback_buttons) + .push(btn) + .align_y(Alignment::Center) + .width(Length::Shrink) + // TODO configurable variable from the panel? + .spacing( + -(self.core.applet.suggested_padding(true).0 as f32) + * self.core.applet.padding_overlap, + ) + .into() + } + }) + } else { + btn.into() + }; + + if let Some(tracker) = self.rectangle_tracker.as_ref() + && has_playback_buttons + { + ret = tracker.container(0, ret).into() + } + + if !self.core.applet.suggested_bounds.as_ref().is_some_and(|c| { + // if we have a configure for width and height, we're in a overflow popup + c.width > 0. && c.height > 0. + }) { + ret = self.core.applet.autosize_window(ret).into(); + } + ret } fn view_window(&self, _id: window::Id) -> Element<'_, Message> { From f97dc5a31e8c2040af5ebd5914f7db0cb215deb0 Mon Sep 17 00:00:00 2001 From: Ilia Malanin Date: Sat, 20 Jun 2026 02:07:18 +0200 Subject: [PATCH 27/84] fix(minimize): cache captured data for minimized toplevels --- cosmic-applet-minimize/src/wayland_handler.rs | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/cosmic-applet-minimize/src/wayland_handler.rs b/cosmic-applet-minimize/src/wayland_handler.rs index bf2eae30..562693e2 100644 --- a/cosmic-applet-minimize/src/wayland_handler.rs +++ b/cosmic-applet-minimize/src/wayland_handler.rs @@ -121,6 +121,7 @@ struct AppData { toplevel_info_state: ToplevelInfoState, toplevel_manager_state: ToplevelManagerState, seat_state: SeatState, + captured_toplevels: std::collections::HashSet, } struct CaptureData { @@ -351,6 +352,36 @@ impl AppData { } }); } + + fn handle_toplevel(&mut self, toplevel: &ExtForeignToplevelHandleV1, is_new: bool) { + let Some(info) = self.toplevel_info_state.info(toplevel) else { + return; + }; + if info + .state + .contains(&zcosmic_toplevel_handle_v1::State::Minimized) + { + // Capture a thumbnail once, on the transition into minimized. + if self.captured_toplevels.insert(toplevel.clone()) { + self.send_image(toplevel.clone()); + } + let update = if is_new { + ToplevelUpdate::Add(info.clone()) + } else { + ToplevelUpdate::Update(info.clone()) + }; + let _ = futures::executor::block_on(self.tx.send(WaylandUpdate::Toplevel(update))); + } else { + self.remove_toplevel(toplevel); + } + } + + fn remove_toplevel(&mut self, toplevel: &ExtForeignToplevelHandleV1) { + self.captured_toplevels.remove(toplevel); + let _ = futures::executor::block_on(self.tx.send(WaylandUpdate::Toplevel( + ToplevelUpdate::Remove(toplevel.clone()), + ))); + } } impl ToplevelInfoHandler for AppData { @@ -364,23 +395,7 @@ impl ToplevelInfoHandler for AppData { _qh: &QueueHandle, toplevel: &ExtForeignToplevelHandleV1, ) { - if let Some(info) = self.toplevel_info_state.info(toplevel) { - if info - .state - .contains(&zcosmic_toplevel_handle_v1::State::Minimized) - { - // spawn thread for sending the image - self.send_image(toplevel.clone()); - let _ = futures::executor::block_on( - self.tx - .send(WaylandUpdate::Toplevel(ToplevelUpdate::Add(info.clone()))), - ); - } else { - let _ = futures::executor::block_on(self.tx.send(WaylandUpdate::Toplevel( - ToplevelUpdate::Remove(toplevel.clone()), - ))); - } - } + self.handle_toplevel(toplevel, true); } fn update_toplevel( @@ -389,21 +404,7 @@ impl ToplevelInfoHandler for AppData { _qh: &QueueHandle, toplevel: &ExtForeignToplevelHandleV1, ) { - if let Some(info) = self.toplevel_info_state.info(toplevel) { - if info - .state - .contains(&zcosmic_toplevel_handle_v1::State::Minimized) - { - self.send_image(toplevel.clone()); - let _ = futures::executor::block_on(self.tx.send(WaylandUpdate::Toplevel( - ToplevelUpdate::Update(info.clone()), - ))); - } else { - let _ = futures::executor::block_on(self.tx.send(WaylandUpdate::Toplevel( - ToplevelUpdate::Remove(toplevel.clone()), - ))); - } - } + self.handle_toplevel(toplevel, false); } fn toplevel_closed( @@ -412,9 +413,7 @@ impl ToplevelInfoHandler for AppData { _qh: &QueueHandle, toplevel: &ExtForeignToplevelHandleV1, ) { - let _ = futures::executor::block_on(self.tx.send(WaylandUpdate::Toplevel( - ToplevelUpdate::Remove(toplevel.clone()), - ))); + self.remove_toplevel(toplevel); } } @@ -482,6 +481,7 @@ pub(crate) fn wayland_handler( toplevel_manager_state: ToplevelManagerState::new(®istry_state, &qh), queue_handle: qh, registry_state, + captured_toplevels: std::collections::HashSet::new(), }; loop { From f022b6c1a905b6ab1f7a0a0b47fc6f3e32cc252b Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 23 Jun 2026 08:02:02 +0200 Subject: [PATCH 28/84] i18n: translation updates from weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: CYAXXX <85353920+CYAXXX@users.noreply.github.com> Co-authored-by: Hosted Weblate Co-authored-by: Hugo Carvalho Co-authored-by: Isaac Subirana Co-authored-by: Jun Hwi Ku Co-authored-by: Walter William Beckerleg Bruckman Co-authored-by: Yuya Furukuwa Co-authored-by: therealmate Co-authored-by: Димко Co-authored-by: 김유빈 Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/ja/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-notifications/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-notifications/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-time/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/ja/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/ko/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/pt/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/uk/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-input-sources-applet/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces-applet/kmr/ Translation: Pop OS/COSMIC Accessibility Applet Translation: Pop OS/COSMIC App List Applet Translation: Pop OS/COSMIC Applets Desktop Entries Translation: Pop OS/COSMIC Audio Applet Translation: Pop OS/COSMIC Battery Applet Translation: Pop OS/COSMIC Bluetooth Applet Translation: Pop OS/COSMIC Input Sources Applet Translation: Pop OS/COSMIC Network Applet Translation: Pop OS/COSMIC Notifications Applet Translation: Pop OS/COSMIC Power Applet Translation: Pop OS/COSMIC Tiling Applet Translation: Pop OS/COSMIC Time Applet Translation: Pop OS/COSMIC Workspaces Applet --- cosmic-app-list/i18n/kmr/cosmic_app_list.ftl | 8 +++ .../i18n/ja/cosmic_applet_a11y.ftl | 2 +- .../i18n/kmr/cosmic_applet_a11y.ftl | 6 +++ .../i18n/kmr/cosmic_applet_audio.ftl | 7 +++ .../i18n/kmr/cosmic_applet_battery.ftl | 14 +++++ .../i18n/kmr/cosmic_applet_bluetooth.ftl | 12 +++++ .../i18n/kmr/cosmic_applet_input_sources.ftl | 2 + .../i18n/kmr/cosmic_applet_network.ftl | 24 +++++++++ .../i18n/kmr/cosmic_applet_notifications.ftl | 19 +++++++ .../i18n/kmr/cosmic_applet_power.ftl | 36 +++++++++++++ .../i18n/kmr/cosmic_applet_tiling.ftl | 20 ++++++++ .../i18n/kmr/cosmic_applet_time.ftl | 1 + .../i18n/kmr/cosmic_applet_workspaces.ftl | 1 + i18n/ja/desktop_entries.ftl | 1 + i18n/kmr/desktop_entries.ftl | 51 +++++++++++++++++++ i18n/ko/desktop_entries.ftl | 3 ++ i18n/pt/desktop_entries.ftl | 5 ++ 17 files changed, 211 insertions(+), 1 deletion(-) diff --git a/cosmic-app-list/i18n/kmr/cosmic_app_list.ftl b/cosmic-app-list/i18n/kmr/cosmic_app_list.ftl index e69de29b..793d1880 100644 --- a/cosmic-app-list/i18n/kmr/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/kmr/cosmic_app_list.ftl @@ -0,0 +1,8 @@ +run = Bixebitîne +run-on = Li ser { $gpu } bixebitîne +run-on-default = (Berdest) +pin = Bo destgeha sepanan bi dar bixe +quit = Biqedîne +quit-all = Hemûyan biqedîne +new-window = Çarçoveya nû +cosmic-app-list = Destgeha sepanan diff --git a/cosmic-applet-a11y/i18n/ja/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/ja/cosmic_applet_a11y.ftl index 75249579..564e0d4f 100644 --- a/cosmic-applet-a11y/i18n/ja/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/ja/cosmic_applet_a11y.ftl @@ -2,5 +2,5 @@ screen-reader = スクリーンリーダー magnifier = 拡大鏡 settings = アクセシビリティ設定… invert-colors = 色を反転 -filter-colors = 色のフィルター +filter-colors = カラーフィルター high-contrast = ハイコントラスト diff --git a/cosmic-applet-a11y/i18n/kmr/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/kmr/cosmic_applet_a11y.ftl index e69de29b..4c772791 100644 --- a/cosmic-applet-a11y/i18n/kmr/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/kmr/cosmic_applet_a11y.ftl @@ -0,0 +1,6 @@ +screen-reader = Xwînerê dîmenderê +magnifier = Mezinker +invert-colors = Rengan berevajî bike +settings = Sazkariyên gihîştinê... +filter-colors = Rengan parzûn bike +high-contrast = Dijbiriya bilind diff --git a/cosmic-applet-audio/i18n/kmr/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/kmr/cosmic_applet_audio.ftl index e69de29b..373ab157 100644 --- a/cosmic-applet-audio/i18n/kmr/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/kmr/cosmic_applet_audio.ftl @@ -0,0 +1,7 @@ +output = Deran +input = Ketan +unknown-artist = Nenas +sound-settings = Sazkariyên dengê... +disconnected = Girêdana PulseAudio qut bû +no-device = Tu amûr nehatine hilbijartin +show-media-controls = Kontrolên mediyayê li ser destgehê nîşan bide diff --git a/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl index e69de29b..8c0d92d1 100644 --- a/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl @@ -0,0 +1,14 @@ +battery = Betarî +seconds = ç +minutes = x +hours = d +until-empty = Heya vala dibe +power-settings = Sazkariyên hêz û betariyê... +battery-desc = Bikaranîna hêzê kêmkirî û performans. +balanced = Hevseng +balanced-desc = Performansa standard û bikaranîna betariyê. +performance = Performansa bilind +performance-desc = Performansa bilind û bikaranîna hêzê. +max-charge = Jiyana betariyê xwe dirêj bike bi riya danîna sînorê herî mezin yê tijîkrinê %80 +dgpu-running = YKG a veqetandî çalak e û dikare jiyana betariyê kêm bike +dgpu-applications = Sepanên ku YKG a veqetandî ya { $gpu_name } bi kar tînin diff --git a/cosmic-applet-bluetooth/i18n/kmr/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/kmr/cosmic_applet_bluetooth.ftl index e69de29b..988f00ca 100644 --- a/cosmic-applet-bluetooth/i18n/kmr/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/kmr/cosmic_applet_bluetooth.ftl @@ -0,0 +1,12 @@ +cancel = Têk bibe +bluetooth = Bluetooth +connected = Hat girêdan +other-devices = Amûrên Bluetooth ên din +settings = Sazkariyên Bluetooth... +confirm-pin = Tika ye piştrast bike ku PIN a jêrîn bi ya ku li ser { $deviceName } tê xuyakirin re li hev tê +confirm = Bipejirîne +check-device = Piştrast bike ku { $deviceName } çalak e, di hundir rêjeyê de ye, û amade ye ji bo cotkirinê. +try-again = Dîsa hewl bide +discoverable = Dîtbar +pairable = Cotbar +unsuccessful = Cotkirin têkçûyî ye diff --git a/cosmic-applet-input-sources/i18n/kmr/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/kmr/cosmic_applet_input_sources.ftl index e69de29b..737324c5 100644 --- a/cosmic-applet-input-sources/i18n/kmr/cosmic_applet_input_sources.ftl +++ b/cosmic-applet-input-sources/i18n/kmr/cosmic_applet_input_sources.ftl @@ -0,0 +1,2 @@ +show-keyboard-layout = Awaya kilîtdankê nîşan bide... +keyboard-settings = Sazkariyên kilîtdankê... diff --git a/cosmic-applet-network/i18n/kmr/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/kmr/cosmic_applet_network.ftl index e69de29b..3dbb0266 100644 --- a/cosmic-applet-network/i18n/kmr/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/kmr/cosmic_applet_network.ftl @@ -0,0 +1,24 @@ +cancel = Têk bibe +connect = Girê bide +connected = Hat girêdan +network = Tor +airplane-mode = Awaya balafirê +airplane-mode-on = Awaya balafirê vekirî ye +turn-off-airplane-mode = Ji bo çalakirina Wi-Fi, Bluetooth û torên mobayîl, awaya balafirê bigire. +wifi = Wi-Fi +identity = Nasname +ipv4 = IPv4 +ipv6 = IPv6 +mac = MAC +megabits-per-second = Mbps +gigabits-per-second = Gbps +terabits-per-second = Tbps +connecting = Tê girêdan +settings = Sazkariyên torê... +visible-wireless-networks = Torên bêtêl ên xuya +vpn-connections = Girêdanên VPN +enter-password = Borînpeyvê yan jî kilîtê şîfrekirinê têxîne +router-wps-button = Tu dikarî bi pêlkirina bişkoka "WPS" ya li ser routerê jî girê bidî +unable-to-connect = Nikare bi torê ve were girêdan +check-wifi-connection = Piştrast bike ku Wi-Fi bi înternetê ve girêdayî ye û borînpeyv rast e +reset = Ji nû ve saz bike diff --git a/cosmic-applet-notifications/i18n/kmr/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/kmr/cosmic_applet_notifications.ftl index e69de29b..b7a7578a 100644 --- a/cosmic-applet-notifications/i18n/kmr/cosmic_applet_notifications.ftl +++ b/cosmic-applet-notifications/i18n/kmr/cosmic_applet_notifications.ftl @@ -0,0 +1,19 @@ +hours-ago = + { $duration -> + [0] Niha + [one] 1 demjimêr berê + *[other] { $duration } demjimêr berê + } +minutes-ago = + { $duration -> + [0] Niha + [one] 1 xulek berê + *[other] { $duration } xulek berê + } +show-less = Kêmtir nîşan bide +show-more = Bêtir { $more } nîşan bide +clear-group = Komê pak bike +clear-all = Hemû agahdariyan pak bike +do-not-disturb = Rawestandina balkêşiyê +notification-settings = Sazkariyên agahdariyê.... +no-notifications = Agahdarî tune ne diff --git a/cosmic-applet-power/i18n/kmr/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/kmr/cosmic_applet_power.ftl index e69de29b..003f4a23 100644 --- a/cosmic-applet-power/i18n/kmr/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/kmr/cosmic_applet_power.ftl @@ -0,0 +1,36 @@ +cancel = Têk bibe +confirm = Bipejirîne +power = Hêz +restart = Ji nû ve bide destpêkirin +settings = Sazkarî... +shutdown = Vemrîne +suspend = Rawestîne +log-out = Derkeve +lock-screen = Dîmenderê kilît bike +lock-screen-shortcut = Super + Escape +log-out-shortcut = Super + Shift + Escape +confirm-button = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] Vemrîne + [log-out] { log-out } + *[other] { confirm } + } +confirm-title = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] { shutdown } + [log-out] Hemû sepanan bigire û derkeve + *[other] Çalakiyê hilbijartî bisepîne + } niha? +confirm-body = + Pergal wê xweber were { $action -> + [restart] jinûvedestpêkkirin + [suspend] rawestandin + [shutdown] vemirandin + [lock-screen] kilîtkirin + [log-out] derketin + *[other] çalakiyê hilbijartî bisepîne + }di { $countdown } çirke de. diff --git a/cosmic-applet-tiling/i18n/kmr/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/kmr/cosmic_applet_tiling.ftl index e69de29b..e3f124ff 100644 --- a/cosmic-applet-tiling/i18n/kmr/cosmic_applet_tiling.ftl +++ b/cosmic-applet-tiling/i18n/kmr/cosmic_applet_tiling.ftl @@ -0,0 +1,20 @@ +tile-windows = Çarçoveyan xweber berhev bike +tile-current = Qada xebatê heyî berhev bike +shortcuts = Kurterê +navigate-windows = Di nav çarçoveyan de bigere +move-window = Çarçoveyê bilivîne +toggle-floating-window = Rewşê çarçoveyê herikbar biguhêrîne +view-all-shortcuts = Hemû kurteriyan nîşan bide... +active-hint = Pêşniyara çalak +gaps = Valahî +floating-window-exceptions = Awarteyên çarçoveyê herikbar... +window-management-settings = Sazkariyên rêveberiya çarçoveyê... +all-workspaces = Hemû qadên xebatê +per-workspace = Li gorî qada xebatê +super = Super +shift = Shift +arrow-keys = tîr +tiled = Berhevkirî +floating = Herikbar +autotile-behavior = Li ser qadên xebatê çarçoveyan berhev bike +new-workspace = Tevgera qada xebatê ya nû diff --git a/cosmic-applet-time/i18n/kmr/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/kmr/cosmic_applet_time.ftl index e69de29b..e6ff41f9 100644 --- a/cosmic-applet-time/i18n/kmr/cosmic_applet_time.ftl +++ b/cosmic-applet-time/i18n/kmr/cosmic_applet_time.ftl @@ -0,0 +1 @@ +datetime-settings = Sazkariyên dîrok, dem û salnameyê... diff --git a/cosmic-applet-workspaces/i18n/kmr/cosmic_applet_workspaces.ftl b/cosmic-applet-workspaces/i18n/kmr/cosmic_applet_workspaces.ftl index e69de29b..e262ce29 100644 --- a/cosmic-applet-workspaces/i18n/kmr/cosmic_applet_workspaces.ftl +++ b/cosmic-applet-workspaces/i18n/kmr/cosmic_applet_workspaces.ftl @@ -0,0 +1 @@ +cosmic-applet-workspaces = Qadên xebatê yên COSMIC diff --git a/i18n/ja/desktop_entries.ftl b/i18n/ja/desktop_entries.ftl index e69de29b..c5b41c0a 100644 --- a/i18n/ja/desktop_entries.ftl +++ b/i18n/ja/desktop_entries.ftl @@ -0,0 +1 @@ +cosmic-applet-a11y = アクセシビリティ diff --git a/i18n/kmr/desktop_entries.ftl b/i18n/kmr/desktop_entries.ftl index e69de29b..0a42fc18 100644 --- a/i18n/kmr/desktop_entries.ftl +++ b/i18n/kmr/desktop_entries.ftl @@ -0,0 +1,51 @@ +cosmic-applet-audio = Deng +cosmic-app-list = Destgeha sepanan +cosmic-applet-a11y = Gihîştin +cosmic-applet-bluetooth = Bluetooth +cosmic-applet-bluetooth-comment = Amûrên Bluetooth bi rê ve bibe +cosmic-applet-bluetooth-keywords = COSMIC;Sepanok;Bluetooth; +cosmic-applet-input-sources = Çavkaniyên ketanê +cosmic-applet-input-sources-comment = Di navbera çavkaniyên ketanê de biguhêrîne +cosmic-applet-input-sources-keywords = COSMIC;Sepanok;Ketan;Çavkanî; +cosmic-app-list-comment = Sepanên darxistî veke û çarçoveyên vekirî bi rê ve bibe +cosmic-app-list-keywords = COSMIC;Sepanok;Sepan;Destgeh;Lîste;Erk;Bend; +cosmic-applet-a11y-comment = Sazkariyên gihîştinê ji destgehê saz bike +cosmic-applet-a11y-keywords = COSMIC;Sepanok;Gihîştin;Dîmender;A11y;Xwîner;Dîmender;Mezinker;Bijberî;Reng; +cosmic-applet-audio-comment = Hilbijartina amûra dengê, kontrola dengê, û kontrolên mediyaya MPRIS +cosmic-applet-audio-keywords = COSMIC;Sepanok;Deng;Deng;MPRIS; +cosmic-applet-battery = Hêz & Betarî +cosmic-applet-battery-comment = Awayên hêzê û vebijêrkên parastina hêzê +cosmic-applet-battery-keywords = COSMIC;Sepanok;Hêz;Betarî; +cosmic-applet-minimize = Çarçoveyên biçûk +cosmic-applet-minimize-comment = Çarçoveyên biçûk bi rê ve bibe +cosmic-applet-minimize-keywords = COSMIC;Sepanok;Biçûkkirin; +cosmic-applet-network = Tor +cosmic-applet-network-comment = Girêdanên torê bi rê ve bibe +cosmic-applet-network-keywords = COSMIC;Sepanok;Tor; +cosmic-applet-notifications = Navenda Agahdariyan +cosmic-applet-notifications-comment = Agahdarî û rawestandina balkişiyê bi rê ve bibe +cosmic-applet-notifications-keywords = COSMIC;Sepanok;Agahdarî; +cosmic-applet-power = Danaşîna bikarhêner +cosmic-applet-power-comment = Dîmenderê kilît bike, derkeve, rawestîne, ji nû ve bide destpêkirin, û vemrîne +cosmic-applet-power-keywords = COSMIC;Sepanok;Bikarhêner;Danaşîn;Kilîtkirin;Derketin;Destpêkirin;Vemirandin;Rawestandin; +cosmic-applet-status-area = Desgeha agahdariyan +cosmic-applet-status-area-comment = Nîşanderên sepanan ên ku dibe ku menuyan bo destgehê derxînin +cosmic-applet-status-area-keywords = COSMIC;Sepanok;Sepan;Nîşander;Agahdarî;Destgeh;Rewş; +cosmic-applet-tiling = Berhevkirin +cosmic-applet-tiling-comment = Berhevkirina xweber a çalak, ya niha û ya her qada xebatê bi rê ve bibe +cosmic-applet-tiling-keywords = COSMIC;Sepanok;Berhevkirin;Nîşander;Navenda xebatê; +cosmic-applet-time = Dîrok, dem & Salname +cosmic-applet-time-comment = Demê niha li ser destgehê bi salnameyeke vebûyî nîşan bide +cosmic-applet-time-keywords = COSMIC;Sepanok;Dîrok;Dem;Salname; +cosmic-applet-workspaces = Qada xebatê jimarkirî +cosmic-applet-workspaces-comment = Di navbera qada xebatê jimarkirî de di destgehê de biguherîne +cosmic-applet-workspaces-keywords = COSMIC;Sepanok;Qada xebatê; +cosmic-panel-app-button = Bişkoka pirtûkxaneya sepanan +cosmic-panel-app-button-comment = Pirtûkxaneya sepanan ji bo vekirina sepanên sazkirî veke +cosmic-panel-app-button-keywords = COSMIC;Sepanok;Sepan;Pirtûkxane;Destgeh; +cosmic-panel-launcher-button = Bişkoka destpêker +cosmic-panel-launcher-button-comment = Destpêkerê ji bo lêgerîna sepanan û xebitandina fermanan veke +cosmic-panel-launcher-button-keywords = COSMIC;Sepanok;Destpêker;Rêveber; +cosmic-panel-workspaces-button = Bişkoka qadên xebatê +cosmic-panel-workspaces-button-comment = Pêşdîtina qadên xebatê veke ji bo bi rê ve bibî û biguhêrînî +cosmic-panel-workspaces-button-keywords = COSMIC;Sepan;Qada xebatê;Pêşdîtin; diff --git a/i18n/ko/desktop_entries.ftl b/i18n/ko/desktop_entries.ftl index 7a9abf42..17b758c9 100644 --- a/i18n/ko/desktop_entries.ftl +++ b/i18n/ko/desktop_entries.ftl @@ -46,3 +46,6 @@ cosmic-panel-launcher-button-keywords = COSMIC;애플릿;런처;실행기; cosmic-panel-workspaces-button = 작업 공간 버튼 cosmic-panel-workspaces-button-comment = 작업 공간 관리 및 전환을 위해 작업 공간 개요 열기 cosmic-panel-workspaces-button-keywords = COSMIC;애플릿;작업 공간;개요; +cosmic-applet-workspaces-comment = 패널에서 번호가 지정된 작업 공간 간 전환 +cosmic-applet-tiling-comment = 활성 창 강조, 현재 및 작업 공간별 자동 타일링 관리 +cosmic-applet-workspaces = 번호가 지정된 작업 공간 diff --git a/i18n/pt/desktop_entries.ftl b/i18n/pt/desktop_entries.ftl index de93fad1..1fe912c3 100644 --- a/i18n/pt/desktop_entries.ftl +++ b/i18n/pt/desktop_entries.ftl @@ -20,3 +20,8 @@ cosmic-applet-workspaces-comment = Alternar entre áreas de trabalho numeradas n cosmic-applet-workspaces-keywords = COSMIC;Miniaplicação;Applet;Área;Trabalho; cosmic-panel-workspaces-button-comment = Abrir a visão geral das áreas de trabalho para gerir e alternar entre elas cosmic-panel-workspaces-button-keywords = COSMIC;Miniaplicação;Applet;Área;Trabalho;Visão;Geral; +cosmic-applet-a11y-comment = Configurar definições de acessibilidade a partir do painel +cosmic-applet-battery = Energia e Bateria +cosmic-app-list-keywords = COSMIC;Miniaplicação;Applet;Aplicação;Bandeja;Lista;Tarefa;Barra; +cosmic-applet-a11y-keywords = COSMIC;Miniaplicação;Applet;Acessibilidade;A11y;Ecrã;Leitor;Lupa;Ampliador;Contraste;Cor; +cosmic-applet-audio-keywords = COSMIC;Miniaplicação;Applet;Som;Áudio;MPRIS; From 1473e1f008ab11c07cf1a63dbe10e98a9cc5d7fc Mon Sep 17 00:00:00 2001 From: LKramer Date: Thu, 25 Jun 2026 13:05:36 +0100 Subject: [PATCH 29/84] fix(network): register secret agent at NetworkManager's expected object path Co-authored-by: Claude Opus 4.8 (1M context) --- ....CosmicSettings.Applet.NetworkManager.SecretAgent.conf | 8 ++++++++ cosmic-applet-network/src/app.rs | 1 + justfile | 5 ++++- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 cosmic-applet-network/data/dbus-1/system.d/com.system76.CosmicSettings.Applet.NetworkManager.SecretAgent.conf diff --git a/cosmic-applet-network/data/dbus-1/system.d/com.system76.CosmicSettings.Applet.NetworkManager.SecretAgent.conf b/cosmic-applet-network/data/dbus-1/system.d/com.system76.CosmicSettings.Applet.NetworkManager.SecretAgent.conf new file mode 100644 index 00000000..8e98cedb --- /dev/null +++ b/cosmic-applet-network/data/dbus-1/system.d/com.system76.CosmicSettings.Applet.NetworkManager.SecretAgent.conf @@ -0,0 +1,8 @@ + + + + + + diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index a550859d..d5060834 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -405,6 +405,7 @@ fn secret_agent_task(identifier: String) -> Task { cosmic::Task::stream(async_fn_stream::fn_stream(move |emitter| async move { let registration = SecretAgent::builder() .with_identifier(identifier) + .with_object_path("/org/freedesktop/NetworkManager/SecretAgent") .with_capabilities(SecretAgentCapabilities::VPN_HINTS) .register() .await; diff --git a/justfile b/justfile index 91f0958f..99c53104 100644 --- a/justfile +++ b/justfile @@ -59,8 +59,11 @@ _install_status_notifier_watcher: sed "s|@bindir@|{{ prefixdir }}|" cosmic-applet-status-area/data/com.system76.CosmicStatusNotifierWatcher.service.in > cosmic-applet-status-area/data/com.system76.CosmicStatusNotifierWatcher.service install -Dm0644 cosmic-applet-status-area/data/com.system76.CosmicStatusNotifierWatcher.service {{ libdir }}/systemd/user/com.system76.CosmicStatusNotifierWatcher.service +_install_secret_agent_policy: + install -Dm0644 cosmic-applet-network/data/dbus-1/system.d/com.system76.CosmicSettings.Applet.NetworkManager.SecretAgent.conf {{ sharedir }}/dbus-1/system.d/com.system76.CosmicSettings.Applet.NetworkManager.SecretAgent.conf + # Installs files into the system -install: (_install_bin 'cosmic-applets') (_link_applet 'cosmic-panel-button') (_install_applet 'com.system76.CosmicAppList' 'cosmic-app-list') (_install_default_schema 'cosmic-app-list') (_install_applet 'com.system76.CosmicAppletA11y' 'cosmic-applet-a11y') (_install_applet 'com.system76.CosmicAppletAudio' 'cosmic-applet-audio') (_install_applet 'com.system76.CosmicAppletInputSources' 'cosmic-applet-input-sources') (_install_applet 'com.system76.CosmicAppletBattery' 'cosmic-applet-battery') (_install_applet 'com.system76.CosmicAppletBluetooth' 'cosmic-applet-bluetooth') (_install_applet 'com.system76.CosmicAppletMinimize' 'cosmic-applet-minimize') (_install_applet 'com.system76.CosmicAppletNetwork' 'cosmic-applet-network') (_install_applet 'com.system76.CosmicAppletNotifications' 'cosmic-applet-notifications') (_install_applet 'com.system76.CosmicAppletPower' 'cosmic-applet-power') (_install_applet 'com.system76.CosmicAppletStatusArea' 'cosmic-applet-status-area') (_install_applet 'com.system76.CosmicAppletTiling' 'cosmic-applet-tiling') (_install_applet 'com.system76.CosmicAppletTime' 'cosmic-applet-time') (_install_applet 'com.system76.CosmicAppletWorkspaces' 'cosmic-applet-workspaces') (_install_button 'com.system76.CosmicPanelAppButton' 'cosmic-panel-app-button') (_install_button 'com.system76.CosmicPanelLauncherButton' 'cosmic-panel-launcher-button') (_install_button 'com.system76.CosmicPanelWorkspacesButton' 'cosmic-panel-workspaces-button') _install_metainfo _install_status_notifier_watcher +install: (_install_bin 'cosmic-applets') (_link_applet 'cosmic-panel-button') (_install_applet 'com.system76.CosmicAppList' 'cosmic-app-list') (_install_default_schema 'cosmic-app-list') (_install_applet 'com.system76.CosmicAppletA11y' 'cosmic-applet-a11y') (_install_applet 'com.system76.CosmicAppletAudio' 'cosmic-applet-audio') (_install_applet 'com.system76.CosmicAppletInputSources' 'cosmic-applet-input-sources') (_install_applet 'com.system76.CosmicAppletBattery' 'cosmic-applet-battery') (_install_applet 'com.system76.CosmicAppletBluetooth' 'cosmic-applet-bluetooth') (_install_applet 'com.system76.CosmicAppletMinimize' 'cosmic-applet-minimize') (_install_applet 'com.system76.CosmicAppletNetwork' 'cosmic-applet-network') (_install_applet 'com.system76.CosmicAppletNotifications' 'cosmic-applet-notifications') (_install_applet 'com.system76.CosmicAppletPower' 'cosmic-applet-power') (_install_applet 'com.system76.CosmicAppletStatusArea' 'cosmic-applet-status-area') (_install_applet 'com.system76.CosmicAppletTiling' 'cosmic-applet-tiling') (_install_applet 'com.system76.CosmicAppletTime' 'cosmic-applet-time') (_install_applet 'com.system76.CosmicAppletWorkspaces' 'cosmic-applet-workspaces') (_install_button 'com.system76.CosmicPanelAppButton' 'cosmic-panel-app-button') (_install_button 'com.system76.CosmicPanelLauncherButton' 'cosmic-panel-launcher-button') (_install_button 'com.system76.CosmicPanelWorkspacesButton' 'cosmic-panel-workspaces-button') _install_metainfo _install_status_notifier_watcher _install_secret_agent_policy # Vendor Cargo dependencies locally vendor: From c2a00a36a80f1fdb75174a551daba9f1fc1e6eba Mon Sep 17 00:00:00 2001 From: Fred Date: Fri, 26 Jun 2026 18:30:06 +0200 Subject: [PATCH 30/84] feat(network): use libcosmic spinner for connecting states --- cosmic-applet-network/src/app.rs | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index d5060834..0b6dbe24 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -35,7 +35,7 @@ use cosmic::{ widget::{ Id, button, column, container, divider, icon::{self, from_name}, - row, scrollable, secure_input, text, text_input, toggler, + indeterminate_circular, row, scrollable, secure_input, text, text_input, toggler, }, }; use cosmic_dbus_networkmanager::interface::enums::{ @@ -1516,12 +1516,7 @@ impl cosmic::Application for CosmicNetworkApplet { ]; match state { ActiveConnectionState::Activating | ActiveConnectionState::Deactivating => { - btn_content.push( - icon::from_name("process-working-symbolic") - .size(24) - .symbolic(true) - .into(), - ); + btn_content.push(indeterminate_circular().size(24.0).into()); } ActiveConnectionState::Activated => btn_content.push( text::body(fl!("connected")) @@ -1729,12 +1724,7 @@ impl cosmic::Application for CosmicNetworkApplet { .into(), ); btn_content.push(ssid.into()); - btn_content.push( - icon::from_name("process-working-symbolic") - .size(24) - .symbolic(true) - .into(), - ); + btn_content.push(indeterminate_circular().size(24.0).into()); } else if matches!(known.state, DeviceState::Unavailable) { btn_content.push( icon::from_name("network-wireless-disconnected-symbolic") @@ -1906,10 +1896,7 @@ impl cosmic::Application for CosmicNetworkApplet { let connecting = padded_control( row::with_children([ Element::from(id), - icon::from_name("process-working-symbolic") - .size(24) - .symbolic(true) - .into(), + indeterminate_circular().size(24.0).into(), ]) .spacing(8), ); From 1f7c59fb2ba78e839e46ea1e0c52426beb6c625d Mon Sep 17 00:00:00 2001 From: Fred Date: Fri, 26 Jun 2026 23:56:47 +0200 Subject: [PATCH 31/84] feat(bluetooth): use spinner widget from libcosmic for connecting and pairing states --- cosmic-applet-bluetooth/src/app.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/cosmic-applet-bluetooth/src/app.rs b/cosmic-applet-bluetooth/src/app.rs index 2ca95ec5..e27af8ef 100644 --- a/cosmic-applet-bluetooth/src/app.rs +++ b/cosmic-applet-bluetooth/src/app.rs @@ -21,7 +21,7 @@ use cosmic::{ widget::{Column, column, container, row}, }, theme, - widget::{button, divider, icon, scrollable, text}, + widget::{button, divider, icon, indeterminate_circular, scrollable, text}, }; use futures::FutureExt; use std::{collections::HashMap, sync::LazyLock, time::Duration}; @@ -367,14 +367,12 @@ impl cosmic::Application for CosmicBluetoothApplet { ); } BluerDeviceStatus::Paired => {} - BluerDeviceStatus::Connecting | BluerDeviceStatus::Disconnecting => { - row = row.push( - icon::from_name("process-working-symbolic") - .size(24) - .symbolic(true), - ); + BluerDeviceStatus::Connecting + | BluerDeviceStatus::Disconnecting + | BluerDeviceStatus::Pairing => { + row = row.push(indeterminate_circular().size(24.0)); } - BluerDeviceStatus::Disconnected | BluerDeviceStatus::Pairing => continue, + BluerDeviceStatus::Disconnected => continue, } known_bluetooth.push( From 0441c67b1056cd1033b2d7fdbf139b47408edd1a Mon Sep 17 00:00:00 2001 From: William Fish Date: Mon, 29 Jun 2026 21:58:04 +0100 Subject: [PATCH 32/84] fix(battery): show plug icon without battery (#1432) --- cosmic-applet-battery/src/app.rs | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/cosmic-applet-battery/src/app.rs b/cosmic-applet-battery/src/app.rs index 9233a33f..c210d51a 100644 --- a/cosmic-applet-battery/src/app.rs +++ b/cosmic-applet-battery/src/app.rs @@ -40,7 +40,7 @@ use cosmic_settings_upower_subscription::{ }; use rustc_hash::FxHashMap; -use std::{path::PathBuf, sync::LazyLock, time::Duration}; +use std::{path::PathBuf, time::Duration}; use tokio::sync::mpsc::UnboundedSender; // XXX improve @@ -169,6 +169,20 @@ impl CosmicBatteryApplet { self.charging_limit = Some(limit); self.update_battery(self.battery_percent, self.on_battery); } + + fn panel_icon_name(&self) -> &str { + if self.no_battery { + if self.screen_brightness.is_some() { + self.display_icon_name.as_str() + } else if self.kbd_brightness.is_some() { + "keyboard-brightness-symbolic" + } else { + "plugged-into-power-symbolic" + } + } else { + self.icon_name.as_str() + } + } } #[derive(Debug, Clone)] @@ -521,19 +535,9 @@ impl cosmic::Application for CosmicBatteryApplet { let applet_padding = self.core.applet.suggested_padding(true); let mut children = vec![ - icon::from_name(if self.no_battery { - if self.screen_brightness.is_some() { - self.display_icon_name.as_str() - } else if self.kbd_brightness.is_some() { - "keyboard-brightness-symbolic" - } else { - self.icon_name.as_str() - } - } else { - self.icon_name.as_str() - }) - .size(suggested_size.0) - .into(), + icon::from_name(self.panel_icon_name()) + .size(suggested_size.0) + .into(), ]; if self.config.show_percentage && !self.no_battery { From 405fddda2d74ef509997c09f40493c0422f99b10 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Wed, 29 Apr 2026 11:54:20 -0400 Subject: [PATCH 33/84] wip: blur --- Cargo.lock | 143 ++++++-- Cargo.toml | 20 +- cosmic-app-list/src/app.rs | 345 ++++++++++-------- cosmic-applet-a11y/src/app.rs | 28 +- cosmic-applet-audio/src/lib.rs | 64 ++-- cosmic-applet-battery/Cargo.toml | 4 +- cosmic-applet-battery/src/app.rs | 29 +- cosmic-applet-bluetooth/src/app.rs | 28 +- cosmic-applet-input-sources/src/lib.rs | 26 +- cosmic-applet-minimize/src/lib.rs | 67 ++-- cosmic-applet-network/src/app.rs | 33 +- cosmic-applet-notifications/src/lib.rs | 24 +- cosmic-applet-power/src/lib.rs | 28 +- .../src/components/app.rs | 250 +++++++------ cosmic-applet-tiling/src/window.rs | 24 +- cosmic-applet-time/src/window.rs | 56 +-- .../src/components/app.rs | 30 +- cosmic-panel-button/src/lib.rs | 2 +- 18 files changed, 706 insertions(+), 495 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bdd37740..8026e49d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1308,7 +1308,7 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#c253ec1d6804afbcdf250f5cc37ae1194bba7bd2" +source = "git+https://github.com/pop-os/cosmic-protocols//?rev=a7d2d7a#a7d2d7a6188425f699eaddf7a025617ce56068ae" dependencies = [ "bitflags 2.11.1", "cosmic-protocols", @@ -1331,7 +1331,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1352,7 +1352,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "quote", "syn", @@ -1446,7 +1446,7 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#c253ec1d6804afbcdf250f5cc37ae1194bba7bd2" +source = "git+https://github.com/pop-os/cosmic-protocols//?rev=a7d2d7a#a7d2d7a6188425f699eaddf7a025617ce56068ae" dependencies = [ "bitflags 2.11.1", "wayland-backend", @@ -1567,7 +1567,6 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "futures", "iced_futures", @@ -1605,13 +1604,14 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "almost", "configparser", "cosmic-config", "csscolorparser", "dirs", + "hex_color", "palette", "ron 0.12.1", "serde", @@ -2706,7 +2706,7 @@ dependencies = [ "log", "presser", "thiserror 2.0.18", - "windows 0.62.2", + "windows 0.58.0", ] [[package]] @@ -2832,6 +2832,17 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex_color" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d37f101bf4c633f7ca2e4b5e136050314503dd198e78e325ea602c327c484ef0" +dependencies = [ + "arrayvec", + "rand 0.8.6", + "serde", +] + [[package]] name = "hexf-parse" version = "0.2.1" @@ -2950,7 +2961,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "dnd", "iced_accessibility", @@ -2971,7 +2982,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "accesskit", "accesskit_winit", @@ -2980,7 +2991,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "bitflags 2.11.1", "bytes", @@ -3005,7 +3016,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "iced_core", "iced_futures", @@ -3015,7 +3026,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "futures", "iced_core", @@ -3029,7 +3040,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "bitflags 2.11.1", "bytemuck", @@ -3050,7 +3061,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "iced_graphics", "iced_runtime", @@ -3059,7 +3070,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3071,7 +3082,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3086,7 +3097,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "bytemuck", "cosmic-text", @@ -3103,7 +3114,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.1", @@ -3134,7 +3145,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3152,7 +3163,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -4010,7 +4021,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "apply", "ashpd 0.12.3", @@ -4024,6 +4035,7 @@ dependencies = [ "cosmic-theme", "css-color", "derive_setters", + "enumflags2", "float-cmp 0.10.0", "freedesktop-desktop-entry", "futures", @@ -5375,6 +5387,8 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ + "libc", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] @@ -5384,10 +5398,20 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.9.0" @@ -5403,6 +5427,9 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] [[package]] name = "rand_core" @@ -7368,6 +7395,16 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.61.3" @@ -7411,14 +7448,27 @@ dependencies = [ "windows-core 0.62.2", ] +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -7430,8 +7480,8 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link 0.2.1", "windows-result 0.4.1", "windows-strings 0.5.1", @@ -7459,6 +7509,17 @@ dependencies = [ "windows-threading 0.2.1", ] +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-implement" version = "0.60.2" @@ -7470,6 +7531,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-interface" version = "0.59.3" @@ -7513,6 +7585,15 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -7531,6 +7612,16 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-strings" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index f97b6b28..8c94e4b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,11 +25,11 @@ resolver = "3" [workspace.dependencies] anyhow = "1.0.102" -cctk = { git = "https://github.com/pop-os/cosmic-protocols", package = "cosmic-client-toolkit", rev = "d0e95be" } +cctk = { git = "https://github.com/pop-os/cosmic-protocols", package = "cosmic-client-toolkit", rev = "a7d2d7a" } cosmic-applets-config = { path = "cosmic-applets-config" } cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", default-features = false, features = [ "client", -], rev = "d0e95be" } +], rev = "a7d2d7a" } futures = "0.3" futures-util = "0.3" @@ -70,24 +70,20 @@ lto = "thin" [workspace.metadata.cargo-machete] ignored = ["libcosmic"] -# [patch."https://github.com/pop-os/libcosmic"] +[patch."https://github.com/pop-os/libcosmic"] # cosmic-config = { path = "../libcosmic/cosmic-config" } # libcosmic = { path = "../libcosmic" } # iced_futures = { path = "../libcosmic/iced/futures" } -# cosmic-config = { git = "https://github.com/pop-os/libcosmic//" } -# libcosmic = { git = "https://github.com/pop-os/libcosmic//" } -# iced_futures = { git = "https://github.com/pop-os/libcosmic//" } - -# [patch."https://github.com/pop-os/winit.git"] -# winit = { git = "https://github.com/rust-windowing/winit.git", rev = "241b7a80bba96c91fa3901729cd5dec66abb9be4" } -# winit = { path = "../winit" } +cosmic-config = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } +libcosmic = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } +iced_futures = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } [patch."https://github.com/smithay/client-toolkit.git"] sctk = { package = "smithay-client-toolkit", version = "0.20.0" } [patch."https://github.com/pop-os/cosmic-protocols"] -cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", branch = "main" } -cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", branch = "main" } +cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "a7d2d7a" } +cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "a7d2d7a" } # [patch.'https://github.com/pop-os/dbus-settings-bindings'] # cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" } diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 932ffd6c..50dd375b 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -906,44 +906,52 @@ impl cosmic::Application for CosmicAppList { .iter() .chain(self.pinned_list.iter()) .find(|t| t.id == id) + .cloned() { - let Some(rectangle) = self.rectangles.get(&toplevel_group.id.into()) else { + let Some(rectangle) = self.rectangles.get(&toplevel_group.id.into()).copied() + else { tracing::error!("No rectangle found for toplevel group"); return Task::none(); }; + let popup_task = + cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let new_id = window::Id::unique(); + app.popup = Some(Popup { + parent: parent_window_id, + id: new_id, + dock_item: toplevel_group.clone(), + popup_type: PopupType::RightClickMenu, + }); - let new_id = window::Id::unique(); - self.popup = Some(Popup { - parent: parent_window_id, - id: new_id, - dock_item: toplevel_group.clone(), - popup_type: PopupType::RightClickMenu, - }); - - let mut popup_settings = self.core.applet.get_popup_settings( - parent_window_id, - new_id, - None, - None, - None, - ); - let iced::Rectangle { - x, - y, - width, - height, - } = *rectangle; - popup_settings.positioner.anchor_rect = iced::Rectangle:: { - x: x as i32, - y: y as i32, - width: width as i32, - height: height as i32, - }; + let mut popup_settings = app.core.applet.get_popup_settings( + parent_window_id, + new_id, + None, + None, + None, + ); + let iced::Rectangle { + x, + y, + width, + height, + } = rectangle; + popup_settings.positioner.anchor_rect = iced::Rectangle:: { + x: x as i32, + y: y as i32, + width: width as i32, + height: height as i32, + }; + popup_settings + }, + None, + )); let gpu_update = Task::perform(try_get_gpus(), |gpus| { cosmic::Action::App(Message::GpuRequest(gpus)) }); - return Task::batch([gpu_update, get_popup(popup_settings)]); + return Task::batch([gpu_update, popup_task]); } } Message::ToplevelListPopup(id, parent_window_id) => { @@ -974,10 +982,10 @@ impl cosmic::Application for CosmicAppList { } } - let Some(rectangle) = self.rectangles.get(&toplevel_group.id.into()) else { + let Some(rectangle) = self.rectangles.get(&toplevel_group.id.into()).copied() + else { return Task::none(); }; - let new_id = window::Id::unique(); self.popup = Some(Popup { parent: parent_window_id, @@ -985,48 +993,55 @@ impl cosmic::Application for CosmicAppList { dock_item: toplevel_group.clone(), popup_type: PopupType::ToplevelList, }); + let popup_task = + cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let mut popup_settings = app.core.applet.get_popup_settings( + parent_window_id, + new_id, + None, + None, + None, + ); + let iced::Rectangle { + x, + y, + width, + height, + } = rectangle; + popup_settings.positioner.anchor_rect = iced::Rectangle:: { + x: x as i32, + y: y as i32, + width: width as i32, + height: height as i32, + }; + let max_windows = 7.0; + let window_spacing = 8.0; + popup_settings.positioner.size_limits = match app.core.applet.anchor + { + PanelAnchor::Right | PanelAnchor::Left => Limits::NONE + .min_width(100.0) + .min_height(30.0) + .max_width(window_spacing * 2.0 + TOPLEVEL_BUTTON_WIDTH) + .max_height( + TOPLEVEL_BUTTON_HEIGHT * max_windows + + window_spacing * (max_windows + 1.0), + ), + PanelAnchor::Bottom | PanelAnchor::Top => Limits::NONE + .min_width(30.0) + .min_height(100.0) + .max_width( + TOPLEVEL_BUTTON_WIDTH * max_windows + + window_spacing * (max_windows + 1.0), + ) + .max_height(window_spacing * 2.0 + TOPLEVEL_BUTTON_HEIGHT), + }; + popup_settings + }, + None, + )); - let mut popup_settings = self.core.applet.get_popup_settings( - parent_window_id, - new_id, - None, - None, - None, - ); - let iced::Rectangle { - x, - y, - width, - height, - } = *rectangle; - popup_settings.positioner.anchor_rect = iced::Rectangle:: { - x: x as i32, - y: y as i32, - width: width as i32, - height: height as i32, - }; - let max_windows = 7.0; - let window_spacing = 8.0; - popup_settings.positioner.size_limits = match self.core.applet.anchor { - PanelAnchor::Right | PanelAnchor::Left => Limits::NONE - .min_width(100.0) - .min_height(30.0) - .max_width(window_spacing * 2.0 + TOPLEVEL_BUTTON_WIDTH) - .max_height( - TOPLEVEL_BUTTON_HEIGHT * max_windows - + window_spacing * (max_windows + 1.0), - ), - PanelAnchor::Bottom | PanelAnchor::Top => Limits::NONE - .min_width(30.0) - .min_height(100.0) - .max_width( - TOPLEVEL_BUTTON_WIDTH * max_windows - + window_spacing * (max_windows + 1.0), - ) - .max_height(window_spacing * 2.0 + TOPLEVEL_BUTTON_HEIGHT), - }; - - return get_popup(popup_settings); + return popup_task; } } Message::ToplevelHoverChanged(handle, entering) => { @@ -1590,52 +1605,62 @@ impl cosmic::Application for CosmicAppList { if create_new { let new_id = window::Id::unique(); self.overflow_active_popup = Some(new_id); - let rectangle = self.rectangles.get(&DockItemId::ActiveOverflow); - let mut popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - None, - None, - None, - ); - if let Some(iced::Rectangle { + let Some(iced::Rectangle { x, y, width, height, - }) = rectangle - { - popup_settings.positioner.anchor_rect = iced::Rectangle:: { - x: *x as i32, - y: *y as i32, - width: *width as i32, - height: *height as i32, - }; - } - let applet_suggested_size = self.core.applet.suggested_size(false).0 - + 2 * self.core.applet.suggested_padding(false).0; - let (_favorite_popup_cutoff, active_popup_cutoff) = - self.panel_overflow_lengths(); - let popup_applet_count = - self.active_list.len().saturating_sub( - (active_popup_cutoff.unwrap_or_default()).saturating_sub(1), - ) as f32; - let popup_applet_size = applet_suggested_size as f32 * popup_applet_count - + 4.0 * (popup_applet_count - 1.); - let (max_width, max_height) = match self.core.applet.anchor { - PanelAnchor::Top | PanelAnchor::Bottom => { - (popup_applet_size, applet_suggested_size as f32) - } - PanelAnchor::Left | PanelAnchor::Right => { - (applet_suggested_size as f32, popup_applet_size) - } + }) = self.rectangles.get(&DockItemId::ActiveOverflow).copied() + else { + return Task::none(); }; - popup_settings.positioner.size_limits = Limits::NONE - .max_width(max_width) - .min_width(1.) - .max_height(max_height) - .min_height(1.); - cmds.push(get_popup(popup_settings)); + + let popup_task = + cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let mut popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + + popup_settings.positioner.anchor_rect = iced::Rectangle:: { + x: x as i32, + y: y as i32, + width: width as i32, + height: height as i32, + }; + + let applet_suggested_size = app.core.applet.suggested_size(false).0 + + 2 * app.core.applet.suggested_padding(false).0; + let (_favorite_popup_cutoff, active_popup_cutoff) = + app.panel_overflow_lengths(); + let popup_applet_count = app.active_list.len().saturating_sub( + (active_popup_cutoff.unwrap_or_default()).saturating_sub(1), + ) as f32; + let popup_applet_size = applet_suggested_size as f32 + * popup_applet_count + + 4.0 * (popup_applet_count - 1.); + let (max_width, max_height) = match app.core.applet.anchor { + PanelAnchor::Top | PanelAnchor::Bottom => { + (popup_applet_size, applet_suggested_size as f32) + } + PanelAnchor::Left | PanelAnchor::Right => { + (applet_suggested_size as f32, popup_applet_size) + } + }; + popup_settings.positioner.size_limits = Limits::NONE + .max_width(max_width) + .min_width(1.) + .max_height(max_height) + .min_height(1.); + popup_settings + }, + None, + )); + cmds.push(popup_task); } return Task::batch(cmds); } @@ -1647,52 +1672,62 @@ impl cosmic::Application for CosmicAppList { if create_new { let new_id = window::Id::unique(); self.overflow_favorites_popup = Some(new_id); - let rectangle = self.rectangles.get(&DockItemId::FavoritesOverflow); - let mut popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - None, - None, - None, - ); - if let Some(iced::Rectangle { + let Some(iced::Rectangle { x, y, width, height, - }) = rectangle - { - popup_settings.positioner.anchor_rect = iced::Rectangle:: { - x: *x as i32, - y: *y as i32, - width: *width as i32, - height: *height as i32, - }; - } - let applet_suggested_size = self.core.applet.suggested_size(false).0 - + 2 * self.core.applet.suggested_padding(false).0; - let (favorite_popup_cutoff, _active_popup_cutoff) = - self.panel_overflow_lengths(); - let popup_applet_count = - self.pinned_list.len().saturating_sub( - favorite_popup_cutoff.unwrap_or_default().saturating_sub(1), - ) as f32; - let popup_applet_size = applet_suggested_size as f32 * popup_applet_count - + 4.0 * (popup_applet_count - 1.); - let (max_width, max_height) = match self.core.applet.anchor { - PanelAnchor::Top | PanelAnchor::Bottom => { - (popup_applet_size, applet_suggested_size as f32) - } - PanelAnchor::Left | PanelAnchor::Right => { - (applet_suggested_size as f32, popup_applet_size) - } + }) = self.rectangles.get(&DockItemId::FavoritesOverflow).copied() + else { + return Task::none(); }; - popup_settings.positioner.size_limits = Limits::NONE - .max_width(max_width) - .min_width(1.) - .max_height(max_height) - .min_height(1.); - cmds.push(get_popup(popup_settings)); + + let popup_task = + cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let mut popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + + popup_settings.positioner.anchor_rect = iced::Rectangle:: { + x: x as i32, + y: y as i32, + width: width as i32, + height: height as i32, + }; + + let applet_suggested_size = app.core.applet.suggested_size(false).0 + + 2 * app.core.applet.suggested_padding(false).0; + let (favorite_popup_cutoff, _active_popup_cutoff) = + app.panel_overflow_lengths(); + let popup_applet_count = app.pinned_list.len().saturating_sub( + favorite_popup_cutoff.unwrap_or_default().saturating_sub(1), + ) as f32; + let popup_applet_size = applet_suggested_size as f32 + * popup_applet_count + + 4.0 * (popup_applet_count - 1.); + let (max_width, max_height) = match app.core.applet.anchor { + PanelAnchor::Top | PanelAnchor::Bottom => { + (popup_applet_size, applet_suggested_size as f32) + } + PanelAnchor::Left | PanelAnchor::Right => { + (applet_suggested_size as f32, popup_applet_size) + } + }; + popup_settings.positioner.size_limits = Limits::NONE + .max_width(max_width) + .min_width(1.) + .max_height(max_height) + .min_height(1.); + popup_settings + }, + None, + )); + cmds.push(popup_task); } return Task::batch(cmds); } @@ -2200,7 +2235,7 @@ impl cosmic::Application for CosmicAppList { //TODO: move style to libcosmic .class(theme::Container::custom(|theme| { let cosmic = theme.cosmic(); - let component = &cosmic.background.component; + let component = &cosmic.background(theme.transparent).component; container::Style { icon_color: Some(component.on.into()), text_color: Some(component.on.into()), diff --git a/cosmic-applet-a11y/src/app.rs b/cosmic-applet-a11y/src/app.rs index ad5f2a1e..a20551b0 100644 --- a/cosmic-applet-a11y/src/app.rs +++ b/cosmic-applet-a11y/src/app.rs @@ -133,20 +133,26 @@ impl cosmic::Application for CosmicA11yApplet { } Message::TogglePopup => { if let Some(p) = self.popup.take() { - return destroy_popup(p); + return cosmic::surface::surface_task(cosmic::surface::action::destroy_popup( + p, + )); } else { - let new_id = window::Id::unique(); - self.popup.replace(new_id); + return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |app: &mut CosmicA11yApplet| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - Some((1, 1)), + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + Some((1, 1)), + None, + None, + ); + popup_settings + }, None, - None, - ); - - return get_popup(popup_settings); + )); } } Message::CloseRequested(id) => { diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index 9bd585d9..e0c12631 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -290,39 +290,47 @@ impl cosmic::Application for Audio { Message::Ignore => {} Message::TogglePopup => { if let Some(p) = self.popup.take() { - return destroy_popup(p); + return cosmic::surface::surface_task(cosmic::surface::action::destroy_popup( + p, + )); } else { - let new_id = window::Id::unique(); - self.popup.replace(new_id); + return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |app: &mut Self| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); - (self.max_sink_volume, self.sink_breakpoints) = if amplification_sink() { - (150, &[100][..]) - } else { - (100, &[][..]) - }; + (app.max_sink_volume, app.sink_breakpoints) = if amplification_sink() { + (150, &[100][..]) + } else { + (100, &[][..]) + }; - (self.max_source_volume, self.source_breakpoints) = if amplification_source() { - (150, &[100][..]) - } else { - (100, &[][..]) - }; + (app.max_source_volume, app.source_breakpoints) = + if amplification_source() { + (150, &[100][..]) + } else { + (100, &[][..]) + }; - let mut popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + if let Some(r) = app.rectangle { + popup_settings.positioner.anchor_rect = Rectangle { + x: r.x as i32, + y: r.y as i32, + width: r.width as i32, + height: r.height as i32, + }; + } + popup_settings + }, None, - None, - None, - ); - if let Some(r) = self.rectangle { - popup_settings.positioner.anchor_rect = Rectangle { - x: r.x as i32, - y: r.y as i32, - width: r.width as i32, - height: r.height as i32, - }; - } - return get_popup(popup_settings); + )); } } diff --git a/cosmic-applet-battery/Cargo.toml b/cosmic-applet-battery/Cargo.toml index 8c8f6e1d..14549ea4 100644 --- a/cosmic-applet-battery/Cargo.toml +++ b/cosmic-applet-battery/Cargo.toml @@ -24,8 +24,8 @@ zbus.workspace = true serde.workspace = true [dependencies.cosmic-settings-upower-subscription] -git = "https://github.com/pop-os/cosmic-settings" -# path = "../../cosmic-settings/subscriptions/upower" +# git = "https://github.com/pop-os/cosmic-settings" +path = "../../cosmic-settings/subscriptions/upower" [dependencies.cosmic-settings-daemon-subscription] git = "https://github.com/pop-os/cosmic-settings" diff --git a/cosmic-applet-battery/src/app.rs b/cosmic-applet-battery/src/app.rs index c210d51a..24b85b0d 100644 --- a/cosmic-applet-battery/src/app.rs +++ b/cosmic-applet-battery/src/app.rs @@ -365,23 +365,30 @@ impl cosmic::Application for CosmicBatteryApplet { let _ = tx.send(KeyboardBacklightRequest::Get); } - let new_id = window::Id::unique(); - self.popup.replace(new_id); - - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - Some((1, 1)), - None, - None, - ); if let Some(tx) = self.power_profile_sender.as_ref() { let _ = tx.send(PowerProfileRequest::Get); } if let Some(tx) = self.update_trigger.as_ref() { let _ = tx.send(()); } - let mut tasks = vec![get_popup(popup_settings)]; + let mut tasks = vec![cosmic::surface::surface_task( + cosmic::surface::action::app_popup( + |app: &mut Self| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); + + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + Some((1, 1)), + None, + None, + ); + popup_settings + }, + None, + ), + )]; if let Some(tx) = &self.settings_daemon_sender { let _ = tx.send(settings_daemon::Request::GetDisplayBrightness); let _ = tx.send(settings_daemon::Request::GetMaxDisplayBrightness); diff --git a/cosmic-applet-bluetooth/src/app.rs b/cosmic-applet-bluetooth/src/app.rs index e27af8ef..08d2ca47 100644 --- a/cosmic-applet-bluetooth/src/app.rs +++ b/cosmic-applet-bluetooth/src/app.rs @@ -120,20 +120,24 @@ impl cosmic::Application for CosmicBluetoothApplet { } else { set_discovery(true); - // TODO request update of state maybe - let new_id = window::Id::unique(); - self.popup.replace(new_id); - - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - None, - None, - None, - ); + let get_popup_task = + cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); + app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ) + }, + None, + )); return Task::batch([ - get_popup(popup_settings), + get_popup_task, cosmic::task::future(set_tick(Duration::from_secs(3))) .map(|()| cosmic::Action::App(Message::Ignore)), ]); diff --git a/cosmic-applet-input-sources/src/lib.rs b/cosmic-applet-input-sources/src/lib.rs index 93e84283..0f448a94 100644 --- a/cosmic-applet-input-sources/src/lib.rs +++ b/cosmic-applet-input-sources/src/lib.rs @@ -142,19 +142,23 @@ impl cosmic::Application for Window { match message { Message::TogglePopup => { return if let Some(p) = self.popup.take() { - destroy_popup(p) + return crate::surface::surface_task(crate::surface::action::destroy_popup(p)); } else { - let new_id = Id::unique(); - self.popup.replace(new_id); - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, + return crate::surface::surface_task(crate::surface::action::app_popup( + |app: &mut Window| { + let new_id = Id::unique(); + app.popup.replace(new_id); + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + popup_settings + }, None, - None, - None, - ); - - get_popup(popup_settings) + )); }; } Message::PopupClosed(id) => { diff --git a/cosmic-applet-minimize/src/lib.rs b/cosmic-applet-minimize/src/lib.rs index e40a7551..b4390cbb 100644 --- a/cosmic-applet-minimize/src/lib.rs +++ b/cosmic-applet-minimize/src/lib.rs @@ -248,40 +248,47 @@ impl cosmic::Application for Minimize { } Message::OpenOverflowPopup => { if let Some(id) = self.overflow_popup.take() { - return destroy_popup(id); + return cosmic::surface::surface_task(cosmic::surface::action::destroy_popup( + id, + )); } else { - let new_id = window::Id::unique(); - let pos = self.max_icon_count().unwrap_or_default(); + return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |app: &mut Self| { + let new_id = window::Id::unique(); + let pos = app.max_icon_count().unwrap_or_default(); - self.overflow_popup = Some(new_id); - let icon_size = self.core.applet.suggested_size(true).0 as u32 - + 2 * self.core.applet.suggested_padding(true).1 as u32; - let spacing = self.core.system_theme().cosmic().space_xxs() as u32; - let major_axis_len = (icon_size + spacing) * (pos.saturating_sub(1) as u32); - let rectangle = match self.core.applet.anchor { - PanelAnchor::Top | PanelAnchor::Bottom => iced::Rectangle { - x: major_axis_len as i32, - y: 0, - width: icon_size as i32, - height: icon_size as i32, + app.overflow_popup = Some(new_id); + let icon_size = app.core.applet.suggested_size(true).0 as u32 + + 2 * app.core.applet.suggested_padding(true).1 as u32; + let spacing = app.core.system_theme().cosmic().space_xxs() as u32; + let major_axis_len = + (icon_size + spacing) * (pos.saturating_sub(1) as u32); + let rectangle = match app.core.applet.anchor { + PanelAnchor::Top | PanelAnchor::Bottom => iced::Rectangle { + x: major_axis_len as i32, + y: 0, + width: icon_size as i32, + height: icon_size as i32, + }, + PanelAnchor::Left | PanelAnchor::Right => iced::Rectangle { + x: 0, + y: major_axis_len as i32, + width: icon_size as i32, + height: icon_size as i32, + }, + }; + let mut popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + popup_settings.positioner.anchor_rect = rectangle; + popup_settings }, - PanelAnchor::Left | PanelAnchor::Right => iced::Rectangle { - x: 0, - y: major_axis_len as i32, - width: icon_size as i32, - height: icon_size as i32, - }, - }; - let mut popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, None, - None, - None, - ); - popup_settings.positioner.anchor_rect = rectangle; - - return get_popup(popup_settings); + )); } } Message::CloseOverflowPopup => todo!(), diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 0b6dbe24..805cec41 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -741,22 +741,29 @@ impl cosmic::Application for CosmicNetworkApplet { ); tasks.push(secret_agent_task(my_id).map(Message::SecretAgent)); } - // TODO request update of state maybe - let new_id = window::Id::unique(); - self.popup.replace(new_id); - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - None, - None, - None, - ); + tasks.push(system_conn().map(cosmic::Action::App)); - tasks.push(system_conn()); - tasks.push(get_popup(popup_settings)); + tasks.push(cosmic::surface::surface_task( + cosmic::surface::action::app_popup( + |app: &mut Self| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); - return Task::batch(tasks).map(cosmic::Action::App); + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + popup_settings + }, + None, + ), + )); + + return Task::batch(tasks); } } Message::ToggleAirplaneMode(enabled) => { diff --git a/cosmic-applet-notifications/src/lib.rs b/cosmic-applet-notifications/src/lib.rs index 438696b9..896b72c9 100644 --- a/cosmic-applet-notifications/src/lib.rs +++ b/cosmic-applet-notifications/src/lib.rs @@ -157,18 +157,22 @@ impl cosmic::Application for Notifications { if let Some(p) = self.popup.take() { return destroy_popup(p); } else { - let new_id = window::Id::unique(); - self.popup.replace(new_id); + return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |app: &mut Self| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + popup_settings + }, None, - None, - None, - ); - - return get_popup(popup_settings); + )); } } Message::DoNotDisturb(b) => { diff --git a/cosmic-applet-power/src/lib.rs b/cosmic-applet-power/src/lib.rs index 67725fbc..3ef10d71 100644 --- a/cosmic-applet-power/src/lib.rs +++ b/cosmic-applet-power/src/lib.rs @@ -120,20 +120,26 @@ impl cosmic::Application for Power { match message { Message::TogglePopup => { if let Some(p) = self.popup.take() { - return destroy_popup(p); + return cosmic::surface::surface_task(cosmic::surface::action::destroy_popup( + p, + )); } else { - let new_id = window::Id::unique(); - self.popup.replace(new_id); + return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |app: &mut Power| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + popup_settings + }, None, - None, - None, - ); - - return get_popup(popup_settings); + )); } } Message::OpenSettings => { diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 1071d7ac..3c5272c5 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -237,38 +237,48 @@ impl cosmic::Application for App { if let Some(popup_id) = self.popup.take() { cmds.push(destroy_popup(popup_id)); } - let popup_id = self.next_popup_id(); - let i = self.menus.keys().position(|&i| i == id).unwrap(); - let (i, parent) = self - .overflow_index() - .and_then(|overflow_i| { - if overflow_i <= i { - Some(i - overflow_i).zip(self.overflow_popup) - } else { - Some((i, self.core.main_window_id().unwrap())) - } - }) - .unwrap_or((i, self.core.main_window_id().unwrap())); - let mut popup_settings = self - .core - .applet - .get_popup_settings(parent, popup_id, None, None, None); - self.popup = Some(popup_id); + let popup_task = + cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let popup_id = app.next_popup_id(); + let i = app.menus.keys().position(|&i| i == id).unwrap(); + let (i, parent) = app + .overflow_index() + .and_then(|overflow_i| { + if overflow_i <= i { + Some(i - overflow_i).zip(app.overflow_popup) + } else { + Some((i, app.core.main_window_id().unwrap())) + } + }) + .unwrap_or((i, app.core.main_window_id().unwrap())); - if matches!( - self.core.applet.anchor, - PanelAnchor::Left | PanelAnchor::Right - ) { - let suggested_size = self.core.applet.suggested_size(false).1 - + 2 * self.core.applet.suggested_padding(false).1; - popup_settings.positioner.anchor_rect.y = i as i32 * suggested_size as i32; - } else { - let suggested_size = self.core.applet.suggested_size(false).0 - + 2 * self.core.applet.suggested_padding(false).1; - popup_settings.positioner.anchor_rect.x = i as i32 * suggested_size as i32; - } - cmds.push(get_popup(popup_settings)); + let mut popup_settings = app + .core + .applet + .get_popup_settings(parent, popup_id, None, None, None); + app.popup = Some(popup_id); + + if matches!( + app.core.applet.anchor, + PanelAnchor::Left | PanelAnchor::Right + ) { + let suggested_size = app.core.applet.suggested_size(false).1 + + 2 * app.core.applet.suggested_padding(false).1; + popup_settings.positioner.anchor_rect.y = + i as i32 * suggested_size as i32; + } else { + let suggested_size = app.core.applet.suggested_size(false).0 + + 2 * app.core.applet.suggested_padding(false).1; + popup_settings.positioner.anchor_rect.x = + i as i32 * suggested_size as i32; + } + popup_settings + }, + None, + )); + cmds.push(popup_task); return app::Task::batch(cmds); } else if let Some(popup_id) = self.popup { self.menus[&id].closed(); @@ -326,39 +336,48 @@ impl cosmic::Application for App { } else { return Task::none(); } - let popup_id = self.next_popup_id(); - let i = self.menus.keys().position(|&i| i == id).unwrap(); + let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let popup_id = app.next_popup_id(); + let i = app.menus.keys().position(|&i| i == id).unwrap(); - let (i, parent) = self - .overflow_index() - .and_then(|overflow_i| { - if overflow_i <= i { - Some(i - overflow_i).zip(self.overflow_popup) + let (i, parent) = app + .overflow_index() + .and_then(|overflow_i| { + if overflow_i <= i { + Some(i - overflow_i).zip(app.overflow_popup) + } else { + Some((i, app.core.main_window_id().unwrap())) + } + }) + .unwrap_or((i, app.core.main_window_id().unwrap())); + + let mut popup_settings = app + .core + .applet + .get_popup_settings(parent, popup_id, None, None, None); + app.popup = Some(popup_id); + + if matches!( + app.core.applet.anchor, + PanelAnchor::Left | PanelAnchor::Right + ) { + let suggested_size = app.core.applet.suggested_size(true).1 + + 2 * app.core.applet.suggested_padding(true).1; + popup_settings.positioner.anchor_rect.y = + i as i32 * suggested_size as i32; } else { - Some((i, self.core.main_window_id().unwrap())) + let suggested_size = app.core.applet.suggested_size(true).0 + + 2 * app.core.applet.suggested_padding(true).0; + popup_settings.positioner.anchor_rect.x = + i as i32 * suggested_size as i32; } - }) - .unwrap_or((i, self.core.main_window_id().unwrap())); + popup_settings + }, + None, + )); + cmds.push(popup_task); - let mut popup_settings = self - .core - .applet - .get_popup_settings(parent, popup_id, None, None, None); - self.popup = Some(popup_id); - - if matches!( - self.core.applet.anchor, - PanelAnchor::Left | PanelAnchor::Right - ) { - let suggested_size = self.core.applet.suggested_size(true).1 - + 2 * self.core.applet.suggested_padding(true).1; - popup_settings.positioner.anchor_rect.y = i as i32 * suggested_size as i32; - } else { - let suggested_size = self.core.applet.suggested_size(true).0 - + 2 * self.core.applet.suggested_padding(true).0; - popup_settings.positioner.anchor_rect.x = i as i32 * suggested_size as i32; - } - cmds.push(get_popup(popup_settings)); Task::batch(cmds) } Msg::Surface(a) => { @@ -373,33 +392,40 @@ impl cosmic::Application for App { return destroy_popup(popup_id); } else if let Some(overflow_index) = self.overflow_index() { // If we don't have an overflow, create it - let popup_id = self.next_popup_id(); - let mut popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - popup_id, - None, - None, - None, - ); - popup_settings.close_with_children = false; + let popup_task = + cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let popup_id = app.next_popup_id(); + let mut popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + popup_id, + None, + None, + None, + ); + popup_settings.close_with_children = false; - if matches!( - self.core.applet.anchor, - PanelAnchor::Left | PanelAnchor::Right - ) { - let suggested_size = self.core.applet.suggested_size(true).1 - + 2 * self.core.applet.suggested_padding(true).1; - popup_settings.positioner.anchor_rect.y = - overflow_index as i32 * suggested_size as i32; - } else { - let suggested_size = self.core.applet.suggested_size(true).0 - + 2 * self.core.applet.suggested_padding(true).0; - popup_settings.positioner.anchor_rect.x = - overflow_index as i32 * suggested_size as i32; - } + if matches!( + app.core.applet.anchor, + PanelAnchor::Left | PanelAnchor::Right + ) { + let suggested_size = app.core.applet.suggested_size(true).1 + + 2 * app.core.applet.suggested_padding(true).1; + popup_settings.positioner.anchor_rect.y = + overflow_index as i32 * suggested_size as i32; + } else { + let suggested_size = app.core.applet.suggested_size(true).0 + + 2 * app.core.applet.suggested_padding(true).0; + popup_settings.positioner.anchor_rect.x = + overflow_index as i32 * suggested_size as i32; + } - self.overflow_popup = Some(popup_id); - return get_popup(popup_settings); + app.overflow_popup = Some(popup_id); + popup_settings + }, + None, + )); + return popup_task; } else { return Task::none(); } @@ -417,34 +443,40 @@ impl cosmic::Application for App { } else { return Task::none(); } - - let popup_id = self.next_popup_id(); - let mut popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - popup_id, - None, - None, - None, - ); - self.popup = Some(popup_id); - let Some(i) = self.overflow_index() else { return Task::batch(cmds); }; + let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + move |app: &mut Self| { + let popup_id = app.next_popup_id(); + let mut popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + popup_id, + None, + None, + None, + ); + app.popup = Some(popup_id); - if matches!( - self.core.applet.anchor, - PanelAnchor::Left | PanelAnchor::Right - ) { - let suggested_size = self.core.applet.suggested_size(false).1 - + 2 * self.core.applet.suggested_padding(false).1; - popup_settings.positioner.anchor_rect.y = i as i32 * suggested_size as i32; - } else { - let suggested_size = self.core.applet.suggested_size(false).0 - + 2 * self.core.applet.suggested_padding(false).1; - popup_settings.positioner.anchor_rect.x = i as i32 * suggested_size as i32; - } - cmds.push(get_popup(popup_settings)); + if matches!( + app.core.applet.anchor, + PanelAnchor::Left | PanelAnchor::Right + ) { + let suggested_size = app.core.applet.suggested_size(false).1 + + 2 * app.core.applet.suggested_padding(false).1; + popup_settings.positioner.anchor_rect.y = + i as i32 * suggested_size as i32; + } else { + let suggested_size = app.core.applet.suggested_size(false).0 + + 2 * app.core.applet.suggested_padding(false).1; + popup_settings.positioner.anchor_rect.x = + i as i32 * suggested_size as i32; + } + popup_settings + }, + None, + )); + cmds.push(popup_task); Task::batch(cmds) } } @@ -595,7 +627,7 @@ fn menu_icon_button<'a>( .class(if symbolic { cosmic::theme::Svg::Custom(std::rc::Rc::new(|theme| { cosmic::iced::widget::svg::Style { - color: Some(theme.cosmic().background.on.into()), + color: Some(theme.cosmic().background(theme.transparent).on.into()), } })) } else { diff --git a/cosmic-applet-tiling/src/window.rs b/cosmic-applet-tiling/src/window.rs index 327d5d75..da6098f9 100644 --- a/cosmic-applet-tiling/src/window.rs +++ b/cosmic-applet-tiling/src/window.rs @@ -146,17 +146,21 @@ impl cosmic::Application for Window { return if let Some(p) = self.popup.take() { destroy_popup(p) } else { - let new_id = Id::unique(); - self.popup = Some(new_id); - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - Some((1, 1)), + return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |app: &mut Self| { + let new_id = Id::unique(); + app.popup = Some(new_id); + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + Some((1, 1)), + None, + None, + ); + popup_settings + }, None, - None, - ); - - get_popup(popup_settings) + )); }; } Message::PopupClosed(id) => { diff --git a/cosmic-applet-time/src/window.rs b/cosmic-applet-time/src/window.rs index a44d81ee..6a529b20 100644 --- a/cosmic-applet-time/src/window.rs +++ b/cosmic-applet-time/src/window.rs @@ -520,35 +520,39 @@ impl cosmic::Application for Window { if let Some(p) = self.popup.take() { destroy_popup(p) } else { - self.date_today = self.now.date(); - self.date_selected = self.date_today; + return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |app: &mut Self| { + app.date_today = app.now.date(); + app.date_selected = app.date_today; - let new_id = window::Id::unique(); - self.popup = Some(new_id); + let new_id = window::Id::unique(); + app.popup = Some(new_id); - let mut popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, + let mut popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + let Rectangle { + x, + y, + width, + height, + } = app.rectangle; + popup_settings.positioner.anchor_rect = Rectangle:: { + x: x.max(1.) as i32, + y: y.max(1.) as i32, + width: width.max(1.) as i32, + height: height.max(1.) as i32, + }; + + popup_settings.positioner.size = None; + popup_settings + }, None, - None, - None, - ); - let Rectangle { - x, - y, - width, - height, - } = self.rectangle; - popup_settings.positioner.anchor_rect = Rectangle:: { - x: x.max(1.) as i32, - y: y.max(1.) as i32, - width: width.max(1.) as i32, - height: height.max(1.) as i32, - }; - - popup_settings.positioner.size = None; - - get_popup(popup_settings) + )); } } Message::Tick => { diff --git a/cosmic-applet-workspaces/src/components/app.rs b/cosmic-applet-workspaces/src/components/app.rs index dc4ccdc4..62680f77 100644 --- a/cosmic-applet-workspaces/src/components/app.rs +++ b/cosmic-applet-workspaces/src/components/app.rs @@ -202,24 +202,20 @@ impl cosmic::Application for IcedWorkspacesApplet { let content = column!(content, space::horizontal().width(Length::Fixed(width))) .align_x(Alignment::Center); - let btn = button( - container(content) - .align_x(Alignment::Center) - .align_y(Alignment::Center), - ) - .padding(if horizontal { - [0, self.core.applet.suggested_padding(true).1] - } else { - [self.core.applet.suggested_padding(true).1, 0] - }) - .on_press( - if w.state.contains(ext_workspace_handle_v1::State::Active) { - Message::WorkspaceOverview + let btn = button(content) + .padding(if horizontal { + [0, self.core.applet.suggested_padding(true).1] } else { - Message::WorkspacePressed(w.handle.clone()) - }, - ) - .padding(0); + [self.core.applet.suggested_padding(true).1, 0] + }) + .on_press( + if w.state.contains(ext_workspace_handle_v1::State::Active) { + Message::WorkspaceOverview + } else { + Message::WorkspacePressed(w.handle.clone()) + }, + ) + .padding(0); btn.class( if w.state.contains(ext_workspace_handle_v1::State::Active) { diff --git a/cosmic-panel-button/src/lib.rs b/cosmic-panel-button/src/lib.rs index 45ee1ca2..fe411f82 100644 --- a/cosmic-panel-button/src/lib.rs +++ b/cosmic-panel-button/src/lib.rs @@ -66,7 +66,7 @@ impl Button { .class(if symbolic { cosmic::theme::Svg::Custom(std::rc::Rc::new(|theme| { cosmic::iced::widget::svg::Style { - color: Some(theme.cosmic().background.on.into()), + color: Some(theme.cosmic().background(theme.transparent).on.into()), } })) } else { From de1884e032299cccc12d33e5422145838a29c726 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 12 May 2026 23:53:59 -0400 Subject: [PATCH 34/84] chore: update deps --- Cargo.lock | 75 +++----------------------------- cosmic-applet-battery/Cargo.toml | 4 +- 2 files changed, 8 insertions(+), 71 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8026e49d..ac2fb66f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1567,6 +1567,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" +source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" dependencies = [ "futures", "iced_futures", @@ -2706,7 +2707,7 @@ dependencies = [ "log", "presser", "thiserror 2.0.18", - "windows 0.58.0", + "windows 0.62.2", ] [[package]] @@ -7395,16 +7396,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "windows" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" -dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.61.3" @@ -7448,27 +7439,14 @@ dependencies = [ "windows-core 0.62.2", ] -[[package]] -name = "windows-core" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" -dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", + "windows-implement", + "windows-interface", "windows-link 0.1.3", "windows-result 0.3.4", "windows-strings 0.4.2", @@ -7480,8 +7458,8 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", + "windows-implement", + "windows-interface", "windows-link 0.2.1", "windows-result 0.4.1", "windows-strings 0.5.1", @@ -7509,17 +7487,6 @@ dependencies = [ "windows-threading 0.2.1", ] -[[package]] -name = "windows-implement" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-implement" version = "0.60.2" @@ -7531,17 +7498,6 @@ dependencies = [ "syn", ] -[[package]] -name = "windows-interface" -version = "0.58.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "windows-interface" version = "0.59.3" @@ -7585,15 +7541,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-result" version = "0.3.4" @@ -7612,16 +7559,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-strings" version = "0.4.2" diff --git a/cosmic-applet-battery/Cargo.toml b/cosmic-applet-battery/Cargo.toml index 14549ea4..8c8f6e1d 100644 --- a/cosmic-applet-battery/Cargo.toml +++ b/cosmic-applet-battery/Cargo.toml @@ -24,8 +24,8 @@ zbus.workspace = true serde.workspace = true [dependencies.cosmic-settings-upower-subscription] -# git = "https://github.com/pop-os/cosmic-settings" -path = "../../cosmic-settings/subscriptions/upower" +git = "https://github.com/pop-os/cosmic-settings" +# path = "../../cosmic-settings/subscriptions/upower" [dependencies.cosmic-settings-daemon-subscription] git = "https://github.com/pop-os/cosmic-settings" From f0ca9e7aee49325a170ad6d5ef2413a307cf1e4a Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Fri, 15 May 2026 14:43:13 -0400 Subject: [PATCH 35/84] chore: update libcosmic --- cosmic-app-list/src/app.rs | 4 ++++ cosmic-applet-a11y/src/app.rs | 1 + cosmic-applet-audio/src/lib.rs | 1 + cosmic-applet-battery/src/app.rs | 1 + cosmic-applet-bluetooth/src/app.rs | 1 + cosmic-applet-input-sources/src/lib.rs | 1 + cosmic-applet-minimize/src/lib.rs | 1 + cosmic-applet-network/src/app.rs | 13 +++++++++---- cosmic-applet-notifications/src/lib.rs | 1 + cosmic-applet-power/src/lib.rs | 1 + cosmic-applet-status-area/src/components/app.rs | 4 ++++ cosmic-applet-tiling/src/window.rs | 1 + cosmic-applet-time/src/window.rs | 1 + 13 files changed, 27 insertions(+), 4 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 50dd375b..36149e81 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -915,6 +915,7 @@ impl cosmic::Application for CosmicAppList { }; let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let new_id = window::Id::unique(); app.popup = Some(Popup { @@ -995,6 +996,7 @@ impl cosmic::Application for CosmicAppList { }); let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let mut popup_settings = app.core.applet.get_popup_settings( parent_window_id, @@ -1617,6 +1619,7 @@ impl cosmic::Application for CosmicAppList { let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let mut popup_settings = app.core.applet.get_popup_settings( app.core.main_window_id().unwrap(), @@ -1684,6 +1687,7 @@ impl cosmic::Application for CosmicAppList { let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let mut popup_settings = app.core.applet.get_popup_settings( app.core.main_window_id().unwrap(), diff --git a/cosmic-applet-a11y/src/app.rs b/cosmic-applet-a11y/src/app.rs index a20551b0..d03c087d 100644 --- a/cosmic-applet-a11y/src/app.rs +++ b/cosmic-applet-a11y/src/app.rs @@ -138,6 +138,7 @@ impl cosmic::Application for CosmicA11yApplet { )); } else { return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut CosmicA11yApplet| { let new_id = window::Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index e0c12631..83c4bd69 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -295,6 +295,7 @@ impl cosmic::Application for Audio { )); } else { return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Self| { let new_id = window::Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-battery/src/app.rs b/cosmic-applet-battery/src/app.rs index 24b85b0d..f5113eff 100644 --- a/cosmic-applet-battery/src/app.rs +++ b/cosmic-applet-battery/src/app.rs @@ -373,6 +373,7 @@ impl cosmic::Application for CosmicBatteryApplet { } let mut tasks = vec![cosmic::surface::surface_task( cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Self| { let new_id = window::Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-bluetooth/src/app.rs b/cosmic-applet-bluetooth/src/app.rs index 08d2ca47..a3bba4c3 100644 --- a/cosmic-applet-bluetooth/src/app.rs +++ b/cosmic-applet-bluetooth/src/app.rs @@ -122,6 +122,7 @@ impl cosmic::Application for CosmicBluetoothApplet { let get_popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let new_id = window::Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-input-sources/src/lib.rs b/cosmic-applet-input-sources/src/lib.rs index 0f448a94..fc7dcc32 100644 --- a/cosmic-applet-input-sources/src/lib.rs +++ b/cosmic-applet-input-sources/src/lib.rs @@ -145,6 +145,7 @@ impl cosmic::Application for Window { return crate::surface::surface_task(crate::surface::action::destroy_popup(p)); } else { return crate::surface::surface_task(crate::surface::action::app_popup( + |_| Default::default(), |app: &mut Window| { let new_id = Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-minimize/src/lib.rs b/cosmic-applet-minimize/src/lib.rs index b4390cbb..803ca97c 100644 --- a/cosmic-applet-minimize/src/lib.rs +++ b/cosmic-applet-minimize/src/lib.rs @@ -253,6 +253,7 @@ impl cosmic::Application for Minimize { )); } else { return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Self| { let new_id = window::Id::unique(); let pos = app.max_icon_count().unwrap_or_default(); diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 805cec41..efa1f18e 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -731,21 +731,26 @@ impl cosmic::Application for CosmicNetworkApplet { } else { let mut tasks = Vec::with_capacity(2); if let Some(conn) = self.conn.clone() { - tasks.push(update_state(conn.clone())); - tasks.push(update_devices(conn.clone())); - tasks.push(load_vpns(conn)); + tasks.push(update_state(conn.clone()).map(cosmic::Action::App)); + tasks.push(update_devices(conn.clone()).map(cosmic::Action::App)); + tasks.push(load_vpns(conn).map(cosmic::Action::App)); let uuid = uuid::Uuid::new_v4().to_string().replace("-", "_"); let my_id = format!( "com.system76.CosmicSettings.Applet._{uuid}.NetworkManager.SecretAgent", ); - tasks.push(secret_agent_task(my_id).map(Message::SecretAgent)); + tasks.push( + secret_agent_task(my_id) + .map(Message::SecretAgent) + .map(cosmic::Action::App), + ); } tasks.push(system_conn().map(cosmic::Action::App)); tasks.push(cosmic::surface::surface_task( cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Self| { let new_id = window::Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-notifications/src/lib.rs b/cosmic-applet-notifications/src/lib.rs index 896b72c9..720f8d63 100644 --- a/cosmic-applet-notifications/src/lib.rs +++ b/cosmic-applet-notifications/src/lib.rs @@ -158,6 +158,7 @@ impl cosmic::Application for Notifications { return destroy_popup(p); } else { return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Self| { let new_id = window::Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-power/src/lib.rs b/cosmic-applet-power/src/lib.rs index 3ef10d71..3bdfbb13 100644 --- a/cosmic-applet-power/src/lib.rs +++ b/cosmic-applet-power/src/lib.rs @@ -125,6 +125,7 @@ impl cosmic::Application for Power { )); } else { return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Power| { let new_id = window::Id::unique(); app.popup.replace(new_id); diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 3c5272c5..ef61e26b 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -240,6 +240,7 @@ impl cosmic::Application for App { let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let popup_id = app.next_popup_id(); let i = app.menus.keys().position(|&i| i == id).unwrap(); @@ -337,6 +338,7 @@ impl cosmic::Application for App { return Task::none(); } let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let popup_id = app.next_popup_id(); let i = app.menus.keys().position(|&i| i == id).unwrap(); @@ -394,6 +396,7 @@ impl cosmic::Application for App { // If we don't have an overflow, create it let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let popup_id = app.next_popup_id(); let mut popup_settings = app.core.applet.get_popup_settings( @@ -447,6 +450,7 @@ impl cosmic::Application for App { return Task::batch(cmds); }; let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), move |app: &mut Self| { let popup_id = app.next_popup_id(); let mut popup_settings = app.core.applet.get_popup_settings( diff --git a/cosmic-applet-tiling/src/window.rs b/cosmic-applet-tiling/src/window.rs index da6098f9..d4090541 100644 --- a/cosmic-applet-tiling/src/window.rs +++ b/cosmic-applet-tiling/src/window.rs @@ -147,6 +147,7 @@ impl cosmic::Application for Window { destroy_popup(p) } else { return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Self| { let new_id = Id::unique(); app.popup = Some(new_id); diff --git a/cosmic-applet-time/src/window.rs b/cosmic-applet-time/src/window.rs index 6a529b20..042dfc3d 100644 --- a/cosmic-applet-time/src/window.rs +++ b/cosmic-applet-time/src/window.rs @@ -521,6 +521,7 @@ impl cosmic::Application for Window { destroy_popup(p) } else { return cosmic::surface::surface_task(cosmic::surface::action::app_popup( + |_| Default::default(), |app: &mut Self| { app.date_today = app.now.date(); app.date_selected = app.date_today; From 74b6202686139d517c30c7240068dac175b30561 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Fri, 22 May 2026 18:03:09 -0400 Subject: [PATCH 36/84] fix: right click popup corners --- cosmic-app-list/src/app.rs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 36149e81..89e7b1c1 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -27,25 +27,28 @@ use cosmic::{ }, cosmic_config::{Config, CosmicConfigEntry}, desktop::IconSourceExt, - iced::runtime::{core::event, dnd::peek_dnd}, iced::{ self, Alignment, Background, Border, Length, Limits, Padding, Subscription, advanced::text::{Ellipsize, EllipsizeHeightLimit}, clipboard::mime::{AllowedMimeTypes, AsMimeTypes}, event::listen_with, platform_specific::shell::commands::popup::{destroy_popup, get_popup}, + runtime::{core::event, dnd::peek_dnd, platform_specific::wayland::CornerRadius}, widget::{ - Column, Row, column, mouse_area, row, rule::vertical as vertical_rule, - space::horizontal as horizontal_space, space::vertical as vertical_space, stack, + Column, Row, column, mouse_area, row, + rule::vertical as vertical_rule, + space::{horizontal as horizontal_space, vertical as vertical_space}, + stack, }, window, }, - surface, + surface::{self, action::LiveSettings}, theme::{self, Button, Container}, widget::{ DndDestination, Image, button, container, divider, dnd_source, icon::{self, from_name}, image::Handle, + menu, rectangle_tracker::{RectangleTracker, RectangleUpdate, rectangle_tracker_subscription}, svg, text, }, @@ -913,9 +916,18 @@ impl cosmic::Application for CosmicAppList { tracing::error!("No rectangle found for toplevel group"); return Task::none(); }; + let corners = self.core.system_theme().cosmic().corner_radii.radius_s; let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( - |_| Default::default(), + move |_| LiveSettings { + corners: Some(CornerRadius { + top_left: corners[0] as u32 + 1, + top_right: corners[1] as u32 + 1, + bottom_left: corners[3] as u32 + 1, + bottom_right: corners[2] as u32 + 1, + }), + ..Default::default() + }, move |app: &mut Self| { let new_id = window::Id::unique(); app.popup = Some(Popup { @@ -2125,7 +2137,8 @@ impl cosmic::Application for CosmicAppList { .width(Length::Fill) } - let mut content = column![].align_x(Alignment::Center); + let mut content = + menu::menu_column::MenuColumn::with_capacity(4).align_x(Alignment::Center); if let Some(exec) = desktop_info.exec() { if !toplevels.is_empty() { From 065551ed1bb9a81326228981147b0bd7195e5101 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 28 May 2026 19:36:11 -0400 Subject: [PATCH 37/84] chore: update libcosmic --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index ac2fb66f..963c1302 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1567,7 +1567,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#f19da761296a28ea97d6dadc2971de0bf2c0ad85" +source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" dependencies = [ "futures", "iced_futures", From 7f4b1ab7be3b49ac7f4fec66d338c4f70074457d Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 2 Jun 2026 16:18:26 -0400 Subject: [PATCH 38/84] chore: update deps --- Cargo.lock | 218 +++++++++++++++++++++++++++-------------------------- 1 file changed, 112 insertions(+), 106 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 963c1302..21815eda 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -165,7 +165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.1", + "bitflags 2.12.1", "cc", "jni", "libc", @@ -538,9 +538,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" dependencies = [ "serde_core", ] @@ -728,7 +728,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "polling", "rustix 1.1.4", "slab", @@ -758,14 +758,14 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.62" +version = "1.2.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" dependencies = [ "find-msvc-tools", "jobserver", "libc", - "shlex", + "shlex 2.0.1", ] [[package]] @@ -968,7 +968,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "core-foundation 0.10.1", "libc", ] @@ -1310,7 +1310,7 @@ name = "cosmic-client-toolkit" version = "0.2.0" source = "git+https://github.com/pop-os/cosmic-protocols//?rev=a7d2d7a#a7d2d7a6188425f699eaddf7a025617ce56068ae" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cosmic-protocols", "libc", "smithay-client-toolkit", @@ -1371,7 +1371,7 @@ name = "cosmic-dbus-networkmanager" version = "0.1.0" source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "derive_builder", "jiff", "procfs", @@ -1448,7 +1448,7 @@ name = "cosmic-protocols" version = "0.2.0" source = "git+https://github.com/pop-os/cosmic-protocols//?rev=a7d2d7a#a7d2d7a6188425f699eaddf7a025617ce56068ae" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -1550,7 +1550,7 @@ name = "cosmic-settings-network-manager-subscription" version = "1.0.7" source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cosmic-dbus-networkmanager", "futures", "iced_futures", @@ -1567,7 +1567,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#81912bed6cdebe2719e29e6bd1453e7b977acb0e" +source = "git+https://github.com/pop-os/cosmic-settings#de5e16d360da9a634dcdd291112b76230d86d2ad" dependencies = [ "futures", "iced_futures", @@ -1584,7 +1584,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "fontdb", "harfrust", "linebender_resource_handle", @@ -1972,7 +1972,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -2003,7 +2003,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.1", + "bitflags 2.12.1", "mime 0.1.0", "raw-window-handle", "smithay-client-toolkit", @@ -2036,7 +2036,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "drm-ffi 0.7.1", "drm-fourcc", @@ -2049,7 +2049,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "drm-ffi 0.9.1", "drm-fourcc", @@ -2716,7 +2716,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2727,7 +2727,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] @@ -2764,7 +2764,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "core_maths", "read-fonts", @@ -2994,7 +2994,7 @@ name = "iced_core" version = "0.14.0" source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytes", "cosmic-client-toolkit", "dnd", @@ -3043,7 +3043,7 @@ name = "iced_graphics" version = "0.14.0" source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "cosmic-text", "half", @@ -3118,7 +3118,7 @@ version = "0.14.0" source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" dependencies = [ "as-raw-xcb-connection", - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "cosmic-client-toolkit", "cryoglyph", @@ -3690,11 +3690,11 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199" +checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "inotify-sys", "libc", ] @@ -3724,7 +3724,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "input-sys", "libc", "log", @@ -3930,7 +3930,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "serde", ] @@ -3962,9 +3962,9 @@ dependencies = [ [[package]] name = "kqueue" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5" dependencies = [ "kqueue-sys", "libc", @@ -3976,7 +3976,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "libc", ] @@ -4064,7 +4064,7 @@ dependencies = [ "rust-embed", "rustix 1.1.4", "serde", - "shlex", + "shlex 1.3.0", "slotmap", "taffy", "thiserror 2.0.18", @@ -4106,7 +4106,7 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "libc", "plain", "redox_syscall 0.8.1", @@ -4332,7 +4332,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -4414,7 +4414,7 @@ checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -4438,7 +4438,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -4468,7 +4468,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg-if", "cfg_aliases", "libc", @@ -4490,7 +4490,7 @@ checksum = "f9493a0dfbe50783b53ef52ec8ddb8d1f85fd45098be8210205236ff0f43bb7b" dependencies = [ "async-trait", "base64", - "bitflags 2.11.1", + "bitflags 2.12.1", "futures", "futures-timer", "log", @@ -4517,7 +4517,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "fsevent-sys", "inotify", "kqueue", @@ -4535,7 +4535,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] @@ -4711,7 +4711,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4727,7 +4727,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4740,7 +4740,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4752,7 +4752,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "dispatch2", "objc2 0.6.4", @@ -4764,7 +4764,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "libc", "objc2-core-foundation", ] @@ -4787,7 +4787,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2-core-foundation", "objc2-core-graphics", ] @@ -4804,7 +4804,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4816,7 +4816,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4828,7 +4828,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4840,7 +4840,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4853,7 +4853,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -5175,7 +5175,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "crc32fast", "fdeflate", "flate2", @@ -5318,7 +5318,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "procfs-core", "rustix 1.1.4", ] @@ -5329,7 +5329,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "hex", ] @@ -5476,7 +5476,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c07d0d6d291e3a951bd847b1cd4af32fc6243d64116cf7702838c02797688b7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "libredox", ] @@ -5486,7 +5486,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] @@ -5495,7 +5495,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", ] [[package]] @@ -5621,7 +5621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" dependencies = [ "base64", - "bitflags 2.11.1", + "bitflags 2.12.1", "serde", "serde_derive", "unicode-ident", @@ -5633,7 +5633,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "once_cell", "serde", "serde_derive", @@ -5708,7 +5708,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5721,7 +5721,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -5740,7 +5740,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "core_maths", "log", @@ -5988,6 +5988,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + [[package]] name = "signal-hook-registry" version = "1.4.8" @@ -6072,7 +6078,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "calloop", "calloop-wayland-source", @@ -6163,7 +6169,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.1", + "bitflags 2.12.1", ] [[package]] @@ -6667,9 +6673,9 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.20.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "udev" @@ -6772,9 +6778,9 @@ checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" [[package]] name = "unicode-segmentation" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-vo" @@ -6864,9 +6870,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -7004,7 +7010,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -7044,7 +7050,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -7056,7 +7062,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cursor-icon", "wayland-backend", ] @@ -7078,7 +7084,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -7091,7 +7097,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7104,7 +7110,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7117,7 +7123,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7130,7 +7136,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7155,7 +7161,7 @@ version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc1846eb04c49182e04f4a099e2a830a2b745610bbc1d61246e206f29c7000a0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "downcast-rs", "rustix 1.1.4", "wayland-backend", @@ -7207,7 +7213,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "cfg-if", "cfg_aliases", @@ -7239,7 +7245,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "cfg_aliases", "document-features", @@ -7299,7 +7305,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.11.1", + "bitflags 2.12.1", "block", "bytemuck", "cfg-if", @@ -7343,7 +7349,7 @@ version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "js-sys", "log", @@ -7831,7 +7837,7 @@ name = "winit" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cfg_aliases", "cursor-icon", "dpi", @@ -7858,7 +7864,7 @@ version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "android-activity", - "bitflags 2.11.1", + "bitflags 2.12.1", "dpi", "ndk", "raw-window-handle", @@ -7872,7 +7878,7 @@ name = "winit-appkit" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "dispatch2", "dpi", @@ -7909,7 +7915,7 @@ name = "winit-core" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cursor-icon", "dpi", "keyboard-types", @@ -7923,7 +7929,7 @@ name = "winit-orbital" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "dpi", "libredox", "orbclient", @@ -7939,7 +7945,7 @@ name = "winit-uikit" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "block2 0.6.2", "dispatch2", "dpi", @@ -7960,7 +7966,7 @@ version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "ahash", - "bitflags 2.11.1", + "bitflags 2.12.1", "calloop", "cursor-icon", "dpi", @@ -7986,7 +7992,7 @@ version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "atomic-waker", - "bitflags 2.11.1", + "bitflags 2.12.1", "concurrent-queue", "cursor-icon", "dpi", @@ -8007,7 +8013,7 @@ name = "winit-win32" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "cursor-icon", "dpi", "raw-window-handle", @@ -8023,7 +8029,7 @@ name = "winit-x11" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "bytemuck", "calloop", "cursor-icon", @@ -8114,7 +8120,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.12.1", "indexmap 2.14.0", "log", "serde", @@ -8274,7 +8280,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.12.1", "dlib", "log", "once_cell", @@ -8354,9 +8360,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.15.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1" +checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" dependencies = [ "async-broadcast", "async-executor", @@ -8414,9 +8420,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.15.0" +version = "5.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff" +checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8643,9 +8649,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" +checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" dependencies = [ "endi", "enumflags2", @@ -8658,9 +8664,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.11.0" +version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" +checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8671,9 +8677,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691" +checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" dependencies = [ "proc-macro2", "quote", From 1472f82061337207aea5abf1b477fef00884f2e0 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 4 Jun 2026 13:10:40 -0400 Subject: [PATCH 39/84] chore: fix popup corners and doubled opacity --- cosmic-app-list/src/app.rs | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 89e7b1c1..8db96ee3 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -919,15 +919,7 @@ impl cosmic::Application for CosmicAppList { let corners = self.core.system_theme().cosmic().corner_radii.radius_s; let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup( - move |_| LiveSettings { - corners: Some(CornerRadius { - top_left: corners[0] as u32 + 1, - top_right: corners[1] as u32 + 1, - bottom_left: corners[3] as u32 + 1, - bottom_right: corners[2] as u32 + 1, - }), - ..Default::default() - }, + move |_| LiveSettings::default(), move |app: &mut Self| { let new_id = window::Id::unique(); app.popup = Some(Popup { @@ -2249,22 +2241,6 @@ impl cosmic::Application for CosmicAppList { .popup_container( container(content) .padding(1) - //TODO: move style to libcosmic - .class(theme::Container::custom(|theme| { - let cosmic = theme.cosmic(); - let component = &cosmic.background(theme.transparent).component; - container::Style { - icon_color: Some(component.on.into()), - text_color: Some(component.on.into()), - background: Some(Background::Color(component.base.into())), - border: Border { - radius: cosmic.radius_s().into(), - width: 1.0, - color: component.divider.into(), - }, - ..Default::default() - } - })) .height(Length::Shrink) .width(Length::Fill), ) From 69d358ec349e7e9839f6df70c6ff988448939166 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Wed, 1 Jul 2026 23:26:15 -0400 Subject: [PATCH 40/84] chore: cleanup and update deps --- Cargo.lock | 735 +++++++++++++------------------ Cargo.toml | 12 +- cosmic-applet-audio/src/lib.rs | 2 +- cosmic-applet-network/src/app.rs | 16 +- 4 files changed, 328 insertions(+), 437 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 21815eda..ba501e3e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -165,7 +165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.12.1", + "bitflags 2.13.0", "cc", "jni", "libc", @@ -194,9 +194,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.102" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" [[package]] name = "apply" @@ -215,9 +215,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" dependencies = [ "rustversion", ] @@ -230,9 +230,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" [[package]] name = "as-raw-xcb-connection" @@ -484,9 +484,9 @@ dependencies = [ [[package]] name = "auto_enums" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65398a2893f41bce5c9259f6e1a4f03fbae40637c1bdc755b4f387f48c613b03" +checksum = "2e4487600931c9a89f8db7ffbdf3fbdd45bb7bd85e26861f659a463cd0dff966" dependencies = [ "derive_utils", "proc-macro2", @@ -496,9 +496,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "base64" @@ -538,9 +538,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a" +checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" dependencies = [ "serde_core", ] @@ -631,9 +631,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145" dependencies = [ "bytes", "cfg_aliases", @@ -650,13 +650,13 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" dependencies = [ "memchr", "regex-automata", - "serde", + "serde_core", ] [[package]] @@ -670,9 +670,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.20.2" +version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "by_address" @@ -708,9 +708,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.11.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" [[package]] name = "calendrical_calculations" @@ -728,7 +728,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "polling", "rustix 1.1.4", "slab", @@ -758,9 +758,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.63" +version = "1.2.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f" +checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" dependencies = [ "find-msvc-tools", "jobserver", @@ -782,9 +782,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.44" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" dependencies = [ "iana-time-zone", "num-traits", @@ -908,9 +908,9 @@ dependencies = [ [[package]] name = "configparser" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57e3272f0190c3f1584272d613719ba5fc7df7f4942fe542e63d949cf3a649b" +checksum = "b46dec724fd22199ebde05033a0cbae453bc3b1ecff11eb6a6bb3eec4b90c6a4" [[package]] name = "core-foundation" @@ -968,7 +968,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "core-foundation 0.10.1", "libc", ] @@ -996,7 +996,7 @@ dependencies = [ "i18n-embed-fl", "image", "libcosmic", - "memmap2 0.9.10", + "memmap2 0.9.11", "rust-embed", "rustc-hash 2.1.2", "rustix 1.1.4", @@ -1128,7 +1128,7 @@ dependencies = [ "i18n-embed-fl", "image", "libcosmic", - "memmap2 0.9.10", + "memmap2 0.9.11", "rust-embed", "rustix 1.1.4", "tokio", @@ -1308,9 +1308,9 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?rev=a7d2d7a#a7d2d7a6188425f699eaddf7a025617ce56068ae" +source = "git+https://github.com/pop-os/cosmic-protocols//?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cosmic-protocols", "libc", "smithay-client-toolkit", @@ -1331,7 +1331,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1341,7 +1341,7 @@ dependencies = [ "iced_futures", "known-folders", "notify", - "ron 0.12.1", + "ron 0.12.2", "serde", "tokio", "tracing", @@ -1352,7 +1352,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "quote", "syn", @@ -1371,7 +1371,7 @@ name = "cosmic-dbus-networkmanager" version = "0.1.0" source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "derive_builder", "jiff", "procfs", @@ -1382,12 +1382,12 @@ dependencies = [ [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#cb0a2f299dbc443697ce1674065e0d4f82915c02" +source = "git+https://github.com/pop-os/freedesktop-icons#ab4c57b8e416c6af9297cb04d101889896fd9a92" dependencies = [ "bstr", "btoi", "memchr", - "memmap2 0.9.10", + "memmap2 0.9.11", "thiserror 2.0.18", "tracing", "xdg", @@ -1432,7 +1432,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#546a6c45210574caed9a3e51446aa8ad622d3627" +source = "git+https://github.com/pop-os/cosmic-panel#45f03a3864a9385349be3ca13202553280e667d4" dependencies = [ "anyhow", "cosmic-config", @@ -1446,9 +1446,9 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?rev=a7d2d7a#a7d2d7a6188425f699eaddf7a025617ce56068ae" +source = "git+https://github.com/pop-os/cosmic-protocols//?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -1460,7 +1460,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" +source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1474,7 +1474,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" +source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1487,12 +1487,12 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-client" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#e7936f0d4f01c8c5a436908c7ee9f6ad43e6a7d8" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#276fef9834b05c57b67e8ba36b74bea1ba690cee" dependencies = [ "cosmic-settings-audio-core", "dirs", "futures-util", - "ron 0.12.1", + "ron 0.12.2", "serde", "tokio", "tokio-util", @@ -1503,10 +1503,10 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-core" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#e7936f0d4f01c8c5a436908c7ee9f6ad43e6a7d8" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#276fef9834b05c57b67e8ba36b74bea1ba690cee" dependencies = [ "dirs", - "ron 0.12.1", + "ron 0.12.2", "serde", "zlink", ] @@ -1514,7 +1514,7 @@ dependencies = [ [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#fa82bdf9fe7b5f5bd6008f32f393efd5e7a71c47" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#276fef9834b05c57b67e8ba36b74bea1ba690cee" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1535,7 +1535,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" +source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" dependencies = [ "futures", "iced_futures", @@ -1548,9 +1548,9 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" +source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cosmic-dbus-networkmanager", "futures", "iced_futures", @@ -1567,7 +1567,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#de5e16d360da9a634dcdd291112b76230d86d2ad" +source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" dependencies = [ "futures", "iced_futures", @@ -1584,7 +1584,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "fontdb", "harfrust", "linebender_resource_handle", @@ -1592,7 +1592,7 @@ dependencies = [ "rangemap", "rustc-hash 2.1.2", "self_cell", - "skrifa", + "skrifa 0.40.0", "smol_str", "swash", "sys-locale", @@ -1605,7 +1605,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "almost", "configparser", @@ -1614,7 +1614,7 @@ dependencies = [ "dirs", "hex_color", "palette", - "ron 0.12.1", + "ron 0.12.2", "serde", "serde_json", "thiserror 2.0.18", @@ -1870,13 +1870,44 @@ dependencies = [ "tokio", ] +[[package]] +name = "defmt" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "defmt-parser" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +dependencies = [ + "thiserror 2.0.18", +] + [[package]] name = "deranged" version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ - "powerfmt", "serde_core", ] @@ -1963,7 +1994,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1972,7 +2003,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1980,9 +2011,9 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", @@ -2003,7 +2034,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.12.1", + "bitflags 2.13.0", "mime 0.1.0", "raw-window-handle", "smithay-client-toolkit", @@ -2036,7 +2067,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "drm-ffi 0.7.1", "drm-fourcc", @@ -2049,7 +2080,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "drm-ffi 0.9.1", "drm-fourcc", @@ -2117,9 +2148,9 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "endi" @@ -2161,7 +2192,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2389,7 +2420,7 @@ checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" dependencies = [ "fontconfig-parser", "log", - "memmap2 0.9.10", + "memmap2 0.9.11", "slotmap", "tinyvec", "ttf-parser", @@ -2551,9 +2582,9 @@ checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" @@ -2617,15 +2648,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", "libc", "r-efi 6.0.0", - "wasip2", - "wasip3", ] [[package]] @@ -2716,7 +2745,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2727,7 +2756,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -2764,10 +2793,10 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "core_maths", - "read-fonts", + "read-fonts 0.37.0", "smallvec", ] @@ -2962,7 +2991,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "dnd", "iced_accessibility", @@ -2983,7 +3012,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "accesskit", "accesskit_winit", @@ -2992,9 +3021,9 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytes", "cosmic-client-toolkit", "dnd", @@ -3017,7 +3046,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "iced_core", "iced_futures", @@ -3027,7 +3056,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "futures", "iced_core", @@ -3041,9 +3070,9 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "cosmic-text", "half", @@ -3062,7 +3091,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "iced_graphics", "iced_runtime", @@ -3071,7 +3100,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3083,7 +3112,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3098,7 +3127,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "bytemuck", "cosmic-text", @@ -3115,10 +3144,10 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "as-raw-xcb-connection", - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "cosmic-client-toolkit", "cryoglyph", @@ -3146,7 +3175,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3164,7 +3193,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3265,9 +3294,9 @@ checksum = "846b0857ca091204be3c874bc93daaf89d4777e8d2d20b0d3ffe8f671d98014b" [[package]] name = "icu_collator" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b521b92a2666061ddda902769d8a4cf730b5c9529a845cc1b69770b12a6c9a71" +checksum = "8bbdf98e5e0aa827770acee171ebb568aaab975a36b56afdb5fd0e2f525750bb" dependencies = [ "icu_collator_data", "icu_collections", @@ -3592,12 +3621,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f2f8aeca682d874a5247084aa4fb7d1cef9ba45d889c21209a8818dcaaa0ec9" -[[package]] -name = "id-arena" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" - [[package]] name = "ident_case" version = "1.0.1" @@ -3694,16 +3717,16 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "inotify-sys", "libc", ] [[package]] name = "inotify-sys" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +checksum = "6fda9741ca16536952da2ecaa6105c2f4653fa6f0724681df6d2414c4106d0b0" dependencies = [ "libc", ] @@ -3724,7 +3747,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "input-sys", "libc", "log", @@ -3796,24 +3819,25 @@ checksum = "2ceaf4c6c48465bead8cb6a0b7c4ee0c86ecbb31239032b9c66ab9a08d2f3ee1" [[package]] name = "jiff" -version = "0.2.24" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" +checksum = "ccfe6121cbe750cf81efa362d85c0bde7ea298ec43092d3a193baca59cdbd634" dependencies = [ + "defmt", "jiff-static", "jiff-tzdb-platform", "log", "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.59.0", + "windows-link 0.2.1", ] [[package]] name = "jiff-static" -version = "0.2.24" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" +checksum = "e165e897f662d428f3cd3828a919dbe067c2d42bb1031eede74ef9d27ecdedd2" dependencies = [ "proc-macro2", "quote", @@ -3905,13 +3929,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.98" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" dependencies = [ "cfg-if", "futures-util", - "once_cell", "wasm-bindgen", ] @@ -3930,7 +3953,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "serde", ] @@ -3957,7 +3980,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3976,7 +3999,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "libc", ] @@ -4007,12 +4030,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leb128fmt" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" - [[package]] name = "libc" version = "0.2.186" @@ -4022,7 +4039,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic//?branch=theme-v2#ed83072293695382790cec8d697490a61217a631" +source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" dependencies = [ "apply", "ashpd 0.12.3", @@ -4060,7 +4077,7 @@ dependencies = [ "palette", "phf 0.13.1", "rfd", - "ron 0.12.1", + "ron 0.12.2", "rust-embed", "rustix 1.1.4", "serde", @@ -4102,14 +4119,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "libc", "plain", - "redox_syscall 0.8.1", + "redox_syscall 0.9.0", ] [[package]] @@ -4197,9 +4214,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "logind-zbus" @@ -4295,9 +4312,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.0" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" +checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" [[package]] name = "memmap2" @@ -4310,9 +4327,9 @@ dependencies = [ [[package]] name = "memmap2" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -4332,7 +4349,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -4367,9 +4384,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" dependencies = [ "libc", "log", @@ -4414,7 +4431,7 @@ checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -4438,7 +4455,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "jni-sys 0.3.1", "log", "ndk-sys", @@ -4468,7 +4485,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg-if", "cfg_aliases", "libc", @@ -4484,13 +4501,13 @@ dependencies = [ [[package]] name = "nmrs" -version = "3.1.4" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9493a0dfbe50783b53ef52ec8ddb8d1f85fd45098be8210205236ff0f43bb7b" +checksum = "133ab12d9167f6b8d7cdadd4f8fde378bcaff4ad1c893d887498a98de50e10e9" dependencies = [ "async-trait", "base64", - "bitflags 2.12.1", + "bitflags 2.13.0", "futures", "futures-timer", "log", @@ -4517,7 +4534,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "fsevent-sys", "inotify", "kqueue", @@ -4535,7 +4552,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -4544,7 +4561,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4711,7 +4728,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4727,7 +4744,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4740,7 +4757,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4752,7 +4769,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "dispatch2", "objc2 0.6.4", @@ -4764,7 +4781,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "libc", "objc2-core-foundation", ] @@ -4787,7 +4804,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2-core-foundation", "objc2-core-graphics", ] @@ -4804,7 +4821,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4816,7 +4833,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4828,7 +4845,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4840,7 +4857,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4853,7 +4870,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -4882,9 +4899,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.54" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a570f6bca41d29acb2139229a7c873ec99bc9a313bd10804081d89bfac8ff329" +checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" dependencies = [ "libc", "libredox", @@ -5175,7 +5192,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "crc32fast", "fdeflate", "flate2", @@ -5249,16 +5266,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -5318,7 +5325,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "procfs-core", "rustix 1.1.4", ] @@ -5329,7 +5336,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "hex", ] @@ -5363,9 +5370,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.45" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" dependencies = [ "proc-macro2", ] @@ -5471,12 +5478,22 @@ dependencies = [ ] [[package]] -name = "redox_event" -version = "0.4.7" +name = "read-fonts" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c07d0d6d291e3a951bd847b1cd4af32fc6243d64116cf7702838c02797688b7" +checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" dependencies = [ - "bitflags 2.12.1", + "bytemuck", + "font-types", +] + +[[package]] +name = "redox_event" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5018d583d6d2f5499352aea8d177e9067d1eb03ab17c78169d5ba7a30001b15" +dependencies = [ + "bitflags 2.13.0", "libredox", ] @@ -5486,16 +5503,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] name = "redox_syscall" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" +checksum = "c5102a6aaa05aa011a238e178e6bca86d2cb56fc9f586d37cb80f5bca6e07759" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", ] [[package]] @@ -5531,9 +5548,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.3" +version = "1.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" dependencies = [ "aho-corasick", "memchr", @@ -5554,9 +5571,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "renderdoc-sys" @@ -5621,7 +5638,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" dependencies = [ "base64", - "bitflags 2.12.1", + "bitflags 2.13.0", "serde", "serde_derive", "unicode-ident", @@ -5629,11 +5646,11 @@ dependencies = [ [[package]] name = "ron" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" +checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "once_cell", "serde", "serde_derive", @@ -5708,7 +5725,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5721,11 +5738,11 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5740,7 +5757,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "core_maths", "log", @@ -5811,7 +5828,7 @@ checksum = "1dd3accc0f3f4bbaf2c9e1957a030dc582028130c67660d44c0a0345a22ca69b" dependencies = [ "ab_glyph", "log", - "memmap2 0.9.10", + "memmap2 0.9.11", "smithay-client-toolkit", "tiny-skia", ] @@ -5901,9 +5918,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "indexmap 2.14.0", "itoa", @@ -5926,9 +5943,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c" dependencies = [ "base64", "bs58", @@ -5946,9 +5963,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.20.0" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling 0.23.0", "proc-macro2", @@ -6048,7 +6065,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.37.0", +] + +[[package]] +name = "skrifa" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" +dependencies = [ + "bytemuck", + "read-fonts 0.39.2", ] [[package]] @@ -6068,9 +6095,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "smithay-client-toolkit" @@ -6078,14 +6105,14 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "calloop", "calloop-wayland-source", "cursor-icon", "libc", "log", - "memmap2 0.9.10", + "memmap2 0.9.11", "pkg-config", "rustix 1.1.4", "thiserror 2.0.18", @@ -6125,9 +6152,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", "windows-sys 0.61.2", @@ -6148,7 +6175,7 @@ dependencies = [ "foreign-types", "js-sys", "log", - "memmap2 0.9.10", + "memmap2 0.9.11", "objc", "raw-window-handle", "redox_syscall 0.5.18", @@ -6169,7 +6196,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.12.1", + "bitflags 2.13.0", ] [[package]] @@ -6245,11 +6272,11 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.7" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" +checksum = "0811b01ca2c4e8718760713911feaf4675c24f94e50530a015ec646cfb622f7c" dependencies = [ - "skrifa", + "skrifa 0.42.1", "yazi", "zeno", ] @@ -6264,9 +6291,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.117" +version = "2.0.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" dependencies = [ "proc-macro2", "quote", @@ -6318,10 +6345,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6384,12 +6411,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.47" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde_core", @@ -6399,15 +6425,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.27" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +checksum = "c431b87111666e491a90baa837f914fb45cd5dc3c268591b0220ff5057f2085f" dependencies = [ "num-conv", "time-core", @@ -6566,9 +6592,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" dependencies = [ "indexmap 2.14.0", "toml_datetime", @@ -6794,12 +6820,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "upower_dbus" version = "0.3.2" @@ -6870,11 +6890,11 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.2" +version = "1.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d258b83ceec21034727ecee8c382cfa6c3e133699b0742c64571814fb420c9f7" +checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" dependencies = [ - "getrandom 0.4.2", + "getrandom 0.4.3", "js-sys", "serde_core", "sha1_smol", @@ -6911,27 +6931,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.3+wasi-0.2.9" +version = "1.0.4+wasi-0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" dependencies = [ - "wit-bindgen 0.57.1", -] - -[[package]] -name = "wasip3" -version = "0.4.0+wasi-0.3.0-rc-2026-01-06" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" -dependencies = [ - "wit-bindgen 0.51.0", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.121" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" dependencies = [ "cfg-if", "once_cell", @@ -6942,9 +6953,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.71" +version = "0.4.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +checksum = "c62df1340f32221cb9c54d6a27b030e3dba64361d4a95bed55f9aacb44da291d" dependencies = [ "js-sys", "wasm-bindgen", @@ -6952,9 +6963,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.121" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6962,9 +6973,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.121" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", @@ -6975,47 +6986,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.121" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-encoder" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" -dependencies = [ - "leb128fmt", - "wasmparser", -] - -[[package]] -name = "wasm-metadata" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" -dependencies = [ - "anyhow", - "indexmap 2.14.0", - "wasm-encoder", - "wasmparser", -] - -[[package]] -name = "wasmparser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" -dependencies = [ - "bitflags 2.12.1", - "hashbrown 0.15.5", - "indexmap 2.14.0", - "semver", -] - [[package]] name = "wasmtimer" version = "0.4.3" @@ -7050,7 +7027,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -7062,7 +7039,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cursor-icon", "wayland-backend", ] @@ -7080,11 +7057,11 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.12" +version = "0.32.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" +checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -7097,7 +7074,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7110,7 +7087,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7123,7 +7100,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7136,7 +7113,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7161,7 +7138,7 @@ version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc1846eb04c49182e04f4a099e2a830a2b745610bbc1d61246e206f29c7000a0" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "downcast-rs", "rustix 1.1.4", "wayland-backend", @@ -7182,9 +7159,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.98" +version = "0.3.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +checksum = "8622dcb61c0bcc9fffa6938bed81210af2da9a7e4a1a834b2e37a59b6dfb6141" dependencies = [ "js-sys", "wasm-bindgen", @@ -7213,7 +7190,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "cfg-if", "cfg_aliases", @@ -7245,7 +7222,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "cfg_aliases", "document-features", @@ -7305,7 +7282,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.12.1", + "bitflags 2.13.0", "block", "bytemuck", "cfg-if", @@ -7349,7 +7326,7 @@ version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "js-sys", "log", @@ -7378,7 +7355,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -7837,7 +7814,7 @@ name = "winit" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cfg_aliases", "cursor-icon", "dpi", @@ -7864,7 +7841,7 @@ version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "android-activity", - "bitflags 2.12.1", + "bitflags 2.13.0", "dpi", "ndk", "raw-window-handle", @@ -7878,7 +7855,7 @@ name = "winit-appkit" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "dispatch2", "dpi", @@ -7900,7 +7877,7 @@ name = "winit-common" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "memmap2 0.9.10", + "memmap2 0.9.11", "objc2 0.6.4", "objc2-core-foundation", "smol_str", @@ -7915,7 +7892,7 @@ name = "winit-core" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cursor-icon", "dpi", "keyboard-types", @@ -7929,7 +7906,7 @@ name = "winit-orbital" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "dpi", "libredox", "orbclient", @@ -7945,7 +7922,7 @@ name = "winit-uikit" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "block2 0.6.2", "dispatch2", "dpi", @@ -7966,12 +7943,12 @@ version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "ahash", - "bitflags 2.12.1", + "bitflags 2.13.0", "calloop", "cursor-icon", "dpi", "libc", - "memmap2 0.9.10", + "memmap2 0.9.11", "raw-window-handle", "rustix 1.1.4", "sctk-adwaita", @@ -7992,7 +7969,7 @@ version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "atomic-waker", - "bitflags 2.12.1", + "bitflags 2.13.0", "concurrent-queue", "cursor-icon", "dpi", @@ -8013,7 +7990,7 @@ name = "winit-win32" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "cursor-icon", "dpi", "raw-window-handle", @@ -8029,7 +8006,7 @@ name = "winit-x11" version = "0.31.0-beta.2" source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "bytemuck", "calloop", "cursor-icon", @@ -8056,100 +8033,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "wit-bindgen" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -dependencies = [ - "wit-bindgen-rust-macro", -] - [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "wit-bindgen-core" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" -dependencies = [ - "anyhow", - "heck 0.5.0", - "wit-parser", -] - -[[package]] -name = "wit-bindgen-rust" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" -dependencies = [ - "anyhow", - "heck 0.5.0", - "indexmap 2.14.0", - "prettyplease", - "syn", - "wasm-metadata", - "wit-bindgen-core", - "wit-component", -] - -[[package]] -name = "wit-bindgen-rust-macro" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" -dependencies = [ - "anyhow", - "prettyplease", - "proc-macro2", - "quote", - "syn", - "wit-bindgen-core", - "wit-bindgen-rust", -] - -[[package]] -name = "wit-component" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" -dependencies = [ - "anyhow", - "bitflags 2.12.1", - "indexmap 2.14.0", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-encoder", - "wasm-metadata", - "wasmparser", - "wit-parser", -] - -[[package]] -name = "wit-parser" -version = "0.244.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" -dependencies = [ - "anyhow", - "id-arena", - "indexmap 2.14.0", - "log", - "semver", - "serde", - "serde_derive", - "serde_json", - "unicode-xid", - "wasmparser", -] - [[package]] name = "write16" version = "1.0.0" @@ -8213,7 +8102,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#546a6c45210574caed9a3e51446aa8ad622d3627" +source = "git+https://github.com/pop-os/cosmic-panel#45f03a3864a9385349be3ca13202553280e667d4" dependencies = [ "serde", "wayland-protocols-wlr", @@ -8259,7 +8148,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" dependencies = [ "libc", - "memmap2 0.9.10", + "memmap2 0.9.11", "xkeysym", ] @@ -8270,7 +8159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a974f48060a14e95705c01f24ad9c3345022f4d97441b8a36beb7ed5c4a02d" dependencies = [ "libc", - "memmap2 0.9.10", + "memmap2 0.9.11", "xkeysym", ] @@ -8280,7 +8169,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.12.1", + "bitflags 2.13.0", "dlib", "log", "once_cell", @@ -8337,9 +8226,9 @@ checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" [[package]] name = "yoke" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -8464,18 +8353,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.48" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" dependencies = [ "proc-macro2", "quote", @@ -8505,9 +8394,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" [[package]] name = "zerotrie" diff --git a/Cargo.toml b/Cargo.toml index 8c94e4b8..ec720c7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,20 +70,20 @@ lto = "thin" [workspace.metadata.cargo-machete] ignored = ["libcosmic"] -[patch."https://github.com/pop-os/libcosmic"] +# [patch."https://github.com/pop-os/libcosmic"] # cosmic-config = { path = "../libcosmic/cosmic-config" } # libcosmic = { path = "../libcosmic" } # iced_futures = { path = "../libcosmic/iced/futures" } -cosmic-config = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } -libcosmic = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } -iced_futures = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } +# cosmic-config = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } +# libcosmic = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } +# iced_futures = { git = "https://github.com/pop-os/libcosmic//", branch = "theme-v2" } [patch."https://github.com/smithay/client-toolkit.git"] sctk = { package = "smithay-client-toolkit", version = "0.20.0" } [patch."https://github.com/pop-os/cosmic-protocols"] -cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "a7d2d7a" } -cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "a7d2d7a" } +cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "32283d7" } +cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "32283d7" } # [patch.'https://github.com/pop-os/dbus-settings-bindings'] # cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" } diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index 83c4bd69..508bd6e8 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -313,7 +313,7 @@ impl cosmic::Application for Audio { (100, &[][..]) }; - let popup_settings = app.core.applet.get_popup_settings( + let mut popup_settings = app.core.applet.get_popup_settings( app.core.main_window_id().unwrap(), new_id, None, diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index efa1f18e..d66632ab 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -1761,7 +1761,7 @@ impl cosmic::Application for CosmicNetworkApplet { .icon_size(16) .on_press(Message::ResetFailedKnownSsid( known.ssid.to_string(), - known.hw_address, + known.hw_address.clone(), )) .into(), ); @@ -1777,12 +1777,14 @@ impl cosmic::Application for CosmicNetworkApplet { | DeviceState::Unknown | DeviceState::Unmanaged | DeviceState::Disconnected - | DeviceState::NeedAuth => { - btn.on_press(Message::Connect(known.ssid.clone(), known.hw_address)) - } - DeviceState::Activated => { - btn.on_press(Message::Disconnect(known.ssid.clone(), known.hw_address)) - } + | DeviceState::NeedAuth => btn.on_press(Message::Connect( + known.ssid.clone(), + known.hw_address.clone(), + )), + DeviceState::Activated => btn.on_press(Message::Disconnect( + known.ssid.clone(), + known.hw_address.clone(), + )), _ => btn, }; known_wifi.push(Element::from( From fddf3d569b5a68b8970038308ba066cee7414dde Mon Sep 17 00:00:00 2001 From: William Fish Date: Thu, 2 Jul 2026 17:02:40 +0100 Subject: [PATCH 41/84] fix(status-area): forward SNI scroll events (#1431) StatusNotifierItems can expose a Scroll(int delta, string orientation) method for tray hosts to call when the user wheels over an item. The status-area applet handled activation and context menus, but did not forward wheel events to that method. Track the hovered tray item only while the pointer is over an icon, ignore wheel events already captured by widgets, accumulate fine-grained wheel deltas into discrete scroll steps, and call Scroll on the item proxy. Add unit coverage for the delta/orientation mapping and pixel accumulation. Signed-off-by: William Fish --- .../src/components/app.rs | 114 ++++++++++++++++-- .../src/subscriptions/status_notifier_item.rs | 2 + 2 files changed, 109 insertions(+), 7 deletions(-) diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 1071d7ac..3ad8c6ff 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -9,11 +9,14 @@ use cosmic::{ }, cctk::sctk::reexports::calloop, iced::{ - self, Length, Subscription, + self, + Event::Mouse, + Length, Subscription, event, + mouse::{self, ScrollDelta}, platform_specific::shell::commands::popup::{destroy_popup, get_popup}, - theme::Style, window, }, + scroll::{DiscreteScrollDelta, DiscreteScrollState}, surface, widget::{container, mouse_area}, }; @@ -33,7 +36,8 @@ pub enum Msg { StatusMenu((usize, status_menu::Msg)), StatusNotifier(status_notifier_watcher::Event), TogglePopup(usize), - Hovered(usize), + Hovered(Option), + WheelScrolled(ScrollDelta), Surface(surface::Action), ToggleOverflow, HoveredOverflow, @@ -49,6 +53,8 @@ pub(crate) struct App { max_menu_id: usize, popup: Option, overflow_popup: Option, + hovered_menu: Option, + scroll_states: BTreeMap, token_tx: Option>, } @@ -103,9 +109,10 @@ impl App { let overflow_index = self.overflow_index().unwrap_or(0); let children = self.menus.iter().skip(overflow_index).map(|(id, menu)| { mouse_area( - menu_icon_button(&self.core.applet, &menu).on_press_down(Msg::TogglePopup(*id)), + menu_icon_button(&self.core.applet, menu).on_press_down(Msg::TogglePopup(*id)), ) - .on_enter(Msg::Hovered(*id)) + .on_enter(Msg::Hovered(Some(*id))) + .on_exit(Msg::Hovered(None)) .into() }); @@ -210,6 +217,7 @@ impl cosmic::Application for App { { let id = *id; self.menus.remove(&id); + self.scroll_states.remove(&id); if self.open_menu == Some(id) { self.open_menu = None; if let Some(popup_id) = self.popup { @@ -312,6 +320,10 @@ impl cosmic::Application for App { } }, Msg::Hovered(id) => { + self.hovered_menu = id; + let Some(id) = id else { + return Task::none(); + }; let mut cmds = Vec::new(); if let Some(old_id) = self.open_menu.take() { if old_id != id { @@ -361,6 +373,19 @@ impl cosmic::Application for App { cmds.push(get_popup(popup_settings)); Task::batch(cmds) } + Msg::WheelScrolled(delta) => { + let Some(id) = self.hovered_menu else { + return Task::none(); + }; + let discrete_delta = self.scroll_states.entry(id).or_default().update(delta); + let Some((delta, orientation)) = discrete_scroll_delta(discrete_delta) else { + return Task::none(); + }; + let Some(menu) = self.menus.get(&id) else { + return Task::none(); + }; + scroll(id, menu.item.item_proxy().clone(), delta, orientation) + } Msg::Surface(a) => { return cosmic::task::message(cosmic::Action::Cosmic( cosmic::app::Action::Surface(a), @@ -405,6 +430,7 @@ impl cosmic::Application for App { } } Msg::HoveredOverflow => { + self.hovered_menu = None; let mut cmds = Vec::new(); if self.overflow_popup.is_some() { // If we already have an overflow popup, do nothing @@ -460,6 +486,12 @@ impl cosmic::Application for App { subscriptions.push(menu.subscription(is_open).with(*id).map(Msg::StatusMenu)); } subscriptions.push(activation_token_subscription(0).map(Msg::Token)); + subscriptions.push(event::listen_with(|e, status, _| match (e, status) { + (Mouse(mouse::Event::WheelScrolled { delta }), event::Status::Ignored) => { + Some(Msg::WheelScrolled(delta)) + } + _ => None, + })); iced::Subscription::batch(subscriptions) } @@ -472,9 +504,10 @@ impl cosmic::Application for App { .iter() .take(overflow_index.unwrap_or(self.menus.len())) .map(|(id, menu)| { - mouse_area(menu_icon_button(&self.core.applet, &menu).on_press(Msg::Activate(*id))) + mouse_area(menu_icon_button(&self.core.applet, menu).on_press(Msg::Activate(*id))) .on_right_press(Msg::TogglePopup(*id)) - .on_enter(Msg::Hovered(*id)) + .on_enter(Msg::Hovered(Some(*id))) + .on_exit(Msg::Hovered(None)) .into() }); @@ -570,6 +603,33 @@ fn activate( }) } +fn scroll( + id: usize, + item_proxy: crate::subscriptions::status_notifier_item::StatusNotifierItemProxy<'static>, + delta: i32, + orientation: &'static str, +) -> Task> { + Task::future(async move { + match item_proxy.scroll(delta, orientation).await { + Ok(_) => cosmic::action::app(Msg::None), + Err(err) => { + tracing::error!("Scroll failed for {}: {}", id, err); + cosmic::action::app(Msg::None) + } + } + }) +} + +fn discrete_scroll_delta(delta: DiscreteScrollDelta) -> Option<(i32, &'static str)> { + if delta.y != 0 { + Some((delta.y as i32, "vertical")) + } else if delta.x != 0 { + Some((delta.x as i32, "horizontal")) + } else { + None + } +} + fn menu_icon_button<'a>( applet: &'a cosmic::applet::Context, menu: &'a status_menu::State, @@ -614,3 +674,43 @@ fn menu_icon_button<'a>( pub fn main() -> iced::Result { cosmic::applet::run::(()) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn discrete_scroll_prefers_vertical_delta() { + assert_eq!( + discrete_scroll_delta(cosmic::scroll::DiscreteScrollDelta { x: 4, y: -2 }), + Some((-2, "vertical")) + ); + } + + #[test] + fn discrete_scroll_uses_horizontal_delta_when_vertical_is_zero() { + assert_eq!( + discrete_scroll_delta(cosmic::scroll::DiscreteScrollDelta { x: 3, y: 0 }), + Some((3, "horizontal")) + ); + } + + #[test] + fn discrete_scroll_ignores_zero_delta() { + assert_eq!( + discrete_scroll_delta(cosmic::scroll::DiscreteScrollDelta { x: 0, y: 0 }), + None + ); + } + + #[test] + fn pixel_scroll_accumulates_before_emitting_discrete_delta() { + let mut state = cosmic::scroll::DiscreteScrollState::default(); + + let first = state.update(ScrollDelta::Pixels { x: 0.0, y: 12.0 }); + assert_eq!(discrete_scroll_delta(first), None); + + let second = state.update(ScrollDelta::Pixels { x: 0.0, y: 12.0 }); + assert_eq!(discrete_scroll_delta(second), Some((1, "vertical"))); + } +} diff --git a/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs b/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs index c03f0f54..2c3d4904 100644 --- a/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs +++ b/cosmic-applet-status-area/src/subscriptions/status_notifier_item.rs @@ -202,6 +202,8 @@ pub trait StatusNotifierItem { fn activate(&self, x: i32, y: i32) -> zbus::Result<()>; fn secondary_activate(&self, x: i32, y: i32) -> zbus::Result<()>; + + fn scroll(&self, delta: i32, orientation: &str) -> zbus::Result<()>; } #[derive(Clone, Debug)] From d726dd890e0ff3530581766d35cd3824bcf1980d Mon Sep 17 00:00:00 2001 From: Ilia Malanin Date: Mon, 29 Jun 2026 12:30:30 +0200 Subject: [PATCH 42/84] fix(bluetooth): do not filter out already found devices --- cosmic-applet-bluetooth/src/bluetooth.rs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/cosmic-applet-bluetooth/src/bluetooth.rs b/cosmic-applet-bluetooth/src/bluetooth.rs index cc3b693d..5184aa6a 100644 --- a/cosmic-applet-bluetooth/src/bluetooth.rs +++ b/cosmic-applet-bluetooth/src/bluetooth.rs @@ -855,13 +855,7 @@ async fn bluer_state(adapter: &Adapter) -> BluerState { #[inline(never)] async fn build_device_list(mut devices: Vec, adapter: &Adapter) -> Vec { - let addrs: Vec
= adapter - .device_addresses() - .await - .unwrap_or_default() - .into_iter() - .filter(|addr| !devices.iter().any(|d| d.address == *addr)) - .collect(); + let addrs = adapter.device_addresses().await.unwrap_or_default(); devices.clear(); if addrs.len() > devices.capacity() { From 1ce1d39ea3c493802fd2c0b571d84e55ec9b2e73 Mon Sep 17 00:00:00 2001 From: leyoda Date: Fri, 24 Apr 2026 12:39:19 +0200 Subject: [PATCH 43/84] yoda: dock icon hover magnification (macOS Tahoe-style, phase B v1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First pass at the signature macOS Dock effect — the icon under the pointer grows, adjacent icons stay at base size. Full fisheye (smooth bell-curve scaling on neighbors) can be a later iteration. Changes in cosmic-app-list/src/app.rs: - CosmicAppList gains a hovered_dock_item: Option auto-initialized to None via #[derive(Default)]. - New Message::DockItemHover(Option) handled in update() by just writing the field; view() then reads it to decide scale. - DockItem::as_icon gains an icon_scale: f32 parameter. Inside it the cosmic_icon width/height = (base_icon_size * icon_scale) clamped to u16; indicator dot and other surrounding layout stay at base size so only the icon visually bulges. - New App::icon_scale_for(id) helper: 1.3 if Some(id) == hovered, 1.0 otherwise. Single place to tune the magnification factor. - The two main dock rows (favorites + filtered_active_list) wrap their rendered applet_tooltip in widget::mouse_area with on_enter(DockItemHover(Some(id))) / on_exit(DockItemHover(None)) and call icon_scale_for before rendering. - The three remaining as_icon call sites (DnD preview, favorites overflow popup, active overflow popup) pass icon_scale = 1.0 — hover magnification on those surfaces would look jittery and isn't needed anyway. Build: cargo build --release -p cosmic-app-list (≈ 7s). Binary installed at /usr/local/bin/cosmic-app-list, backup kept as .pre-magnification. --- cosmic-app-list/src/app.rs | 111 +++++++++++++++++++++++++++++++------ 1 file changed, 95 insertions(+), 16 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 932ffd6c..a6b967f7 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -187,6 +187,11 @@ impl DockItem { dot_border_radius: [f32; 4], window_id: window::Id, filter: Option<&dyn Fn(&ToplevelInfo) -> bool>, + // Yoda: multiplier on the computed icon size (1.0 = default, + // >1.0 = magnified e.g. on hover for the macOS Tahoe effect). + // Applied to the icon's rendered width/height only — indicator + // dot and surrounding layout stay at base size. + icon_scale: f32, ) -> Element<'_, Message> { let Self { toplevels, @@ -205,17 +210,35 @@ impl DockItem { }; let toplevel_count = filtered_toplevels.len(); + // Cairo-like : pastille plus petite + atténuée quand toutes les fenêtres + // de cette app sont minimisées. + let all_minimized = toplevel_count > 0 + && filtered_toplevels + .iter() + .all(|(info, _)| info.state.contains(&State::Minimized)); + let app_icon = AppletIconData::new(applet); + // Yoda: scaled icon size for hover magnification. Clamped so + // tiny floats don't round to 0 and huge ones stay within u16. + let scaled_icon_size = ((f32::from(app_icon.icon_size) * icon_scale).round() as i32) + .clamp(1, u16::MAX as i32) as u16; let cosmic_icon = cosmic::widget::icon( fde::IconSource::from_unknown(desktop_info.icon().unwrap_or_default()).as_cosmic_icon(), ) // sets the preferred icon size variant .size(128) - .width(app_icon.icon_size.into()) - .height(app_icon.icon_size.into()); + .width(scaled_icon_size.into()) + .height(scaled_icon_size.into()); let indicator = { + // Padding réduit quand minimisée → pastille plus petite. + let effective_radius = if all_minimized { + (app_icon.dot_radius * 0.55).max(1.0) + } else { + app_icon.dot_radius + }; + let container = if toplevel_count <= 1 { vertical_space().height(Length::Fixed(0.0)) } else { @@ -229,22 +252,34 @@ impl DockItem { } } .apply(container) - .padding(app_icon.dot_radius); + .padding(effective_radius); if toplevel_count == 0 { container } else { - container.class(theme::Container::custom(move |theme| container::Style { - background: if is_focused { - Some(Background::Color(theme.cosmic().accent_color().into())) + container.class(theme::Container::custom(move |theme| { + let cosmic = theme.cosmic(); + let accent: iced::Color = cosmic.accent_color().into(); + let on_bg: iced::Color = cosmic.on_bg_color().into(); + // Teinte neutre atténuée quand toutes les fenêtres sont minimisées. + let muted = iced::Color { a: 0.45, ..on_bg }; + + let fill = if all_minimized { + muted + } else if is_focused { + accent } else { - Some(Background::Color(theme.cosmic().on_bg_color().into())) - }, - border: Border { - radius: dot_border_radius.into(), + on_bg + }; + + container::Style { + background: Some(Background::Color(fill)), + border: Border { + radius: dot_border_radius.into(), + ..Default::default() + }, ..Default::default() - }, - ..Default::default() + } })) } }; @@ -374,6 +409,9 @@ struct CosmicAppList { output_list: FxHashMap, locales: Vec, hovered_toplevel: Option, + /// Yoda: which dock icon the pointer is currently over (for hover + /// magnification). None = no dock icon hovered. + hovered_dock_item: Option, overflow_favorites_popup: Option, overflow_active_popup: Option, } @@ -389,6 +427,9 @@ enum Message { Wayland(WaylandUpdate), PinApp(u32), UnpinApp(u32), + /// Yoda: pointer entered (Some) or left (None) a dock icon — drives + /// the macOS Tahoe-style hover magnification effect. + DockItemHover(Option), Popup(u32, window::Id), Pressed(window::Id), ToplevelListPopup(u32, window::Id), @@ -647,6 +688,17 @@ impl CosmicAppList { .collect::>(); } + /// Yoda: macOS-Tahoe-style hover magnification. Returns the icon + /// size multiplier for a given dock item — 1.3× when the pointer + /// is over it, 1.0× otherwise. Called from the view() icon builders. + fn icon_scale_for(&self, id: &DockItemId) -> f32 { + if self.hovered_dock_item.as_ref() == Some(id) { + 1.3 + } else { + 1.0 + } + } + fn is_on_current_monitor_and_workspace(&self, toplevel_info: &ToplevelInfo) -> bool { use cosmic_app_list_config::ToplevelFilter; @@ -1582,6 +1634,9 @@ impl cosmic::Application for CosmicAppList { Message::GpuRequest(gpus) => { self.gpus = gpus; } + Message::DockItemHover(id) => { + self.hovered_dock_item = id; + } Message::OpenActive => { let create_new = self.overflow_active_popup.is_none(); let mut cmds = vec![self.close_popups()]; @@ -1763,7 +1818,9 @@ impl cosmic::Application for CosmicAppList { .filter(|(info, _)| self.is_on_current_monitor_and_workspace(info)) .any(|y| focused_item.contains(&y.0.foreign_toplevel)); - self.core + let dock_id = dock_item.id; + let icon_scale = self.icon_scale_for(&DockItemId::from(dock_id)); + let tooltip = self.core .applet .applet_tooltip::( dock_item.as_icon( @@ -1776,6 +1833,7 @@ impl cosmic::Application for CosmicAppList { dot_radius, self.core.main_window_id().unwrap(), Some(&|info| self.is_on_current_monitor_and_workspace(info)), + icon_scale, ), dock_item .desktop_info @@ -1785,7 +1843,10 @@ impl cosmic::Application for CosmicAppList { self.popup.is_some(), Message::Surface, None, - ) + ); + cosmic::widget::mouse_area(tooltip) + .on_enter(Message::DockItemHover(Some(DockItemId::from(dock_id)))) + .on_exit(Message::DockItemHover(None)) .into() }) .collect(); @@ -1836,6 +1897,10 @@ impl cosmic::Application for CosmicAppList { dot_radius, self.core.main_window_id().unwrap(), Some(&|info| self.is_on_current_monitor_and_workspace(info)), + // Yoda: no magnification on DnD-preview icons — these + // float around as the user drags, so static 1.0 is + // less visually confusing. + 1.0, ), ); } else if self.is_listening_for_dnd && self.pinned_list.is_empty() { @@ -1875,8 +1940,10 @@ impl cosmic::Application for CosmicAppList { .iter() .filter(|(info, _)| self.is_on_current_monitor_and_workspace(info)) .any(|y| focused_item.contains(&y.0.foreign_toplevel)); + let dock_id = dock_item.id; + let icon_scale = self.icon_scale_for(&DockItemId::from(dock_id)); - self.core + let tooltip = self.core .applet .applet_tooltip( dock_item.as_icon( @@ -1889,6 +1956,7 @@ impl cosmic::Application for CosmicAppList { dot_radius, self.core.main_window_id().unwrap(), Some(&|info| self.is_on_current_monitor_and_workspace(info)), + icon_scale, ), dock_item .desktop_info @@ -1898,7 +1966,10 @@ impl cosmic::Application for CosmicAppList { self.popup.is_some(), Message::Surface, None, - ) + ); + cosmic::widget::mouse_area(tooltip) + .on_enter(Message::DockItemHover(Some(DockItemId::from(dock_id)))) + .on_exit(Message::DockItemHover(None)) .into() }) .collect(); @@ -2313,6 +2384,10 @@ impl cosmic::Application for CosmicAppList { dot_radius, id, Some(&|info| self.is_on_current_monitor_and_workspace(info)), + // Yoda: icons in the overflow popup are + // already smaller-grid — keep them at 1.0 + // so the popup doesn't reshuffle on hover. + 1.0, ), dock_item .desktop_info @@ -2421,6 +2496,10 @@ impl cosmic::Application for CosmicAppList { dot_radius, id, Some(&|info| self.is_on_current_monitor_and_workspace(info)), + // Yoda: popup icons stay at 1.0 (hover + // magnification is applied to the main + // dock row only). + 1.0, ), dock_item .desktop_info From 6f88c6fea441347badf38ac206614127e939c966 Mon Sep 17 00:00:00 2001 From: leyoda Date: Fri, 24 Apr 2026 13:13:52 +0200 Subject: [PATCH 44/84] yoda: fisheye magnification for dock hover (phase B v2 / c) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the binary 1.3× hover with a true gaussian bell curve — the hovered icon still peaks at ~1.35×, but the ±1 neighbours also bulge noticeably, ±2 a bit, and ±3+ relax to 1.0×. Footprint ~5 icons wide, matching the macOS Dock fisheye feel. Implementation in fn icon_scale_for(id): - Reads the hovered icon's and the current icon's bounds from self.rectangles (already populated by the existing RectangleTracker subscription — no new plumbing). - Distance = |this_center - hovered_center| along the panel's long axis (horizontal for Top/Bottom anchors, vertical for Left/Right). - sigma = hovered_extent * 1.4 so the bell's half-width matches one icon width (neighbors clearly pulled, far icons untouched). - scale = 1.0 + PEAK * exp(-(d/sigma)²) with PEAK = 0.35. - Falls back to binary 1.35×/1.0× when rectangle data isn't populated yet (first render / resize) — visibly responsive even before the tracker catches up. No widget signature changes vs v1, just a smarter formula. All five as_icon call sites already pass the result of icon_scale_for so this update propagates everywhere. Still on the TODO list: smooth animation (b). Right now icon→icon transitions snap instantly; a smoothed_hover_center + tick subscription would lerp it. Deferred to a follow-up commit. --- cosmic-app-list/src/app.rs | 59 ++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index a6b967f7..7fd4337f 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -688,15 +688,62 @@ impl CosmicAppList { .collect::>(); } - /// Yoda: macOS-Tahoe-style hover magnification. Returns the icon - /// size multiplier for a given dock item — 1.3× when the pointer - /// is over it, 1.0× otherwise. Called from the view() icon builders. + /// Yoda: macOS-Tahoe fisheye-style magnification. Returns the + /// per-icon size multiplier based on the distance (in pixels) from + /// the currently hovered icon's center to this icon's center. + /// + /// Uses a gaussian bell curve so the hovered icon peaks at + /// 1.0 + PEAK, immediate neighbors still bulge noticeably, and icons + /// further away relax back to 1.0× — that's the smooth neighbour + /// deformation people associate with the macOS Dock. + /// + /// Falls back to binary 1.3×/1.0× when the rectangle tracker hasn't + /// populated yet (first render, or just after layout changes). fn icon_scale_for(&self, id: &DockItemId) -> f32 { - if self.hovered_dock_item.as_ref() == Some(id) { - 1.3 + const PEAK: f32 = 0.35; + // sigma expressed in multiples of the hovered icon's size — + // 1.4 means the ±1 neighbors sit ~0.7σ away and still bulge + // visibly, while ±3+ has collapsed to ~1.0× (fisheye footprint + // close to 5 icons wide, Tahoe-ish). + const SIGMA_FACTOR: f32 = 1.4; + + let Some(hovered_id) = self.hovered_dock_item.as_ref() else { + return 1.0; + }; + + // Without tracker data we can't compute distance — still peak on + // the hovered one so something visibly responds immediately. + let (Some(hovered_rect), Some(this_rect)) = + (self.rectangles.get(hovered_id), self.rectangles.get(id)) + else { + return if id == hovered_id { 1.0 + PEAK } else { 1.0 }; + }; + + let is_horizontal = matches!( + self.core.applet.anchor, + PanelAnchor::Top | PanelAnchor::Bottom + ); + let hovered_center = if is_horizontal { + hovered_rect.x + hovered_rect.width / 2.0 } else { - 1.0 + hovered_rect.y + hovered_rect.height / 2.0 + }; + let this_center = if is_horizontal { + this_rect.x + this_rect.width / 2.0 + } else { + this_rect.y + this_rect.height / 2.0 + }; + let distance = (this_center - hovered_center).abs(); + let icon_extent = if is_horizontal { + hovered_rect.width + } else { + hovered_rect.height } + .max(1.0); + let sigma = icon_extent * SIGMA_FACTOR; + // exp(-t²) bell curve, t = distance / sigma + let t = distance / sigma; + 1.0 + PEAK * (-t * t).exp() } fn is_on_current_monitor_and_workspace(&self, toplevel_info: &ToplevelInfo) -> bool { From d5c2a19e9542f9bd5ba832c202182b70c3c75aa6 Mon Sep 17 00:00:00 2001 From: leyoda Date: Fri, 24 Apr 2026 14:15:43 +0200 Subject: [PATCH 45/84] yoda: smooth animated fisheye for dock hover (phase B v3, closes b) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inter-icon hover changes were snapping because icon_scale_for read the hovered icon's real rectangle directly. This adds a small animation layer so the bell center lerps toward the target and the whole effect fades in/out at the dock's edges. CosmicAppList gains three fields: - anim_hover_center: Option<(f32, f32)> — virtual cursor position, chases the hovered icon's center across ticks. - anim_hover_intensity: f32 (0..1) — global fade-in/out of the fisheye. Target 1.0 while a dock icon is hovered, 0.0 otherwise. - anim_last_tick: Option — for dt-based exponential smoothing (time-constant tau = 60ms, ~99% of target reached in ~120ms). A new Message::AnimTick(Instant) is emitted at ~60 fps by a conditional iced::time::every subscription — only active when the pointer is over a dock icon OR intensity hasn't faded back to ~0 yet, so the panel stays idle when no one is hovering the dock. icon_scale_for now reads anim_hover_center instead of rectangles[hovered] and multiplies the bell's peak by anim_hover_intensity. Behaviour: - Pointer slides A → B: bell glides continuously, both icons animate. - Pointer enters dock: icons inflate smoothly over ~120 ms. - Pointer leaves dock: icons deflate smoothly over ~120 ms. Fallback paths (first frame, missing rectangles) still respond instantly so the feature never looks 'stuck' before the animation kicks in. --- cosmic-app-list/src/app.rs | 120 ++++++++++++++++++++++++++++++++----- 1 file changed, 104 insertions(+), 16 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 7fd4337f..d4d579a1 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -412,6 +412,18 @@ struct CosmicAppList { /// Yoda: which dock icon the pointer is currently over (for hover /// magnification). None = no dock icon hovered. hovered_dock_item: Option, + /// Yoda: animated "virtual cursor" center used by the fisheye + /// formula — lerps toward the real hovered icon's center on each + /// AnimTick, so the bell curve slides smoothly from one icon to the + /// next instead of snapping. + anim_hover_center: Option<(f32, f32)>, + /// Yoda: fade-in/out intensity of the magnification effect + /// (0.0 = icons flat, 1.0 = full fisheye). Targets 1.0 while the + /// pointer is over any dock icon, 0.0 otherwise. Lerped on AnimTick. + anim_hover_intensity: f32, + /// Yoda: timestamp of the last AnimTick, for dt-based exponential + /// smoothing. `None` on first tick. + anim_last_tick: Option, overflow_favorites_popup: Option, overflow_active_popup: Option, } @@ -430,6 +442,10 @@ enum Message { /// Yoda: pointer entered (Some) or left (None) a dock icon — drives /// the macOS Tahoe-style hover magnification effect. DockItemHover(Option), + /// Yoda: ticked at ~60fps by the animation subscription. Advances + /// anim_hover_center + anim_hover_intensity toward their targets so + /// the fisheye effect transitions smoothly instead of snapping. + AnimTick(std::time::Instant), Popup(u32, window::Id), Pressed(window::Id), ToplevelListPopup(u32, window::Id), @@ -699,6 +715,10 @@ impl CosmicAppList { /// /// Falls back to binary 1.3×/1.0× when the rectangle tracker hasn't /// populated yet (first render, or just after layout changes). + /// + /// Uses the animated hover center (anim_hover_center) and intensity + /// (anim_hover_intensity) so inter-icon transitions slide smoothly + /// and the whole effect fades in/out at the dock's edges. fn icon_scale_for(&self, id: &DockItemId) -> f32 { const PEAK: f32 = 0.35; // sigma expressed in multiples of the hovered icon's size — @@ -707,43 +727,54 @@ impl CosmicAppList { // close to 5 icons wide, Tahoe-ish). const SIGMA_FACTOR: f32 = 1.4; - let Some(hovered_id) = self.hovered_dock_item.as_ref() else { + // No intensity at all → skip the rest. + if self.anim_hover_intensity < 0.001 { return 1.0; + } + + // Prefer the animated center (smooth); fall back to the real + // hovered icon's center (first render, before tick fires). + let hover_center = self.anim_hover_center.or_else(|| { + let hovered_id = self.hovered_dock_item.as_ref()?; + let r = self.rectangles.get(hovered_id)?; + Some((r.x + r.width / 2.0, r.y + r.height / 2.0)) + }); + let Some(hover_center) = hover_center else { + // No coords yet — visibly peak on the exact hovered id so + // the very first frame still responds. + return if self.hovered_dock_item.as_ref() == Some(id) { + 1.0 + PEAK * self.anim_hover_intensity + } else { + 1.0 + }; }; - // Without tracker data we can't compute distance — still peak on - // the hovered one so something visibly responds immediately. - let (Some(hovered_rect), Some(this_rect)) = - (self.rectangles.get(hovered_id), self.rectangles.get(id)) - else { - return if id == hovered_id { 1.0 + PEAK } else { 1.0 }; + let this_rect = match self.rectangles.get(id) { + Some(r) => r, + None => return 1.0, }; let is_horizontal = matches!( self.core.applet.anchor, PanelAnchor::Top | PanelAnchor::Bottom ); - let hovered_center = if is_horizontal { - hovered_rect.x + hovered_rect.width / 2.0 - } else { - hovered_rect.y + hovered_rect.height / 2.0 - }; let this_center = if is_horizontal { this_rect.x + this_rect.width / 2.0 } else { this_rect.y + this_rect.height / 2.0 }; - let distance = (this_center - hovered_center).abs(); + let hover_axis = if is_horizontal { hover_center.0 } else { hover_center.1 }; + let distance = (this_center - hover_axis).abs(); let icon_extent = if is_horizontal { - hovered_rect.width + this_rect.width } else { - hovered_rect.height + this_rect.height } .max(1.0); let sigma = icon_extent * SIGMA_FACTOR; // exp(-t²) bell curve, t = distance / sigma let t = distance / sigma; - 1.0 + PEAK * (-t * t).exp() + 1.0 + PEAK * self.anim_hover_intensity * (-t * t).exp() } fn is_on_current_monitor_and_workspace(&self, toplevel_info: &ToplevelInfo) -> bool { @@ -1683,6 +1714,49 @@ impl cosmic::Application for CosmicAppList { } Message::DockItemHover(id) => { self.hovered_dock_item = id; + // Seed the animated center on the very first hover so + // the bell doesn't "fly in" from (0,0). + if self.anim_hover_center.is_none() + && let Some(hovered_id) = self.hovered_dock_item.as_ref() + && let Some(r) = self.rectangles.get(hovered_id) + { + self.anim_hover_center = Some(( + r.x + r.width / 2.0, + r.y + r.height / 2.0, + )); + } + } + Message::AnimTick(now) => { + // dt-based exponential smoothing: reach ~99% of the + // target in ~120ms at 60fps (about 7 ticks). + let dt = self + .anim_last_tick + .map(|prev| now.saturating_duration_since(prev).as_secs_f32()) + .unwrap_or(0.016) + .min(0.1); // clamp so a long pause doesn't snap + self.anim_last_tick = Some(now); + + // Intensity: target 1.0 when any icon is hovered, 0.0 else. + let intensity_target = if self.hovered_dock_item.is_some() { 1.0 } else { 0.0 }; + let tau = 0.060_f32; // time-constant (s); smaller = snappier + let alpha = 1.0 - (-dt / tau).exp(); + self.anim_hover_intensity += (intensity_target - self.anim_hover_intensity) * alpha; + + // Hovered-center smoothing: chase the real rect's center. + if let Some(hovered_id) = self.hovered_dock_item.as_ref() + && let Some(r) = self.rectangles.get(hovered_id) + { + let target = (r.x + r.width / 2.0, r.y + r.height / 2.0); + let current = self.anim_hover_center.unwrap_or(target); + self.anim_hover_center = Some(( + current.0 + (target.0 - current.0) * alpha, + current.1 + (target.1 - current.1) * alpha, + )); + } else if self.anim_hover_intensity < 0.01 { + // Nothing hovered + intensity faded out → forget the + // animated center so the next hover seeds fresh. + self.anim_hover_center = None; + } } Message::OpenActive => { let create_new = self.overflow_active_popup.is_none(); @@ -2605,7 +2679,21 @@ impl cosmic::Application for CosmicAppList { } fn subscription(&self) -> Subscription { + // Yoda: ~60fps animation ticks for the fisheye magnification. + // Only emitted when an animation is actually in progress (hover + // intensity >0 OR still fading out) — keeps the panel idle when + // the pointer is nowhere near the dock. + let anim_active = self.hovered_dock_item.is_some() + || self.anim_hover_intensity > 0.001; + let anim_subscription = if anim_active { + cosmic::iced::time::every(std::time::Duration::from_millis(16)) + .map(Message::AnimTick) + } else { + Subscription::none() + }; + Subscription::batch([ + anim_subscription, wayland_subscription().map(Message::Wayland), listen_with(|e, _, id| match e { cosmic::iced::core::Event::PlatformSpecific(event::PlatformSpecific::Wayland( From c15a879c3168c04c758a6ae4d3d07f7f76545309 Mon Sep 17 00:00:00 2001 From: Votre Nom Date: Sun, 26 Apr 2026 11:10:19 +0200 Subject: [PATCH 46/84] fix(wayland): graceful exit on compositor disconnect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace 3 panicking unwrap() in cosmic-app-list/wayland_handler.rs (event loop dispatch + 2 conn.flush in screencopy) with logged errors that break/return None instead. Wrap cosmic-applets/main.rs entry point in panic::catch_unwind to catch panics propagating from libcosmic/iced/winit (which we cannot patch locally without forking) when the COSMIC compositor closes the Wayland connection at logout. This eliminates the cascade of ~12 SIGABRT coredumps observed at session shutdown. Panic strategy is unwind (default), catch_unwind is sound here. Leyoda 2026 – GPLv3 --- cosmic-app-list/src/wayland_handler.rs | 15 +++++-- cosmic-applets/src/main.rs | 54 +++++++++++++++++--------- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/cosmic-app-list/src/wayland_handler.rs b/cosmic-app-list/src/wayland_handler.rs index 03c16973..d27409dc 100644 --- a/cosmic-app-list/src/wayland_handler.rs +++ b/cosmic-app-list/src/wayland_handler.rs @@ -388,7 +388,10 @@ impl CaptureData { }, ) .unwrap(); - self.conn.flush().unwrap(); + if let Err(err) = self.conn.flush() { + tracing::error!("Wayland flush failed during screencopy session create: {err}"); + return None; + } let formats = session .wait_while(|data| data.formats.is_none()) @@ -437,7 +440,10 @@ impl CaptureData { session: capture_session.clone(), }, ); - self.conn.flush().unwrap(); + if let Err(err) = self.conn.flush() { + tracing::error!("Wayland flush failed during screencopy capture: {err}"); + return None; + } // TODO: wait for server to release buffer? let res = session @@ -709,7 +715,10 @@ pub(crate) fn wayland_handler( if app_data.exit { break; } - event_loop.dispatch(None, &mut app_data).unwrap(); + if let Err(err) = event_loop.dispatch(None, &mut app_data) { + tracing::error!("Wayland event loop terminated: {err}"); + break; + } } } diff --git a/cosmic-applets/src/main.rs b/cosmic-applets/src/main.rs index f62bbf21..dfd541d1 100644 --- a/cosmic-applets/src/main.rs +++ b/cosmic-applets/src/main.rs @@ -12,26 +12,44 @@ fn main() -> cosmic::iced::Result { }; let start = applet.rfind('/').map_or(0, |v| v + 1); - let cmd = &applet.as_str()[start..]; + let cmd = applet.as_str()[start..].to_string(); tracing::info!("Starting `{cmd}` with version {VERSION}"); - match cmd { - "cosmic-app-list" => cosmic_app_list::run(), - "cosmic-applet-a11y" => cosmic_applet_a11y::run(), - "cosmic-applet-audio" => cosmic_applet_audio::run(), - "cosmic-applet-battery" => cosmic_applet_battery::run(), - "cosmic-applet-bluetooth" => cosmic_applet_bluetooth::run(), - "cosmic-applet-minimize" => cosmic_applet_minimize::run(), - "cosmic-applet-network" => cosmic_applet_network::run(), - "cosmic-applet-notifications" => cosmic_applet_notifications::run(), - "cosmic-applet-power" => cosmic_applet_power::run(), - "cosmic-applet-status-area" => cosmic_applet_status_area::run(), - "cosmic-applet-tiling" => cosmic_applet_tiling::run(), - "cosmic-applet-time" => cosmic_applet_time::run(), - "cosmic-applet-workspaces" => cosmic_applet_workspaces::run(), - "cosmic-applet-input-sources" => cosmic_applet_input_sources::run(), - "cosmic-panel-button" => cosmic_panel_button::run(), - _ => Ok(()), + let cmd_for_run = cmd.clone(); + let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(move || { + match cmd_for_run.as_str() { + "cosmic-app-list" => cosmic_app_list::run(), + "cosmic-applet-a11y" => cosmic_applet_a11y::run(), + "cosmic-applet-audio" => cosmic_applet_audio::run(), + "cosmic-applet-battery" => cosmic_applet_battery::run(), + "cosmic-applet-bluetooth" => cosmic_applet_bluetooth::run(), + "cosmic-applet-minimize" => cosmic_applet_minimize::run(), + "cosmic-applet-network" => cosmic_applet_network::run(), + "cosmic-applet-notifications" => cosmic_applet_notifications::run(), + "cosmic-applet-power" => cosmic_applet_power::run(), + "cosmic-applet-status-area" => cosmic_applet_status_area::run(), + "cosmic-applet-tiling" => cosmic_applet_tiling::run(), + "cosmic-applet-time" => cosmic_applet_time::run(), + "cosmic-applet-workspaces" => cosmic_applet_workspaces::run(), + "cosmic-applet-input-sources" => cosmic_applet_input_sources::run(), + "cosmic-panel-button" => cosmic_panel_button::run(), + _ => Ok(()), + } + })); + + match result { + Ok(r) => r, + Err(payload) => { + let msg = payload + .downcast_ref::<&str>() + .map(|s| s.to_string()) + .or_else(|| payload.downcast_ref::().cloned()) + .unwrap_or_else(|| "".to_string()); + tracing::error!( + "`{cmd}` panicked (likely compositor disconnect), exiting cleanly: {msg}" + ); + Ok(()) + } } } From 66392fc42a316c8faac6dce959e05e6760caca0b Mon Sep 17 00:00:00 2001 From: Votre Nom Date: Sun, 26 Apr 2026 11:12:15 +0200 Subject: [PATCH 47/84] chore: add redeploy.sh for /usr/local/bin install MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Builds workspace release, backs up existing binaries, installs cosmic-applets/cosmic-app-list/cosmic-panel-button to /usr/local/bin (precedence over pacman package via $PATH). Leyoda 2026 – GPLv3 --- redeploy.sh | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 redeploy.sh diff --git a/redeploy.sh b/redeploy.sh new file mode 100755 index 00000000..7138a806 --- /dev/null +++ b/redeploy.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# Recompile et déploie le fork local cosmic-applets (multiplexor cosmic-applets + +# binaire séparé cosmic-app-list). +# +# Cibles : /usr/local/bin/cosmic-applets et /usr/local/bin/cosmic-app-list +# (binaires compilés manuellement, hors pacman, qui priment sur ceux du paquet +# via $PATH /usr/local/bin avant /usr/bin). +# +# Branche de déploiement : yoda-dock-magnification (contient les commits +# magnification + le fix Wayland error handling). + +set -euo pipefail + +REPO="/home/lionel/Devels/cosmic-applets" +TARGETS=( + "cosmic-applets" + "cosmic-app-list" + "cosmic-panel-button" +) +BIN_DIR="/usr/local/bin" + +cd "$REPO" + +echo "==> Branche actuelle : $(git branch --show-current)" +echo "==> Build release (workspace)..." +cargo build --release --workspace + +STAMP=$(date +%Y%m%d-%H%M%S) +for bin in "${TARGETS[@]}"; do + src="$REPO/target/release/$bin" + dst="$BIN_DIR/$bin" + + if [[ ! -f "$src" ]]; then + echo "!! Binaire absent après build : $src" >&2 + exit 1 + fi + + if [[ -f "$dst" ]]; then + echo "==> Backup $dst" + sudo cp -a "$dst" "${dst}.bak.${STAMP}" + fi + + echo "==> Install $src -> $dst" + sudo install -m755 "$src" "$dst" +done + +echo "==> Kill des process applet en cours (cosmic-panel relancera à la demande)" +pkill -u "$USER" -f "/usr/local/bin/cosmic-applet" || true +pkill -u "$USER" -f "/usr/local/bin/cosmic-app-list" || true +pkill -u "$USER" -f "/usr/local/bin/cosmic-panel-button" || true + +echo "==> Vérif" +for bin in "${TARGETS[@]}"; do + file "$BIN_DIR/$bin" +done +echo "OK — relogin recommandé pour repartir sur des process applet propres." From c117f172cbb966964bc9daab4312ad9c4f267b67 Mon Sep 17 00:00:00 2001 From: Votre Nom Date: Sun, 26 Apr 2026 14:51:33 +0200 Subject: [PATCH 48/84] fix(audio): accumuler les rafales scroll Pixels au lieu de signum() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avec Wayland axis_v120 (scroll haute-résolution sur souris HID modernes), un cran physique génère 5–8 events ScrollDelta::Pixels (~15–20px chacun). L'ancien code passait chaque sub-event par .signum() puis -1/+1 à sink_volume, donc un seul cran physique faisait varier le volume de 5 à 40% — résultat : scroll up sur l'icône audio panel / dock coupait le son si le volume était déjà bas. Fix : thread_local accumulator des deltas Pixels, émission seulement au passage du seuil de 15px par cran logique. Lines (souris classique sans axis_v120) reste proportionnel y * WHEEL_STEP. round() au lieu de truncation finale pour ne pas perdre les fractions de pourcent. Leyoda 2026 - GPLv3 --- cosmic-applet-audio/src/lib.rs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index 9bd585d9..bd62dfbd 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -581,11 +581,31 @@ impl cosmic::Application for Audio { .icon_button(self.output_icon_name()) .on_press_down(Message::TogglePopup); - const WHEEL_STEP: f32 = 5.0; // 5% per wheel event + const WHEEL_STEP: f32 = 5.0; // 5% par cran logique + // Wayland axis_v120 envoie un cran physique en rafale de plusieurs + // ScrollDelta::Pixels (5–8 events ~15–20px), pour ~120px par cran. On + // accumule ces sub-events dans un thread_local et on n'émet qu'au + // passage d'un seuil — sinon `signum()` faisait croire que chaque + // sub-event = un cran, et un seul cran physique faisait chuter le + // volume jusqu'à 0 ("coupe le son"). + const PIXEL_THRESHOLD: f32 = 15.0; // px par cran logique + std::thread_local! { + static PIXEL_ACC: std::cell::Cell = const { std::cell::Cell::new(0.0) }; + } let btn = crate::mouse_area::MouseArea::new(btn).on_mouse_wheel(|delta| { let scroll_vector = match delta { - iced::mouse::ScrollDelta::Lines { y, .. } => y.signum() * WHEEL_STEP, // -1/0/1 - iced::mouse::ScrollDelta::Pixels { y, .. } => y.signum(), // -1/0/1 + iced::mouse::ScrollDelta::Lines { y, .. } => { + PIXEL_ACC.with(|a| a.set(0.0)); + y * WHEEL_STEP + } + iced::mouse::ScrollDelta::Pixels { y, .. } => { + PIXEL_ACC.with(|acc_cell| { + let acc = acc_cell.get() + y; + let steps = (acc / PIXEL_THRESHOLD).trunc(); + acc_cell.set(acc - steps * PIXEL_THRESHOLD); + steps * WHEEL_STEP + }) + } }; if scroll_vector == 0.0 { return Message::Ignore; @@ -593,7 +613,7 @@ impl cosmic::Application for Audio { let new_volume = (self.model.active_sink.volume as f64 + (scroll_vector as f64)) .clamp(0.0, self.max_sink_volume as f64); - Message::SetSinkVolume(new_volume as u32) + Message::SetSinkVolume(new_volume.round() as u32) }); let mut has_playback_buttons = false; From b4fbfe168a6714c63e161df3e415cc44b1dd6183 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Sat, 23 May 2026 20:49:24 +0200 Subject: [PATCH 49/84] chore: align applets with local stack --- Cargo.toml | 50 ++++++++++++++++--- cosmic-app-list/Cargo.toml | 2 +- .../cosmic-app-list-config/Cargo.toml | 2 +- cosmic-app-list/src/app.rs | 1 + cosmic-applet-a11y/Cargo.toml | 8 ++- cosmic-applet-a11y/src/app.rs | 4 +- cosmic-applet-a11y/src/backend/wayland/mod.rs | 5 +- cosmic-applet-audio/Cargo.toml | 4 +- cosmic-applet-battery/Cargo.toml | 8 ++- cosmic-applet-battery/src/app.rs | 3 +- cosmic-applet-bluetooth/Cargo.toml | 2 +- cosmic-applet-bluetooth/src/app.rs | 5 +- cosmic-applet-bluetooth/src/bluetooth.rs | 3 +- cosmic-applet-input-sources/Cargo.toml | 2 +- cosmic-applet-input-sources/src/lib.rs | 5 +- cosmic-applet-minimize/Cargo.toml | 2 +- cosmic-applet-minimize/src/lib.rs | 4 +- cosmic-applet-network/Cargo.toml | 5 +- cosmic-applet-notifications/Cargo.toml | 2 +- cosmic-applet-power/Cargo.toml | 2 +- cosmic-applet-power/src/lib.rs | 9 +--- cosmic-applet-status-area/Cargo.toml | 2 +- .../src/components/app.rs | 3 +- .../src/components/status_menu.rs | 2 +- .../src/status_notifier_watcher.rs | 9 ++-- cosmic-applet-tiling/Cargo.toml | 2 +- cosmic-applet-tiling/src/window.rs | 3 +- cosmic-applet-time/Cargo.toml | 2 +- cosmic-applet-time/src/window.rs | 5 +- cosmic-applet-workspaces/Cargo.toml | 2 +- .../src/components/app.rs | 1 + cosmic-applets/Cargo.toml | 2 +- cosmic-panel-button/Cargo.toml | 2 +- cosmic-panel-button/src/lib.rs | 2 +- rust-toolchain.toml | 2 +- 35 files changed, 96 insertions(+), 71 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f97b6b28..40471449 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,11 +25,11 @@ resolver = "3" [workspace.dependencies] anyhow = "1.0.102" -cctk = { git = "https://github.com/pop-os/cosmic-protocols", package = "cosmic-client-toolkit", rev = "d0e95be" } +cctk = { package = "cosmic-client-toolkit", path = "../cosmic-protocols/client-toolkit" } cosmic-applets-config = { path = "cosmic-applets-config" } -cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", default-features = false, features = [ +cosmic-protocols = { path = "../cosmic-protocols", default-features = false, features = [ "client", -], rev = "d0e95be" } +]} futures = "0.3" futures-util = "0.3" @@ -38,7 +38,7 @@ i18n-embed = { version = "0.16.0", features = [ "desktop-requester", ] } i18n-embed-fl = "0.10" -libcosmic = { git = "https://github.com/pop-os/libcosmic", default-features = false, features = [ +cosmic = { package = "libcosmic-yoda", path = "../libcosmic", default-features = false, features = [ "applet", "applet-token", "dbus-config", @@ -58,7 +58,7 @@ tracing-subscriber = { version = "0.3.22", features = ["env-filter"] } tracing-log = "0.2.0" tokio = { version = "1.49.0", features = ["full"] } # cosmic-config = { path = "../libcosmic/cosmic-config" } -cosmic-config = { git = "https://github.com/pop-os/libcosmic" } +cosmic-config = { path = "../libcosmic/cosmic-config" } serde = { version = "1.0.228", features = ["derive"] } zlink = "0.5.0" @@ -82,12 +82,48 @@ ignored = ["libcosmic"] # winit = { git = "https://github.com/rust-windowing/winit.git", rev = "241b7a80bba96c91fa3901729cd5dec66abb9be4" } # winit = { path = "../winit" } +[patch."https://github.com/pop-os/libcosmic"] +cosmic-config = { path = "/home/lionel/Projets/COSMIC/libcosmic/cosmic-config" } +cosmic-theme = { path = "/home/lionel/Projets/COSMIC/libcosmic/cosmic-theme" } +iced = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced" } +iced_accessibility = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/accessibility" } +iced_core = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/core" } +iced_futures = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/futures" } +iced_graphics = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/graphics" } +iced_renderer = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/renderer" } +iced_runtime = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/runtime" } +iced_tiny_skia = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/tiny_skia" } +iced_wgpu = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/wgpu" } +iced_widget = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/widget" } +iced_winit = { path = "/home/lionel/Projets/COSMIC/libcosmic/iced/winit" } + [patch."https://github.com/smithay/client-toolkit.git"] sctk = { package = "smithay-client-toolkit", version = "0.20.0" } [patch."https://github.com/pop-os/cosmic-protocols"] -cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", branch = "main" } -cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", branch = "main" } +cosmic-protocols = { path = "/home/lionel/Projets/COSMIC/cosmic-protocols" } +cosmic-client-toolkit = { path = "/home/lionel/Projets/COSMIC/cosmic-protocols/client-toolkit" } + +[patch."https://github.com/pop-os/cosmic-panel"] +cosmic-panel-config = { path = "/home/lionel/Projets/COSMIC/cosmic-panel/cosmic-panel-config" } +xdg-shell-wrapper-config = { path = "/home/lionel/Projets/COSMIC/cosmic-panel/xdg-shell-wrapper-config" } + +[patch."https://github.com/pop-os/cosmic-notifications"] +cosmic-notifications-config = { path = "/home/lionel/Projets/COSMIC/cosmic-notifications/cosmic-notifications-config" } +cosmic-notifications-util = { path = "/home/lionel/Projets/COSMIC/cosmic-notifications/cosmic-notifications-util" } + +[patch."https://github.com/pop-os/cosmic-settings"] +cosmic-settings-a11y-manager-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/a11y-manager" } +cosmic-settings-accessibility-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/accessibility" } +cosmic-settings-airplane-mode-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/airplane-mode" } +cosmic-settings-daemon-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/settings-daemon" } +cosmic-settings-network-manager-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/network-manager" } +cosmic-settings-sound-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/sound" } +cosmic-settings-upower-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/upower" } + +[patch."https://github.com/pop-os/cosmic-settings/"] +cosmic-settings-airplane-mode-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/airplane-mode" } +cosmic-settings-network-manager-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/network-manager" } # [patch.'https://github.com/pop-os/dbus-settings-bindings'] # cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" } diff --git a/cosmic-app-list/Cargo.toml b/cosmic-app-list/Cargo.toml index 499d9f30..88c20a9a 100644 --- a/cosmic-app-list/Cargo.toml +++ b/cosmic-app-list/Cargo.toml @@ -13,7 +13,7 @@ futures.workspace = true i18n-embed.workspace = true i18n-embed-fl.workspace = true image = { version = "0.25.9", default-features = false } -libcosmic.workspace = true +cosmic.workspace = true memmap2 = "0.9.10" fastrand = "2.3.0" rust-embed.workspace = true diff --git a/cosmic-app-list/cosmic-app-list-config/Cargo.toml b/cosmic-app-list/cosmic-app-list-config/Cargo.toml index 86b302ef..0d5a21d7 100644 --- a/cosmic-app-list/cosmic-app-list-config/Cargo.toml +++ b/cosmic-app-list/cosmic-app-list-config/Cargo.toml @@ -6,5 +6,5 @@ edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -libcosmic.workspace = true +cosmic.workspace = true serde = { workspace = true, features = ["derive"] } diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index d4d579a1..bfb6b193 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -435,6 +435,7 @@ pub enum PopupType { } #[derive(Debug, Clone)] +#[allow(dead_code)] enum Message { Wayland(WaylandUpdate), PinApp(u32), diff --git a/cosmic-applet-a11y/Cargo.toml b/cosmic-applet-a11y/Cargo.toml index f7e3e50f..711b4ec6 100644 --- a/cosmic-applet-a11y/Cargo.toml +++ b/cosmic-applet-a11y/Cargo.toml @@ -9,7 +9,7 @@ cctk.workspace = true cosmic-protocols.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic.workspace = true +cosmic.workspace = true rust-embed.workspace = true tokio.workspace = true tracing-log.workspace = true @@ -17,9 +17,7 @@ tracing-subscriber.workspace = true tracing.workspace = true [dependencies.cosmic-settings-a11y-manager-subscription] -git = "https://github.com/pop-os/cosmic-settings" -# path = "../../cosmic-settings/subscriptions/a11y-manager" +path = "../../cosmic-settings/subscriptions/a11y-manager" [dependencies.cosmic-settings-accessibility-subscription] -git = "https://github.com/pop-os/cosmic-settings" -# path = "../../cosmic-settings/subscriptions/accessibility" +path = "../../cosmic-settings/subscriptions/accessibility" diff --git a/cosmic-applet-a11y/src/app.rs b/cosmic-applet-a11y/src/app.rs index ad5f2a1e..6a328339 100644 --- a/cosmic-applet-a11y/src/app.rs +++ b/cosmic-applet-a11y/src/app.rs @@ -26,10 +26,9 @@ use cosmic::{ }; use cosmic_settings_a11y_manager_subscription::{ - self as cosmic_a11y_manager, AccessibilityEvent, AccessibilityRequest, ColorFilter, + AccessibilityEvent, AccessibilityRequest, ColorFilter, }; use cosmic_settings_accessibility_subscription::{self as accessibility}; -use std::sync::LazyLock; use tokio::sync::mpsc::UnboundedSender; pub fn run() -> cosmic::iced::Result { @@ -52,6 +51,7 @@ struct CosmicA11yApplet { } #[derive(Debug, Clone)] +#[allow(dead_code)] enum Message { TogglePopup, CloseRequested(window::Id), diff --git a/cosmic-applet-a11y/src/backend/wayland/mod.rs b/cosmic-applet-a11y/src/backend/wayland/mod.rs index fa9796f0..12340588 100644 --- a/cosmic-applet-a11y/src/backend/wayland/mod.rs +++ b/cosmic-applet-a11y/src/backend/wayland/mod.rs @@ -2,13 +2,12 @@ // SPDX-License-Identifier: GPL-3.0-only use anyhow; -use cctk::sctk::reexports::calloop::{self, channel::SyncSender}; +use cctk::sctk::reexports::calloop::{self}; use cosmic::iced::{ self, Subscription, - futures::{self, SinkExt, StreamExt, channel::mpsc}, + futures::{self, SinkExt}, stream, }; -use cosmic_protocols::a11y::v1::client::cosmic_a11y_manager_v1::Filter; use cosmic_settings_a11y_manager_subscription::{ self as thread, AccessibilityEvent, AccessibilityRequest, }; diff --git a/cosmic-applet-audio/Cargo.toml b/cosmic-applet-audio/Cargo.toml index c47da57b..dae49747 100644 --- a/cosmic-applet-audio/Cargo.toml +++ b/cosmic-applet-audio/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0-only" futures.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic.workspace = true +cosmic.workspace = true mpris2-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings" } rust-embed.workspace = true serde.workspace = true @@ -23,5 +23,5 @@ zlink.workspace = true intmap = "3.1.3" [dependencies.cosmic-settings-audio-client] -git = "https://github.com/pop-os/cosmic-settings-daemon" +path = "../../cosmic-settings-daemon/audio-client" features = ["codec"] diff --git a/cosmic-applet-battery/Cargo.toml b/cosmic-applet-battery/Cargo.toml index 8c8f6e1d..3310f8fa 100644 --- a/cosmic-applet-battery/Cargo.toml +++ b/cosmic-applet-battery/Cargo.toml @@ -12,7 +12,7 @@ drm = "0.14.1" futures.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic.workspace = true +cosmic.workspace = true rust-embed.workspace = true rustc-hash.workspace = true tokio.workspace = true @@ -24,9 +24,7 @@ zbus.workspace = true serde.workspace = true [dependencies.cosmic-settings-upower-subscription] -git = "https://github.com/pop-os/cosmic-settings" -# path = "../../cosmic-settings/subscriptions/upower" +path = "../../cosmic-settings/subscriptions/upower" [dependencies.cosmic-settings-daemon-subscription] -git = "https://github.com/pop-os/cosmic-settings" -# path = "../../cosmic-settings/subscriptions/settings-daemon" +path = "../../cosmic-settings/subscriptions/settings-daemon" diff --git a/cosmic-applet-battery/src/app.rs b/cosmic-applet-battery/src/app.rs index c210d51a..22d9e6cc 100644 --- a/cosmic-applet-battery/src/app.rs +++ b/cosmic-applet-battery/src/app.rs @@ -186,6 +186,7 @@ impl CosmicBatteryApplet { } #[derive(Debug, Clone)] +#[allow(dead_code)] enum Message { TogglePopup, CloseRequested(window::Id), @@ -525,7 +526,7 @@ impl cosmic::Application for CosmicBatteryApplet { Task::none() } - fn view(&self) -> Element { + fn view(&self) -> Element<'_, Message> { let is_horizontal = match self.core.applet.anchor { PanelAnchor::Top | PanelAnchor::Bottom => true, PanelAnchor::Left | PanelAnchor::Right => false, diff --git a/cosmic-applet-bluetooth/Cargo.toml b/cosmic-applet-bluetooth/Cargo.toml index e2108576..1ee209ee 100644 --- a/cosmic-applet-bluetooth/Cargo.toml +++ b/cosmic-applet-bluetooth/Cargo.toml @@ -10,7 +10,7 @@ bluer = { version = "0.17", features = ["bluetoothd", "id"] } futures.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic.workspace = true +cosmic.workspace = true fastrand = "2.3.0" rust-embed.workspace = true rustc-hash.workspace = true diff --git a/cosmic-applet-bluetooth/src/app.rs b/cosmic-applet-bluetooth/src/app.rs index e27af8ef..484b8bf3 100644 --- a/cosmic-applet-bluetooth/src/app.rs +++ b/cosmic-applet-bluetooth/src/app.rs @@ -24,7 +24,7 @@ use cosmic::{ widget::{button, divider, icon, indeterminate_circular, scrollable, text}, }; use futures::FutureExt; -use std::{collections::HashMap, sync::LazyLock, time::Duration}; +use std::{collections::HashMap, time::Duration}; use tokio::sync::mpsc::Sender; use crate::{ @@ -63,6 +63,7 @@ impl CosmicBluetoothApplet { } #[derive(Debug, Clone)] +#[allow(dead_code)] enum Message { TogglePopup, CloseRequested(window::Id), @@ -145,7 +146,7 @@ impl cosmic::Application for CosmicBluetoothApplet { } Message::BluetoothEvent(e) => match e { BluerEvent::RequestResponse { - req, + req: _, state, err_msg, } => { diff --git a/cosmic-applet-bluetooth/src/bluetooth.rs b/cosmic-applet-bluetooth/src/bluetooth.rs index 5184aa6a..3a859932 100644 --- a/cosmic-applet-bluetooth/src/bluetooth.rs +++ b/cosmic-applet-bluetooth/src/bluetooth.rs @@ -149,8 +149,6 @@ pub fn bluetooth_subscription( }, BluerSessionEvent::AgentEvent(e) => BluerEvent::AgentEvent(e), - - _ => return, }; _ = output.send(message).await; @@ -199,6 +197,7 @@ pub enum BluerRequest { } #[derive(Debug, Clone)] +#[allow(dead_code)] pub enum BluerEvent { RequestResponse { req: BluerRequest, diff --git a/cosmic-applet-input-sources/Cargo.toml b/cosmic-applet-input-sources/Cargo.toml index 8fdb1dd9..6895d7fe 100644 --- a/cosmic-applet-input-sources/Cargo.toml +++ b/cosmic-applet-input-sources/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0-only" cosmic-comp-config = { git = "https://github.com/pop-os/cosmic-comp.git", rev = "5eb5af4" } i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic.workspace = true +cosmic.workspace = true rust-embed.workspace = true tokio.workspace = true tracing-log.workspace = true diff --git a/cosmic-applet-input-sources/src/lib.rs b/cosmic-applet-input-sources/src/lib.rs index 93e84283..2c845de1 100644 --- a/cosmic-applet-input-sources/src/lib.rs +++ b/cosmic-applet-input-sources/src/lib.rs @@ -3,7 +3,6 @@ mod localize; -use cosmic::iced::{Alignment, Length}; use cosmic::{ app, app::Core, @@ -14,16 +13,14 @@ use cosmic::{ iced::{ Rectangle, Task, platform_specific::shell::commands::popup::{destroy_popup, get_popup}, - widget::{column, row}, window::Id, }, - iced::{core::window, runtime::Appearance}, + iced::core::window, prelude::*, surface, theme, widget::{ self, autosize, rectangle_tracker::{RectangleTracker, RectangleUpdate, rectangle_tracker_subscription}, - space, }, }; use cosmic_comp_config::CosmicCompConfig; diff --git a/cosmic-applet-minimize/Cargo.toml b/cosmic-applet-minimize/Cargo.toml index bd564bdf..29ee2c8e 100644 --- a/cosmic-applet-minimize/Cargo.toml +++ b/cosmic-applet-minimize/Cargo.toml @@ -9,7 +9,7 @@ anyhow.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true image = { version = "0.25.9", default-features = false } -libcosmic.workspace = true +cosmic.workspace = true memmap2 = "0.9.10" rust-embed.workspace = true rustix.workspace = true diff --git a/cosmic-applet-minimize/src/lib.rs b/cosmic-applet-minimize/src/lib.rs index e40a7551..307762b5 100644 --- a/cosmic-applet-minimize/src/lib.rs +++ b/cosmic-applet-minimize/src/lib.rs @@ -316,7 +316,7 @@ impl cosmic::Application for Minimize { } else { (cross_padding, major_padding) }; - let theme = self.core.system_theme().cosmic(); + let _theme = self.core.system_theme().cosmic(); let icon_buttons = self.apps[..max_icon_count].iter().map(|app| { self.core .applet @@ -420,7 +420,7 @@ impl cosmic::Application for Minimize { (cross_padding, major_padding) }; let theme = self.core.system_theme().cosmic(); - let space_xxs = theme.space_xxs(); + let _space_xxs = theme.space_xxs(); let icon_buttons = self.apps[max_icon_count..].iter().map(|app| { tooltip( Element::from(crate::window_image::WindowImage::new( diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index 3ba86f2b..4129a279 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -12,7 +12,7 @@ futures.workspace = true futures-util.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic = { workspace = true, features = [ +cosmic = { workspace = true, features = [ "applet", "applet-token", "tokio", @@ -34,5 +34,4 @@ nmrs = "3.1.3" [dependencies.cosmic-settings-network-manager-subscription] -git = "https://github.com/pop-os/cosmic-settings/" -# path = "../../cosmic-settings/subscriptions/network-manager" +path = "../../cosmic-settings/subscriptions/network-manager" diff --git a/cosmic-applet-notifications/Cargo.toml b/cosmic-applet-notifications/Cargo.toml index 2e472b24..91752579 100644 --- a/cosmic-applet-notifications/Cargo.toml +++ b/cosmic-applet-notifications/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0-only" cosmic-notifications-util = { git = "https://github.com/pop-os/cosmic-notifications" } cosmic-notifications-config = { git = "https://github.com/pop-os/cosmic-notifications" } anyhow.workspace = true -libcosmic.workspace = true +cosmic.workspace = true tokio.workspace = true # cosmic-notifications-util = { path = "../../cosmic-notifications-daemon/cosmic-notifications-util" } # cosmic-notifications-config = { path = "../../cosmic-notifications-daemon/cosmic-notifications-config" } diff --git a/cosmic-applet-power/Cargo.toml b/cosmic-applet-power/Cargo.toml index 693692e0..85f520f9 100644 --- a/cosmic-applet-power/Cargo.toml +++ b/cosmic-applet-power/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0-only" [dependencies] i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic.workspace = true +cosmic.workspace = true logind-zbus = "5.3.2" rust-embed.workspace = true rustix.workspace = true diff --git a/cosmic-applet-power/src/lib.rs b/cosmic-applet-power/src/lib.rs index 67725fbc..4a5829df 100644 --- a/cosmic-applet-power/src/lib.rs +++ b/cosmic-applet-power/src/lib.rs @@ -16,9 +16,8 @@ use cosmic::{ window, }, surface, theme, - widget::{Space, button, divider, icon, space, text}, + widget::{button, divider, icon, space, text}, }; -use std::sync::LazyLock; use logind_zbus::{ manager::ManagerProxy, @@ -35,9 +34,6 @@ pub mod session_manager; use crate::{cosmic_session::CosmicSessionProxy, session_manager::SessionManagerProxy}; -static SUBSURFACE_ID: LazyLock = - LazyLock::new(|| cosmic::widget::Id::new("subsurface")); - pub fn run() -> cosmic::iced::Result { localize::localize(); @@ -49,7 +45,6 @@ struct Power { icon_name: String, popup: Option, token_tx: Option>, - subsurface_id: window::Id, } #[derive(Debug, Clone, Copy)] @@ -75,6 +70,7 @@ impl PowerAction { } #[derive(Debug, Clone)] +#[allow(dead_code)] enum Message { Action(PowerAction), TogglePopup, @@ -104,7 +100,6 @@ impl cosmic::Application for Power { Self { core, icon_name: "system-shutdown-symbolic".to_string(), - subsurface_id: window::Id::unique(), token_tx: None, popup: Option::default(), }, diff --git a/cosmic-applet-status-area/Cargo.toml b/cosmic-applet-status-area/Cargo.toml index d643f70d..d96913ab 100644 --- a/cosmic-applet-status-area/Cargo.toml +++ b/cosmic-applet-status-area/Cargo.toml @@ -6,7 +6,7 @@ license = "GPL-3.0-only" [dependencies] futures.workspace = true -libcosmic.workspace = true +cosmic.workspace = true serde.workspace = true rustc-hash.workspace = true tokio.workspace = true diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 3ad8c6ff..081dfe06 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -28,6 +28,7 @@ use crate::{ }; #[derive(Clone, Debug)] +#[allow(dead_code)] pub enum Msg { None, Activate(usize), @@ -637,7 +638,7 @@ fn menu_icon_button<'a>( let icon = menu.icon_handle().clone(); let theme = cosmic::theme::active(); - let theme = theme.cosmic(); + let _theme = theme.cosmic(); let suggested = applet.suggested_size(true); let padding = applet.suggested_padding(true).1; diff --git a/cosmic-applet-status-area/src/components/status_menu.rs b/cosmic-applet-status-area/src/components/status_menu.rs index e706f37b..6aa0953c 100644 --- a/cosmic-applet-status-area/src/components/status_menu.rs +++ b/cosmic-applet-status-area/src/components/status_menu.rs @@ -8,7 +8,7 @@ use cosmic::{ iced, widget::icon::{self, IconFallback}, }; -use std::path::{Path, PathBuf}; +use std::path::Path; use crate::subscriptions::status_notifier_item::{IconUpdate, Layout, StatusNotifierItem}; diff --git a/cosmic-applet-status-area/src/status_notifier_watcher.rs b/cosmic-applet-status-area/src/status_notifier_watcher.rs index 1bb75d79..5c8b6175 100644 --- a/cosmic-applet-status-area/src/status_notifier_watcher.rs +++ b/cosmic-applet-status-area/src/status_notifier_watcher.rs @@ -10,21 +10,18 @@ //! can be socket-activated and not conflict with anything else running as a status notifier //! watcher. //! -//! The daemon runs as long as as there is at least one client still connected. Which it checks -//! for every `REFRESH_INTERVAL`. +//! The daemon runs as long as there is at least one client still connected. use crate::subscriptions::status_notifier_watcher::server::create_service; use crate::unique_names::UniqueNames; use futures::StreamExt; -use std::{collections::HashSet, time::Duration}; +use std::collections::HashSet; use zbus::fdo; use zbus::message::Header; const DBUS_NAME: &str = "com.system76.CosmicStatusNotifierWatcher"; const OBJECT_PATH: &str = "/CosmicStatusNotifierWatcher"; -const REFRESH_INTERVAL: Duration = Duration::from_secs(60); - /// Run daemon pub fn run() -> cosmic::iced::Result { if let Err(err) = run_inner() { @@ -42,7 +39,7 @@ pub async fn cosmic_register(conn: &zbus::Connection) -> zbus::Result<()> { tokio::spawn(async move { while let Some(value) = stream.next().await { if let Some(_unique_name) = value { - /// Register with new owner + // Register with new owner. let _ = cosmic_watcher.register_applet().await; } } diff --git a/cosmic-applet-tiling/Cargo.toml b/cosmic-applet-tiling/Cargo.toml index 2ce1c452..2c245ddf 100644 --- a/cosmic-applet-tiling/Cargo.toml +++ b/cosmic-applet-tiling/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" license = "GPL-3.0-only" [dependencies] -libcosmic.workspace = true +cosmic.workspace = true anyhow.workspace = true cctk.workspace = true cosmic-comp-config = { git = "https://github.com/pop-os/cosmic-comp.git", rev = "5eb5af4" } diff --git a/cosmic-applet-tiling/src/window.rs b/cosmic-applet-tiling/src/window.rs index 327d5d75..7da430e3 100644 --- a/cosmic-applet-tiling/src/window.rs +++ b/cosmic-applet-tiling/src/window.rs @@ -26,7 +26,7 @@ use cosmic::{ }; use cosmic_comp_config::{CosmicCompConfig, TileBehavior}; use cosmic_protocols::workspace::v2::client::zcosmic_workspace_handle_v2::TilingState; -use std::{thread, time::Instant}; +use std::thread; use tracing::error; const ID: &str = "com.system76.CosmicAppletTiling"; @@ -46,6 +46,7 @@ pub struct Window { } #[derive(Clone, Debug)] +#[allow(dead_code)] pub enum Message { TogglePopup, PopupClosed(Id), diff --git a/cosmic-applet-time/Cargo.toml b/cosmic-applet-time/Cargo.toml index a6ca4dfd..a8713231 100644 --- a/cosmic-applet-time/Cargo.toml +++ b/cosmic-applet-time/Cargo.toml @@ -9,7 +9,7 @@ cosmic-applets-config.workspace = true jiff = "0.2" i18n-embed-fl.workspace = true i18n-embed.workspace = true -libcosmic.workspace = true +cosmic.workspace = true rust-embed.workspace = true tokio.workspace = true tracing-log.workspace = true diff --git a/cosmic-applet-time/src/window.rs b/cosmic-applet-time/src/window.rs index a44d81ee..ddd37d31 100644 --- a/cosmic-applet-time/src/window.rs +++ b/cosmic-applet-time/src/window.rs @@ -94,6 +94,7 @@ pub struct Window { } #[derive(Debug, Clone)] +#[allow(dead_code)] pub enum Message { TogglePopup, CloseRequested(window::Id), @@ -361,7 +362,7 @@ impl cosmic::Application for Window { } fn subscription(&self) -> Subscription { - fn time_subscription(mut show_seconds: watch::Receiver) -> Subscription { + fn time_subscription(show_seconds: watch::Receiver) -> Subscription { struct Wrapper { inner: watch::Receiver, id: &'static str, @@ -376,7 +377,7 @@ impl cosmic::Application for Window { inner: show_seconds, id: "time-sub", }, - |Wrapper { inner, id }| { + |Wrapper { inner, id: _ }| { let mut show_seconds = inner.clone(); stream::channel(1, move |mut output: mpsc::Sender| async move { // Mark this receiver's state as changed so that it always receives an initial diff --git a/cosmic-applet-workspaces/Cargo.toml b/cosmic-applet-workspaces/Cargo.toml index 857b668d..103680e2 100644 --- a/cosmic-applet-workspaces/Cargo.toml +++ b/cosmic-applet-workspaces/Cargo.toml @@ -6,7 +6,7 @@ edition = "2024" license = "GPL-3.0-only" [dependencies] -libcosmic.workspace = true +cosmic.workspace = true cctk.workspace = true tracing.workspace = true tracing-subscriber.workspace = true diff --git a/cosmic-applet-workspaces/src/components/app.rs b/cosmic-applet-workspaces/src/components/app.rs index dc4ccdc4..a9bafb79 100644 --- a/cosmic-applet-workspaces/src/components/app.rs +++ b/cosmic-applet-workspaces/src/components/app.rs @@ -84,6 +84,7 @@ impl IcedWorkspacesApplet { } #[derive(Debug, Clone)] +#[allow(dead_code)] enum Message { WorkspaceUpdate(WorkspacesUpdate), WorkspacePressed(ExtWorkspaceHandleV1), diff --git a/cosmic-applets/Cargo.toml b/cosmic-applets/Cargo.toml index c2129dff..f204a80c 100644 --- a/cosmic-applets/Cargo.toml +++ b/cosmic-applets/Cargo.toml @@ -23,7 +23,7 @@ cosmic-applet-time = { path = "../cosmic-applet-time" } cosmic-applet-workspaces = { path = "../cosmic-applet-workspaces" } cosmic-applet-input-sources = { path = "../cosmic-applet-input-sources" } cosmic-panel-button = { path = "../cosmic-panel-button" } -libcosmic.workspace = true +cosmic.workspace = true tracing.workspace = true tracing-subscriber.workspace = true tracing-log.workspace = true diff --git a/cosmic-panel-button/Cargo.toml b/cosmic-panel-button/Cargo.toml index 9fa73486..69074433 100644 --- a/cosmic-panel-button/Cargo.toml +++ b/cosmic-panel-button/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" license = "GPL-3.0-only" [dependencies] -libcosmic.workspace = true +cosmic.workspace = true rustc-hash.workspace = true tracing.workspace = true tracing-subscriber.workspace = true diff --git a/cosmic-panel-button/src/lib.rs b/cosmic-panel-button/src/lib.rs index 45ee1ca2..132e5dd5 100644 --- a/cosmic-panel-button/src/lib.rs +++ b/cosmic-panel-button/src/lib.rs @@ -48,7 +48,7 @@ impl Button { icon: cosmic::widget::icon::Handle, ) -> cosmic::widget::Button<'a, Message> { let theme = cosmic::theme::active(); - let theme = theme.cosmic(); + let _theme = theme.cosmic(); let suggested = self.core.applet.suggested_size(icon.symbolic); let (major_padding, applet_padding_minor_axis) = diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 79d20990..075062e5 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.93" +channel = "1.93.0" From 0023a462ba1f3761c958bed7b8eb0096a24932dd Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Mon, 25 May 2026 09:55:11 +0200 Subject: [PATCH 50/84] yoda: use local dbus settings bindings --- cosmic-app-list/Cargo.toml | 2 +- cosmic-applet-audio/Cargo.toml | 2 +- cosmic-applet-network/Cargo.toml | 2 +- cosmic-applet-time/Cargo.toml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cosmic-app-list/Cargo.toml b/cosmic-app-list/Cargo.toml index 88c20a9a..b3171a2c 100644 --- a/cosmic-app-list/Cargo.toml +++ b/cosmic-app-list/Cargo.toml @@ -19,7 +19,7 @@ fastrand = "2.3.0" rust-embed.workspace = true rustix.workspace = true rustc-hash.workspace = true -switcheroo-control = { git = "https://github.com/pop-os/dbus-settings-bindings" } +switcheroo-control = { path = "../../dbus-settings-bindings/switcheroo-control" } tokio.workspace = true tracing-log.workspace = true tracing-subscriber.workspace = true diff --git a/cosmic-applet-audio/Cargo.toml b/cosmic-applet-audio/Cargo.toml index dae49747..3e67d3f5 100644 --- a/cosmic-applet-audio/Cargo.toml +++ b/cosmic-applet-audio/Cargo.toml @@ -9,7 +9,7 @@ futures.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true cosmic.workspace = true -mpris2-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings" } +mpris2-zbus = { path = "../../dbus-settings-bindings/mpris2" } rust-embed.workspace = true serde.workspace = true tokio.workspace = true diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index 4129a279..62efbaf9 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0-or-later" [dependencies] anyhow.workspace = true async-fn-stream = "0.3" -cosmic-dbus-networkmanager = { git = "https://github.com/pop-os/dbus-settings-bindings" } +cosmic-dbus-networkmanager = { path = "../../dbus-settings-bindings/networkmanager" } futures.workspace = true futures-util.workspace = true i18n-embed-fl.workspace = true diff --git a/cosmic-applet-time/Cargo.toml b/cosmic-applet-time/Cargo.toml index a8713231..3c85ee07 100644 --- a/cosmic-applet-time/Cargo.toml +++ b/cosmic-applet-time/Cargo.toml @@ -17,5 +17,5 @@ tracing-subscriber.workspace = true tracing.workspace = true icu = { version = "2.1.1", features = ["compiled_data"] } zbus.workspace = true -timedate-zbus = { git = "https://github.com/pop-os/dbus-settings-bindings" } +timedate-zbus = { path = "../../dbus-settings-bindings/timedate" } logind-zbus = "5.3.2" From ebfaa4eb7b34e5b4d1969a84db83c0e4e1652fa2 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Mon, 25 May 2026 11:34:55 +0200 Subject: [PATCH 51/84] chore: use local cosmic-text checkout --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 40471449..178a102c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -125,6 +125,9 @@ cosmic-settings-upower-subscription = { path = "/home/lionel/Projets/COSMIC/cosm cosmic-settings-airplane-mode-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/airplane-mode" } cosmic-settings-network-manager-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/network-manager" } +[patch."https://github.com/pop-os/cosmic-text.git"] +cosmic-text = { path = "../cosmic-text" } + # [patch.'https://github.com/pop-os/dbus-settings-bindings'] # cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" } # upower_dbus = { path = "../dbus-settings-bindings/upower" } From 3c360142aeae3f585377ecc7f75d738916edce6e Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Mon, 25 May 2026 18:10:22 +0200 Subject: [PATCH 52/84] chore: use local COSMIC support crates --- Cargo.lock | 7 +++---- Cargo.toml | 1 + cosmic-applet-input-sources/Cargo.toml | 2 +- cosmic-applet-tiling/Cargo.toml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bdd37740..96c26cd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1320,8 +1320,7 @@ dependencies = [ [[package]] name = "cosmic-comp-config" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-comp.git?rev=5eb5af4#5eb5af46756f2f2bc5e812cf68fe4c4b79efd924" +version = "1.0.0" dependencies = [ "cosmic-config", "input", @@ -3708,9 +3707,9 @@ dependencies = [ [[package]] name = "input" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" +checksum = "f9793345a65d71317763a33066b5d8351f8760dde8d4930fe9e39b5f14a7959d" dependencies = [ "bitflags 2.11.1", "input-sys", diff --git a/Cargo.toml b/Cargo.toml index 178a102c..6f673cc2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,6 +48,7 @@ cosmic = { package = "libcosmic-yoda", path = "../libcosmic", default-features = "desktop-systemd-scope", "winit", ] } +cosmic-comp-config = { path = "../cosmic-comp/cosmic-comp-config" } rust-embed = "8.11.0" rust-embed-utils = "8.11.0" rustc-hash = "2.1" diff --git a/cosmic-applet-input-sources/Cargo.toml b/cosmic-applet-input-sources/Cargo.toml index 6895d7fe..45b54857 100644 --- a/cosmic-applet-input-sources/Cargo.toml +++ b/cosmic-applet-input-sources/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" license = "GPL-3.0-only" [dependencies] -cosmic-comp-config = { git = "https://github.com/pop-os/cosmic-comp.git", rev = "5eb5af4" } +cosmic-comp-config.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true cosmic.workspace = true diff --git a/cosmic-applet-tiling/Cargo.toml b/cosmic-applet-tiling/Cargo.toml index 2c245ddf..7767a997 100644 --- a/cosmic-applet-tiling/Cargo.toml +++ b/cosmic-applet-tiling/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0-only" cosmic.workspace = true anyhow.workspace = true cctk.workspace = true -cosmic-comp-config = { git = "https://github.com/pop-os/cosmic-comp.git", rev = "5eb5af4" } +cosmic-comp-config.workspace = true cosmic-protocols.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true From 9677159db6b3f140e370f3277d2cca4822f0fa43 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Tue, 26 May 2026 09:24:55 +0200 Subject: [PATCH 53/84] chore: fix applets redeploy path --- redeploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redeploy.sh b/redeploy.sh index 7138a806..686bf3cb 100755 --- a/redeploy.sh +++ b/redeploy.sh @@ -11,7 +11,7 @@ set -euo pipefail -REPO="/home/lionel/Devels/cosmic-applets" +REPO="/home/lionel/Projets/COSMIC/cosmic-applets" TARGETS=( "cosmic-applets" "cosmic-app-list" From d58fe9d74cb62c6b7df9bccf5d1f10f05ae4d4d4 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Tue, 26 May 2026 10:39:01 +0200 Subject: [PATCH 54/84] feat: add editable dock launchers --- cosmic-app-list/i18n/en/cosmic_app_list.ftl | 8 +- cosmic-app-list/i18n/fr/cosmic_app_list.ftl | 6 + cosmic-app-list/src/app.rs | 378 ++++++++++++++++++-- cosmic-app-list/src/launcher_edit.rs | 378 ++++++++++++++++++++ cosmic-app-list/src/lib.rs | 1 + 5 files changed, 735 insertions(+), 36 deletions(-) create mode 100644 cosmic-app-list/src/launcher_edit.rs diff --git a/cosmic-app-list/i18n/en/cosmic_app_list.ftl b/cosmic-app-list/i18n/en/cosmic_app_list.ftl index c412cd51..066360b3 100644 --- a/cosmic-app-list/i18n/en/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/en/cosmic_app_list.ftl @@ -5,4 +5,10 @@ quit-all = Quit All new-window = New Window run = Run run-on = Run on {$gpu} -run-on-default = (Default) \ No newline at end of file +run-on-default = (Default) +edit-launcher = Edit launcher +launcher-name = Name +launcher-command = Command +launcher-icon = Icon +save = Save +cancel = Cancel diff --git a/cosmic-app-list/i18n/fr/cosmic_app_list.ftl b/cosmic-app-list/i18n/fr/cosmic_app_list.ftl index 39cac491..f01fdf79 100644 --- a/cosmic-app-list/i18n/fr/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/fr/cosmic_app_list.ftl @@ -6,3 +6,9 @@ new-window = Nouvelle fenêtre run = Exécuter run-on = Lancer avec { $gpu } run-on-default = (Défaut) +edit-launcher = Modifier le lanceur +launcher-name = Nom +launcher-command = Commande +launcher-icon = Icône +save = Enregistrer +cancel = Annuler diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index bfb6b193..e4f839f5 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -3,6 +3,7 @@ use crate::{ fl, + launcher_edit::{self, LauncherEditRequest}, wayland_subscription::{ OutputUpdate, ToplevelRequest, ToplevelUpdate, WaylandImage, WaylandRequest, WaylandUpdate, wayland_subscription, @@ -47,7 +48,7 @@ use cosmic::{ icon::{self, from_name}, image::Handle, rectangle_tracker::{RectangleTracker, RectangleUpdate, rectangle_tracker_subscription}, - svg, text, + svg, text, text_input, }, }; use cosmic::{ @@ -387,10 +388,25 @@ pub struct Popup { popup_type: PopupType, } +#[derive(Debug, Clone)] +struct LauncherEditState { + original_app_id: String, + source_path: PathBuf, + original_name: String, + original_exec: String, + name: String, + exec: String, + icon: String, + terminal: bool, + saving: bool, + error: Option, +} + #[derive(Clone, Default)] struct CosmicAppList { core: cosmic::app::Core, popup: Option, + launcher_edit: Option, subscription_ctr: u32, item_ctr: u32, desktop_entries: Vec, @@ -432,6 +448,7 @@ struct CosmicAppList { pub enum PopupType { RightClickMenu, ToplevelList, + LauncherEditor, } #[derive(Debug, Clone)] @@ -440,6 +457,13 @@ enum Message { Wayland(WaylandUpdate), PinApp(u32), UnpinApp(u32), + EditLauncher(u32), + LauncherNameChanged(String), + LauncherExecChanged(String), + LauncherIconChanged(String), + SaveLauncherEdit, + CancelLauncherEdit, + LauncherEditSaved(Result), /// Yoda: pointer entered (Some) or left (None) a dock icon — drives /// the macOS Tahoe-style hover magnification effect. DockItemHover(Option), @@ -822,10 +846,45 @@ impl CosmicAppList { .collect(); } + fn sync_pinned_list_from_config(&mut self) { + for item in self.pinned_list.drain(..) { + if !item.toplevels.is_empty() { + self.active_list.push(item); + } + } + + self.pinned_list = find_desktop_entries(&self.desktop_entries, &self.config.favorites) + .zip(&self.config.favorites) + .map(|(de, original_id)| { + if let Some(p) = self + .active_list + .iter() + .position(|dock_item| dock_item.desktop_info.id() == de.id()) + { + let mut d = self.active_list.remove(p); + d.desktop_info = de.clone(); + d.original_app_id.clone_from(original_id); + d + } else { + self.item_ctr += 1; + DockItem { + id: self.item_ctr, + toplevels: Vec::new(), + desktop_info: de.clone(), + original_app_id: original_id.clone(), + } + } + }) + .collect(); + } + /// Close any open popups. fn close_popups(&mut self) -> Task> { let mut commands = Vec::new(); if let Some(popup) = self.popup.take() { + if popup.popup_type == PopupType::LauncherEditor { + self.launcher_edit = None; + } commands.push(destroy_popup(popup.id)); } if let Some(popup) = self.overflow_active_popup.take() { @@ -1199,6 +1258,182 @@ impl cosmic::Application for CosmicAppList { return destroy_popup(popup_id); } } + Message::EditLauncher(id) => { + let Some(dock_item) = self.pinned_list.iter().find(|t| t.id == id).cloned() else { + return Task::none(); + }; + let Some(exec) = dock_item.desktop_info.exec() else { + return Task::none(); + }; + let Some(existing_popup) = self.popup.take() else { + return Task::none(); + }; + let Some(rectangle) = self.rectangles.get(&dock_item.id.into()) else { + self.popup = Some(existing_popup); + return Task::none(); + }; + + let original_name = dock_item + .desktop_info + .desktop_entry("Name") + .map(ToString::to_string) + .or_else(|| { + dock_item + .desktop_info + .name(&self.locales) + .map(Cow::into_owned) + }) + .unwrap_or_else(|| dock_item.original_app_id.clone()); + let original_exec = exec.to_string(); + + self.launcher_edit = Some(LauncherEditState { + original_app_id: dock_item.original_app_id.clone(), + source_path: dock_item.desktop_info.path.clone(), + original_name: original_name.clone(), + original_exec: original_exec.clone(), + name: original_name, + exec: original_exec, + icon: dock_item + .desktop_info + .icon() + .unwrap_or_default() + .to_string(), + terminal: dock_item.desktop_info.terminal(), + saving: false, + error: None, + }); + + let new_id = window::Id::unique(); + let mut popup_settings = self.core.applet.get_popup_settings( + existing_popup.parent, + new_id, + None, + None, + None, + ); + let iced::Rectangle { + x, + y, + width, + height, + } = *rectangle; + popup_settings.positioner.anchor_rect = iced::Rectangle:: { + x: x as i32, + y: y as i32, + width: width as i32, + height: height as i32, + }; + popup_settings.positioner.size_limits = Limits::NONE + .min_width(480.) + .min_height(1.) + .max_width(520.) + .max_height(1000.); + + self.popup = Some(Popup { + parent: existing_popup.parent, + id: new_id, + dock_item, + popup_type: PopupType::LauncherEditor, + }); + + return Task::batch([destroy_popup(existing_popup.id), get_popup(popup_settings)]); + } + Message::LauncherNameChanged(name) => { + if let Some(edit) = self.launcher_edit.as_mut() + && !edit.saving + { + edit.name = name; + edit.error = None; + } + } + Message::LauncherExecChanged(exec) => { + if let Some(edit) = self.launcher_edit.as_mut() + && !edit.saving + { + edit.exec = exec; + edit.error = None; + } + } + Message::LauncherIconChanged(icon) => { + if let Some(edit) = self.launcher_edit.as_mut() + && !edit.saving + { + edit.icon = icon; + edit.error = None; + } + } + Message::SaveLauncherEdit => { + let Some(edit) = self.launcher_edit.as_mut() else { + return Task::none(); + }; + if edit.saving { + return Task::none(); + } + if let Err(error) = + launcher_edit::validate_launcher_fields(&edit.name, &edit.exec, &edit.icon) + { + edit.error = Some(error); + return Task::none(); + } + + let request = LauncherEditRequest { + current_app_id: edit.original_app_id.clone(), + source_path: edit.source_path.clone(), + name: edit.name.clone(), + exec: edit.exec.clone(), + icon: edit.icon.clone(), + terminal: edit.terminal, + replace_localized_name: edit.name.trim() != edit.original_name.trim(), + disable_dbus_activation: edit.exec.trim() != edit.original_exec.trim(), + }; + + edit.saving = true; + edit.error = None; + + return Task::perform(launcher_edit::save_launcher_edit(request), |result| { + cosmic::Action::App(Message::LauncherEditSaved(result)) + }); + } + Message::CancelLauncherEdit => { + return self.close_popups(); + } + Message::LauncherEditSaved(result) => match result { + Ok(result) => { + tracing::info!( + app_id = result.new_app_id, + path = ?result.path, + "saved editable launcher" + ); + + let mut favorites = self.config.favorites.clone(); + let mut favorites_changed = false; + for favorite in &mut favorites { + if *favorite == result.old_app_id && *favorite != result.new_app_id { + *favorite = result.new_app_id.clone(); + favorites_changed = true; + } + } + + if favorites_changed { + self.config.update_pinned( + favorites.clone(), + &Config::new(APP_ID, AppListConfig::VERSION).unwrap(), + ); + self.config.favorites = favorites; + } + + self.update_desktop_entries(); + self.sync_pinned_list_from_config(); + self.launcher_edit = None; + return self.close_popups(); + } + Err(error) => { + if let Some(edit) = self.launcher_edit.as_mut() { + edit.saving = false; + edit.error = Some(error); + } + } + }, Message::Activate(handle) => { if let Some(tx) = self.wayland_sender.as_ref() { let _ = tx.send(WaylandRequest::Toplevel(ToplevelRequest::Activate(handle))); @@ -1651,6 +1886,9 @@ impl cosmic::Application for CosmicAppList { }, Message::ClosePopup => { if let Some(p) = self.popup.take() { + if p.popup_type == PopupType::LauncherEditor { + self.launcher_edit = None; + } return destroy_popup(p.id); } } @@ -1665,42 +1903,16 @@ impl cosmic::Application for CosmicAppList { } Message::ConfigUpdated(config) => { self.config = config; - // drain to active list - for item in self.pinned_list.drain(..) { - if !item.toplevels.is_empty() { - self.active_list.push(item); - } - } - - // pull back configured items into the favorites list - self.pinned_list = - find_desktop_entries(&self.desktop_entries, &self.config.favorites) - .zip(&self.config.favorites) - .map(|(de, original_id)| { - if let Some(p) = self - .active_list - .iter() - // match using heuristic id - .position(|dock_item| dock_item.desktop_info.id() == de.id()) - { - let mut d = self.active_list.remove(p); - // but use the id from the config - d.original_app_id.clone_from(original_id); - d - } else { - self.item_ctr += 1; - DockItem { - id: self.item_ctr, - toplevels: Vec::new(), - desktop_info: de.clone(), - original_app_id: original_id.clone(), - } - } - }) - .collect(); + self.update_desktop_entries(); + self.sync_pinned_list_from_config(); } Message::CloseRequested(id) => { - if Some(id) == self.popup.as_ref().map(|p| p.id) { + if let Some(popup) = &self.popup + && popup.id == id + { + if popup.popup_type == PopupType::LauncherEditor { + self.launcher_edit = None; + } self.popup = None; } if self.overflow_active_popup.is_some_and(|p| p == id) { @@ -2372,6 +2584,19 @@ impl cosmic::Application for CosmicAppList { }), ); + if is_pinned && desktop_info.exec().is_some() { + content = content.push( + menu_button( + row![ + icon::icon(from_name("edit-symbolic").into()).size(16), + text::body(fl!("edit-launcher")) + ] + .spacing(8), + ) + .on_press(Message::EditLauncher(*id)), + ); + } + if !toplevels.is_empty() { content = content.push(divider::horizontal::light()); content = match toplevels.len() { @@ -2418,6 +2643,89 @@ impl cosmic::Application for CosmicAppList { ) .into() } + PopupType::LauncherEditor => { + let Some(edit) = self.launcher_edit.as_ref() else { + return text::body("").into(); + }; + + let spacing = theme::spacing(); + let can_save = !edit.saving + && launcher_edit::validate_launcher_fields( + &edit.name, &edit.exec, &edit.icon, + ) + .is_ok(); + + let mut form = column![ + text::title4(fl!("edit-launcher")), + text_input("", edit.name.as_str()) + .label(fl!("launcher-name")) + .on_input(Message::LauncherNameChanged) + .on_submit(|_| Message::SaveLauncherEdit) + .width(Length::Fill) + .size(14), + text_input("", edit.exec.as_str()) + .label(fl!("launcher-command")) + .on_input(Message::LauncherExecChanged) + .on_submit(|_| Message::SaveLauncherEdit) + .width(Length::Fill) + .size(14), + text_input("", edit.icon.as_str()) + .label(fl!("launcher-icon")) + .on_input(Message::LauncherIconChanged) + .on_submit(|_| Message::SaveLauncherEdit) + .width(Length::Fill) + .size(14), + ] + .spacing(spacing.space_s) + .width(Length::Fill); + + if let Some(error) = edit.error.as_ref() { + form = form.push(text::caption(error.as_str()).class( + cosmic::theme::Text::Color(theme.cosmic().destructive_color().into()), + )); + } + + let cancel = + button::custom(text::body(fl!("cancel")).center().width(Length::Fill)) + .on_press_maybe(if edit.saving { + None + } else { + Some(Message::CancelLauncherEdit) + }) + .padding([spacing.space_xxs, spacing.space_s]) + .width(142); + + let save = button::custom(text::body(fl!("save")).center().width(Length::Fill)) + .class(Button::Suggested) + .on_press_maybe(if can_save { + Some(Message::SaveLauncherEdit) + } else { + None + }) + .padding([spacing.space_xxs, spacing.space_s]) + .width(142); + + let actions = row![horizontal_space(), cancel, save] + .spacing(spacing.space_xxs) + .align_y(Alignment::Center); + + let content = column![form, actions] + .spacing(spacing.space_m) + .padding(spacing.space_m) + .width(Length::Fill); + + self.core + .applet + .popup_container(container(content).width(Length::Fill)) + .limits( + Limits::NONE + .min_width(480.) + .min_height(1.) + .max_width(520.) + .max_height(1000.), + ) + .into() + } PopupType::ToplevelList => match self.core.applet.anchor { PanelAnchor::Left | PanelAnchor::Right => { let mut content = diff --git a/cosmic-app-list/src/launcher_edit.rs b/cosmic-app-list/src/launcher_edit.rs new file mode 100644 index 00000000..c354e1e6 --- /dev/null +++ b/cosmic-app-list/src/launcher_edit.rs @@ -0,0 +1,378 @@ +// Copyright 2026 System76 +// SPDX-License-Identifier: GPL-3.0-only + +use std::{ + env, + ffi::OsString, + io::ErrorKind, + path::{Path, PathBuf}, +}; + +use tokio::fs; + +#[derive(Clone, Debug)] +pub struct LauncherEditRequest { + pub current_app_id: String, + pub source_path: PathBuf, + pub name: String, + pub exec: String, + pub icon: String, + pub terminal: bool, + pub replace_localized_name: bool, + pub disable_dbus_activation: bool, +} + +#[derive(Clone, Debug)] +pub struct LauncherEditResult { + pub old_app_id: String, + pub new_app_id: String, + pub path: PathBuf, +} + +#[derive(Clone, Debug)] +struct ValidLauncherEdit { + current_app_id: String, + source_path: PathBuf, + name: String, + exec: String, + icon: String, + terminal: bool, + replace_localized_name: bool, + disable_dbus_activation: bool, +} + +pub fn validate_launcher_fields(name: &str, exec: &str, icon: &str) -> Result<(), String> { + validate_required("Name", name)?; + validate_required("Command", exec)?; + validate_optional("Icon", icon)?; + Ok(()) +} + +pub async fn save_launcher_edit( + request: LauncherEditRequest, +) -> Result { + let request = validate_request(request)?; + let (new_app_id, target_path) = + target_launcher_path(&request.current_app_id, &request.source_path)?; + + let source = read_source_desktop_entry(&request).await?; + let rendered = render_editable_desktop_entry(&source, &request); + + let Some(parent) = target_path.parent() else { + return Err("Desktop file target has no parent directory".to_string()); + }; + + fs::create_dir_all(parent) + .await + .map_err(|err| format!("Could not create applications directory: {err}"))?; + + let tmp_path = temporary_path(&target_path)?; + fs::write(&tmp_path, rendered) + .await + .map_err(|err| format!("Could not write temporary desktop file: {err}"))?; + + if let Err(err) = fs::rename(&tmp_path, &target_path).await { + let _ = fs::remove_file(&tmp_path).await; + return Err(format!("Could not install desktop file: {err}")); + } + + Ok(LauncherEditResult { + old_app_id: request.current_app_id, + new_app_id, + path: target_path, + }) +} + +fn validate_request(request: LauncherEditRequest) -> Result { + let name = validate_required("Name", &request.name)?; + let exec = validate_required("Command", &request.exec)?; + let icon = validate_optional("Icon", &request.icon)?; + + Ok(ValidLauncherEdit { + current_app_id: request.current_app_id, + source_path: request.source_path, + name, + exec, + icon, + terminal: request.terminal, + replace_localized_name: request.replace_localized_name, + disable_dbus_activation: request.disable_dbus_activation, + }) +} + +fn validate_required(label: &str, value: &str) -> Result { + let value = validate_optional(label, value)?; + if value.is_empty() { + return Err(format!("{label} cannot be empty")); + } + Ok(value) +} + +fn validate_optional(label: &str, value: &str) -> Result { + if value.contains('\0') || value.contains('\n') || value.contains('\r') { + return Err(format!("{label} cannot contain line breaks")); + } + Ok(value.trim().to_string()) +} + +async fn read_source_desktop_entry(request: &ValidLauncherEdit) -> Result { + if request.source_path.as_os_str().is_empty() { + return Ok(minimal_desktop_entry()); + } + + match fs::read_to_string(&request.source_path).await { + Ok(source) => Ok(source), + Err(err) if err.kind() == ErrorKind::NotFound => Ok(minimal_desktop_entry()), + Err(err) => Err(format!("Could not read source desktop file: {err}")), + } +} + +fn minimal_desktop_entry() -> String { + "[Desktop Entry]\nType=Application\n".to_string() +} + +fn user_applications_dir() -> Result { + if let Some(xdg_data_home) = env::var_os("XDG_DATA_HOME").filter(|value| !value.is_empty()) { + return Ok(PathBuf::from(xdg_data_home).join("applications")); + } + + let Some(home) = env::var_os("HOME").filter(|value| !value.is_empty()) else { + return Err("Neither XDG_DATA_HOME nor HOME is set".to_string()); + }; + + Ok(PathBuf::from(home).join(".local/share/applications")) +} + +fn target_launcher_path(app_id: &str, source_path: &Path) -> Result<(String, PathBuf), String> { + let applications_dir = user_applications_dir()?; + if source_path.starts_with(&applications_dir) { + return Ok((app_id.to_string(), source_path.to_path_buf())); + } + + let desktop_id = normalize_desktop_id(app_id)?; + Ok(( + desktop_id.clone(), + applications_dir.join(format!("{desktop_id}.desktop")), + )) +} + +fn normalize_desktop_id(app_id: &str) -> Result { + if app_id.contains('\0') || app_id.contains('\n') || app_id.contains('\r') { + return Err("Desktop ID cannot contain line breaks".to_string()); + } + + let desktop_id = app_id + .chars() + .map(|c| if c == '/' { '-' } else { c }) + .collect::(); + + if desktop_id.trim().is_empty() { + return Err("Desktop ID cannot be empty".to_string()); + } + + Ok(desktop_id) +} + +fn temporary_path(target_path: &Path) -> Result { + let Some(file_name) = target_path.file_name() else { + return Err("Desktop file target has no filename".to_string()); + }; + + let mut tmp_file_name = OsString::from("."); + tmp_file_name.push(file_name); + tmp_file_name.push(format!(".tmp-{}", std::process::id())); + + Ok(target_path.with_file_name(tmp_file_name)) +} + +fn render_editable_desktop_entry(source: &str, request: &ValidLauncherEdit) -> String { + let mut updates = vec![ + ("Type", "Application".to_string()), + ("Name", request.name.clone()), + ("Exec", request.exec.clone()), + ("Icon", request.icon.clone()), + ( + "Terminal", + if request.terminal { "true" } else { "false" }.to_string(), + ), + ("X-COSMIC-UserEditable", "true".to_string()), + ("X-COSMIC-SourceDesktopId", request.current_app_id.clone()), + ]; + + if !request.source_path.as_os_str().is_empty() { + updates.push(( + "X-COSMIC-SourceDesktopPath", + request.source_path.to_string_lossy().to_string(), + )); + } + + if request.disable_dbus_activation { + updates.push(("DBusActivatable", "false".to_string())); + } + + set_desktop_entry_keys( + source, + &updates, + request.replace_localized_name, + request.disable_dbus_activation, + ) +} + +fn set_desktop_entry_keys( + source: &str, + updates: &[(&str, String)], + replace_localized_name: bool, + remove_try_exec: bool, +) -> String { + let mut out = Vec::new(); + let mut seen = vec![false; updates.len()]; + let mut in_desktop_entry = false; + let mut saw_desktop_entry = false; + + for line in source.lines() { + if let Some(section) = section_name(line) { + if in_desktop_entry { + insert_missing_keys(&mut out, updates, &seen); + } + + in_desktop_entry = section == "Desktop Entry"; + saw_desktop_entry |= in_desktop_entry; + if in_desktop_entry { + seen.fill(false); + } + + out.push(line.to_string()); + continue; + } + + if in_desktop_entry && let Some(key) = desktop_entry_key(line) { + if replace_localized_name && key.starts_with("Name[") { + continue; + } + + if remove_try_exec && key == "TryExec" { + continue; + } + + if let Some(index) = updates + .iter() + .position(|(update_key, _)| *update_key == key) + { + out.push(format!("{}={}", updates[index].0, updates[index].1)); + seen[index] = true; + continue; + } + } + + out.push(line.to_string()); + } + + if in_desktop_entry { + insert_missing_keys(&mut out, updates, &seen); + } + + if !saw_desktop_entry { + let mut with_desktop_entry = Vec::with_capacity(out.len() + updates.len() + 2); + with_desktop_entry.push("[Desktop Entry]".to_string()); + insert_missing_keys( + &mut with_desktop_entry, + updates, + &vec![false; updates.len()], + ); + if !out.is_empty() { + with_desktop_entry.push(String::new()); + with_desktop_entry.extend(out); + } + out = with_desktop_entry; + } + + let mut rendered = out.join("\n"); + rendered.push('\n'); + rendered +} + +fn insert_missing_keys(out: &mut Vec, updates: &[(&str, String)], seen: &[bool]) { + for (index, (key, value)) in updates.iter().enumerate() { + if !seen[index] { + out.push(format!("{key}={value}")); + } + } +} + +fn section_name(line: &str) -> Option<&str> { + let trimmed = line.trim(); + trimmed + .strip_prefix('[') + .and_then(|value| value.strip_suffix(']')) +} + +fn desktop_entry_key(line: &str) -> Option<&str> { + let line = line.trim_start(); + if line.starts_with('#') || line.starts_with(';') { + return None; + } + + line.split_once('=').map(|(key, _)| key.trim_end()) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn request() -> ValidLauncherEdit { + ValidLauncherEdit { + current_app_id: "org.example.App".to_string(), + source_path: PathBuf::from("/usr/share/applications/org.example.App.desktop"), + name: "Example".to_string(), + exec: "example --new".to_string(), + icon: "example-custom".to_string(), + terminal: false, + replace_localized_name: true, + disable_dbus_activation: true, + } + } + + #[test] + fn updates_desktop_entry_without_dropping_action_groups() { + let source = "\ +[Desktop Entry] +Type=Application +Name=Old +Name[fr]=Ancien +Exec=old +TryExec=old +Icon=old +DBusActivatable=true +Actions=new-window; + +[Desktop Action new-window] +Name=New Window +Exec=old --new-window +"; + + let rendered = render_editable_desktop_entry(source, &request()); + + assert!(rendered.contains("Name=Example\n")); + assert!(!rendered.contains("Name[fr]=")); + assert!(rendered.contains("Exec=example --new\n")); + assert!(rendered.contains("Icon=example-custom\n")); + assert!(rendered.contains("DBusActivatable=false\n")); + assert!(!rendered.contains("TryExec=")); + assert!(rendered.contains("[Desktop Action new-window]\n")); + assert!(rendered.contains("Exec=old --new-window\n")); + } + + #[test] + fn preserves_localized_names_when_name_is_unchanged() { + let mut edit = request(); + edit.replace_localized_name = false; + + let rendered = render_editable_desktop_entry( + "[Desktop Entry]\nName=Example\nName[fr]=Exemple\nExec=old\n", + &edit, + ); + + assert!(rendered.contains("Name=Example\n")); + assert!(rendered.contains("Name[fr]=Exemple\n")); + } +} diff --git a/cosmic-app-list/src/lib.rs b/cosmic-app-list/src/lib.rs index 51079cc4..56500b97 100644 --- a/cosmic-app-list/src/lib.rs +++ b/cosmic-app-list/src/lib.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only mod app; +mod launcher_edit; mod localize; mod wayland_handler; mod wayland_subscription; From 8d56d0b500e4ca66916498fd86586ce93707e037 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Tue, 26 May 2026 11:49:46 +0200 Subject: [PATCH 55/84] fix: open launcher editor in existing popup --- cosmic-app-list/src/app.rs | 42 +++----------------------------------- 1 file changed, 3 insertions(+), 39 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index e4f839f5..30936195 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -1265,11 +1265,7 @@ impl cosmic::Application for CosmicAppList { let Some(exec) = dock_item.desktop_info.exec() else { return Task::none(); }; - let Some(existing_popup) = self.popup.take() else { - return Task::none(); - }; - let Some(rectangle) = self.rectangles.get(&dock_item.id.into()) else { - self.popup = Some(existing_popup); + let Some(existing_popup) = self.popup.as_mut() else { return Task::none(); }; @@ -1303,40 +1299,8 @@ impl cosmic::Application for CosmicAppList { error: None, }); - let new_id = window::Id::unique(); - let mut popup_settings = self.core.applet.get_popup_settings( - existing_popup.parent, - new_id, - None, - None, - None, - ); - let iced::Rectangle { - x, - y, - width, - height, - } = *rectangle; - popup_settings.positioner.anchor_rect = iced::Rectangle:: { - x: x as i32, - y: y as i32, - width: width as i32, - height: height as i32, - }; - popup_settings.positioner.size_limits = Limits::NONE - .min_width(480.) - .min_height(1.) - .max_width(520.) - .max_height(1000.); - - self.popup = Some(Popup { - parent: existing_popup.parent, - id: new_id, - dock_item, - popup_type: PopupType::LauncherEditor, - }); - - return Task::batch([destroy_popup(existing_popup.id), get_popup(popup_settings)]); + existing_popup.dock_item = dock_item; + existing_popup.popup_type = PopupType::LauncherEditor; } Message::LauncherNameChanged(name) => { if let Some(edit) = self.launcher_edit.as_mut() From 04acc50e4d5c756798f0b3255deff583987b446c Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Tue, 26 May 2026 12:03:59 +0200 Subject: [PATCH 56/84] feat: add themed launcher icon catalog --- cosmic-app-list/i18n/en/cosmic_app_list.ftl | 5 + cosmic-app-list/i18n/fr/cosmic_app_list.ftl | 5 + cosmic-app-list/src/app.rs | 228 +++++++++- cosmic-app-list/src/icon_catalog.rs | 440 ++++++++++++++++++++ cosmic-app-list/src/lib.rs | 1 + 5 files changed, 665 insertions(+), 14 deletions(-) create mode 100644 cosmic-app-list/src/icon_catalog.rs diff --git a/cosmic-app-list/i18n/en/cosmic_app_list.ftl b/cosmic-app-list/i18n/en/cosmic_app_list.ftl index 066360b3..028a1558 100644 --- a/cosmic-app-list/i18n/en/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/en/cosmic_app_list.ftl @@ -10,5 +10,10 @@ edit-launcher = Edit launcher launcher-name = Name launcher-command = Command launcher-icon = Icon +launcher-icon-theme = Theme +launcher-icon-search = Search icons +launcher-icon-catalog-loading = Loading icons +launcher-icon-catalog-empty = No icons +launcher-icons = icons save = Save cancel = Cancel diff --git a/cosmic-app-list/i18n/fr/cosmic_app_list.ftl b/cosmic-app-list/i18n/fr/cosmic_app_list.ftl index f01fdf79..16bb7465 100644 --- a/cosmic-app-list/i18n/fr/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/fr/cosmic_app_list.ftl @@ -10,5 +10,10 @@ edit-launcher = Modifier le lanceur launcher-name = Nom launcher-command = Commande launcher-icon = Icône +launcher-icon-theme = Thème +launcher-icon-search = Rechercher une icône +launcher-icon-catalog-loading = Chargement des icônes +launcher-icon-catalog-empty = Aucune icône +launcher-icons = icônes save = Enregistrer cancel = Annuler diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 30936195..59e8ed83 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only use crate::{ - fl, + fl, icon_catalog, launcher_edit::{self, LauncherEditRequest}, wayland_subscription::{ OutputUpdate, ToplevelRequest, ToplevelUpdate, WaylandImage, WaylandRequest, WaylandUpdate, @@ -44,11 +44,11 @@ use cosmic::{ surface, theme::{self, Button, Container}, widget::{ - DndDestination, Image, button, container, divider, dnd_source, + DndDestination, Image, button, container, divider, dnd_source, grid, icon::{self, from_name}, image::Handle, rectangle_tracker::{RectangleTracker, RectangleUpdate, rectangle_tracker_subscription}, - svg, text, text_input, + scrollable, svg, text, text_input, }, }; use cosmic::{ @@ -65,6 +65,8 @@ use tokio::time::sleep; use url::Url; static MIME_TYPE: &str = "text/uri-list"; +const MAX_VISIBLE_ICON_CHOICES: usize = 120; +const ICON_CATALOG_COLUMNS: usize = 6; pub fn run() -> cosmic::iced::Result { cosmic::applet::run::(()) @@ -400,6 +402,16 @@ struct LauncherEditState { terminal: bool, saving: bool, error: Option, + icon_catalog: IconCatalogState, +} + +#[derive(Debug, Clone)] +struct IconCatalogState { + theme: String, + query: String, + entries: Vec, + loading: bool, + truncated: bool, } #[derive(Clone, Default)] @@ -461,6 +473,10 @@ enum Message { LauncherNameChanged(String), LauncherExecChanged(String), LauncherIconChanged(String), + LauncherIconSearchChanged(String), + LauncherIconSelected(String), + ReloadLauncherIconCatalog, + LauncherIconCatalogLoaded(icon_catalog::IconCatalog), SaveLauncherEdit, CancelLauncherEdit, LauncherEditSaved(Result), @@ -708,6 +724,143 @@ pub fn menu_control_padding() -> Padding { [spacing.space_xxs, spacing.space_s].into() } +fn launcher_icon_editor(edit: &LauncherEditState) -> Element<'_, Message> { + let spacing = theme::spacing(); + let selected_icon = edit.icon.trim(); + let query = edit.icon_catalog.query.trim().to_ascii_lowercase(); + let mut total_matches = 0usize; + let mut visible_count = 0usize; + let mut icon_grid = grid() + .width(Length::Fill) + .column_spacing(spacing.space_xxs) + .row_spacing(spacing.space_xxs); + + for entry in edit.icon_catalog.entries.iter().filter(|entry| { + query.is_empty() || entry.name.to_ascii_lowercase().contains(query.as_str()) + }) { + total_matches += 1; + if visible_count >= MAX_VISIBLE_ICON_CHOICES { + continue; + } + + if visible_count > 0 && visible_count % ICON_CATALOG_COLUMNS == 0 { + icon_grid = icon_grid.insert_row(); + } + + let selected = selected_icon == entry.name; + let icon_preview = cosmic::widget::icon( + fde::IconSource::from_unknown(entry.name.as_str()).as_cosmic_icon(), + ) + .size(32) + .width(Length::Fixed(32.0)) + .height(Length::Fixed(32.0)); + + let label = text::caption(entry.name.as_str()) + .ellipsize(Ellipsize::End(EllipsizeHeightLimit::Lines(1))) + .width(Length::Fill) + .center(); + + let tile = column![icon_preview, label] + .align_x(Alignment::Center) + .spacing(4) + .width(Length::Fixed(70.0)); + + let tile_button = button::custom(tile) + .class(if selected { + Button::Suggested + } else { + Button::Image + }) + .selected(selected) + .on_press(Message::LauncherIconSelected(entry.name.clone())) + .padding(6) + .width(Length::Fixed(74.0)) + .height(Length::Fixed(76.0)); + + icon_grid = icon_grid.push(tile_button); + visible_count += 1; + } + + let current_icon = + cosmic::widget::icon(fde::IconSource::from_unknown(edit.icon.as_str()).as_cosmic_icon()) + .size(32) + .width(Length::Fixed(36.0)) + .height(Length::Fixed(36.0)); + + let icon_value = row![ + current_icon, + text_input("", edit.icon.as_str()) + .label(fl!("launcher-icon")) + .on_input(Message::LauncherIconChanged) + .on_submit(|_| Message::SaveLauncherEdit) + .width(Length::Fill) + .size(14), + button::icon(from_name("view-refresh-symbolic")) + .on_press(Message::ReloadLauncherIconCatalog) + .padding(spacing.space_xxs), + ] + .spacing(spacing.space_xs) + .align_y(Alignment::Center); + + let visible_total = if edit.icon_catalog.truncated { + format!( + "{}/{}+ {}", + visible_count, + total_matches, + fl!("launcher-icons") + ) + } else { + format!( + "{}/{} {}", + visible_count, + total_matches, + fl!("launcher-icons") + ) + }; + + let catalog_header = row![ + text::caption(format!( + "{}: {}", + fl!("launcher-icon-theme"), + edit.icon_catalog.theme + )), + horizontal_space(), + text::caption(visible_total), + ] + .align_y(Alignment::Center); + + let catalog_body: Element<_> = if edit.icon_catalog.loading { + container(text::body(fl!("launcher-icon-catalog-loading"))) + .center(Length::Fill) + .height(Length::Fixed(220.0)) + .into() + } else if total_matches == 0 { + container(text::body(fl!("launcher-icon-catalog-empty"))) + .center(Length::Fill) + .height(Length::Fixed(220.0)) + .into() + } else { + scrollable(icon_grid) + .height(Length::Fixed(240.0)) + .width(Length::Fill) + .into() + }; + + column![ + icon_value, + catalog_header, + text_input("", edit.icon_catalog.query.as_str()) + .label(fl!("launcher-icon-search")) + .on_input(Message::LauncherIconSearchChanged) + .width(Length::Fill) + .size(14), + catalog_body, + ] + .spacing(spacing.space_s) + .width(Length::Fill) + .into() +} + fn find_desktop_entries<'a>( desktop_entries: &'a [fde::DesktopEntry], app_ids: &'a [String], @@ -1281,6 +1434,12 @@ impl cosmic::Application for CosmicAppList { }) .unwrap_or_else(|| dock_item.original_app_id.clone()); let original_exec = exec.to_string(); + let original_icon = dock_item + .desktop_info + .icon() + .unwrap_or_default() + .to_string(); + let icon_theme = cosmic::icon_theme::default(); self.launcher_edit = Some(LauncherEditState { original_app_id: dock_item.original_app_id.clone(), @@ -1289,18 +1448,26 @@ impl cosmic::Application for CosmicAppList { original_exec: original_exec.clone(), name: original_name, exec: original_exec, - icon: dock_item - .desktop_info - .icon() - .unwrap_or_default() - .to_string(), + icon: original_icon.clone(), terminal: dock_item.desktop_info.terminal(), saving: false, error: None, + icon_catalog: IconCatalogState { + theme: icon_theme.clone(), + query: String::new(), + entries: Vec::new(), + loading: true, + truncated: false, + }, }); existing_popup.dock_item = dock_item; existing_popup.popup_type = PopupType::LauncherEditor; + + return Task::perform( + icon_catalog::load_icon_catalog(icon_theme, original_icon), + |catalog| cosmic::Action::App(Message::LauncherIconCatalogLoaded(catalog)), + ); } Message::LauncherNameChanged(name) => { if let Some(edit) = self.launcher_edit.as_mut() @@ -1326,6 +1493,44 @@ impl cosmic::Application for CosmicAppList { edit.error = None; } } + Message::LauncherIconSearchChanged(query) => { + if let Some(edit) = self.launcher_edit.as_mut() { + edit.icon_catalog.query = query; + } + } + Message::LauncherIconSelected(icon) => { + if let Some(edit) = self.launcher_edit.as_mut() + && !edit.saving + { + edit.icon = icon; + edit.error = None; + } + } + Message::ReloadLauncherIconCatalog => { + if let Some(edit) = self.launcher_edit.as_mut() { + edit.icon_catalog.theme = cosmic::icon_theme::default(); + edit.icon_catalog.entries.clear(); + edit.icon_catalog.loading = true; + edit.icon_catalog.truncated = false; + + return Task::perform( + icon_catalog::load_icon_catalog( + edit.icon_catalog.theme.clone(), + edit.icon.clone(), + ), + |catalog| cosmic::Action::App(Message::LauncherIconCatalogLoaded(catalog)), + ); + } + } + Message::LauncherIconCatalogLoaded(catalog) => { + if let Some(edit) = self.launcher_edit.as_mut() + && edit.icon_catalog.theme == catalog.theme + { + edit.icon_catalog.entries = catalog.entries; + edit.icon_catalog.loading = false; + edit.icon_catalog.truncated = catalog.truncated; + } + } Message::SaveLauncherEdit => { let Some(edit) = self.launcher_edit.as_mut() else { return Task::none(); @@ -2633,12 +2838,7 @@ impl cosmic::Application for CosmicAppList { .on_submit(|_| Message::SaveLauncherEdit) .width(Length::Fill) .size(14), - text_input("", edit.icon.as_str()) - .label(fl!("launcher-icon")) - .on_input(Message::LauncherIconChanged) - .on_submit(|_| Message::SaveLauncherEdit) - .width(Length::Fill) - .size(14), + launcher_icon_editor(edit), ] .spacing(spacing.space_s) .width(Length::Fill); diff --git a/cosmic-app-list/src/icon_catalog.rs b/cosmic-app-list/src/icon_catalog.rs new file mode 100644 index 00000000..2cb05e1a --- /dev/null +++ b/cosmic-app-list/src/icon_catalog.rs @@ -0,0 +1,440 @@ +use std::{ + cmp::Ordering, + collections::{HashMap, HashSet, VecDeque}, + fs, + path::{Component, Path, PathBuf}, +}; + +const FALLBACK_THEMES: &[&str] = &["Cosmic", "hicolor", "gnome", "Yaru"]; +const MAX_THEME_CHAIN: usize = 24; +const MAX_SCAN_DEPTH: usize = 5; +const MAX_CATALOG_ENTRIES: usize = 2_500; + +#[derive(Debug, Clone)] +pub struct IconCatalog { + pub theme: String, + pub entries: Vec, + pub truncated: bool, +} + +#[derive(Debug, Clone)] +pub struct IconCatalogEntry { + pub name: String, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +struct CandidateRank { + preferred: u8, + category: u8, + symbolic: u8, + theme_depth: usize, + extension: u8, +} + +impl Ord for CandidateRank { + fn cmp(&self, other: &Self) -> Ordering { + ( + self.preferred, + self.category, + self.symbolic, + self.theme_depth, + self.extension, + ) + .cmp(&( + other.preferred, + other.category, + other.symbolic, + other.theme_depth, + other.extension, + )) + } +} + +impl PartialOrd for CandidateRank { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +#[derive(Debug, Clone)] +struct Candidate { + name: String, + rank: CandidateRank, +} + +pub async fn load_icon_catalog(theme: String, preferred_icon: String) -> IconCatalog { + build_icon_catalog(theme, preferred_icon) +} + +fn build_icon_catalog(theme: String, preferred_icon: String) -> IconCatalog { + let theme = if theme.trim().is_empty() { + "Cosmic".to_string() + } else { + theme + }; + let preferred_name = icon_name_from_value(preferred_icon.trim()); + let theme_chain = theme_chain(&theme); + let mut candidates = HashMap::new(); + + for (theme_depth, theme_name) in theme_chain.iter().enumerate() { + for theme_dir in theme_dirs(theme_name) { + scan_icon_tree( + &theme_dir, + theme_depth, + preferred_name.as_deref(), + &mut candidates, + ); + } + } + + for pixmap_dir in pixmap_dirs() { + scan_icon_tree( + &pixmap_dir, + theme_chain.len() + 1, + preferred_name.as_deref(), + &mut candidates, + ); + } + + let mut entries = candidates.into_values().collect::>(); + entries.sort_by(|a, b| a.rank.cmp(&b.rank).then_with(|| a.name.cmp(&b.name))); + + let truncated = entries.len() > MAX_CATALOG_ENTRIES; + entries.truncate(MAX_CATALOG_ENTRIES); + + IconCatalog { + theme, + entries: entries + .into_iter() + .map(|candidate| IconCatalogEntry { + name: candidate.name, + }) + .collect(), + truncated, + } +} + +fn theme_chain(theme: &str) -> Vec { + let mut queue = VecDeque::from([theme.to_string()]); + let mut seen = HashSet::new(); + let mut chain = Vec::new(); + + while let Some(theme_name) = queue.pop_front() { + let key = theme_name.to_ascii_lowercase(); + if !seen.insert(key) { + continue; + } + + chain.push(theme_name.clone()); + if chain.len() >= MAX_THEME_CHAIN { + break; + } + + for parent in read_theme_inherits(&theme_name) { + queue.push_back(parent); + } + } + + for fallback in FALLBACK_THEMES { + if chain.len() >= MAX_THEME_CHAIN { + break; + } + let key = fallback.to_ascii_lowercase(); + if seen.insert(key) { + chain.push((*fallback).to_string()); + } + } + + chain +} + +fn read_theme_inherits(theme: &str) -> Vec { + theme_dirs(theme) + .into_iter() + .find_map(|dir| fs::read_to_string(dir.join("index.theme")).ok()) + .map(|contents| parse_inherits(&contents)) + .unwrap_or_default() +} + +fn parse_inherits(contents: &str) -> Vec { + let mut in_icon_theme = false; + + for raw_line in contents.lines() { + let line = raw_line.trim(); + if line.is_empty() || line.starts_with('#') { + continue; + } + + if line.starts_with('[') && line.ends_with(']') { + in_icon_theme = line == "[Icon Theme]"; + continue; + } + + if in_icon_theme && let Some(value) = line.strip_prefix("Inherits=") { + return value + .split(',') + .map(str::trim) + .filter(|value| !value.is_empty()) + .map(ToOwned::to_owned) + .collect(); + } + } + + Vec::new() +} + +fn scan_icon_tree( + root: &Path, + theme_depth: usize, + preferred_name: Option<&str>, + candidates: &mut HashMap, +) { + let mut stack = vec![(root.to_path_buf(), 0usize)]; + + while let Some((dir, depth)) = stack.pop() { + if depth > MAX_SCAN_DEPTH { + continue; + } + + let Ok(entries) = fs::read_dir(&dir) else { + continue; + }; + + for entry in entries.filter_map(Result::ok) { + let path = entry.path(); + let Ok(file_type) = entry.file_type() else { + continue; + }; + + if file_type.is_dir() { + stack.push((path, depth + 1)); + } else if (file_type.is_file() || file_type.is_symlink()) + && let Some(candidate) = candidate_from_path(&path, theme_depth, preferred_name) + { + insert_candidate(candidates, candidate); + } + } + } +} + +fn insert_candidate(candidates: &mut HashMap, candidate: Candidate) { + let key = candidate.name.to_ascii_lowercase(); + match candidates.get_mut(&key) { + Some(existing) if candidate.rank < existing.rank => { + *existing = candidate; + } + None => { + candidates.insert(key, candidate); + } + _ => {} + } +} + +fn candidate_from_path( + path: &Path, + theme_depth: usize, + preferred_name: Option<&str>, +) -> Option { + let extension = extension_rank(path)?; + let name = path.file_stem()?.to_str()?.trim(); + if name.is_empty() { + return None; + } + + let symbolic = u8::from(name.ends_with("-symbolic") || path_has_component(path, "symbolic")); + let preferred = u8::from(preferred_name != Some(name)); + + Some(Candidate { + name: name.to_string(), + rank: CandidateRank { + preferred, + category: category_rank(path), + symbolic, + theme_depth, + extension, + }, + }) +} + +fn extension_rank(path: &Path) -> Option { + match path.extension()?.to_str()?.to_ascii_lowercase().as_str() { + "svg" => Some(0), + "png" => Some(1), + "xpm" => Some(2), + _ => None, + } +} + +fn category_rank(path: &Path) -> u8 { + for component in path.components().filter_map(component_str) { + match component { + "apps" | "applications" => return 0, + "categories" => return 1, + "places" => return 2, + "devices" => return 3, + "mimetypes" => return 4, + "actions" => return 5, + "status" => return 6, + _ => {} + } + } + + 7 +} + +fn path_has_component(path: &Path, needle: &str) -> bool { + path.components() + .filter_map(component_str) + .any(|component| component == needle) +} + +fn component_str(component: Component<'_>) -> Option<&str> { + component.as_os_str().to_str() +} + +fn icon_name_from_value(value: &str) -> Option { + if value.is_empty() { + return None; + } + + let path = Path::new(value); + if value.contains('/') { + return path + .file_stem() + .and_then(|name| name.to_str()) + .map(ToOwned::to_owned); + } + + path.file_stem() + .and_then(|name| name.to_str()) + .map(ToOwned::to_owned) + .or_else(|| Some(value.to_string())) +} + +fn theme_dirs(theme: &str) -> Vec { + icon_base_dirs() + .into_iter() + .map(|base| base.join(theme)) + .filter(|path| path.is_dir()) + .collect() +} + +fn icon_base_dirs() -> Vec { + let mut dirs = Vec::new(); + + if let Some(home) = std::env::home_dir() { + push_existing_unique(&mut dirs, home.join(".icons")); + } + + if let Some(data_home) = xdg_data_home() { + push_existing_unique(&mut dirs, data_home.join("icons")); + } + + for data_dir in xdg_data_dirs() { + push_existing_unique(&mut dirs, data_dir.join("icons")); + } + + dirs +} + +fn pixmap_dirs() -> Vec { + let mut dirs = Vec::new(); + + if let Some(data_home) = xdg_data_home() { + push_existing_unique(&mut dirs, data_home.join("pixmaps")); + } + + for data_dir in xdg_data_dirs() { + push_existing_unique(&mut dirs, data_dir.join("pixmaps")); + } + + push_existing_unique(&mut dirs, PathBuf::from("/usr/share/pixmaps")); + dirs +} + +fn xdg_data_home() -> Option { + std::env::var_os("XDG_DATA_HOME") + .filter(|value| !value.is_empty()) + .map(PathBuf::from) + .or_else(|| std::env::home_dir().map(|home| home.join(".local/share"))) +} + +fn xdg_data_dirs() -> Vec { + std::env::var_os("XDG_DATA_DIRS") + .filter(|value| !value.is_empty()) + .map(|value| std::env::split_paths(&value).collect()) + .unwrap_or_else(|| { + vec![ + PathBuf::from("/usr/local/share"), + PathBuf::from("/usr/share"), + ] + }) +} + +fn push_existing_unique(dirs: &mut Vec, path: PathBuf) { + if path.exists() && !dirs.iter().any(|existing| existing == &path) { + dirs.push(path); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parses_inherits_only_from_icon_theme_section() { + let contents = r#" +[Other] +Inherits=Wrong + +[Icon Theme] +Name=Demo +Inherits=Cosmic, hicolor , Adwaita +"#; + + assert_eq!(parse_inherits(contents), ["Cosmic", "hicolor", "Adwaita"]); + } + + #[test] + fn normalizes_icon_names_from_plain_names_and_paths() { + assert_eq!(icon_name_from_value("firefox").as_deref(), Some("firefox")); + assert_eq!( + icon_name_from_value("/usr/share/icons/hicolor/scalable/apps/firefox.svg").as_deref(), + Some("firefox") + ); + } + + #[test] + fn keeps_the_best_duplicate_candidate() { + let mut candidates = HashMap::new(); + insert_candidate( + &mut candidates, + Candidate { + name: "demo".to_string(), + rank: CandidateRank { + preferred: 1, + category: 7, + symbolic: 1, + theme_depth: 4, + extension: 2, + }, + }, + ); + insert_candidate( + &mut candidates, + Candidate { + name: "demo".to_string(), + rank: CandidateRank { + preferred: 0, + category: 0, + symbolic: 0, + theme_depth: 0, + extension: 0, + }, + }, + ); + + assert_eq!(candidates["demo"].rank.preferred, 0); + assert_eq!(candidates["demo"].rank.category, 0); + } +} diff --git a/cosmic-app-list/src/lib.rs b/cosmic-app-list/src/lib.rs index 56500b97..f6893335 100644 --- a/cosmic-app-list/src/lib.rs +++ b/cosmic-app-list/src/lib.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only mod app; +mod icon_catalog; mod launcher_edit; mod localize; mod wayland_handler; From ced6eb267ecee29b0f279f4e165b61b1ea909ca9 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Wed, 27 May 2026 08:48:24 +0200 Subject: [PATCH 57/84] Fix status menu build after upstream rebase --- cosmic-applet-status-area/src/components/status_menu.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cosmic-applet-status-area/src/components/status_menu.rs b/cosmic-applet-status-area/src/components/status_menu.rs index 6aa0953c..e706f37b 100644 --- a/cosmic-applet-status-area/src/components/status_menu.rs +++ b/cosmic-applet-status-area/src/components/status_menu.rs @@ -8,7 +8,7 @@ use cosmic::{ iced, widget::icon::{self, IconFallback}, }; -use std::path::Path; +use std::path::{Path, PathBuf}; use crate::subscriptions::status_notifier_item::{IconUpdate, Layout, StatusNotifierItem}; From adc97dc8f160804c9cd79930259606adb8146acb Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Thu, 2 Jul 2026 19:28:24 +0200 Subject: [PATCH 58/84] fix: adapt to cosmic-theme background(transparent) accessor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Leyoda 2026 – GPLv3 --- cosmic-app-list/src/app.rs | 2 +- cosmic-applet-status-area/src/components/app.rs | 2 +- cosmic-panel-button/src/lib.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 59e8ed83..55d815b8 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -2787,7 +2787,7 @@ impl cosmic::Application for CosmicAppList { //TODO: move style to libcosmic .class(theme::Container::custom(|theme| { let cosmic = theme.cosmic(); - let component = &cosmic.background.component; + let component = &cosmic.background(false).component; container::Style { icon_color: Some(component.on.into()), text_color: Some(component.on.into()), diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 081dfe06..7bedc653 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -656,7 +656,7 @@ fn menu_icon_button<'a>( .class(if symbolic { cosmic::theme::Svg::Custom(std::rc::Rc::new(|theme| { cosmic::iced::widget::svg::Style { - color: Some(theme.cosmic().background.on.into()), + color: Some(theme.cosmic().background(false).on.into()), } })) } else { diff --git a/cosmic-panel-button/src/lib.rs b/cosmic-panel-button/src/lib.rs index 132e5dd5..5c875719 100644 --- a/cosmic-panel-button/src/lib.rs +++ b/cosmic-panel-button/src/lib.rs @@ -66,7 +66,7 @@ impl Button { .class(if symbolic { cosmic::theme::Svg::Custom(std::rc::Rc::new(|theme| { cosmic::iced::widget::svg::Style { - color: Some(theme.cosmic().background.on.into()), + color: Some(theme.cosmic().background(false).on.into()), } })) } else { From ebecfa6b7da03c1f592fb257d0b79843bfb2edba Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Sat, 4 Jul 2026 11:20:22 +0200 Subject: [PATCH 59/84] chore: refresh lockfile post-upstream rebase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Leyoda 2026 – GPLv3 --- Cargo.lock | 328 ++++++++++++----------------------------------------- 1 file changed, 75 insertions(+), 253 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 96c26cd9..5ca8bed1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -234,12 +234,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" - [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -814,7 +808,6 @@ dependencies = [ [[package]] name = "clipboard_macos" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "objc", "objc-foundation", @@ -824,22 +817,12 @@ dependencies = [ [[package]] name = "clipboard_wayland" version = "0.2.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "dnd", "mime 0.1.0", "smithay-clipboard", ] -[[package]] -name = "clipboard_x11" -version = "0.4.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" -dependencies = [ - "thiserror 1.0.69", - "x11rb", -] - [[package]] name = "cocoa" version = "0.25.0" @@ -995,7 +978,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "image", - "libcosmic", + "libcosmic-yoda", "memmap2 0.9.10", "rust-embed", "rustc-hash 2.1.2", @@ -1013,7 +996,7 @@ dependencies = [ name = "cosmic-app-list-config" version = "1.0.15" dependencies = [ - "libcosmic", + "libcosmic-yoda", "serde", ] @@ -1028,7 +1011,7 @@ dependencies = [ "cosmic-settings-accessibility-subscription", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1045,7 +1028,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "intmap", - "libcosmic", + "libcosmic-yoda", "mpris2-zbus", "rust-embed", "serde", @@ -1068,11 +1051,11 @@ dependencies = [ "cosmic-config", "cosmic-settings-daemon-subscription", "cosmic-settings-upower-subscription", - "drm 0.14.1", + "drm", "futures", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "rustc-hash 2.1.2", "serde", @@ -1094,7 +1077,7 @@ dependencies = [ "futures", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "rustc-hash 2.1.2", "tokio", @@ -1110,7 +1093,7 @@ dependencies = [ "cosmic-comp-config", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1127,7 +1110,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "image", - "libcosmic", + "libcosmic-yoda", "memmap2 0.9.10", "rust-embed", "rustix 1.1.4", @@ -1150,7 +1133,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "indexmap 2.14.0", - "libcosmic", + "libcosmic-yoda", "nmrs", "rust-embed", "rustc-hash 2.1.2", @@ -1173,7 +1156,7 @@ dependencies = [ "futures-util", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1189,7 +1172,7 @@ version = "1.0.15" dependencies = [ "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "logind-zbus", "rust-embed", "rustix 1.1.4", @@ -1205,7 +1188,7 @@ name = "cosmic-applet-status-area" version = "1.0.15" dependencies = [ "futures", - "libcosmic", + "libcosmic-yoda", "rustc-hash 2.1.2", "serde", "tokio", @@ -1225,7 +1208,7 @@ dependencies = [ "cosmic-protocols", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "rustc-hash 2.1.2", "tokio", @@ -1243,7 +1226,7 @@ dependencies = [ "i18n-embed-fl", "icu", "jiff", - "libcosmic", + "libcosmic-yoda", "logind-zbus", "rust-embed", "timedate-zbus", @@ -1263,7 +1246,7 @@ dependencies = [ "futures", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1290,7 +1273,7 @@ dependencies = [ "cosmic-applet-time", "cosmic-applet-workspaces", "cosmic-panel-button", - "libcosmic", + "libcosmic-yoda", "tracing", "tracing-log", "tracing-subscriber", @@ -1308,7 +1291,6 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#c253ec1d6804afbcdf250f5cc37ae1194bba7bd2" dependencies = [ "bitflags 2.11.1", "cosmic-protocols", @@ -1330,7 +1312,6 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1351,7 +1332,6 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "quote", "syn", @@ -1360,7 +1340,6 @@ dependencies = [ [[package]] name = "cosmic-dbus-a11y" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -1368,7 +1347,6 @@ dependencies = [ [[package]] name = "cosmic-dbus-networkmanager" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "bitflags 2.11.1", "derive_builder", @@ -1381,7 +1359,6 @@ dependencies = [ [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#cb0a2f299dbc443697ce1674065e0d4f82915c02" dependencies = [ "bstr", "btoi", @@ -1395,7 +1372,6 @@ dependencies = [ [[package]] name = "cosmic-notifications-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#a899bfbc6715c36b1f02d7a0f4d3601a3ea0295f" dependencies = [ "cosmic-config", "serde", @@ -1404,10 +1380,9 @@ dependencies = [ [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#a899bfbc6715c36b1f02d7a0f4d3601a3ea0295f" dependencies = [ "fast_image_resize", - "libcosmic", + "libcosmic-yoda", "serde", "tl", "tracing", @@ -1420,7 +1395,7 @@ name = "cosmic-panel-button" version = "1.0.15" dependencies = [ "cosmic-config", - "libcosmic", + "libcosmic-yoda", "rustc-hash 2.1.2", "serde", "tracing", @@ -1431,7 +1406,6 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#546a6c45210574caed9a3e51446aa8ad622d3627" dependencies = [ "anyhow", "cosmic-config", @@ -1445,7 +1419,6 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?branch=main#c253ec1d6804afbcdf250f5cc37ae1194bba7bd2" dependencies = [ "bitflags 2.11.1", "wayland-backend", @@ -1459,7 +1432,6 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1473,7 +1445,6 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1486,7 +1457,6 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-client" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#e7936f0d4f01c8c5a436908c7ee9f6ad43e6a7d8" dependencies = [ "cosmic-settings-audio-core", "dirs", @@ -1502,7 +1472,6 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-core" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#e7936f0d4f01c8c5a436908c7ee9f6ad43e6a7d8" dependencies = [ "dirs", "ron 0.12.1", @@ -1513,7 +1482,6 @@ dependencies = [ [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#fa82bdf9fe7b5f5bd6008f32f393efd5e7a71c47" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1525,8 +1493,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon" -version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" +version = "0.1.1-yoda.1" dependencies = [ "zbus", ] @@ -1534,7 +1501,6 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "futures", "iced_futures", @@ -1547,7 +1513,6 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "bitflags 2.11.1", "cosmic-dbus-networkmanager", @@ -1566,7 +1531,6 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#1f225d19ce582423fe8713fc6669c51d162f256f" dependencies = [ "futures", "iced_futures", @@ -1580,8 +1544,6 @@ dependencies = [ [[package]] name = "cosmic-text" version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ "bitflags 2.11.1", "fontdb", @@ -1599,18 +1561,19 @@ dependencies = [ "unicode-linebreak", "unicode-script", "unicode-segmentation", + "unicode-width", ] [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "almost", "configparser", "cosmic-config", "csscolorparser", "dirs", + "hex_color", "palette", "ron 0.12.1", "serde", @@ -1651,7 +1614,6 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "cryoglyph" version = "0.1.0" -source = "git+https://github.com/iced-rs/cryoglyph.git?rev=e429a025df36ab8145708acb309080ae3deec17a#e429a025df36ab8145708acb309080ae3deec17a" dependencies = [ "cosmic-text", "etagere", @@ -1688,15 +1650,6 @@ dependencies = [ "uncased", ] -[[package]] -name = "ctor" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" -dependencies = [ - "dtor", -] - [[package]] name = "cursor-icon" version = "1.2.0" @@ -1961,7 +1914,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1999,7 +1952,6 @@ dependencies = [ [[package]] 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.1", "mime 0.1.0", @@ -2026,20 +1978,6 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" - -[[package]] -name = "drm" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" -dependencies = [ - "bitflags 2.11.1", - "bytemuck", - "drm-ffi 0.7.1", - "drm-fourcc", - "rustix 0.38.44", -] [[package]] name = "drm" @@ -2049,29 +1987,19 @@ checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ "bitflags 2.11.1", "bytemuck", - "drm-ffi 0.9.1", + "drm-ffi", "drm-fourcc", "libc", "rustix 0.38.44", ] -[[package]] -name = "drm-ffi" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" -dependencies = [ - "drm-sys 0.6.1", - "rustix 0.38.44", -] - [[package]] name = "drm-ffi" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51a91c9b32ac4e8105dec255e849e0d66e27d7c34d184364fb93e469db08f690" dependencies = [ - "drm-sys 0.8.1", + "drm-sys", "rustix 1.1.4", ] @@ -2081,16 +2009,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" -[[package]] -name = "drm-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" -dependencies = [ - "libc", - "linux-raw-sys 0.6.5", -] - [[package]] name = "drm-sys" version = "0.8.1" @@ -2101,12 +2019,6 @@ dependencies = [ "linux-raw-sys 0.9.4", ] -[[package]] -name = "dtor" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" - [[package]] name = "dyn-clone" version = "1.0.20" @@ -2159,7 +2071,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2580,16 +2492,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "gethostname" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" -dependencies = [ - "rustix 1.1.4", - "windows-link 0.2.1", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -2831,6 +2733,17 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex_color" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d37f101bf4c633f7ca2e4b5e136050314503dd198e78e325ea602c327c484ef0" +dependencies = [ + "arrayvec", + "rand 0.8.6", + "serde", +] + [[package]] name = "hexf-parse" version = "0.2.1" @@ -2949,7 +2862,6 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "dnd", "iced_accessibility", @@ -2970,7 +2882,6 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "accesskit", "accesskit_winit", @@ -2979,7 +2890,6 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bitflags 2.11.1", "bytes", @@ -3004,7 +2914,6 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "iced_core", "iced_futures", @@ -3014,7 +2923,6 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "futures", "iced_core", @@ -3028,7 +2936,6 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bitflags 2.11.1", "bytemuck", @@ -3049,7 +2956,6 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "iced_graphics", "iced_runtime", @@ -3058,7 +2964,6 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3070,7 +2975,6 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3085,7 +2989,6 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "bytemuck", "cosmic-text", @@ -3102,9 +3005,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ - "as-raw-xcb-connection", "bitflags 2.11.1", "bytemuck", "cosmic-client-toolkit", @@ -3121,19 +3022,16 @@ dependencies = [ "rustc-hash 2.1.2", "rustix 0.38.44", "thiserror 2.0.18", - "tiny-xlib", "wayland-backend", "wayland-client", "wayland-protocols", "wayland-sys", "wgpu", - "x11rb", ] [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3151,7 +3049,6 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3793,7 +3690,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3944,7 +3841,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -4007,9 +3904,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] -name = "libcosmic" -version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#758c13723fc35b1d82d7fa4f35859c9f7f3c1b0c" +name = "libcosmic-yoda" +version = "0.1.0-yoda.2" dependencies = [ "apply", "ashpd 0.12.3", @@ -4023,6 +3919,7 @@ dependencies = [ "cosmic-theme", "css-color", "derive_setters", + "enumflags2", "float-cmp 0.10.0", "freedesktop-desktop-entry", "futures", @@ -4129,12 +4026,6 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" -[[package]] -name = "linux-raw-sys" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" - [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -4330,7 +4221,6 @@ dependencies = [ [[package]] name = "mime" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "smithay-clipboard", ] @@ -4376,7 +4266,6 @@ dependencies = [ [[package]] name = "mpris2-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "futures-util", "jiff", @@ -4463,7 +4352,6 @@ dependencies = [ [[package]] name = "nm-secret-agent-manager" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -4530,7 +4418,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5374,6 +5262,8 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ + "libc", + "rand_chacha 0.3.1", "rand_core 0.6.4", ] @@ -5383,10 +5273,20 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ - "rand_chacha", + "rand_chacha 0.9.0", "rand_core 0.9.5", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.9.0" @@ -5402,6 +5302,9 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] [[package]] name = "rand_core" @@ -5696,7 +5599,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6070,7 +5973,6 @@ dependencies = [ [[package]] name = "smithay-clipboard" version = "0.8.0" -source = "git+https://github.com/pop-os/smithay-clipboard?tag=sctk-0.20#859b02c88f45c554049a67c6ddeec1692ce0e20b" dependencies = [ "libc", "raw-window-handle", @@ -6101,14 +6003,11 @@ dependencies = [ [[package]] name = "softbuffer" version = "0.4.1" -source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#c2b2c19ddb38ff17495643699f97cb1f2064a1be" dependencies = [ - "as-raw-xcb-connection", "bytemuck", "cfg_aliases", "cocoa", "core-graphics", - "drm 0.11.1", "fastrand", "foreign-types", "js-sys", @@ -6118,14 +6017,12 @@ dependencies = [ "raw-window-handle", "redox_syscall 0.5.18", "rustix 0.38.44", - "tiny-xlib", "wasm-bindgen", "wayland-backend", "wayland-client", "wayland-sys", "web-sys", "windows-sys 0.52.0", - "x11rb", ] [[package]] @@ -6222,7 +6119,6 @@ dependencies = [ [[package]] name = "switcheroo-control" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -6283,10 +6179,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.2", "once_cell", "rustix 1.1.4", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -6381,7 +6277,6 @@ dependencies = [ [[package]] name = "timedate-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -6412,19 +6307,6 @@ dependencies = [ "strict-num", ] -[[package]] -name = "tiny-xlib" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" -dependencies = [ - "as-raw-xcb-connection", - "ctor", - "libloading", - "pkg-config", - "tracing", -] - [[package]] name = "tinystr" version = "0.8.3" @@ -6768,7 +6650,6 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "upower_dbus" version = "0.3.2" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "serde", "serde_repr", @@ -7343,7 +7224,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -7355,12 +7236,10 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" version = "0.4.1" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "clipboard-win", "clipboard_macos", "clipboard_wayland", - "clipboard_x11", "dnd", "mime 0.1.0", "raw-window-handle", @@ -7800,7 +7679,6 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "cfg_aliases", @@ -7820,13 +7698,11 @@ dependencies = [ "winit-wayland", "winit-web", "winit-win32", - "winit-x11", ] [[package]] name = "winit-android" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "android-activity", "bitflags 2.11.1", @@ -7841,7 +7717,6 @@ dependencies = [ [[package]] name = "winit-appkit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "block2 0.6.2", @@ -7863,7 +7738,6 @@ dependencies = [ [[package]] name = "winit-common" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "memmap2 0.9.10", "objc2 0.6.4", @@ -7871,14 +7745,12 @@ dependencies = [ "smol_str", "tracing", "winit-core", - "x11-dl", "xkbcommon-dl", ] [[package]] name = "winit-core" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "cursor-icon", @@ -7892,7 +7764,6 @@ dependencies = [ [[package]] name = "winit-orbital" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "dpi", @@ -7908,7 +7779,6 @@ dependencies = [ [[package]] name = "winit-uikit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "block2 0.6.2", @@ -7928,7 +7798,6 @@ dependencies = [ [[package]] name = "winit-wayland" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "ahash", "bitflags 2.11.1", @@ -7954,7 +7823,6 @@ dependencies = [ [[package]] name = "winit-web" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "atomic-waker", "bitflags 2.11.1", @@ -7976,7 +7844,6 @@ dependencies = [ [[package]] name = "winit-win32" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" dependencies = [ "bitflags 2.11.1", "cursor-icon", @@ -7989,29 +7856,6 @@ dependencies = [ "winit-core", ] -[[package]] -name = "winit-x11" -version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" -dependencies = [ - "bitflags 2.11.1", - "bytemuck", - "calloop", - "cursor-icon", - "dpi", - "libc", - "percent-encoding", - "raw-window-handle", - "rustix 1.1.4", - "smol_str", - "tracing", - "winit-common", - "winit-core", - "x11-dl", - "x11rb", - "xkbcommon-dl", -] - [[package]] name = "winnow" version = "1.0.3" @@ -8130,39 +7974,6 @@ dependencies = [ "either", ] -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading", - "once_cell", - "rustix 1.1.4", - "x11rb-protocol", - "xcursor", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" - [[package]] name = "xcursor" version = "0.3.10" @@ -8178,7 +7989,6 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#546a6c45210574caed9a3e51446aa8ad622d3627" dependencies = [ "serde", "wayland-protocols-wlr", @@ -8652,3 +8462,15 @@ dependencies = [ "syn", "winnow", ] + +[[patch.unused]] +name = "cosmic-settings-airplane-mode-subscription" +version = "1.0.7" + +[[patch.unused]] +name = "cosmic-settings-sound-subscription" +version = "1.0.7" + +[[patch.unused]] +name = "winit-x11" +version = "0.31.0-beta.2" From 3f4d0f43a0a7e75c983c83ca09454e65afc3bc71 Mon Sep 17 00:00:00 2001 From: Ashley Wulber <48420062+wash2@users.noreply.github.com> Date: Thu, 9 Jul 2026 11:42:22 -0400 Subject: [PATCH 60/84] fix: update iced (#1468) popup blur & corner cleanup --- Cargo.lock | 143 ++++++++++++++++++++++++++--------------------------- 1 file changed, 71 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ba501e3e..9596a9de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -230,9 +230,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "as-raw-xcb-connection" @@ -758,9 +758,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.65" +version = "1.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" +checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996" dependencies = [ "find-msvc-tools", "jobserver", @@ -998,7 +998,7 @@ dependencies = [ "libcosmic", "memmap2 0.9.11", "rust-embed", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "rustix 1.1.4", "switcheroo-control", "tokio", @@ -1074,7 +1074,7 @@ dependencies = [ "i18n-embed-fl", "libcosmic", "rust-embed", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "serde", "tokio", "tracing", @@ -1096,7 +1096,7 @@ dependencies = [ "i18n-embed-fl", "libcosmic", "rust-embed", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "tokio", "tracing", "tracing-log", @@ -1153,7 +1153,7 @@ dependencies = [ "libcosmic", "nmrs", "rust-embed", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "secure-string", "tokio", "tracing", @@ -1206,7 +1206,7 @@ version = "1.0.15" dependencies = [ "futures", "libcosmic", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "serde", "tokio", "tracing", @@ -1227,7 +1227,7 @@ dependencies = [ "i18n-embed-fl", "libcosmic", "rust-embed", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "tokio", "tracing", "tracing-log", @@ -1331,7 +1331,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1352,7 +1352,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "quote", "syn", @@ -1396,7 +1396,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#a899bfbc6715c36b1f02d7a0f4d3601a3ea0295f" +source = "git+https://github.com/pop-os/cosmic-notifications#2c7fbbd0d289189fb4a7384307c5fb06842ebb6b" dependencies = [ "cosmic-config", "serde", @@ -1405,7 +1405,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#a899bfbc6715c36b1f02d7a0f4d3601a3ea0295f" +source = "git+https://github.com/pop-os/cosmic-notifications#2c7fbbd0d289189fb4a7384307c5fb06842ebb6b" dependencies = [ "fast_image_resize", "libcosmic", @@ -1422,7 +1422,7 @@ version = "1.0.15" dependencies = [ "cosmic-config", "libcosmic", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "serde", "tracing", "tracing-log", @@ -1487,7 +1487,7 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-client" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#276fef9834b05c57b67e8ba36b74bea1ba690cee" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#24ab5c28eb5876665752cd5e9405b7de17e2b99a" dependencies = [ "cosmic-settings-audio-core", "dirs", @@ -1503,7 +1503,7 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-core" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#276fef9834b05c57b67e8ba36b74bea1ba690cee" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#24ab5c28eb5876665752cd5e9405b7de17e2b99a" dependencies = [ "dirs", "ron 0.12.2", @@ -1514,7 +1514,7 @@ dependencies = [ [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#276fef9834b05c57b67e8ba36b74bea1ba690cee" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#24ab5c28eb5876665752cd5e9405b7de17e2b99a" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1590,7 +1590,7 @@ dependencies = [ "linebender_resource_handle", "log", "rangemap", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "self_cell", "skrifa 0.40.0", "smol_str", @@ -1605,7 +1605,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "almost", "configparser", @@ -1640,9 +1640,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crunchy" @@ -1658,7 +1658,7 @@ dependencies = [ "cosmic-text", "etagere", "lru", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "wgpu", ] @@ -1839,9 +1839,9 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "dbus" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b942602992bb7acfd1f51c49811c58a610ef9181b6e66f3e519d79b540a3bf73" +checksum = "3ab69f03cc8c4340c9c8e315114e1658e6775a9b16a04357973aa21cec22b32e" dependencies = [ "futures-channel", "futures-util", @@ -1872,9 +1872,9 @@ dependencies = [ [[package]] name = "defmt" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e524506490a1953d237cb87b1cfc1e46f88c18f10a22dfe0f507dc6bfc7f7f" +checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" dependencies = [ "bitflags 1.3.2", "defmt-macros", @@ -1882,12 +1882,11 @@ dependencies = [ [[package]] name = "defmt-macros" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a27770e9c8f719a79d8b638281f4d828f77d8fd61e0bd94451b9b85e576a0b" +checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" dependencies = [ "defmt-parser", - "proc-macro-error2", "proc-macro2", "quote", "syn", @@ -2351,7 +2350,7 @@ dependencies = [ "fluent-syntax", "intl-memoizer", "intl_pluralrules", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "self_cell", "smallvec", "unic-langid", @@ -2991,7 +2990,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "dnd", "iced_accessibility", @@ -3012,7 +3011,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "accesskit", "accesskit_winit", @@ -3021,7 +3020,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "bitflags 2.13.0", "bytes", @@ -3034,7 +3033,7 @@ dependencies = [ "num-traits", "palette", "raw-window-handle", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "serde", "smol_str", "thiserror 2.0.18", @@ -3046,7 +3045,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "iced_core", "iced_futures", @@ -3056,12 +3055,12 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "futures", "iced_core", "log", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "tokio", "wasm-bindgen-futures", "wasmtimer", @@ -3070,7 +3069,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "bitflags 2.13.0", "bytemuck", @@ -3083,7 +3082,7 @@ dependencies = [ "log", "lyon_path", "raw-window-handle", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "thiserror 2.0.18", "unicode-segmentation", ] @@ -3091,7 +3090,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "iced_graphics", "iced_runtime", @@ -3100,7 +3099,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3112,7 +3111,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3127,7 +3126,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "bytemuck", "cosmic-text", @@ -3136,7 +3135,7 @@ dependencies = [ "kurbo 0.10.4", "log", "resvg", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "softbuffer", "tiny-skia", ] @@ -3144,7 +3143,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "as-raw-xcb-connection", "bitflags 2.13.0", @@ -3160,7 +3159,7 @@ dependencies = [ "lyon", "raw-window-handle", "resvg", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "rustix 0.38.44", "thiserror 2.0.18", "tiny-xlib", @@ -3175,7 +3174,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3184,7 +3183,7 @@ dependencies = [ "log", "num-traits", "ouroboros", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "thiserror 2.0.18", "unicode-segmentation", "window_clipboard", @@ -3193,7 +3192,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3205,7 +3204,7 @@ dependencies = [ "iced_runtime", "log", "raw-window-handle", - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", "rustix 0.38.44", "thiserror 2.0.18", "wasm-bindgen-futures", @@ -3713,9 +3712,9 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1" +checksum = "dd854a95a4ac672fed8c054136039fd32c22cf039ff09ead7280afe920486483" dependencies = [ "bitflags 2.13.0", "inotify-sys", @@ -3724,9 +3723,9 @@ dependencies = [ [[package]] name = "inotify-sys" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fda9741ca16536952da2ecaa6105c2f4653fa6f0724681df6d2414c4106d0b0" +checksum = "9ea94e891b3606826e9c998be69ddca42247dad8ad50b1649a5cb7e1c9ae06fd" dependencies = [ "libc", ] @@ -3846,9 +3845,9 @@ dependencies = [ [[package]] name = "jiff-tzdb" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" +checksum = "6142247df1a93c2b3587402a19710be3e6e942f1581a1702e76408f2c21d6590" [[package]] name = "jiff-tzdb-platform" @@ -3919,11 +3918,11 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] @@ -4039,7 +4038,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#20dfd7c236208930634881ec52d22e7a353206dd" +source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" dependencies = [ "apply", "ashpd 0.12.3", @@ -4580,9 +4579,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -5348,9 +5347,9 @@ checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" [[package]] name = "pxfm" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" [[package]] name = "quick-error" @@ -5706,9 +5705,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -6688,7 +6687,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ - "rustc-hash 2.1.2", + "rustc-hash 2.1.3", ] [[package]] @@ -8353,18 +8352,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.52" +version = "0.8.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +checksum = "75726053136156d419e285b9b7eddaaea9e3fea6ce32eed44a89901f0bd98de1" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.52" +version = "0.8.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +checksum = "4714fd92cf900833d49538023a9b3915155210801d1c1169eba513b2addefd71" dependencies = [ "proc-macro2", "quote", From 9621be48b3730691201c208bcd88e9e1879dcb53 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 9 Jul 2026 18:25:37 -0400 Subject: [PATCH 61/84] chore: update libcosmic --- Cargo.lock | 251 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 162 insertions(+), 89 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9596a9de..e440e946 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -115,7 +115,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -560,6 +560,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block-padding" version = "0.3.3" @@ -708,9 +717,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "calendrical_calculations" @@ -798,7 +807,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", ] @@ -912,6 +921,12 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b46dec724fd22199ebde05033a0cbae453bc3b1ecff11eb6a6bb3eec4b90c6a4" +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + [[package]] name = "core-foundation" version = "0.9.4" @@ -1331,7 +1346,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1352,7 +1367,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "quote", "syn", @@ -1396,7 +1411,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#2c7fbbd0d289189fb4a7384307c5fb06842ebb6b" +source = "git+https://github.com/pop-os/cosmic-notifications#2e40965d058dee4e9a7c4d5274e09411521e6471" dependencies = [ "cosmic-config", "serde", @@ -1405,7 +1420,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#2c7fbbd0d289189fb4a7384307c5fb06842ebb6b" +source = "git+https://github.com/pop-os/cosmic-notifications#2e40965d058dee4e9a7c4d5274e09411521e6471" dependencies = [ "fast_image_resize", "libcosmic", @@ -1432,7 +1447,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#45f03a3864a9385349be3ca13202553280e667d4" +source = "git+https://github.com/pop-os/cosmic-panel#029400b2b447d9d31f1a772d7f6f0d5eed2ea21e" dependencies = [ "anyhow", "cosmic-config", @@ -1460,7 +1475,7 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" +source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1474,7 +1489,7 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" +source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1487,7 +1502,7 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-client" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#24ab5c28eb5876665752cd5e9405b7de17e2b99a" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#8c54bbbc10485c31e8717c21e119e19b87eeb3ea" dependencies = [ "cosmic-settings-audio-core", "dirs", @@ -1503,7 +1518,7 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-core" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#24ab5c28eb5876665752cd5e9405b7de17e2b99a" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#8c54bbbc10485c31e8717c21e119e19b87eeb3ea" dependencies = [ "dirs", "ron 0.12.2", @@ -1514,7 +1529,7 @@ dependencies = [ [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#24ab5c28eb5876665752cd5e9405b7de17e2b99a" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#8c54bbbc10485c31e8717c21e119e19b87eeb3ea" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1535,7 +1550,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" +source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "futures", "iced_futures", @@ -1548,7 +1563,7 @@ dependencies = [ [[package]] name = "cosmic-settings-network-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" +source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "bitflags 2.13.0", "cosmic-dbus-networkmanager", @@ -1567,7 +1582,7 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#9f9311235ec7fcbf27e28ae62326ff2f4bb9441d" +source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "futures", "iced_futures", @@ -1605,7 +1620,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "almost", "configparser", @@ -1629,6 +1644,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -1672,6 +1696,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + [[package]] name = "css-color" version = "0.2.8" @@ -1970,11 +2003,22 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.1", + "const-oid", + "crypto-common 0.2.2", +] + [[package]] name = "dirs" version = "6.0.0" @@ -2893,7 +2937,16 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", +] + +[[package]] +name = "hybrid-array" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +dependencies = [ + "typenum", ] [[package]] @@ -2990,7 +3043,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "dnd", "iced_accessibility", @@ -3011,7 +3064,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "accesskit", "accesskit_winit", @@ -3020,7 +3073,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "bitflags 2.13.0", "bytes", @@ -3045,7 +3098,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "iced_core", "iced_futures", @@ -3055,7 +3108,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "futures", "iced_core", @@ -3069,7 +3122,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "bitflags 2.13.0", "bytemuck", @@ -3090,7 +3143,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "iced_graphics", "iced_runtime", @@ -3099,7 +3152,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3111,7 +3164,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3126,7 +3179,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "bytemuck", "cosmic-text", @@ -3143,7 +3196,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "as-raw-xcb-connection", "bitflags 2.13.0", @@ -3174,7 +3227,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3192,7 +3245,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3712,9 +3765,9 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd854a95a4ac672fed8c054136039fd32c22cf039ff09ead7280afe920486483" +checksum = "153be1941a183ec9ccd095ddbe17a8b8d435ef6c76e9e02451b933c3999af2c8" dependencies = [ "bitflags 2.13.0", "inotify-sys", @@ -3723,9 +3776,9 @@ dependencies = [ [[package]] name = "inotify-sys" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea94e891b3606826e9c998be69ddca42247dad8ad50b1649a5cb7e1c9ae06fd" +checksum = "c033f80b2c113cdf91ab7a33faa9cbc014726dcad99880c8609af2a370edf37d" dependencies = [ "libc", ] @@ -3818,9 +3871,9 @@ checksum = "2ceaf4c6c48465bead8cb6a0b7c4ee0c86ecbb31239032b9c66ab9a08d2f3ee1" [[package]] name = "jiff" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccfe6121cbe750cf81efa362d85c0bde7ea298ec43092d3a193baca59cdbd634" +checksum = "961d16382652bfdd8c6f68b223b26a8c93e0d475c672f414411db31c6c5c900e" dependencies = [ "defmt", "jiff-static", @@ -3834,9 +3887,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e165e897f662d428f3cd3828a919dbe067c2d42bb1031eede74ef9d27ecdedd2" +checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" dependencies = [ "proc-macro2", "quote", @@ -3845,9 +3898,9 @@ dependencies = [ [[package]] name = "jiff-tzdb" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6142247df1a93c2b3587402a19710be3e6e942f1581a1702e76408f2c21d6590" +checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e" [[package]] name = "jiff-tzdb-platform" @@ -4038,7 +4091,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#3b85b6e8359308d31162c9a3d732ad1e2848bcfc" +source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" dependencies = [ "apply", "ashpd 0.12.3", @@ -4311,9 +4364,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmap2" @@ -4371,6 +4424,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime 0.3.17", + "unicase", +] + [[package]] name = "miniz_oxide" version = "0.8.9" @@ -4500,9 +4563,9 @@ dependencies = [ [[package]] name = "nmrs" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133ab12d9167f6b8d7cdadd4f8fde378bcaff4ad1c893d887498a98de50e10e9" +checksum = "62c427203beda58ac05815b356d64a34eeb2fba180b3077d543ebb1472fc1269" dependencies = [ "async-trait", "base64", @@ -4624,11 +4687,10 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -5364,7 +5426,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", - "serde", ] [[package]] @@ -5547,9 +5608,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.4" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" dependencies = [ "aho-corasick", "memchr", @@ -5559,9 +5620,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" dependencies = [ "aho-corasick", "memchr", @@ -5665,9 +5726,9 @@ checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" [[package]] name = "rust-embed" -version = "8.11.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04113cb9355a377d83f06ef1f0a45b8ab8cd7d8b1288160717d66df5c7988d27" +checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -5676,10 +5737,11 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.11.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0902e4c7c8e997159ab384e6d0fc91c221375f6894346ae107f47dd0f3ccaa" +checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" dependencies = [ + "mime_guess", "proc-macro2", "quote", "rust-embed-utils", @@ -5689,11 +5751,11 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.11.0" +version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" +checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" dependencies = [ - "sha2", + "sha2 0.11.0", "walkdir", ] @@ -5746,9 +5808,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rustybuzz" @@ -5847,7 +5909,7 @@ dependencies = [ "num", "once_cell", "serde", - "sha2", + "sha2 0.10.9", "zbus", ] @@ -5985,8 +6047,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", - "digest", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] @@ -8101,7 +8174,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#45f03a3864a9385349be3ca13202553280e667d4" +source = "git+https://github.com/pop-os/cosmic-panel#029400b2b447d9d31f1a772d7f6f0d5eed2ea21e" dependencies = [ "serde", "wayland-protocols-wlr", @@ -8248,9 +8321,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.16.0" +version = "5.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "a28b97f866896a4be7aefd2b5a8e01bb6773d19a775d54ab28b4d094b9a4480e" dependencies = [ "async-broadcast", "async-executor", @@ -8308,9 +8381,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "5e05ad887425eecf5e8384dc2406a4a9313eb73468712fc1cdea362eb4fe0469" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8323,9 +8396,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "1039ca249fee9559680f3a9f05b55e0761fee51af4f6c1e7d8c1f31e549721d2" dependencies = [ "serde", "winnow", @@ -8334,12 +8407,12 @@ dependencies = [ [[package]] name = "zbus_xml" -version = "5.1.1" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" +checksum = "59ab0513c0a66a60a8718d5ad712a5094845a20d95b5c1c81e2bd8e904a52b4f" dependencies = [ - "quick-xml", "serde", + "winnow", "zbus_names", "zvariant", ] @@ -8352,18 +8425,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.53" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75726053136156d419e285b9b7eddaaea9e3fea6ce32eed44a89901f0bd98de1" +checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.53" +version = "0.8.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4714fd92cf900833d49538023a9b3915155210801d1c1169eba513b2addefd71" +checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", @@ -8537,9 +8610,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.12.0" +version = "5.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "7cf057bb00bf5c9ad77abb6147b0ca4818236a1858416e9d988e40d6322fefa7" dependencies = [ "endi", "enumflags2", @@ -8552,9 +8625,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "8118ca6bda77bfc0ab51d660db0c955f2505eef854c9a449435bccb616933b31" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8565,9 +8638,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" dependencies = [ "proc-macro2", "quote", From b282484463b291107793b95f70b41f94b280e89b Mon Sep 17 00:00:00 2001 From: Hojjat Date: Thu, 9 Jul 2026 18:30:52 -0600 Subject: [PATCH 62/84] chore: update libcosmic to fix minimize applet crash --- Cargo.lock | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e440e946..9fc6c772 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1346,7 +1346,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1367,7 +1367,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "quote", "syn", @@ -1620,7 +1620,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "almost", "configparser", @@ -3043,7 +3043,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "dnd", "iced_accessibility", @@ -3064,7 +3064,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "accesskit", "accesskit_winit", @@ -3073,7 +3073,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "bitflags 2.13.0", "bytes", @@ -3098,7 +3098,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "iced_core", "iced_futures", @@ -3108,7 +3108,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "futures", "iced_core", @@ -3122,7 +3122,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "bitflags 2.13.0", "bytemuck", @@ -3143,7 +3143,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "iced_graphics", "iced_runtime", @@ -3152,7 +3152,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -3164,7 +3164,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3179,7 +3179,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "bytemuck", "cosmic-text", @@ -3196,7 +3196,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "as-raw-xcb-connection", "bitflags 2.13.0", @@ -3214,6 +3214,7 @@ dependencies = [ "resvg", "rustc-hash 2.1.3", "rustix 0.38.44", + "smithay-client-toolkit", "thiserror 2.0.18", "tiny-xlib", "wayland-backend", @@ -3227,7 +3228,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3245,7 +3246,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -4091,7 +4092,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#8cb10bf6e24b86a7d2a9cf8c662d3e0154db1b21" +source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" dependencies = [ "apply", "ashpd 0.12.3", From e318f0d4120dc97a4a70408cc3a485d0d475fb3b Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Tue, 30 Jun 2026 11:13:16 -0400 Subject: [PATCH 63/84] cosmic-applet-network: migrate NetworkManager flow to nmrs 3.4 --- Cargo.lock | 324 +-------- cosmic-applet-network/Cargo.toml | 11 +- cosmic-applet-network/src/app.rs | 1055 ++++++++++++++++-------------- cosmic-applet-network/src/lib.rs | 1 - 4 files changed, 580 insertions(+), 811 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9fc6c772..ef0a8ba1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -107,17 +107,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures 0.2.17", -] - [[package]] name = "ahash" version = "0.8.12" @@ -551,15 +540,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "block-buffer" version = "0.12.1" @@ -569,15 +549,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array", -] - [[package]] name = "block2" version = "0.5.1" @@ -756,15 +727,6 @@ dependencies = [ "wayland-client", ] -[[package]] -name = "cbc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" -dependencies = [ - "cipher", -] - [[package]] name = "cc" version = "1.2.66" @@ -801,16 +763,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common 0.1.7", - "inout", -] - [[package]] name = "clipboard-win" version = "5.4.1" @@ -1156,10 +1108,7 @@ dependencies = [ name = "cosmic-applet-network" version = "1.0.15" dependencies = [ - "anyhow", "async-fn-stream", - "cosmic-dbus-networkmanager", - "cosmic-settings-network-manager-subscription", "futures", "futures-util", "i18n-embed", @@ -1175,7 +1124,6 @@ dependencies = [ "tracing-log", "tracing-subscriber", "uuid", - "zbus", ] [[package]] @@ -1381,19 +1329,6 @@ dependencies = [ "zbus", ] -[[package]] -name = "cosmic-dbus-networkmanager" -version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" -dependencies = [ - "bitflags 2.13.0", - "derive_builder", - "jiff", - "procfs", - "zbus", - "zvariant", -] - [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" @@ -1411,7 +1346,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#2e40965d058dee4e9a7c4d5274e09411521e6471" +source = "git+https://github.com/pop-os/cosmic-notifications#7c723b7705ec77b1ad5396a1baa9ae1c0cb5a0da" dependencies = [ "cosmic-config", "serde", @@ -1420,7 +1355,7 @@ dependencies = [ [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#2e40965d058dee4e9a7c4d5274e09411521e6471" +source = "git+https://github.com/pop-os/cosmic-notifications#7c723b7705ec77b1ad5396a1baa9ae1c0cb5a0da" dependencies = [ "fast_image_resize", "libcosmic", @@ -1560,25 +1495,6 @@ dependencies = [ "zbus", ] -[[package]] -name = "cosmic-settings-network-manager-subscription" -version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" -dependencies = [ - "bitflags 2.13.0", - "cosmic-dbus-networkmanager", - "futures", - "iced_futures", - "itertools", - "nm-secret-agent-manager", - "secret-service", - "secure-string", - "thiserror 2.0.18", - "tokio", - "tracing", - "zbus", -] - [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" @@ -1635,15 +1551,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - [[package]] name = "cpufeatures" version = "0.3.0" @@ -1686,16 +1593,6 @@ dependencies = [ "wgpu", ] -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "crypto-common" version = "0.2.2" @@ -1943,37 +1840,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn", -] - [[package]] name = "derive_setters" version = "0.1.9" @@ -1997,26 +1863,15 @@ dependencies = [ "syn", ] -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer 0.10.4", - "crypto-common 0.1.7", - "subtle", -] - [[package]] name = "digest" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ - "block-buffer 0.12.1", + "block-buffer", "const-oid", - "crypto-common 0.2.2", + "crypto-common", ] [[package]] @@ -2037,7 +1892,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -2235,7 +2090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2646,16 +2501,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "gethostname" version = "1.1.0" @@ -2922,24 +2767,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.7", -] - [[package]] name = "hybrid-array" version = "0.4.13" @@ -3784,16 +3611,6 @@ dependencies = [ "libc", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array", -] - [[package]] name = "input" version = "0.9.1" @@ -3849,15 +3666,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.18" @@ -4033,7 +3841,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4554,14 +4362,6 @@ dependencies = [ "libc", ] -[[package]] -name = "nm-secret-agent-manager" -version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" -dependencies = [ - "zbus", -] - [[package]] name = "nmrs" version = "3.4.0" @@ -4624,21 +4424,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", + "windows-sys 0.59.0", ] [[package]] @@ -4651,15 +4437,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - [[package]] name = "num-conv" version = "0.2.2" @@ -4686,16 +4463,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" version = "0.4.2" @@ -5381,27 +5148,6 @@ dependencies = [ "yansi", ] -[[package]] -name = "procfs" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" -dependencies = [ - "bitflags 2.13.0", - "procfs-core", - "rustix 1.1.4", -] - -[[package]] -name = "procfs-core" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" -dependencies = [ - "bitflags 2.13.0", - "hex", -] - [[package]] name = "profiling" version = "1.0.18" @@ -5756,7 +5502,7 @@ version = "8.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" dependencies = [ - "sha2 0.11.0", + "sha2", "walkdir", ] @@ -5804,7 +5550,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -5895,25 +5641,6 @@ dependencies = [ "tiny-skia", ] -[[package]] -name = "secret-service" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a62d7f86047af0077255a29494136b9aaaf697c76ff70b8e49cded4e2623c14" -dependencies = [ - "aes", - "cbc", - "futures-util", - "generic-array", - "getrandom 0.2.17", - "hkdf", - "num", - "once_cell", - "serde", - "sha2 0.10.9", - "zbus", -] - [[package]] name = "secure-string" version = "0.3.0" @@ -6041,17 +5768,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures 0.2.17", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.11.0" @@ -6059,8 +5775,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", - "digest 0.11.3", + "cpufeatures", + "digest", ] [[package]] @@ -6230,7 +5946,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6321,12 +6037,6 @@ dependencies = [ "syn", ] -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - [[package]] name = "svg_fmt" version = "0.4.5" @@ -6418,10 +6128,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix 1.1.4", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6796,7 +6506,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7428,7 +7138,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index 3ba86f2b..edbf03b6 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -5,9 +5,7 @@ edition = "2024" license = "GPL-3.0-or-later" [dependencies] -anyhow.workspace = true async-fn-stream = "0.3" -cosmic-dbus-networkmanager = { git = "https://github.com/pop-os/dbus-settings-bindings" } futures.workspace = true futures-util.workspace = true i18n-embed-fl.workspace = true @@ -25,14 +23,7 @@ tokio.workspace = true tracing-log.workspace = true tracing-subscriber.workspace = true tracing.workspace = true -zbus.workspace = true indexmap = "2.13.0" secure-string = "0.3.0" uuid = { version = "1.21.0", features = ["v4"] } -nmrs = "3.1.3" - - - -[dependencies.cosmic-settings-network-manager-subscription] -git = "https://github.com/pop-os/cosmic-settings/" -# path = "../../cosmic-settings/subscriptions/network-manager" +nmrs = "3.4.0" diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index d66632ab..3cfee15a 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -1,13 +1,7 @@ -use anyhow::Context; -use cosmic_settings_network_manager_subscription::{ - self as network_manager, NetworkManagerState, UUID, - available_wifi::{AccessPoint, NetworkType}, - current_networks::ActiveConnectionInfo, - hw_address::HwAddress, -}; use indexmap::IndexMap; use nmrs::{ - NetworkManager as NmrsManager, SettingsSummary, + ActiveConnection, ActiveConnectionState, ConnectType, ConnectivityState, EapOptions, + NetworkEvent, NetworkManager as NmrsManager, NetworkSnapshot, WifiSecurity, agent::{SecretAgent, SecretAgentCapabilities, SecretRequest, SecretResponder, SecretSetting}, }; use rustc_hash::FxHashSet; @@ -15,11 +9,13 @@ use secure_string::SecureString; use std::{ borrow::Cow, collections::{BTreeMap, HashMap}, + fmt, + str::FromStr, sync::{Arc, LazyLock}, }; use cosmic::{ - Apply, Element, Task, app, + Element, Task, app, applet::{ menu_button, menu_control_padding, padded_control, token::subscription::{TokenRequest, TokenUpdate, activation_token_subscription}, @@ -29,7 +25,7 @@ use cosmic::{ iced::core::window, iced::{ Alignment, Length, Subscription, - platform_specific::shell::wayland::commands::popup::{destroy_popup, get_popup}, + platform_specific::shell::wayland::commands::popup::destroy_popup, }, surface, theme, widget::{ @@ -38,12 +34,8 @@ use cosmic::{ indeterminate_circular, row, scrollable, secure_input, text, text_input, toggler, }, }; -use cosmic_dbus_networkmanager::interface::enums::{ - ActiveConnectionState, DeviceState, NmConnectivityState, -}; use futures::{StreamExt, lock::Mutex as AsyncMutex}; -use zbus::Connection; use crate::{config, fl}; @@ -64,17 +56,6 @@ enum NewConnectionState { Failure(AccessPoint), } -impl NewConnectionState { - pub fn ssid(&self) -> &str { - &match self { - Self::EnterPassword { access_point, .. } => access_point, - Self::Waiting(ap) => ap, - Self::Failure(ap) => ap, - } - .ssid - } -} - impl From for AccessPoint { fn from(connection_state: NewConnectionState) -> Self { match connection_state { @@ -87,11 +68,183 @@ impl From for AccessPoint { pub static SECURE_INPUT_WIFI: LazyLock = LazyLock::new(Id::unique); +type Uuid = Arc; +type Ssid = Arc; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum NetworkType { + Open, + Password, + Eap, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum DeviceState { + Unknown, + Unmanaged, + Unavailable, + Disconnected, + NeedAuth, + Activated, + Failed, + Other, +} + +impl From<&nmrs::DeviceState> for DeviceState { + fn from(state: &nmrs::DeviceState) -> Self { + match state { + nmrs::DeviceState::Unmanaged => Self::Unmanaged, + nmrs::DeviceState::Unavailable => Self::Unavailable, + nmrs::DeviceState::Disconnected => Self::Disconnected, + nmrs::DeviceState::NeedAuth => Self::NeedAuth, + nmrs::DeviceState::Activated => Self::Activated, + nmrs::DeviceState::Failed => Self::Failed, + nmrs::DeviceState::Other(_) => Self::Unknown, + _ => Self::Other, + } + } +} + +#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct HwAddress([u8; 6]); + +impl HwAddress { + fn as_string(self) -> String { + self.0 + .iter() + .map(|byte| format!("{byte:02X}")) + .collect::>() + .join(":") + } +} + +impl FromStr for HwAddress { + type Err = (); + + fn from_str(value: &str) -> Result { + let mut bytes = [0; 6]; + let mut parts = value.split(':'); + for byte in &mut bytes { + let Some(part) = parts.next() else { + return Err(()); + }; + *byte = u8::from_str_radix(part, 16).map_err(|_| ())?; + } + if parts.next().is_some() { + return Err(()); + } + Ok(Self(bytes)) + } +} + +impl fmt::Display for HwAddress { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(&self.as_string()) + } +} + +fn same_access_point(left: &AccessPoint, right: &AccessPoint) -> bool { + left.ssid == right.ssid + && left.hw_address == right.hw_address + && left.interface == right.interface +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct AccessPoint { + pub ssid: Ssid, + pub network_type: NetworkType, + pub hw_address: HwAddress, + pub strength: u8, + pub state: DeviceState, + pub working: bool, + pub wps_push: bool, + pub interface: Option, +} + +#[derive(Debug, Clone)] +pub enum ActiveConnectionInfo { + Wired { + name: String, + hw_address: String, + speed: u32, + ip_addresses: Vec, + }, + WiFi { + name: String, + ip_addresses: Vec, + state: ActiveConnectionState, + strength: u8, + hw_address: String, + }, + Vpn { + name: String, + ip_addresses: Vec, + }, +} + +impl ActiveConnectionInfo { + fn name(&self) -> &str { + match self { + Self::Wired { name, .. } | Self::WiFi { name, .. } | Self::Vpn { name, .. } => name, + } + } +} + +#[derive(Debug, Clone)] +pub struct NetworkManagerState { + pub wifi_enabled: bool, + pub airplane_mode: bool, + pub connectivity: ConnectivityState, + pub active_conns: Vec, + pub known_access_points: Vec, + pub wireless_access_points: Vec, +} + +impl Default for NetworkManagerState { + fn default() -> Self { + Self { + wifi_enabled: true, + airplane_mode: false, + connectivity: ConnectivityState::Unknown, + active_conns: Vec::new(), + known_access_points: Vec::new(), + wireless_access_points: Vec::new(), + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum DeviceType { + Wifi, +} + +#[derive(Clone, Debug)] +pub struct DeviceConnection { + pub id: String, +} + +#[derive(Clone, Debug)] +pub struct DeviceInfo { + pub interface: String, + pub device_type: DeviceType, + pub active_connection: Option<(DeviceConnection,)>, + pub known_connections: Vec, +} + +#[derive(Debug, Clone)] +pub struct AppletSnapshot { + pub state: NetworkManagerState, + pub devices: Vec, + pub known_vpns: IndexMap, + pub ssid_to_uuid: BTreeMap, Box>, + pub captive_portal_url: Option, +} + #[derive(Default, Debug, Clone)] pub struct MyNetworkState { - pub known_vpns: IndexMap, + pub known_vpns: IndexMap, pub ssid_to_uuid: BTreeMap, Box>, - pub devices: Vec>, + pub devices: Vec>, pub nm_state: NetworkManagerState, pub requested_vpn: Option, } @@ -148,21 +301,18 @@ struct CosmicNetworkApplet { popup: Option, // NM state - nm_sender: Option>, - nm_task: Option>, nm_state: MyNetworkState, // UI state show_visible_networks: bool, show_available_vpns: bool, new_connection: Option, - conn: Option, toggle_wifi_ctr: u128, token_tx: Option>, failed_known_ssids: FxHashSet>, /// When defined, displays connections for the specific device. - active_device: Option>, + active_device: Option>, } fn wifi_icon(strength: u8) -> &'static str { @@ -297,7 +447,279 @@ fn vpn_section<'a>( vpn_col } +fn ip_addresses(ip4_address: Option, ip6_address: Option) -> Vec { + ip4_address.into_iter().chain(ip6_address).collect() +} + +fn network_type(security: nmrs::SecurityFeatures) -> NetworkType { + match security.preferred_connect_type() { + ConnectType::Open | ConnectType::Owe => NetworkType::Open, + ConnectType::Eap => NetworkType::Eap, + ConnectType::Psk | ConnectType::Sae => NetworkType::Password, + _ => NetworkType::Password, + } +} + +fn wifi_security( + access_point: &AccessPoint, + identity: Option, + password: Option, +) -> WifiSecurity { + match access_point.network_type { + NetworkType::Open => WifiSecurity::Open, + NetworkType::Eap => WifiSecurity::WpaEap { + opts: EapOptions::new( + identity.unwrap_or_default(), + password + .as_ref() + .map(|password| password.unsecure().to_owned()) + .unwrap_or_default(), + ), + }, + NetworkType::Password => WifiSecurity::WpaPsk { + psk: password + .as_ref() + .map(|password| password.unsecure().to_owned()) + .unwrap_or_default(), + }, + } +} + +fn connect_access_point_task( + access_point: AccessPoint, + identity: Option, + password: Option, +) -> Task> { + cosmic::task::future(async move { + let ssid = access_point.ssid.to_string(); + let interface = access_point.interface.clone(); + let bssid = access_point.hw_address.as_string(); + let security = wifi_security(&access_point, identity, password); + match NmrsManager::new().await { + Ok(nm) => { + match nm + .connect_to_bssid(&ssid, Some(&bssid), interface.as_deref(), security) + .await + { + Ok(()) => Message::ConnectionAttemptFinished { + access_point, + success: true, + error: None, + }, + Err(e) => Message::ConnectionAttemptFinished { + access_point, + success: false, + error: Some(e.to_string()), + }, + } + } + Err(e) => Message::Error(format!("nmrs init: {e}")), + } + }) + .map(cosmic::Action::App) +} + +fn snapshot_task() -> Task { + cosmic::task::future(async move { + let nm = match NmrsManager::new().await { + Ok(nm) => nm, + Err(e) => return Message::Error(format!("nmrs init: {e}")), + }; + + match nm.snapshot().await { + Ok(snapshot) => Message::Snapshot(snapshot_to_applet(snapshot)), + Err(e) => Message::Error(format!("snapshot: {e}")), + } + }) +} + +fn network_events_task() -> Task { + cosmic::Task::stream(async_fn_stream::fn_stream(|emitter| async move { + let nm = match NmrsManager::new().await { + Ok(nm) => nm, + Err(e) => { + let _ = emitter + .emit(Message::Error(format!("nmrs init: {e}"))) + .await; + return; + } + }; + let mut events = match nm.network_events().await { + Ok(events) => events, + Err(e) => { + let _ = emitter + .emit(Message::Error(format!("network events: {e}"))) + .await; + return; + } + }; + + while let Some(event) = events.next().await { + match event { + Ok(event) => { + let _ = emitter.emit(Message::NetworkEvent(event)).await; + } + Err(e) => { + let _ = emitter + .emit(Message::Error(format!("network event: {e}"))) + .await; + } + } + } + })) +} + +fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { + let summary = snapshot.applet_summary(); + let mut known_vpns = IndexMap::new(); + for vpn in summary.saved_vpns.values() { + let uuid: Uuid = Arc::from(vpn.uuid.as_str()); + let entry = match vpn.kind { + Some(nmrs::VpnKind::WireGuard) => ConnectionSettings::Wireguard { id: vpn.id.clone() }, + _ => ConnectionSettings::Vpn { id: vpn.id.clone() }, + }; + known_vpns.insert(uuid, entry); + } + + let mut ssid_to_uuid = BTreeMap::new(); + for (ssid, profiles) in &summary.known_wifi { + if let Some(profile) = profiles.first() { + ssid_to_uuid.insert( + ssid.clone().into_boxed_str(), + profile.uuid.clone().into_boxed_str(), + ); + } + } + + let active_conns = snapshot + .active_connections + .iter() + .filter_map(|conn| match conn { + ActiveConnection::Wired(wired) => Some(ActiveConnectionInfo::Wired { + name: wired.id.clone(), + hw_address: wired.hw_address.clone().unwrap_or_default(), + speed: wired.speed_mbps.unwrap_or_default(), + ip_addresses: ip_addresses(wired.ip4_address.clone(), wired.ip6_address.clone()), + }), + ActiveConnection::Wifi(wifi) => Some(ActiveConnectionInfo::WiFi { + name: wifi.ssid.clone(), + ip_addresses: ip_addresses(wifi.ip4_address.clone(), wifi.ip6_address.clone()), + state: wifi.state, + strength: wifi.strength.unwrap_or_default(), + hw_address: wifi.bssid.clone().unwrap_or_default(), + }), + ActiveConnection::Vpn(vpn) => Some(ActiveConnectionInfo::Vpn { + name: vpn.id.clone(), + ip_addresses: ip_addresses(vpn.ip4_address.clone(), vpn.ip6_address.clone()), + }), + ActiveConnection::Other(_) | _ => None, + }) + .collect(); + + let wireless_access_points = summary + .wifi_groups + .iter() + .map(|group| { + let strongest = &group.strongest; + AccessPoint { + ssid: Arc::from(group.ssid.as_str()), + network_type: network_type(strongest.security), + hw_address: HwAddress::from_str(&strongest.bssid).unwrap_or_default(), + strength: strongest.strength, + state: DeviceState::from(&strongest.device_state), + working: false, + wps_push: strongest.security.wps, + interface: Some(group.interface.clone()), + } + }) + .collect::>(); + + let known_access_points = summary + .wifi_groups + .iter() + .filter(|group| group.known || group.active) + .map(|group| { + let strongest = &group.strongest; + AccessPoint { + ssid: Arc::from(group.ssid.as_str()), + network_type: network_type(strongest.security), + hw_address: HwAddress::from_str(&strongest.bssid).unwrap_or_default(), + strength: strongest.strength, + state: if group.active { + DeviceState::Activated + } else { + DeviceState::from(&strongest.device_state) + }, + working: false, + wps_push: strongest.security.wps, + interface: Some(group.interface.clone()), + } + }) + .collect::>(); + + let devices = snapshot + .wifi_devices + .iter() + .map(|device| { + let known_connections = summary + .known_wifi + .iter() + .filter(|(ssid, _)| { + summary + .wifi_groups + .iter() + .any(|group| group.interface == device.interface && group.ssid == **ssid) + }) + .map(|(ssid, _)| DeviceConnection { id: ssid.clone() }) + .collect(); + DeviceInfo { + interface: device.interface.clone(), + device_type: DeviceType::Wifi, + active_connection: device + .active_ssid + .as_ref() + .map(|ssid| (DeviceConnection { id: ssid.clone() },)), + known_connections, + } + }) + .collect(); + + AppletSnapshot { + state: NetworkManagerState { + wifi_enabled: snapshot.wifi.enabled, + airplane_mode: summary.airplane_mode.is_airplane_mode(), + connectivity: summary.connectivity.state, + active_conns, + known_access_points, + wireless_access_points, + }, + devices, + known_vpns, + ssid_to_uuid, + captive_portal_url: summary.connectivity.captive_portal_url.clone(), + } +} + impl CosmicNetworkApplet { + fn apply_snapshot(&mut self, snapshot: AppletSnapshot) { + let previous_connectivity = self.nm_state.nm_state.connectivity; + self.update_nm_state(snapshot.state); + self.nm_state.devices = snapshot.devices.into_iter().map(Arc::new).collect(); + self.nm_state.known_vpns = snapshot.known_vpns; + self.nm_state.ssid_to_uuid = snapshot.ssid_to_uuid; + + if !previous_connectivity.is_captive() && self.nm_state.nm_state.connectivity.is_captive() { + let mut browser = std::process::Command::new("xdg-open"); + browser.arg( + snapshot + .captive_portal_url + .as_deref() + .unwrap_or("http://204.pop-os.org/"), + ); + tokio::spawn(cosmic::process::spawn(browser)); + } + } + fn update_nm_state(&mut self, mut new_state: NetworkManagerState) { self.update_togglers(&new_state); // check for failed conns that can be reset @@ -307,7 +729,7 @@ impl CosmicNetworkApplet { }; if matches!(state, ActiveConnectionState::Activated) { - self.failed_known_ssids.remove(new_s.name().as_str()); + self.failed_known_ssids.remove(new_s.name()); continue; } if matches!( @@ -396,6 +818,7 @@ impl CosmicNetworkApplet { Err(e) => Message::Error(format!("nmrs init: {e}")), } }) + .map(cosmic::Action::App) } } @@ -494,28 +917,26 @@ pub(crate) enum Message { /// An update from the secret agent SecretAgent(NmAgentEvent), /// Connect to a WiFi network access point. - Connect(network_manager::SSID, HwAddress), + Connect(Ssid, HwAddress), /// Connect with a password ConnectWithPassword, - KnownConnections(IndexMap), - /// Settings for known connections. - ConnectionSettings(BTreeMap, Box>), /// Disconnect from an access point. - Disconnect(network_manager::SSID, HwAddress), + Disconnect(Ssid, HwAddress), + ConnectionAttemptFinished { + access_point: AccessPoint, + success: bool, + error: Option, + }, /// An error occurred. Error(String), /// Identity update from the dialog IdentityUpdate(String), - /// An update from the network manager daemon - NetworkManager(network_manager::Event), - /// Successfully connected to the system dbus. - NetworkManagerConnect(zbus::Connection), + /// An update from NetworkManager. + NetworkEvent(NetworkEvent), /// Update the password from the dialog PasswordUpdate(SecureString), - /// Update NetworkManagerState - UpdateState(NetworkManagerState), - /// Update the devices lists - UpdateDevices(Vec), + /// Update applet state from NetworkManager. + Snapshot(AppletSnapshot), /// Toggle WiFi access WiFiEnable(bool), /// Refresh state @@ -525,176 +946,7 @@ pub(crate) enum Message { VPNPasswordUpdate(SecureString), CancelVPNConnection, /// Selects a device to display connections from - SelectDevice(Option>), -} - -fn connection_settings(conn: zbus::Connection) -> Task { - let settings = async move { - let settings = network_manager::dbus::settings::NetworkManagerSettings::new(&conn).await?; - - _ = settings.load_connections(&[]).await; - - let settings = settings - // Get a list of known connections. - .list_connections() - .await? - // Prepare for wrapping in a concurrent stream. - .into_iter() - .map(|conn| async move { conn }) - // Create a concurrent stream for each connection. - .apply(futures::stream::FuturesOrdered::from_iter) - // Concurrently fetch settings for each connection. - .filter_map(|conn| async move { - conn.get_settings() - .await - .map(network_manager::Settings::new) - .ok() - }) - // Reduce the settings list into a SSID->UUID map. - .fold(BTreeMap::new(), |mut set, settings| async move { - if let Some(ref wifi) = settings.wifi - && let Some(ssid) = wifi - .ssid - .clone() - .and_then(|ssid| String::from_utf8(ssid).ok()) - && let Some(ref connection) = settings.connection - && let Some(uuid) = connection.uuid.clone() - { - set.insert(ssid.into(), uuid.into()); - return set; - } - - set - }) - .await; - - Ok::<_, zbus::Error>(settings) - }; - - cosmic::task::future(async move { - settings - .await - .context("failed to get connection settings") - .map_or_else( - |why| Message::Error(why.to_string()), - Message::ConnectionSettings, - ) - }) -} - -pub fn update_state(conn: zbus::Connection) -> Task { - cosmic::task::future(async move { - match NetworkManagerState::new(&conn).await { - Ok(state) => Message::UpdateState(state), - Err(why) => Message::Error(why.to_string()), - } - }) -} - -pub fn update_devices(conn: zbus::Connection) -> Task { - cosmic::task::future(async move { - let filter = - |device_type| matches!(device_type, network_manager::devices::DeviceType::Wifi); - match network_manager::devices::list(&conn, filter).await { - Ok(devices) => Message::UpdateDevices(devices), - Err(why) => Message::Error(why.to_string()), - } - }) -} - -impl CosmicNetworkApplet { - fn connect(&mut self, conn: zbus::Connection) -> Task { - if self.nm_task.is_none() { - let popup = self.popup; - let (canceller, task) = crate::utils::forward_event_loop(move |emitter| async move { - let (tx, mut rx) = futures::channel::mpsc::channel(1); - - if popup.is_some() { - let watchers = std::pin::pin!(async move { - futures::join!( - network_manager::watch(conn.clone(), tx.clone()), - network_manager::active_conns::watch(conn.clone(), tx.clone(),), - network_manager::wireless_enabled::watch(conn.clone(), tx.clone()), - network_manager::watch_connections_changed(conn, tx,) - ); - }); - let forwarder = std::pin::pin!(async move { - while let Some(message) = rx.next().await { - _ = emitter.emit(Message::NetworkManager(message)).await; - } - }); - - futures::future::select(watchers, forwarder).await; - } else { - let watchers = std::pin::pin!(async move { - futures::join!( - network_manager::watch(conn.clone(), tx.clone()), - network_manager::active_conns::watch(conn.clone(), tx.clone(),), - network_manager::wireless_enabled::watch(conn.clone(), tx.clone()), - ); - }); - let forwarder = std::pin::pin!(async move { - while let Some(message) = rx.next().await { - _ = emitter.emit(Message::NetworkManager(message)).await; - } - }); - - futures::future::select(watchers, forwarder).await; - }; - }); - - self.nm_task = Some(canceller); - return task.map(Message::from); - } - - Task::none() - } -} - -fn load_vpns(_conn: zbus::Connection) -> Task { - cosmic::task::future(async move { - let nm = match NmrsManager::new().await { - Ok(nm) => nm, - Err(e) => return Message::Error(format!("nmrs init: {e}")), - }; - - let saved = match nm.list_saved_connections().await { - Ok(saved) => saved, - Err(e) => return Message::Error(format!("list saved connections: {e}")), - }; - - let mut map: IndexMap = IndexMap::new(); - for c in saved { - // Skip in-memory-only NM connections — assumed connections that NM - // auto-generated from externally-managed interfaces (e.g. one - // brought up by wg-quick@wg0.service) report unsaved=true and - // evaporate on deactivate, leaving the applet's toggle dead. - if c.unsaved { - continue; - } - let uuid: UUID = Arc::from(c.uuid.as_str()); - let entry = match c.summary { - SettingsSummary::WireGuard { .. } => ConnectionSettings::Wireguard { id: c.id }, - SettingsSummary::Vpn { .. } => ConnectionSettings::Vpn { id: c.id }, - _ => continue, - }; - map.insert(uuid, entry); - } - - Message::KnownConnections(map) - }) -} - -fn system_conn() -> Task { - cosmic::Task::future(async move { - zbus::Connection::system() - .await - .context("failed to create system dbus connection") - .map_or_else( - |why| Message::Error(why.to_string()), - Message::NetworkManagerConnect, - ) - }) + SelectDevice(Option>), } impl cosmic::Application for CosmicNetworkApplet { @@ -711,7 +963,19 @@ impl cosmic::Application for CosmicNetworkApplet { ..Default::default() }; - (applet, system_conn().map(cosmic::Action::App)) + let uuid = uuid::Uuid::new_v4().to_string().replace("-", "_"); + let my_id = + format!("com.system76.CosmicSettings.Applet._{uuid}.NetworkManager.SecretAgent",); + + ( + applet, + Task::batch(vec![ + snapshot_task(), + network_events_task(), + secret_agent_task(my_id).map(Message::SecretAgent), + ]) + .map(cosmic::Action::App), + ) } fn core(&self) -> &cosmic::app::Core { @@ -730,24 +994,7 @@ impl cosmic::Application for CosmicNetworkApplet { return destroy_popup(p); } else { let mut tasks = Vec::with_capacity(2); - if let Some(conn) = self.conn.clone() { - tasks.push(update_state(conn.clone()).map(cosmic::Action::App)); - tasks.push(update_devices(conn.clone()).map(cosmic::Action::App)); - tasks.push(load_vpns(conn).map(cosmic::Action::App)); - let uuid = uuid::Uuid::new_v4().to_string().replace("-", "_"); - - let my_id = format!( - "com.system76.CosmicSettings.Applet._{uuid}.NetworkManager.SecretAgent", - ); - tasks.push( - secret_agent_task(my_id) - .map(Message::SecretAgent) - .map(cosmic::Action::App), - ); - } - - tasks.push(system_conn().map(cosmic::Action::App)); - + tasks.push(snapshot_task().map(cosmic::Action::App)); tasks.push(cosmic::surface::surface_task( cosmic::surface::action::app_popup( |_| Default::default(), @@ -789,45 +1036,20 @@ impl cosmic::Application for CosmicNetworkApplet { .map(cosmic::Action::App); } Message::SelectWirelessAccessPoint(access_point) => { - let Some(tx) = self.nm_sender.as_ref() else { - return Task::none(); - }; - if matches!(access_point.network_type, NetworkType::Open) { - if let Err(err) = - tx.unbounded_send(network_manager::Request::SelectAccessPoint( - access_point.ssid.clone(), - access_point.network_type, - None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); - } - self.new_connection = Some(NewConnectionState::Waiting(access_point)); + self.new_connection = Some(NewConnectionState::Waiting(access_point.clone())); + return connect_access_point_task(access_point, None, None); } else { - if self + let known = self .nm_state .nm_state .known_access_points - .contains(&access_point) - && let Err(err) = - tx.unbounded_send(network_manager::Request::SelectAccessPoint( - access_point.ssid.clone(), - access_point.network_type, - None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + .iter() + .any(|known| same_access_point(known, &access_point)); + if known { + self.new_connection = + Some(NewConnectionState::Waiting(access_point.clone())); + return connect_access_point_task(access_point, None, None); } self.new_connection = Some(NewConnectionState::EnterPassword { access_point, @@ -862,11 +1084,6 @@ impl cosmic::Application for CosmicNetworkApplet { Message::CloseRequested(id) => { if Some(id) == self.popup { self.popup = None; - if let Some(cancel) = self.nm_task.take() { - _ = cancel.send(()); - } - - return system_conn().map(cosmic::Action::App); } } Message::OpenSettings => { @@ -946,7 +1163,7 @@ impl cosmic::Application for CosmicNetworkApplet { } }) .map(cosmic::Action::App); - let reconnect_task = self.update(Message::SelectWirelessAccessPoint(ap)); + let reconnect_task = connect_access_point_task(ap, None, None); return Task::batch(vec![forget_task, reconnect_task]); } Message::Surface(a) => { @@ -973,41 +1190,18 @@ impl cosmic::Application for CosmicNetworkApplet { self.show_available_vpns = !self.show_available_vpns; } Message::Connect(ssid, hw_address) => { - let mut network_type = NetworkType::Open; - let tx = if let Some(tx) = self.nm_sender.as_ref() { - if let Some(ap) = self - .nm_state - .nm_state - .known_access_points - .iter_mut() - .find(|c| c.ssid == ssid && c.hw_address == hw_address) - { - network_type = ap.network_type; - ap.working = true; - } - tx - } else { - return Task::none(); - }; - if let Err(err) = tx.unbounded_send(network_manager::Request::SelectAccessPoint( - ssid, - network_type, - None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + if let Some(ap) = self + .nm_state + .nm_state + .known_access_points + .iter_mut() + .find(|c| c.ssid == ssid && c.hw_address == hw_address) + { + ap.working = true; + return connect_access_point_task(ap.clone(), None, None); } } Message::ConnectWithPassword => { - // save password - let Some(tx) = self.nm_sender.as_ref() else { - return Task::none(); - }; - if let Some(NewConnectionState::EnterPassword { password, access_point, @@ -1015,55 +1209,44 @@ impl cosmic::Application for CosmicNetworkApplet { .. }) = self.new_connection.take() { - let is_enterprise: bool = matches!(access_point.network_type, NetworkType::EAP); - - if let Err(err) = tx.unbounded_send(network_manager::Request::Authenticate { - ssid: access_point.ssid.to_string(), - identity: is_enterprise.then(|| identity.clone()), - password, - secret_tx: None, - interface: self.active_device.as_ref().map(|d| d.interface.clone()), - }) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - tracing::error!("Failed to authenticate with network manager"); - } self.new_connection - .replace(NewConnectionState::Waiting(access_point)); + .replace(NewConnectionState::Waiting(access_point.clone())); + return connect_access_point_task(access_point, Some(identity), Some(password)); } } - Message::ConnectionSettings(btree_map) => { - self.nm_state.ssid_to_uuid = btree_map; - } Message::Disconnect(ssid, hw_address) => { self.new_connection = None; - let tx = if let Some(tx) = self.nm_sender.as_ref() { - if let Some(ActiveConnectionInfo::WiFi { state, .. }) = - self.nm_state.nm_state.active_conns.iter_mut().find(|c| { - let c_hw_address = match c { - ActiveConnectionInfo::Wired { hw_address, .. } - | ActiveConnectionInfo::WiFi { hw_address, .. } => { - HwAddress::from_str(hw_address).unwrap() - } - ActiveConnectionInfo::Vpn { .. } => HwAddress::default(), - }; - c.name().as_str() == ssid.as_ref() && c_hw_address == hw_address - }) - { - *state = ActiveConnectionState::Deactivating; - } - tx - } else { - return Task::none(); - }; - if let Err(err) = tx.unbounded_send(network_manager::Request::Disconnect(ssid)) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + let interface = self + .nm_state + .nm_state + .known_access_points + .iter() + .find(|ap| ap.ssid == ssid && ap.hw_address == hw_address) + .and_then(|ap| ap.interface.clone()); + if let Some(ActiveConnectionInfo::WiFi { state, .. }) = + self.nm_state.nm_state.active_conns.iter_mut().find(|c| { + let c_hw_address = match c { + ActiveConnectionInfo::Wired { hw_address, .. } + | ActiveConnectionInfo::WiFi { hw_address, .. } => { + HwAddress::from_str(hw_address).unwrap_or_default() + } + ActiveConnectionInfo::Vpn { .. } => HwAddress::default(), + }; + c.name() == ssid.as_ref() && c_hw_address == hw_address + }) + { + *state = ActiveConnectionState::Deactivating; } + return cosmic::task::future(async move { + match NmrsManager::new().await { + Ok(nm) => match nm.disconnect(interface.as_deref()).await { + Ok(()) => Message::Refresh, + Err(e) => Message::Error(format!("disconnect {ssid}: {e}")), + }, + Err(e) => Message::Error(format!("nmrs init: {e}")), + } + }) + .map(cosmic::Action::App); } Message::Error(error) => { tracing::error!("error: {error:?}") @@ -1075,132 +1258,29 @@ impl cosmic::Application for CosmicNetworkApplet { *identity = new_identity; } } - Message::NetworkManager(event) => match event { - network_manager::Event::Init { - conn, - sender, - state, - } => { - self.nm_sender = Some(sender); - self.update_nm_state(state); - self.conn = Some(conn); - } - network_manager::Event::WiFiEnabled(_) - | network_manager::Event::WirelessAccessPoints - | network_manager::Event::ActiveConns => { - if let Some(conn) = self.conn.clone() { - return Task::future(async move { - let conn = conn.clone(); - NetworkManagerState::new(&conn).await - }) - .map(|res| match res { - Ok(s) => Message::UpdateState(s), - Err(err) => Message::Error(err.to_string()), - }) - .map(cosmic::Action::App); + Message::ConnectionAttemptFinished { + access_point, + success, + error, + } => { + if success { + self.failed_known_ssids.remove(access_point.ssid.as_ref()); + self.new_connection = None; + self.show_visible_networks = false; + } else { + if let Some(error) = error { + tracing::warn!("connect {} failed: {error}", access_point.ssid); } + self.failed_known_ssids.insert(access_point.ssid.clone()); + self.new_connection = Some(NewConnectionState::Failure(access_point)); } - network_manager::Event::RequestResponse { - mut state, - success, - req, - } => { - if let network_manager::Request::SelectAccessPoint( - ssid, - _hw_address, - _network_type, - _secret_tx, - ) = &req - { - let conn_match = self - .new_connection - .as_ref() - .is_some_and(|c| c.ssid() == ssid.as_ref() ); - - if conn_match && success { - if let Some(ActiveConnectionInfo::WiFi { state, .. }) = state - .active_conns - .iter_mut() - .find(|ap| ap.name().as_str() == ssid.as_ref()) - { - *state = ActiveConnectionState::Activated; - } - self.failed_known_ssids.remove(ssid); - self.new_connection = None; - self.show_visible_networks = false; - } else if !matches!( - &self.new_connection, - Some(NewConnectionState::EnterPassword { .. }) - ) && !success { - self.failed_known_ssids.insert(ssid.clone()); - } - } else if let network_manager::Request::Authenticate { - ssid, - identity: _, - password: _, - secret_tx: _, - interface: _, - } = &req - { - if let Some(NewConnectionState::Waiting(access_point)) = - self.new_connection.as_ref() - { - if !success - && ssid.as_str() == access_point.ssid.as_ref() - { - self.new_connection = - Some(NewConnectionState::Failure(access_point.clone())); - } else { - self.show_visible_networks = false; - } - } else if let Some(NewConnectionState::EnterPassword { access_point, .. }) = - self.new_connection.as_ref() - && success - && ssid.as_str() == access_point.ssid.as_ref() - { - self.new_connection = None; - self.show_visible_networks = false; - } - } else if self - .new_connection - .as_ref() - .map(NewConnectionState::ssid).is_some_and(|ssid| { - state.active_conns.iter().any(|c| - matches!(c, ActiveConnectionInfo::WiFi { name, state: ActiveConnectionState::Activated, .. } if ssid == name) - ) - }) { - self.new_connection = None; - self.show_visible_networks = false; - } - - if !matches!(req, network_manager::Request::Reload) - && matches!(state.connectivity, NmConnectivityState::Portal) - { - let mut browser = std::process::Command::new("xdg-open"); - browser.arg("http://204.pop-os.org/"); - - tokio::spawn(cosmic::process::spawn(browser)); - } - - self.update_nm_state(state); + return snapshot_task().map(cosmic::Action::App); + } + Message::NetworkEvent(event) => { + if matches!(event, NetworkEvent::NetworkManagerRestarted) { + tracing::debug!("NetworkManager restarted; refreshing network snapshot"); } - - cosmic_settings_network_manager_subscription::Event::Devices => { - if let Some(conn) = self.conn.clone() { - return update_devices(conn).map(cosmic::Action::App); - } - } - cosmic_settings_network_manager_subscription::Event::WiFiCredentials { - ssid: _, - password: _, - security_type: _, - } => {} - }, - Message::NetworkManagerConnect(connection) => { - return cosmic::task::batch(vec![ - self.connect(connection.clone()), - connection_settings(connection), - ]); + return snapshot_task().map(cosmic::Action::App); } Message::PasswordUpdate(entered_pw) => { if let Some(NewConnectionState::EnterPassword { password, .. }) = @@ -1209,11 +1289,8 @@ impl cosmic::Application for CosmicNetworkApplet { *password = entered_pw; } } - Message::UpdateState(network_manager_state) => { - self.update_nm_state(network_manager_state); - } - Message::UpdateDevices(device_infos) => { - self.nm_state.devices = device_infos.into_iter().map(Arc::new).collect(); + Message::Snapshot(snapshot) => { + self.apply_snapshot(snapshot); } Message::WiFiEnable(enable) => { self.nm_state.nm_state.wifi_enabled = enable; @@ -1303,18 +1380,8 @@ impl cosmic::Application for CosmicNetworkApplet { tracing::error!("Error from secret agent: {error}"); } }, - Message::KnownConnections(index_map) => { - self.nm_state.known_vpns = index_map; - } Message::Refresh => { - if let Some(conn) = self.conn.clone() { - return Task::batch(vec![ - update_state(conn.clone()), - update_devices(conn.clone()), - load_vpns(conn), - ]) - .map(cosmic::Action::App); - } + return snapshot_task().map(cosmic::Action::App); } Message::ToggleVPNPasswordVisibility => { if let Some(requested_vpn) = self.nm_state.requested_vpn.as_mut() { @@ -1546,7 +1613,7 @@ impl cosmic::Application for CosmicNetworkApplet { .icon_size(16) .on_press(Message::ResetFailedKnownSsid( name.clone(), - HwAddress::from_str(hw_address).unwrap(), + HwAddress::from_str(hw_address).unwrap_or_default(), )) .into(), ); @@ -1561,7 +1628,7 @@ impl cosmic::Application for CosmicNetworkApplet { ) .on_press(Message::Disconnect( Arc::from(name.as_str()), - HwAddress::from_str(hw_address).unwrap(), + HwAddress::from_str(hw_address).unwrap_or_default(), )), )]) .align_x(Alignment::Center), @@ -1674,7 +1741,7 @@ impl cosmic::Application for CosmicNetworkApplet { .nm_state .devices .iter() - .filter(|d| matches!(d.device_type, network_manager::devices::DeviceType::Wifi)) + .filter(|d| matches!(d.device_type, DeviceType::Wifi)) .collect::>(); if wireless_hw_devices.len() > 1 && self.active_device.is_none() { @@ -1852,7 +1919,7 @@ impl cosmic::Application for CosmicNetworkApplet { ); content = content.push(id); - let is_enterprise = matches!(access_point.network_type, NetworkType::EAP); + let is_enterprise = matches!(access_point.network_type, NetworkType::Eap); let enter_password_col = cosmic::widget::column::with_capacity(4) .push_maybe(is_enterprise.then(|| text::body(fl!("identity")))) .push_maybe(is_enterprise.then(|| { @@ -2032,7 +2099,9 @@ impl cosmic::Application for CosmicNetworkApplet { fn active_conn_hw_address(conn: &ActiveConnectionInfo) -> HwAddress { match conn { ActiveConnectionInfo::Wired { hw_address, .. } - | ActiveConnectionInfo::WiFi { hw_address, .. } => HwAddress::from_str(hw_address).unwrap(), + | ActiveConnectionInfo::WiFi { hw_address, .. } => { + HwAddress::from_str(hw_address).unwrap_or_default() + } ActiveConnectionInfo::Vpn { .. } => HwAddress::default(), } } diff --git a/cosmic-applet-network/src/lib.rs b/cosmic-applet-network/src/lib.rs index 7d5414a5..f1ce1c6e 100644 --- a/cosmic-applet-network/src/lib.rs +++ b/cosmic-applet-network/src/lib.rs @@ -3,7 +3,6 @@ mod app; mod config; mod localize; -mod utils; use crate::localize::localize; From a3be51560f8a68db86238f5e31b203118d102a0f Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Wed, 1 Jul 2026 19:32:48 -0400 Subject: [PATCH 64/84] fix: dupe connection names; incorrect ipv6 labeling Fixes a bug where we showed `Activated` networks after the current active one. Also ipv4/6 addresses were merged so this seperates them and only shows ipv4 for now until we decide the best way to show both, UI/UX wise. --- cosmic-applet-network/src/app.rs | 71 ++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 3cfee15a..2fb1e3f6 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -167,18 +167,21 @@ pub enum ActiveConnectionInfo { name: String, hw_address: String, speed: u32, - ip_addresses: Vec, + ip4_address: Option, + ip6_address: Option, }, WiFi { name: String, - ip_addresses: Vec, + ip4_address: Option, + ip6_address: Option, state: ActiveConnectionState, strength: u8, hw_address: String, }, Vpn { name: String, - ip_addresses: Vec, + ip4_address: Option, + ip6_address: Option, }, } @@ -447,8 +450,15 @@ fn vpn_section<'a>( vpn_col } -fn ip_addresses(ip4_address: Option, ip6_address: Option) -> Vec { - ip4_address.into_iter().chain(ip6_address).collect() +fn ip_address_elements<'a>( + ip4_address: &Option, + _ip6_address: &Option, +) -> Vec> { + let mut elements = Vec::with_capacity(1); + if let Some(addr) = ip4_address { + elements.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); + } + elements } fn network_type(security: nmrs::SecurityFeatures) -> NetworkType { @@ -599,18 +609,21 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { name: wired.id.clone(), hw_address: wired.hw_address.clone().unwrap_or_default(), speed: wired.speed_mbps.unwrap_or_default(), - ip_addresses: ip_addresses(wired.ip4_address.clone(), wired.ip6_address.clone()), + ip4_address: wired.ip4_address.clone(), + ip6_address: wired.ip6_address.clone(), }), ActiveConnection::Wifi(wifi) => Some(ActiveConnectionInfo::WiFi { name: wifi.ssid.clone(), - ip_addresses: ip_addresses(wifi.ip4_address.clone(), wifi.ip6_address.clone()), + ip4_address: wifi.ip4_address.clone(), + ip6_address: wifi.ip6_address.clone(), state: wifi.state, strength: wifi.strength.unwrap_or_default(), hw_address: wifi.bssid.clone().unwrap_or_default(), }), ActiveConnection::Vpn(vpn) => Some(ActiveConnectionInfo::Vpn { name: vpn.id.clone(), - ip_addresses: ip_addresses(vpn.ip4_address.clone(), vpn.ip6_address.clone()), + ip4_address: vpn.ip4_address.clone(), + ip6_address: vpn.ip6_address.clone(), }), ActiveConnection::Other(_) | _ => None, }) @@ -1457,16 +1470,20 @@ impl cosmic::Application for CosmicNetworkApplet { let mut known_wifi = Vec::new(); for conn in &self.nm_state.nm_state.active_conns { match conn { - ActiveConnectionInfo::Vpn { name, ip_addresses } => { + ActiveConnectionInfo::Vpn { + name, + ip4_address, + ip6_address, + } => { if self.active_device.as_ref().is_some_and(|d| { d.active_connection.as_ref().is_none_or(|a| a.0.id != *name) }) { continue; } - let mut ipv4 = Vec::with_capacity(ip_addresses.len() + 1); - ipv4.push(text::body(name).into()); - for addr in ip_addresses { - ipv4.push(text::caption(format!("{}: {}", fl!("ipv4"), addr)).into()); + let mut info_col = Vec::with_capacity(3); + info_col.push(text::body(name).into()); + for elem in ip_address_elements(ip4_address, ip6_address) { + info_col.push(elem); } vpn_ethernet_col = vpn_ethernet_col.push( column::with_capacity::(2) @@ -1480,7 +1497,7 @@ impl cosmic::Application for CosmicNetworkApplet { ) .size(40), ), - column::with_children(ipv4).into(), + column::with_children(info_col).into(), text::body(fl!("connected")) .width(Length::Fill) .align_x(Alignment::End) @@ -1500,18 +1517,17 @@ impl cosmic::Application for CosmicNetworkApplet { name, hw_address: _, speed, - ip_addresses, + ip4_address, + ip6_address, } => { if self.active_device.as_ref().is_some_and(|d| { d.active_connection.as_ref().is_none_or(|a| a.0.id != *name) }) { continue; } - let mut ipv4 = Vec::with_capacity(ip_addresses.len() + 1); - ipv4.push(text::body(name).into()); - for addr in ip_addresses { - ipv4.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); - } + let mut info_col = Vec::with_capacity(3); + info_col.push(text::body(name).into()); + info_col.extend(ip_address_elements(ip4_address, ip6_address)); let mut right_column = vec![text::body(fl!("connected")).into()]; @@ -1549,7 +1565,7 @@ impl cosmic::Application for CosmicNetworkApplet { ) .size(40), ), - column::with_children(ipv4).into(), + column::with_children(info_col).into(), column::with_children(right_column) .width(Length::Fill) .align_x(Alignment::End) @@ -1567,7 +1583,8 @@ impl cosmic::Application for CosmicNetworkApplet { } ActiveConnectionInfo::WiFi { name, - ip_addresses, + ip4_address, + ip6_address, state, strength, hw_address, @@ -1577,10 +1594,7 @@ impl cosmic::Application for CosmicNetworkApplet { }) { continue; } - let mut ipv4 = Vec::with_capacity(ip_addresses.len()); - for addr in ip_addresses { - ipv4.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); - } + let ip_elements = ip_address_elements(ip4_address, ip6_address); let mut btn_content = vec![ icon::from_name(wifi_icon(*strength)) .size(24) @@ -1588,7 +1602,7 @@ impl cosmic::Application for CosmicNetworkApplet { .into(), column::with_children([ text::body(name).into(), - column::with_children(ipv4).into(), + column::with_children(ip_elements).into(), ]) .width(Length::Fill) .into(), @@ -1785,6 +1799,9 @@ impl cosmic::Application for CosmicNetworkApplet { } for known in &self.nm_state.nm_state.known_access_points { + if matches!(known.state, DeviceState::Activated) { + continue; + } if let Some(active_device) = self.active_device.as_ref() && active_device .known_connections From f69e943d91c3158e3d4f22efcf796c7d0d166578 Mon Sep 17 00:00:00 2001 From: akrm al-hakimi Date: Thu, 2 Jul 2026 20:59:17 -0400 Subject: [PATCH 65/84] fix(network): restore IPv4 display and wifi list ordering - Strip the CIDR suffix (/24) from the shown IPv4 address - Sort visible wireless networks by signal strength again - Filter out empty-SSID "hidden network" entries from the list --- cosmic-applet-network/src/app.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 2fb1e3f6..cbf46fab 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -456,6 +456,9 @@ fn ip_address_elements<'a>( ) -> Vec> { let mut elements = Vec::with_capacity(1); if let Some(addr) = ip4_address { + // Strip the subnet mask (e.g. "10.0.0.2/24" -> "10.0.0.2"); the drop-down + // only needs the address itself for glancing at the host on a local network. + let addr = addr.split('/').next().unwrap_or(addr.as_str()); elements.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); } elements @@ -629,9 +632,10 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { }) .collect(); - let wireless_access_points = summary + let mut wireless_access_points = summary .wifi_groups .iter() + .filter(|group| !group.ssid.is_empty()) .map(|group| { let strongest = &group.strongest; AccessPoint { @@ -646,6 +650,7 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { } }) .collect::>(); + wireless_access_points.sort_by(|a, b| b.strength.cmp(&a.strength)); let known_access_points = summary .wifi_groups From 6fd8309cf7776b629a425469336b47aa603f1cb9 Mon Sep 17 00:00:00 2001 From: akrm al-hakimi Date: Thu, 2 Jul 2026 21:08:46 -0400 Subject: [PATCH 66/84] chore: remove dead utils file --- cosmic-applet-network/src/utils.rs | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 cosmic-applet-network/src/utils.rs diff --git a/cosmic-applet-network/src/utils.rs b/cosmic-applet-network/src/utils.rs deleted file mode 100644 index f802010f..00000000 --- a/cosmic-applet-network/src/utils.rs +++ /dev/null @@ -1,18 +0,0 @@ -use futures_util::future::select; - -/// Spawn a background tasks and forward its messages -pub fn forward_event_loop + Send + 'static>( - event_loop: impl FnOnce(async_fn_stream::StreamEmitter) -> T + Send + 'static, -) -> (tokio::sync::oneshot::Sender<()>, cosmic::Task) { - let (cancel_tx, cancel_rx) = tokio::sync::oneshot::channel::<()>(); - - let task = cosmic::Task::stream(async_fn_stream::fn_stream(|emitter| async move { - select( - std::pin::pin!(cancel_rx), - std::pin::pin!(event_loop(emitter)), - ) - .await; - })); - - (cancel_tx, task) -} From 74e29089870ecdede5fb7529dc247b49a8fa3a19 Mon Sep 17 00:00:00 2001 From: akrm al-hakimi Date: Thu, 2 Jul 2026 21:09:42 -0400 Subject: [PATCH 67/84] chore: remove dead arm in `DeviceState` match --- cosmic-applet-network/src/app.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index cbf46fab..c920429d 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -1862,18 +1862,15 @@ impl cosmic::Application for CosmicNetworkApplet { .spacing(8), ); btn = match known.state { + // Activated entries are skipped above (shown in the active + // connections section instead), so no Disconnect arm is needed here. DeviceState::Failed | DeviceState::Unknown | DeviceState::Unmanaged | DeviceState::Disconnected - | DeviceState::NeedAuth => btn.on_press(Message::Connect( - known.ssid.clone(), - known.hw_address.clone(), - )), - DeviceState::Activated => btn.on_press(Message::Disconnect( - known.ssid.clone(), - known.hw_address.clone(), - )), + | DeviceState::NeedAuth => { + btn.on_press(Message::Connect(known.ssid.clone(), known.hw_address)) + } _ => btn, }; known_wifi.push(Element::from( From 829d66c44a652720d9e99ca0c68a57c33d4f98b1 Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Tue, 7 Jul 2026 17:58:14 -0400 Subject: [PATCH 68/84] fix: filter ssids by raw bytes to remove hidden network entries --- cosmic-applet-network/src/app.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index c920429d..f7867fb8 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -635,7 +635,7 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { let mut wireless_access_points = summary .wifi_groups .iter() - .filter(|group| !group.ssid.is_empty()) + .filter(|group| !group.ssid.is_empty() && !group.strongest.ssid_bytes.is_empty()) .map(|group| { let strongest = &group.strongest; AccessPoint { From 9025430cf2a9fda94f7502464ebe10ed921e7f6f Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Tue, 7 Jul 2026 20:36:22 -0400 Subject: [PATCH 69/84] fix: keep inactive known Wi-Fi rows visible Only mark an nmrs Wi-Fi group as activated when the group itself is active. Access points inherit device state, so inactive known networks on a connected Wi-Fi device can otherwise appear activated and get skipped from the known networks section while also being filtered out of visible networks. --- cosmic-applet-network/src/app.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index f7867fb8..13d49d2b 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -658,6 +658,7 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { .filter(|group| group.known || group.active) .map(|group| { let strongest = &group.strongest; + let device_state = DeviceState::from(&strongest.device_state); AccessPoint { ssid: Arc::from(group.ssid.as_str()), network_type: network_type(strongest.security), @@ -665,8 +666,10 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { strength: strongest.strength, state: if group.active { DeviceState::Activated + } else if matches!(device_state, DeviceState::Activated) { + DeviceState::Disconnected } else { - DeviceState::from(&strongest.device_state) + device_state }, working: false, wps_push: strongest.security.wps, From 67415262d56dde211c247656a198d3339bcbf108 Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Wed, 8 Jul 2026 17:42:51 -0400 Subject: [PATCH 70/84] fix: show pending VPN state in applet Track VPN activation and deactivation locally while nmrs operations are running. This lets the applet show a spinner immediately, refresh state while NetworkManager settles, and clear pending state on completion or error. Also use VPN-specific icons for VPN rows and prefer active or pending VPN state for the panel icon. --- cosmic-applet-network/src/app.rs | 163 ++++++++++++++++++++++++++----- 1 file changed, 138 insertions(+), 25 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 13d49d2b..8162fea3 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -250,6 +250,7 @@ pub struct MyNetworkState { pub devices: Vec>, pub nm_state: NetworkManagerState, pub requested_vpn: Option, + pub pending_vpn: Option, } /// Shared, take-once handle to an `nmrs` [`SecretResponder`]. Cloned freely @@ -269,6 +270,18 @@ pub struct RequestedVpn { secret_keys: Vec, } +#[derive(Debug, Clone)] +pub struct PendingVpn { + uuid: Arc, + action: PendingVpnAction, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum PendingVpnAction { + Activate, + Deactivate, +} + #[derive(Clone, Debug)] pub enum ConnectionSettings { Vpn { id: String }, @@ -417,6 +430,11 @@ fn vpn_section<'a>( let is_active = nm_state.nm_state.active_conns.iter().any( |conn| matches!(conn, ActiveConnectionInfo::Vpn { name, .. } if name == id), ); + let pending_action = nm_state + .pending_vpn + .as_ref() + .filter(|pending| pending.uuid.as_ref() == uuid.as_ref()) + .map(|pending| pending.action); let mut btn_content = vec![ icon::from_name("network-vpn-symbolic") @@ -429,6 +447,9 @@ fn vpn_section<'a>( if is_active { btn_content.push(text::body(fl!("connected")).align_x(Alignment::End).into()); } + if pending_action.is_some() { + btn_content.push(indeterminate_circular().size(24.0).into()); + } let mut btn = menu_button( row::with_children(btn_content) @@ -436,7 +457,9 @@ fn vpn_section<'a>( .spacing(8), ); - btn = if is_active { + btn = if pending_action.is_some() { + btn + } else if is_active { btn.on_press(Message::DeactivateVpn(uuid.clone())) } else { btn.on_press(Message::ActivateVpn(uuid.clone())) @@ -724,10 +747,11 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { impl CosmicNetworkApplet { fn apply_snapshot(&mut self, snapshot: AppletSnapshot) { let previous_connectivity = self.nm_state.nm_state.connectivity; - self.update_nm_state(snapshot.state); self.nm_state.devices = snapshot.devices.into_iter().map(Arc::new).collect(); self.nm_state.known_vpns = snapshot.known_vpns; self.nm_state.ssid_to_uuid = snapshot.ssid_to_uuid; + self.update_nm_state(snapshot.state); + self.clear_completed_pending_vpn(); if !previous_connectivity.is_captive() && self.nm_state.nm_state.connectivity.is_captive() { let mut browser = std::process::Command::new("xdg-open"); @@ -741,6 +765,34 @@ impl CosmicNetworkApplet { } } + fn clear_completed_pending_vpn(&mut self) { + let Some(pending) = self.nm_state.pending_vpn.as_ref() else { + return; + }; + let Some(connection) = self.nm_state.known_vpns.get(&pending.uuid) else { + self.nm_state.pending_vpn = None; + self.update_icon_name(); + return; + }; + let id = match connection { + ConnectionSettings::Vpn { id } | ConnectionSettings::Wireguard { id } => id, + }; + let is_active = self + .nm_state + .nm_state + .active_conns + .iter() + .any(|conn| matches!(conn, ActiveConnectionInfo::Vpn { name, .. } if name == id)); + let completed = match pending.action { + PendingVpnAction::Activate => is_active, + PendingVpnAction::Deactivate => !is_active, + }; + if completed { + self.nm_state.pending_vpn = None; + self.update_icon_name(); + } + } + fn update_nm_state(&mut self, mut new_state: NetworkManagerState) { self.update_togglers(&new_state); // check for failed conns that can be reset @@ -777,6 +829,22 @@ impl CosmicNetworkApplet { } fn update_icon_name(&mut self) { + if self + .nm_state + .pending_vpn + .as_ref() + .is_some_and(|pending| pending.action == PendingVpnAction::Activate) + || self + .nm_state + .nm_state + .active_conns + .iter() + .any(|conn| matches!(conn, ActiveConnectionInfo::Vpn { .. })) + { + self.icon_name = "network-vpn-symbolic".to_string(); + return; + } + self.icon_name = self .nm_state .nm_state @@ -789,12 +857,7 @@ impl CosmicNetworkApplet { "network-wired-disconnected-symbolic", ActiveConnectionInfo::WiFi { strength, .. }, ) => wifi_icon(*strength), - (_, ActiveConnectionInfo::Wired { .. }) - if icon_name != "network-vpn-symbolic" => - { - "network-wired-symbolic" - } - (_, ActiveConnectionInfo::Vpn { .. }) => "network-vpn-symbolic", + (_, ActiveConnectionInfo::Wired { .. }) => "network-wired-symbolic", _ => icon_name, }, ) @@ -831,12 +894,18 @@ impl CosmicNetworkApplet { fn connect_vpn(&mut self, uuid: Arc) -> Task> { cosmic::task::future(async move { - match NmrsManager::new().await { - Ok(nm) => match nm.connect_vpn_by_uuid(&uuid).await { - Ok(()) => Message::Refresh, - Err(e) => Message::Error(format!("activate VPN {uuid}: {e}")), - }, - Err(e) => Message::Error(format!("nmrs init: {e}")), + let error = match NmrsManager::new().await { + Ok(nm) => nm + .connect_vpn_by_uuid(&uuid) + .await + .err() + .map(|e| format!("activate VPN {uuid}: {e}")), + Err(e) => Some(format!("nmrs init: {e}")), + }; + Message::VpnOperationFinished { + uuid, + action: PendingVpnAction::Activate, + error, } }) .map(cosmic::Action::App) @@ -934,7 +1003,12 @@ pub(crate) enum Message { Surface(surface::Action), ActivateVpn(Arc), // UUID of VPN to activate DeactivateVpn(Arc), // UUID of VPN to deactivate - ToggleVpnList, // Show/hide available VPNs + VpnOperationFinished { + uuid: Arc, + action: PendingVpnAction, + error: Option, + }, + ToggleVpnList, // Show/hide available VPNs /// An update from the secret agent SecretAgent(NmAgentEvent), /// Connect to a WiFi network access point. @@ -1193,19 +1267,58 @@ impl cosmic::Application for CosmicNetworkApplet { )); } Message::ActivateVpn(uuid) => { - return self.connect_vpn(uuid.clone()); + self.nm_state.pending_vpn = Some(PendingVpn { + uuid: uuid.clone(), + action: PendingVpnAction::Activate, + }); + self.update_icon_name(); + return Task::batch(vec![ + snapshot_task().map(cosmic::Action::App), + self.connect_vpn(uuid.clone()), + ]); } Message::DeactivateVpn(uuid) => { - return cosmic::task::future(async move { - match NmrsManager::new().await { - Ok(nm) => match nm.disconnect_vpn_by_uuid(&uuid).await { - Ok(()) => Message::Refresh, - Err(e) => Message::Error(format!("disconnect VPN {uuid}: {e}")), - }, - Err(e) => Message::Error(format!("nmrs init: {e}")), + self.nm_state.pending_vpn = Some(PendingVpn { + uuid: uuid.clone(), + action: PendingVpnAction::Deactivate, + }); + self.update_icon_name(); + let disconnect_task = cosmic::task::future(async move { + let error = match NmrsManager::new().await { + Ok(nm) => nm + .disconnect_vpn_by_uuid(&uuid) + .await + .err() + .map(|e| format!("disconnect VPN {uuid}: {e}")), + Err(e) => Some(format!("nmrs init: {e}")), + }; + Message::VpnOperationFinished { + uuid, + action: PendingVpnAction::Deactivate, + error, } }) .map(cosmic::Action::App); + return Task::batch(vec![ + snapshot_task().map(cosmic::Action::App), + disconnect_task, + ]); + } + Message::VpnOperationFinished { + uuid, + action, + error, + } => { + if self.nm_state.pending_vpn.as_ref().is_some_and(|pending| { + pending.uuid.as_ref() == uuid.as_ref() && pending.action == action + }) { + self.nm_state.pending_vpn = None; + self.update_icon_name(); + } + if let Some(error) = error { + tracing::error!("{error}"); + } + return snapshot_task().map(cosmic::Action::App); } Message::ToggleVpnList => { self.show_available_vpns = !self.show_available_vpns; @@ -1499,7 +1612,7 @@ impl cosmic::Application for CosmicNetworkApplet { row::with_children([ Element::from( icon::icon( - icon::from_name(self.icon_name.clone()) + icon::from_name("network-vpn-symbolic") .symbolic(true) .into(), ) @@ -1567,7 +1680,7 @@ impl cosmic::Application for CosmicNetworkApplet { row::with_children([ Element::from( icon::icon( - icon::from_name(self.icon_name.clone()) + icon::from_name("network-wired-symbolic") .symbolic(true) .into(), ) From ba490e76af3f3602d932033ba80e7805c8892340 Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Fri, 10 Jul 2026 08:26:28 -0400 Subject: [PATCH 71/84] fix: normalize connections that match saved VPN profiles --- cosmic-applet-network/src/app.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 8162fea3..53b767a7 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -638,6 +638,21 @@ fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { ip4_address: wired.ip4_address.clone(), ip6_address: wired.ip6_address.clone(), }), + ActiveConnection::Wifi(wifi) + if known_vpns.values().any(|connection| { + matches!( + connection, + ConnectionSettings::Vpn { id } | ConnectionSettings::Wireguard { id } + if id == &wifi.ssid + ) + }) => + { + Some(ActiveConnectionInfo::Vpn { + name: wifi.ssid.clone(), + ip4_address: wifi.ip4_address.clone(), + ip6_address: wifi.ip6_address.clone(), + }) + } ActiveConnection::Wifi(wifi) => Some(ActiveConnectionInfo::WiFi { name: wifi.ssid.clone(), ip4_address: wifi.ip4_address.clone(), From 9acfd8d8c18a5f0e9e32c5136c305edf2e440058 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Fri, 19 Jun 2026 20:21:57 -0700 Subject: [PATCH 72/84] input-sources: Use `cosmic-keyboard-layout-unstable-v1` https://github.com/pop-os/cosmic-protocols/pull/28 Continues to use `xkg_config` to get list of layouts, but the group is now changed by modifying the group while leaving the config unchanged. And changes to the group are now reflected in the applet. --- Cargo.lock | 2 + cosmic-applet-input-sources/Cargo.toml | 2 + ....system76.CosmicAppletInputSources.desktop | 1 + cosmic-applet-input-sources/src/lib.rs | 128 +++++++++----- cosmic-applet-input-sources/src/wayland.rs | 157 ++++++++++++++++++ 5 files changed, 247 insertions(+), 43 deletions(-) create mode 100644 cosmic-applet-input-sources/src/wayland.rs diff --git a/Cargo.lock b/Cargo.lock index ef0a8ba1..b3e84558 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1074,7 +1074,9 @@ dependencies = [ name = "cosmic-applet-input-sources" version = "1.0.15" dependencies = [ + "cosmic-client-toolkit", "cosmic-comp-config", + "futures", "i18n-embed", "i18n-embed-fl", "libcosmic", diff --git a/cosmic-applet-input-sources/Cargo.toml b/cosmic-applet-input-sources/Cargo.toml index 8fdb1dd9..94af4bb6 100644 --- a/cosmic-applet-input-sources/Cargo.toml +++ b/cosmic-applet-input-sources/Cargo.toml @@ -5,7 +5,9 @@ edition = "2024" license = "GPL-3.0-only" [dependencies] +cctk.workspace = true cosmic-comp-config = { git = "https://github.com/pop-os/cosmic-comp.git", rev = "5eb5af4" } +futures.workspace = true i18n-embed-fl.workspace = true i18n-embed.workspace = true libcosmic.workspace = true diff --git a/cosmic-applet-input-sources/data/com.system76.CosmicAppletInputSources.desktop b/cosmic-applet-input-sources/data/com.system76.CosmicAppletInputSources.desktop index ea0f667b..73aeccf0 100644 --- a/cosmic-applet-input-sources/data/com.system76.CosmicAppletInputSources.desktop +++ b/cosmic-applet-input-sources/data/com.system76.CosmicAppletInputSources.desktop @@ -12,4 +12,5 @@ NoDisplay=true X-CosmicApplet=true X-CosmicShrinkable=true X-CosmicHoverPopup=Auto +X-HostWaylandDisplay=true X-OverflowPriority=10 diff --git a/cosmic-applet-input-sources/src/lib.rs b/cosmic-applet-input-sources/src/lib.rs index fc7dcc32..4f7f1265 100644 --- a/cosmic-applet-input-sources/src/lib.rs +++ b/cosmic-applet-input-sources/src/lib.rs @@ -3,37 +3,60 @@ mod localize; -use cosmic::iced::{Alignment, Length}; +use cctk::{ + cosmic_protocols::keyboard_layout::v1::client::zcosmic_keyboard_layout_v1::ZcosmicKeyboardLayoutV1, + wayland_client::{Connection, Proxy, backend::Backend}, +}; use cosmic::{ app, app::Core, applet::{self}, - cosmic_config::{self, ConfigSet, CosmicConfigEntry}, + cosmic_config::{self, CosmicConfigEntry}, cosmic_theme::Spacing, iced::Subscription, + iced::core::window, iced::{ - Rectangle, Task, + self, Rectangle, Task, + event::wayland::{Event as WaylandEvent, OutputEvent}, platform_specific::shell::commands::popup::{destroy_popup, get_popup}, - widget::{column, row}, window::Id, }, - iced::{core::window, runtime::Appearance}, prelude::*, surface, theme, widget::{ self, autosize, rectangle_tracker::{RectangleTracker, RectangleUpdate, rectangle_tracker_subscription}, - space, }, }; use cosmic_comp_config::CosmicCompConfig; -use std::sync::LazyLock; +use std::{ + os::unix::{ + io::{FromRawFd, RawFd}, + net::UnixStream, + }, + sync::LazyLock, +}; use xkb_data::KeyboardLayout; +mod wayland; + static AUTOSIZE_MAIN_ID: LazyLock = LazyLock::new(|| widget::Id::new("autosize-main")); pub const ID: &str = "com.system76.CosmicAppletInputSources"; pub fn run() -> cosmic::iced::Result { + let socket = std::env::var("X_PRIVILEGED_WAYLAND_SOCKET") + .ok() + .and_then(|fd| { + fd.parse::() + .ok() + .map(|fd| unsafe { UnixStream::from_raw_fd(fd) }) + }); + let wayland_connection = if let Some(socket) = socket { + Some(Connection::from_socket(socket).unwrap()) + } else { + None + }; + localize::localize(); let layouts = match xkb_data::all_keyboard_layouts() { @@ -44,7 +67,7 @@ pub fn run() -> cosmic::iced::Result { } }; - let (comp_config_handler, comp_config) = + let comp_config = match cosmic_config::Config::new("com.system76.CosmicComp", CosmicCompConfig::VERSION) { Ok(config_handler) => { let config = match CosmicCompConfig::get_entry(&config_handler) { @@ -54,17 +77,17 @@ pub fn run() -> cosmic::iced::Result { config } }; - (Some(config_handler), config) + config } Err(err) => { tracing::error!("failed to create config handler: {}", err); - (None, CosmicCompConfig::default()) + CosmicCompConfig::default() } }; cosmic::applet::run::(Flags { + wayland_connection, comp_config, - comp_config_handler, layouts: layouts.layout_list.layout, }) } @@ -80,11 +103,13 @@ pub struct Window { core: Core, popup: Option, comp_config: CosmicCompConfig, - comp_config_handler: Option, layouts: Vec, active_layouts: Vec, rectangle_tracker: Option>, rectangle: Rectangle, + wayland_connection: Option, + keyboard_layout: Option, + current_layout: usize, } #[derive(Clone, Debug)] @@ -96,12 +121,14 @@ pub enum Message { KeyboardSettings, Surface(surface::Action), Rectangle(RectangleUpdate), + WaylandConnection(Backend), + Wayland(wayland::Event), } #[derive(Debug)] pub struct Flags { + wayland_connection: Option, pub comp_config: CosmicCompConfig, - pub comp_config_handler: Option, pub layouts: Vec, } @@ -122,7 +149,6 @@ impl cosmic::Application for Window { fn init(core: Core, flags: Self::Flags) -> (Self, app::Task) { let window = Window { - comp_config_handler: flags.comp_config_handler, layouts: flags.layouts, core, popup: None, @@ -130,6 +156,9 @@ impl cosmic::Application for Window { active_layouts: Vec::new(), rectangle_tracker: None, rectangle: Rectangle::default(), + wayland_connection: flags.wayland_connection, + keyboard_layout: None, + current_layout: 0, }; (window, Task::none()) } @@ -177,31 +206,10 @@ impl cosmic::Application for Window { tokio::spawn(cosmic::process::spawn(cmd)); } Message::SetActiveLayout(pos) => { - if pos == 0 { - return Task::none(); - } - - self.active_layouts.swap(0, pos); - let mut new_layout = String::new(); - let mut new_variant = String::new(); - - for layout in &self.active_layouts { - new_layout.push_str(&layout.layout); - new_layout.push(','); - new_variant.push_str(&layout.variant); - new_variant.push(','); - } - - let _excess_comma = new_layout.pop(); - let _excess_comma = new_variant.pop(); - - self.comp_config.xkb_config.layout = new_layout; - self.comp_config.xkb_config.variant = new_variant; - if let Some(comp_config_handler) = &self.comp_config_handler { - if let Err(err) = - comp_config_handler.set("xkb_config", &self.comp_config.xkb_config) - { - tracing::error!("Failed to set config 'xkb_config' {err}"); + if let Some(keyboard_layout) = &self.keyboard_layout { + keyboard_layout.set_group(pos as u32); + if let Some(backend) = keyboard_layout.backend().upgrade() { + let _ = backend.flush(); } } } @@ -218,13 +226,26 @@ impl cosmic::Application for Window { self.rectangle_tracker = Some(tracker); } }, + Message::WaylandConnection(backend) => { + if self.wayland_connection.is_none() { + self.wayland_connection = Some(Connection::from_backend(backend)); + } + } + Message::Wayland(w) => match w { + wayland::Event::KeyboardLayout(keyboard_layout) => { + self.keyboard_layout = Some(keyboard_layout); + } + wayland::Event::Group(group) => { + self.current_layout = group as usize; + } + }, } Task::none() } fn view(&self) -> Element<'_, Self::Message> { - let applet_text = if let Some(l) = self.active_layouts.first() { + let applet_text = if let Some(l) = self.active_layouts.get(self.current_layout) { if !l.variant.is_empty() { format!("{} ({})", l.layout, l.variant) } else { @@ -257,8 +278,13 @@ impl cosmic::Application for Window { let mut content_list = widget::column::with_capacity(4 + self.active_layouts.len()).padding([8, 0]); for (id, layout) in self.active_layouts.iter().enumerate() { + let font = if id == self.current_layout { + cosmic::font::bold() + } else { + cosmic::font::default() + }; let group = widget::column::with_capacity(2) - .push(widget::text::body(layout.description.as_str())) + .push(widget::text::body(layout.description.as_str()).font(font)) .push(widget::text::caption(layout.layout.as_str())); content_list = content_list .push(applet::menu_button(group).on_press(Message::SetActiveLayout(id))); @@ -279,7 +305,7 @@ impl cosmic::Application for Window { } fn subscription(&self) -> Subscription { - Subscription::batch(vec![ + let mut subscriptions = vec![ rectangle_tracker_subscription(0).map(|e| Message::Rectangle(e.1)), self.core .watch_config("com.system76.CosmicComp") @@ -293,7 +319,23 @@ impl cosmic::Application for Window { } Message::CompConfig(Box::new(update.config)) }), - ]) + ]; + subscriptions.push(if let Some(connection) = &self.wayland_connection { + wayland::subscription(connection.clone()).map(Message::Wayland) + } else { + iced::event::listen_with(|evt, _, _| match evt { + iced::Event::PlatformSpecific(iced::event::PlatformSpecific::Wayland(evt)) => { + if let WaylandEvent::Output(OutputEvent::Created(_), output) = evt { + if let Some(backend) = output.backend().upgrade() { + return Some(Message::WaylandConnection(backend)); + } + } + None + } + _ => None, + }) + }); + Subscription::batch(subscriptions) } fn style(&self) -> Option { diff --git a/cosmic-applet-input-sources/src/wayland.rs b/cosmic-applet-input-sources/src/wayland.rs new file mode 100644 index 00000000..7bee2245 --- /dev/null +++ b/cosmic-applet-input-sources/src/wayland.rs @@ -0,0 +1,157 @@ +use cctk::{ + cosmic_protocols::keyboard_layout::v1::client::zcosmic_keyboard_layout_v1::ZcosmicKeyboardLayoutV1, + keyboard_layout::{KeyboardLayoutHandler, KeyboardLayoutState}, + sctk::{ + self, + registry::{ProvidesRegistryState, RegistryState}, + seat::{Capability, SeatHandler, SeatState}, + }, + wayland_client::{ + Connection, QueueHandle, delegate_noop, + globals::registry_queue_init, + protocol::{wl_keyboard, wl_seat}, + }, +}; +use cosmic::iced; +use futures::{SinkExt, channel::mpsc, executor::block_on}; +use std::{hash::Hash, thread}; + +#[derive(Clone, Debug)] +pub enum Event { + KeyboardLayout(ZcosmicKeyboardLayoutV1), + Group(usize), +} + +pub fn subscription(connection: Connection) -> iced::Subscription { + #[derive(Clone)] + struct WaylandSubscription(Connection); + impl Hash for WaylandSubscription { + fn hash(&self, state: &mut H) { + self.0.backend().display_id().hash(state); + } + } + iced::Subscription::run_with( + WaylandSubscription(connection), + |WaylandSubscription(connection)| { + let connection = connection.clone(); + iced::stream::channel(8, move |sender| async move { + thread::spawn(move || thread(connection, sender)); + }) + }, + ) +} + +struct Keyboard { + seat: wl_seat::WlSeat, + keyboard_layout: ZcosmicKeyboardLayoutV1, +} + +impl Drop for Keyboard { + fn drop(&mut self) { + self.keyboard_layout.destroy(); + } +} + +struct AppData { + seat_state: SeatState, + registry_state: RegistryState, + keyboard_layout_state: KeyboardLayoutState, + keyboard: Option, + sender: mpsc::Sender, +} + +impl KeyboardLayoutHandler for AppData { + fn group( + &mut self, + _conn: &Connection, + _qh: &QueueHandle, + _keyboard: &wl_keyboard::WlKeyboard, + _keyboard_layout: &ZcosmicKeyboardLayoutV1, + group: u32, + ) { + let _ = block_on(self.sender.send(Event::Group(group as usize))); + } +} + +impl ProvidesRegistryState for AppData { + fn registry(&mut self) -> &mut RegistryState { + &mut self.registry_state + } + + sctk::registry_handlers![SeatState,]; +} + +impl SeatHandler for AppData { + fn seat_state(&mut self) -> &mut SeatState { + &mut self.seat_state + } + + fn new_seat(&mut self, _: &Connection, _: &QueueHandle, _: wl_seat::WlSeat) {} + + fn new_capability( + &mut self, + _conn: &Connection, + qh: &QueueHandle, + seat: wl_seat::WlSeat, + capability: Capability, + ) { + if capability == Capability::Keyboard && self.keyboard.is_none() { + let keyboard = seat.get_keyboard(qh, ()); + let keyboard_layout = self + .keyboard_layout_state + .get_keyboard_layout(&keyboard, qh); + keyboard.release(); + + if let Some(keyboard_layout) = keyboard_layout { + let _ = block_on( + self.sender + .send(Event::KeyboardLayout(keyboard_layout.clone())), + ); + self.keyboard = Some(Keyboard { + seat, + keyboard_layout, + }); + } else { + keyboard.release(); + } + } + } + + fn remove_capability( + &mut self, + _conn: &Connection, + _: &QueueHandle, + seat: wl_seat::WlSeat, + _capability: Capability, + ) { + self.keyboard.take_if(|x| x.seat == seat); + } + + fn remove_seat(&mut self, _: &Connection, _: &QueueHandle, seat: wl_seat::WlSeat) { + self.keyboard.take_if(|x| x.seat == seat); + } +} + +fn thread(conn: Connection, sender: mpsc::Sender) { + let (globals, mut event_queue) = registry_queue_init(&conn).unwrap(); + let qh = event_queue.handle(); + let registry_state = RegistryState::new(&globals); + let seat_state = SeatState::new(&globals, &qh); + let keyboard_layout_state = KeyboardLayoutState::new(®istry_state, &qh); + + let mut app_data = AppData { + seat_state, + registry_state, + keyboard_layout_state, + keyboard: None, + sender, + }; + loop { + event_queue.blocking_dispatch(&mut app_data).unwrap(); + } +} + +sctk::delegate_registry!(AppData); +sctk::delegate_seat!(AppData); +cctk::delegate_keyboard_layout!(AppData); +delegate_noop!(AppData: ignore wl_keyboard::WlKeyboard); From d86c5631ed0d2ee2adecd68d1a6b8f881f80ffd0 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Wed, 1 Jul 2026 14:15:14 -0700 Subject: [PATCH 73/84] input-sources: Do not store full `CosmicCompConfig` `update_xkb()` was previously never called before the subscription first returns a config value, so not getting an initial value of `comp_config` at start before the subscription does not change behavior. --- cosmic-applet-input-sources/src/lib.rs | 31 +++----------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/cosmic-applet-input-sources/src/lib.rs b/cosmic-applet-input-sources/src/lib.rs index 4f7f1265..3109c888 100644 --- a/cosmic-applet-input-sources/src/lib.rs +++ b/cosmic-applet-input-sources/src/lib.rs @@ -11,7 +11,6 @@ use cosmic::{ app, app::Core, applet::{self}, - cosmic_config::{self, CosmicConfigEntry}, cosmic_theme::Spacing, iced::Subscription, iced::core::window, @@ -28,7 +27,7 @@ use cosmic::{ rectangle_tracker::{RectangleTracker, RectangleUpdate, rectangle_tracker_subscription}, }, }; -use cosmic_comp_config::CosmicCompConfig; +use cosmic_comp_config::{CosmicCompConfig, XkbConfig}; use std::{ os::unix::{ io::{FromRawFd, RawFd}, @@ -67,27 +66,8 @@ pub fn run() -> cosmic::iced::Result { } }; - let comp_config = - match cosmic_config::Config::new("com.system76.CosmicComp", CosmicCompConfig::VERSION) { - Ok(config_handler) => { - let config = match CosmicCompConfig::get_entry(&config_handler) { - Ok(ok) => ok, - Err((errs, config)) => { - tracing::error!("errors loading config: {:?}", errs); - config - } - }; - config - } - Err(err) => { - tracing::error!("failed to create config handler: {}", err); - CosmicCompConfig::default() - } - }; - cosmic::applet::run::(Flags { wayland_connection, - comp_config, layouts: layouts.layout_list.layout, }) } @@ -102,7 +82,6 @@ pub struct ActiveLayout { pub struct Window { core: Core, popup: Option, - comp_config: CosmicCompConfig, layouts: Vec, active_layouts: Vec, rectangle_tracker: Option>, @@ -128,7 +107,6 @@ pub enum Message { #[derive(Debug)] pub struct Flags { wayland_connection: Option, - pub comp_config: CosmicCompConfig, pub layouts: Vec, } @@ -152,7 +130,6 @@ impl cosmic::Application for Window { layouts: flags.layouts, core, popup: None, - comp_config: flags.comp_config, active_layouts: Vec::new(), rectangle_tracker: None, rectangle: Rectangle::default(), @@ -197,8 +174,7 @@ impl cosmic::Application for Window { } } Message::CompConfig(config) => { - self.comp_config = *config; - self.active_layouts = self.update_xkb(); + self.active_layouts = self.update_xkb(&config.xkb_config); } Message::KeyboardSettings => { let mut cmd = std::process::Command::new("cosmic-settings"); @@ -343,9 +319,8 @@ impl cosmic::Application for Window { } } impl Window { - fn update_xkb(&self) -> Vec { + fn update_xkb(&self, xkb: &XkbConfig) -> Vec { let mut active_layouts = Vec::new(); - let xkb = &self.comp_config.xkb_config; let layouts = xkb.layout.split_terminator(','); From e544cb54c242fecbe9399fcb3dd61d9ac19e1214 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Mon, 13 Jul 2026 16:25:35 -0600 Subject: [PATCH 74/84] chore: update libcosmic to fix minimize applet crash --- Cargo.lock | 84 +++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b3e84558..356ec0c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1296,7 +1296,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1317,7 +1317,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "quote", "syn", @@ -1384,7 +1384,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#029400b2b447d9d31f1a772d7f6f0d5eed2ea21e" +source = "git+https://github.com/pop-os/cosmic-panel#d520b1e9ef2c990cbb57a8c5838ce94b7d75530a" dependencies = [ "anyhow", "cosmic-config", @@ -1466,7 +1466,7 @@ dependencies = [ [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#8c54bbbc10485c31e8717c21e119e19b87eeb3ea" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#1af414fc6cb9080349847382a66db9fd69dbe964" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1538,7 +1538,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "almost", "configparser", @@ -1894,7 +1894,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1959,7 +1959,7 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" [[package]] name = "drm" @@ -2092,7 +2092,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2872,7 +2872,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "dnd", "iced_accessibility", @@ -2893,7 +2893,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "accesskit", "accesskit_winit", @@ -2902,7 +2902,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "bitflags 2.13.0", "bytes", @@ -2927,7 +2927,7 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "iced_core", "iced_futures", @@ -2937,7 +2937,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "futures", "iced_core", @@ -2951,7 +2951,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "bitflags 2.13.0", "bytemuck", @@ -2972,7 +2972,7 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "iced_graphics", "iced_runtime", @@ -2981,7 +2981,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2993,7 +2993,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3008,7 +3008,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "bytemuck", "cosmic-text", @@ -3025,7 +3025,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "as-raw-xcb-connection", "bitflags 2.13.0", @@ -3057,7 +3057,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3075,7 +3075,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "cosmic-client-toolkit", "cursor-icon", @@ -3843,7 +3843,7 @@ version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -3902,7 +3902,7 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#c44dbe793b64caa8604dc38816c9b791e7ecb8ac" +source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "apply", "ashpd 0.12.3", @@ -4426,7 +4426,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -5552,7 +5552,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.12.1", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -5948,7 +5948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -6130,10 +6130,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", "rustix 1.1.4", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -6508,7 +6508,7 @@ checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ "memoffset", "tempfile", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -7140,7 +7140,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -7597,7 +7597,7 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "cfg_aliases", @@ -7623,7 +7623,7 @@ dependencies = [ [[package]] name = "winit-android" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "android-activity", "bitflags 2.13.0", @@ -7638,7 +7638,7 @@ dependencies = [ [[package]] name = "winit-appkit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "block2 0.6.2", @@ -7660,7 +7660,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#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "memmap2 0.9.11", "objc2 0.6.4", @@ -7675,7 +7675,7 @@ dependencies = [ [[package]] name = "winit-core" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "cursor-icon", @@ -7689,7 +7689,7 @@ dependencies = [ [[package]] name = "winit-orbital" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "dpi", @@ -7705,7 +7705,7 @@ dependencies = [ [[package]] name = "winit-uikit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "block2 0.6.2", @@ -7725,7 +7725,7 @@ dependencies = [ [[package]] name = "winit-wayland" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "ahash", "bitflags 2.13.0", @@ -7751,7 +7751,7 @@ dependencies = [ [[package]] name = "winit-web" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "atomic-waker", "bitflags 2.13.0", @@ -7773,7 +7773,7 @@ dependencies = [ [[package]] name = "winit-win32" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "cursor-icon", @@ -7789,7 +7789,7 @@ dependencies = [ [[package]] name = "winit-x11" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#f737f1f5900b3399b56951305b0f155afc9c9ee5" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "bytemuck", @@ -7887,7 +7887,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#029400b2b447d9d31f1a772d7f6f0d5eed2ea21e" +source = "git+https://github.com/pop-os/cosmic-panel#d520b1e9ef2c990cbb57a8c5838ce94b7d75530a" dependencies = [ "serde", "wayland-protocols-wlr", From 48c363315194b8901ada03b9e965893b6e13d477 Mon Sep 17 00:00:00 2001 From: Akrm Al-Hakimi Date: Wed, 15 Jul 2026 08:08:02 -0400 Subject: [PATCH 75/84] fix(network): re-register secret agent after NetworkManager restart --- cosmic-applet-network/src/app.rs | 35 +++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 53b767a7..b5f12bfa 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -35,7 +35,11 @@ use cosmic::{ }, }; -use futures::{StreamExt, lock::Mutex as AsyncMutex}; +use futures::{ + StreamExt, + channel::mpsc::{UnboundedReceiver, UnboundedSender, unbounded}, + lock::Mutex as AsyncMutex, +}; use crate::{config, fl}; @@ -325,6 +329,7 @@ struct CosmicNetworkApplet { new_connection: Option, toggle_wifi_ctr: u128, token_tx: Option>, + secret_agent_reregister_tx: Option>, failed_known_ssids: FxHashSet>, /// When defined, displays connections for the specific device. @@ -929,7 +934,10 @@ impl CosmicNetworkApplet { /// Registers an `nmrs` secret agent on the system bus and yields its /// requests + cancellations as [`NmAgentEvent`] for the applet to handle. -fn secret_agent_task(identifier: String) -> Task { +fn secret_agent_task( + identifier: String, + mut reregister_requests: UnboundedReceiver<()>, +) -> Task { cosmic::Task::stream(async_fn_stream::fn_stream(move |emitter| async move { let registration = SecretAgent::builder() .with_identifier(identifier) @@ -961,6 +969,11 @@ fn secret_agent_task(identifier: String) -> Task { } None => break, }, + Some(()) = reregister_requests.next() => { + if let Err(e) = handle.reregister().await { + tracing::warn!("failed to re-register secret agent: {e}"); + } + }, } } @@ -1076,13 +1089,17 @@ impl cosmic::Application for CosmicNetworkApplet { let uuid = uuid::Uuid::new_v4().to_string().replace("-", "_"); let my_id = format!("com.system76.CosmicSettings.Applet._{uuid}.NetworkManager.SecretAgent",); + let (secret_agent_reregister_tx, secret_agent_reregister_rx) = unbounded(); ( - applet, + Self { + secret_agent_reregister_tx: Some(secret_agent_reregister_tx), + ..applet + }, Task::batch(vec![ snapshot_task(), network_events_task(), - secret_agent_task(my_id).map(Message::SecretAgent), + secret_agent_task(my_id, secret_agent_reregister_rx).map(Message::SecretAgent), ]) .map(cosmic::Action::App), ) @@ -1427,7 +1444,15 @@ impl cosmic::Application for CosmicNetworkApplet { } Message::NetworkEvent(event) => { if matches!(event, NetworkEvent::NetworkManagerRestarted) { - tracing::debug!("NetworkManager restarted; refreshing network snapshot"); + tracing::debug!( + "NetworkManager restarted; refreshing network snapshot and secret agent" + ); + if let Some(mut tx) = self.secret_agent_reregister_tx.clone() { + if let Err(e) = tx.unbounded_send(()) { + tracing::warn!("secret agent re-registration task stopped: {e}"); + self.secret_agent_reregister_tx = None; + } + } } return snapshot_task().map(cosmic::Action::App); } From 2d78a0abff7907e079917b86ffe070931fb851f9 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Wed, 22 Jul 2026 15:57:00 +0200 Subject: [PATCH 76/84] chore: bump version to 1.3.0 --- cosmic-app-list/Cargo.toml | 2 +- cosmic-app-list/cosmic-app-list-config/Cargo.toml | 2 +- cosmic-applet-a11y/Cargo.toml | 2 +- cosmic-applet-audio/Cargo.toml | 2 +- cosmic-applet-battery/Cargo.toml | 2 +- cosmic-applet-bluetooth/Cargo.toml | 2 +- cosmic-applet-input-sources/Cargo.toml | 2 +- cosmic-applet-minimize/Cargo.toml | 2 +- cosmic-applet-network/Cargo.toml | 2 +- cosmic-applet-notifications/Cargo.toml | 2 +- cosmic-applet-power/Cargo.toml | 2 +- cosmic-applet-status-area/Cargo.toml | 2 +- cosmic-applet-tiling/Cargo.toml | 2 +- cosmic-applet-time/Cargo.toml | 2 +- cosmic-applet-workspaces/Cargo.toml | 2 +- cosmic-applets-config/Cargo.toml | 2 +- cosmic-applets/Cargo.toml | 2 +- cosmic-panel-button/Cargo.toml | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cosmic-app-list/Cargo.toml b/cosmic-app-list/Cargo.toml index b3171a2c..4616aa97 100644 --- a/cosmic-app-list/Cargo.toml +++ b/cosmic-app-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-app-list" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-app-list/cosmic-app-list-config/Cargo.toml b/cosmic-app-list/cosmic-app-list-config/Cargo.toml index 0d5a21d7..badf15ab 100644 --- a/cosmic-app-list/cosmic-app-list-config/Cargo.toml +++ b/cosmic-app-list/cosmic-app-list-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-app-list-config" -version = "1.0.15" +version = "1.3.0" edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/cosmic-applet-a11y/Cargo.toml b/cosmic-applet-a11y/Cargo.toml index 711b4ec6..dd93f90e 100644 --- a/cosmic-applet-a11y/Cargo.toml +++ b/cosmic-applet-a11y/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-a11y" -version = "1.0.15" +version = "1.3.0" edition = "2024" [dependencies] diff --git a/cosmic-applet-audio/Cargo.toml b/cosmic-applet-audio/Cargo.toml index 3e67d3f5..8293cf56 100644 --- a/cosmic-applet-audio/Cargo.toml +++ b/cosmic-applet-audio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-audio" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-battery/Cargo.toml b/cosmic-applet-battery/Cargo.toml index 3310f8fa..647ad9a1 100644 --- a/cosmic-applet-battery/Cargo.toml +++ b/cosmic-applet-battery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-battery" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-bluetooth/Cargo.toml b/cosmic-applet-bluetooth/Cargo.toml index 1ee209ee..d3499343 100644 --- a/cosmic-applet-bluetooth/Cargo.toml +++ b/cosmic-applet-bluetooth/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-bluetooth" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-input-sources/Cargo.toml b/cosmic-applet-input-sources/Cargo.toml index 45b54857..fdc1ea24 100644 --- a/cosmic-applet-input-sources/Cargo.toml +++ b/cosmic-applet-input-sources/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-input-sources" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-minimize/Cargo.toml b/cosmic-applet-minimize/Cargo.toml index 29ee2c8e..2ed9a552 100644 --- a/cosmic-applet-minimize/Cargo.toml +++ b/cosmic-applet-minimize/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-minimize" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index 62efbaf9..034cfb79 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-network" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-or-later" diff --git a/cosmic-applet-notifications/Cargo.toml b/cosmic-applet-notifications/Cargo.toml index 91752579..0d52f0e0 100644 --- a/cosmic-applet-notifications/Cargo.toml +++ b/cosmic-applet-notifications/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-notifications" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-power/Cargo.toml b/cosmic-applet-power/Cargo.toml index 85f520f9..14c027a2 100644 --- a/cosmic-applet-power/Cargo.toml +++ b/cosmic-applet-power/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-power" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-status-area/Cargo.toml b/cosmic-applet-status-area/Cargo.toml index d96913ab..d939230c 100644 --- a/cosmic-applet-status-area/Cargo.toml +++ b/cosmic-applet-status-area/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-status-area" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-tiling/Cargo.toml b/cosmic-applet-tiling/Cargo.toml index 7767a997..d0c08c1f 100644 --- a/cosmic-applet-tiling/Cargo.toml +++ b/cosmic-applet-tiling/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-tiling" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-time/Cargo.toml b/cosmic-applet-time/Cargo.toml index 3c85ee07..b2026bac 100644 --- a/cosmic-applet-time/Cargo.toml +++ b/cosmic-applet-time/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-time" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applet-workspaces/Cargo.toml b/cosmic-applet-workspaces/Cargo.toml index 103680e2..dd2fb8b0 100644 --- a/cosmic-applet-workspaces/Cargo.toml +++ b/cosmic-applet-workspaces/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applet-workspaces" -version = "1.0.15" +version = "1.3.0" authors = ["Ashley Wulber "] edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-applets-config/Cargo.toml b/cosmic-applets-config/Cargo.toml index 724da32a..7ea99e7f 100644 --- a/cosmic-applets-config/Cargo.toml +++ b/cosmic-applets-config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applets-config" -version = "1.0.15" +version = "1.3.0" edition = "2024" [dependencies] diff --git a/cosmic-applets/Cargo.toml b/cosmic-applets/Cargo.toml index f204a80c..d5fe4cc2 100644 --- a/cosmic-applets/Cargo.toml +++ b/cosmic-applets/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-applets" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" diff --git a/cosmic-panel-button/Cargo.toml b/cosmic-panel-button/Cargo.toml index 69074433..cbb8b01a 100644 --- a/cosmic-panel-button/Cargo.toml +++ b/cosmic-panel-button/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cosmic-panel-button" -version = "1.0.15" +version = "1.3.0" edition = "2024" license = "GPL-3.0-only" From 7ef0084a24ae738f1d87d85d4e6b3b6359e5919c Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 28 Jul 2026 10:03:19 +0200 Subject: [PATCH 77/84] i18n: translation updates from weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adolfo Jayme Barrientos Co-authored-by: Ahrakiel Co-authored-by: Aman Alam Co-authored-by: Aman Shaw Co-authored-by: Andi Chandler Co-authored-by: Anonymous Co-authored-by: AriyA66Y Co-authored-by: CYAXXX <85353920+CYAXXX@users.noreply.github.com> Co-authored-by: Ettore Atalan Co-authored-by: Fedorov Alexei Co-authored-by: Hosted Weblate Co-authored-by: Isaac Subirana Co-authored-by: Jim Spentzos Co-authored-by: Kartik Nayak <65574961+kodebarista@users.noreply.github.com> Co-authored-by: Nara Díaz Viñolas Co-authored-by: Prasanta-Hembram Co-authored-by: Saeed Co-authored-by: Sproston Co-authored-by: Tadas Misiūnas Co-authored-by: VandaL Co-authored-by: Vilius Paliokas Co-authored-by: Wilbur Lindqvist Co-authored-by: jonnysemon Co-authored-by: lorduskordus Co-authored-by: sicKat Co-authored-by: taijuin Lee Co-authored-by: therealmate Co-authored-by: Димко Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/ar/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/cs/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/el/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/fa/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/hi/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/it/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/lt/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/pa/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/pl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/ru/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/uk/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/fa/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/hi/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/it/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/sat/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/it/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/lt/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/sat/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/kmr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/fa/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/hi/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/it/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/sat/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/fr/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/sat/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-notifications/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-time/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-time/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/cs/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/fa/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/hi/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/hu/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/it/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-input-sources-applet/ca/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-input-sources-applet/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces-applet/ca/ Translation: Pop OS/COSMIC Accessibility Applet Translation: Pop OS/COSMIC App List Applet Translation: Pop OS/COSMIC Applets Desktop Entries Translation: Pop OS/COSMIC Audio Applet Translation: Pop OS/COSMIC Battery Applet Translation: Pop OS/COSMIC Bluetooth Applet Translation: Pop OS/COSMIC Input Sources Applet Translation: Pop OS/COSMIC Network Applet Translation: Pop OS/COSMIC Notifications Applet Translation: Pop OS/COSMIC Power Applet Translation: Pop OS/COSMIC Tiling Applet Translation: Pop OS/COSMIC Time Applet Translation: Pop OS/COSMIC Workspaces Applet --- cosmic-app-list/i18n/ar/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/cs/cosmic_app_list.ftl | 4 +- cosmic-app-list/i18n/el/cosmic_app_list.ftl | 2 +- .../i18n/en-GB/cosmic_app_list.ftl | 1 + cosmic-app-list/i18n/fa/cosmic_app_list.ftl | 12 ++--- cosmic-app-list/i18n/hi/cosmic_app_list.ftl | 4 +- cosmic-app-list/i18n/it/cosmic_app_list.ftl | 6 +-- cosmic-app-list/i18n/lt/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/pa/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/pl/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/ru/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/sat/cosmic_app_list.ftl | 0 cosmic-app-list/i18n/uk/cosmic_app_list.ftl | 2 +- .../i18n/zh-TW/cosmic_app_list.ftl | 8 +-- .../i18n/ca/cosmic_applet_a11y.ftl | 6 +++ .../i18n/de/cosmic_applet_a11y.ftl | 2 +- .../i18n/en-GB/cosmic_applet_a11y.ftl | 6 +++ .../i18n/fa/cosmic_applet_a11y.ftl | 2 +- .../i18n/hi/cosmic_applet_a11y.ftl | 8 +-- .../i18n/it/cosmic_applet_a11y.ftl | 2 +- .../i18n/sat/cosmic_applet_a11y.ftl | 2 + .../i18n/ca/cosmic_applet_audio.ftl | 7 +++ .../i18n/de/cosmic_applet_audio.ftl | 2 +- .../i18n/it/cosmic_applet_audio.ftl | 2 +- .../i18n/lt/cosmic_applet_audio.ftl | 2 +- .../i18n/sat/cosmic_applet_audio.ftl | 1 + .../i18n/de/cosmic_applet_battery.ftl | 2 +- .../i18n/kmr/cosmic_applet_battery.ftl | 2 +- .../i18n/sat/cosmic_applet_battery.ftl | 0 .../i18n/de/cosmic_applet_bluetooth.ftl | 2 +- .../i18n/en-GB/cosmic_applet_bluetooth.ftl | 1 + .../i18n/fa/cosmic_applet_bluetooth.ftl | 4 +- .../i18n/hi/cosmic_applet_bluetooth.ftl | 4 +- .../i18n/it/cosmic_applet_bluetooth.ftl | 6 +-- .../i18n/sat/cosmic_applet_bluetooth.ftl | 1 + .../i18n/zh-TW/cosmic_applet_bluetooth.ftl | 2 +- .../i18n/ca/cosmic_applet_input_sources.ftl | 2 + .../i18n/de/cosmic_applet_input_sources.ftl | 4 +- .../i18n/sat/cosmic_applet_input_sources.ftl | 0 .../i18n/de/cosmic_applet_network.ftl | 2 +- .../i18n/en-GB/cosmic_applet_network.ftl | 1 + .../i18n/fr/cosmic_applet_network.ftl | 2 +- .../i18n/sat/cosmic_applet_network.ftl | 1 + .../i18n/zh-TW/cosmic_applet_network.ftl | 2 +- .../i18n/de/cosmic_applet_notifications.ftl | 2 +- .../i18n/sat/cosmic_applet_notifications.ftl | 0 .../i18n/ca/cosmic_applet_power.ftl | 32 ++++++++++++ .../i18n/de/cosmic_applet_power.ftl | 2 +- .../i18n/sat/cosmic_applet_power.ftl | 0 .../i18n/ca/cosmic_applet_tiling.ftl | 2 + .../i18n/de/cosmic_applet_tiling.ftl | 6 +-- .../i18n/sat/cosmic_applet_tiling.ftl | 0 .../i18n/ca/cosmic_applet_time.ftl | 1 + .../i18n/de/cosmic_applet_time.ftl | 2 +- .../i18n/sat/cosmic_applet_time.ftl | 0 .../i18n/ca/cosmic_applet_workspaces.ftl | 1 + .../i18n/sat/cosmic_applet_workspaces.ftl | 0 i18n/ca/desktop_entries.ftl | 1 + i18n/cs/desktop_entries.ftl | 12 ++--- i18n/en-GB/desktop_entries.ftl | 51 +++++++++++++++++++ i18n/fa/desktop_entries.ftl | 5 ++ i18n/hi/desktop_entries.ftl | 34 +++++++++++++ i18n/hu/desktop_entries.ftl | 10 ++-- i18n/it/desktop_entries.ftl | 46 ++++++++++++++--- i18n/sat/desktop_entries.ftl | 0 i18n/zh-Hant/desktop_entries.ftl | 38 +++++++------- 66 files changed, 282 insertions(+), 92 deletions(-) create mode 100644 cosmic-app-list/i18n/sat/cosmic_app_list.ftl create mode 100644 cosmic-applet-a11y/i18n/sat/cosmic_applet_a11y.ftl create mode 100644 cosmic-applet-audio/i18n/sat/cosmic_applet_audio.ftl create mode 100644 cosmic-applet-battery/i18n/sat/cosmic_applet_battery.ftl create mode 100644 cosmic-applet-bluetooth/i18n/sat/cosmic_applet_bluetooth.ftl create mode 100644 cosmic-applet-input-sources/i18n/sat/cosmic_applet_input_sources.ftl create mode 100644 cosmic-applet-network/i18n/sat/cosmic_applet_network.ftl create mode 100644 cosmic-applet-notifications/i18n/sat/cosmic_applet_notifications.ftl create mode 100644 cosmic-applet-power/i18n/sat/cosmic_applet_power.ftl create mode 100644 cosmic-applet-tiling/i18n/sat/cosmic_applet_tiling.ftl create mode 100644 cosmic-applet-time/i18n/sat/cosmic_applet_time.ftl create mode 100644 cosmic-applet-workspaces/i18n/sat/cosmic_applet_workspaces.ftl create mode 100644 i18n/sat/desktop_entries.ftl diff --git a/cosmic-app-list/i18n/ar/cosmic_app_list.ftl b/cosmic-app-list/i18n/ar/cosmic_app_list.ftl index 1e4d25cc..f7aae84b 100644 --- a/cosmic-app-list/i18n/ar/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/ar/cosmic_app_list.ftl @@ -1,6 +1,6 @@ cosmic-app-list = دُرج التطبيقات pin = ثبِّت في درج التطبيقات -quit = أنهِ +quit = إنهِ quit-all = أنهِ الكل new-window = نافذة جديدة run = شغِّل diff --git a/cosmic-app-list/i18n/cs/cosmic_app_list.ftl b/cosmic-app-list/i18n/cs/cosmic_app_list.ftl index ad5b9257..5534149f 100644 --- a/cosmic-app-list/i18n/cs/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/cs/cosmic_app_list.ftl @@ -1,5 +1,5 @@ -cosmic-app-list = Panel aplikací -pin = Připnout do panelu aplikací +cosmic-app-list = Oblast aplikací +pin = Připnout do oblasti aplikací quit = Ukončit quit-all = Ukončit vše new-window = Nové okno diff --git a/cosmic-app-list/i18n/el/cosmic_app_list.ftl b/cosmic-app-list/i18n/el/cosmic_app_list.ftl index e77f522a..0b8a7fb6 100644 --- a/cosmic-app-list/i18n/el/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/el/cosmic_app_list.ftl @@ -1,5 +1,5 @@ new-window = Νέο παράθυρο -quit = Έξοδος +quit = Τερματισμός cosmic-app-list = Περιοχή εφαρμογών run = Εκτέλεση run-on = Εκτέλεση με { $gpu } diff --git a/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl b/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl index e69de29b..5e538121 100644 --- a/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl @@ -0,0 +1 @@ +cosmic-app-list = App Tray diff --git a/cosmic-app-list/i18n/fa/cosmic_app_list.ftl b/cosmic-app-list/i18n/fa/cosmic_app_list.ftl index be2d279a..8d098db3 100644 --- a/cosmic-app-list/i18n/fa/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/fa/cosmic_app_list.ftl @@ -1,8 +1,8 @@ -cosmic-app-list = سینی برنامه‌ها -pin = سنجاق کردن به سینی برنامه‌ها -quit = بستن -quit-all = بستن همه +cosmic-app-list = نوار برنامه‌ها +pin = افزودن به نوار برنامه‌ها +quit = خروج +quit-all = خروج از همه new-window = پنجره جدید run = اجرا -run-on = اجرا روی {$gpu} -run-on-default = (پیش‌فرض) \ No newline at end of file +run-on = اجرا با { $gpu } +run-on-default = (پیش‌فرض) diff --git a/cosmic-app-list/i18n/hi/cosmic_app_list.ftl b/cosmic-app-list/i18n/hi/cosmic_app_list.ftl index 88138ea6..2c6b12a3 100644 --- a/cosmic-app-list/i18n/hi/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/hi/cosmic_app_list.ftl @@ -1,8 +1,8 @@ cosmic-app-list = ऐप ट्रे pin = ऐप ट्रे में पिन करें -quit = बंद करें +quit = बाहर जाएँ quit-all = सभी बंद करें new-window = नई विंडो run = चलाएँ -run-on = {$gpu} पर चलाएँ +run-on = { $gpu } पर चलाएँ run-on-default = (डिफ़ॉल्ट) diff --git a/cosmic-app-list/i18n/it/cosmic_app_list.ftl b/cosmic-app-list/i18n/it/cosmic_app_list.ftl index 96a5b575..b65b4e23 100644 --- a/cosmic-app-list/i18n/it/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/it/cosmic_app_list.ftl @@ -1,8 +1,8 @@ -cosmic-app-list = Barra applicazioni +cosmic-app-list = Area applicazioni pin = Fissa nella barra delle applicazioni quit = Esci quit-all = Chiudi tutto new-window = Nuova finestra run = Esegui -run-on = Esegui usando la GPU: { $gpu } -run-on-default = (default) +run-on = Esegui su { $gpu } +run-on-default = (Predefinito) diff --git a/cosmic-app-list/i18n/lt/cosmic_app_list.ftl b/cosmic-app-list/i18n/lt/cosmic_app_list.ftl index c86f45a1..25dd5990 100644 --- a/cosmic-app-list/i18n/lt/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/lt/cosmic_app_list.ftl @@ -1,5 +1,5 @@ new-window = Naujas Langas -quit = Išeiti +quit = Išjungti run = Paleisti run-on = Paleisti naudojantis { $gpu } run-on-default = (Numatytas) diff --git a/cosmic-app-list/i18n/pa/cosmic_app_list.ftl b/cosmic-app-list/i18n/pa/cosmic_app_list.ftl index ab835da6..cb202e4b 100644 --- a/cosmic-app-list/i18n/pa/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/pa/cosmic_app_list.ftl @@ -1,4 +1,4 @@ -quit = ਬਾਹਰ +quit = ਸਮਾਪਤ cosmic-app-list = ਐਪ ਟਰੇ pin = ਐਪ ਟਰੇ ਵਿੱਚ ਟੰਗੋ quit-all = ਸਭ ਵਿੱਚੋਂ ਬਾਹਰ diff --git a/cosmic-app-list/i18n/pl/cosmic_app_list.ftl b/cosmic-app-list/i18n/pl/cosmic_app_list.ftl index aaedc5f0..d619a422 100644 --- a/cosmic-app-list/i18n/pl/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/pl/cosmic_app_list.ftl @@ -1,6 +1,6 @@ cosmic-app-list = Zasobnik aplikacji pin = Przypnij do zasobnika aplikacji -quit = Zamknij +quit = Zakończ quit-all = Zamknij wszystkie new-window = Nowe okno run = Uruchom diff --git a/cosmic-app-list/i18n/ru/cosmic_app_list.ftl b/cosmic-app-list/i18n/ru/cosmic_app_list.ftl index c1195520..2b3631e9 100644 --- a/cosmic-app-list/i18n/ru/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/ru/cosmic_app_list.ftl @@ -1,6 +1,6 @@ cosmic-app-list = Область приложений pin = Закрепить на панели приложений -quit = Выйти +quit = Завершить quit-all = Завершить все new-window = Новое окно run = Выполнить diff --git a/cosmic-app-list/i18n/sat/cosmic_app_list.ftl b/cosmic-app-list/i18n/sat/cosmic_app_list.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-app-list/i18n/uk/cosmic_app_list.ftl b/cosmic-app-list/i18n/uk/cosmic_app_list.ftl index ec1833cd..b6aea1f1 100644 --- a/cosmic-app-list/i18n/uk/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/uk/cosmic_app_list.ftl @@ -1,6 +1,6 @@ cosmic-app-list = Панель застосунків pin = Закріпити -quit = Вийти +quit = Завершити quit-all = Закрити всі new-window = Нове вікно run = Виконати diff --git a/cosmic-app-list/i18n/zh-TW/cosmic_app_list.ftl b/cosmic-app-list/i18n/zh-TW/cosmic_app_list.ftl index 9595d3b0..c29bd8a5 100644 --- a/cosmic-app-list/i18n/zh-TW/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/zh-TW/cosmic_app_list.ftl @@ -1,8 +1,8 @@ -cosmic-app-list = 應用程式匣盤 -pin = 釘選至應用程式匣盤 -quit = 退出 +cosmic-app-list = 應用程式托盤 +pin = 釘選至應用程式托盤 +quit = 結束 quit-all = 全部退出 -new-window = 新建視窗 +new-window = 新增視窗 run = 執行 run-on = 在 { $gpu } 上執行 run-on-default = (預設) diff --git a/cosmic-applet-a11y/i18n/ca/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/ca/cosmic_applet_a11y.ftl index e69de29b..25383cbe 100644 --- a/cosmic-applet-a11y/i18n/ca/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/ca/cosmic_applet_a11y.ftl @@ -0,0 +1,6 @@ +magnifier = Lupa +screen-reader = Narrador +invert-colors = Colors invertits +settings = Configuració d'accessibilitat... +filter-colors = Filtres de colors +high-contrast = Mode d'alt contrast diff --git a/cosmic-applet-a11y/i18n/de/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/de/cosmic_applet_a11y.ftl index 84e24922..0a5413a5 100644 --- a/cosmic-applet-a11y/i18n/de/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/de/cosmic_applet_a11y.ftl @@ -1,6 +1,6 @@ screen-reader = Bildschirmleser magnifier = Vergrößerungsglas invert-colors = Farben invertieren -settings = Barrierefreiheitseinstellungen… +settings = Barrierefreiheitseinstellungen ... filter-colors = Farben filtern high-contrast = Hoher Kontrast diff --git a/cosmic-applet-a11y/i18n/en-GB/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/en-GB/cosmic_applet_a11y.ftl index e69de29b..b504adf2 100644 --- a/cosmic-applet-a11y/i18n/en-GB/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/en-GB/cosmic_applet_a11y.ftl @@ -0,0 +1,6 @@ +screen-reader = Screen reader +invert-colors = Invert colours +high-contrast = High contrast +filter-colors = Filter colours +settings = Accessibility settings... +magnifier = Magnifier diff --git a/cosmic-applet-a11y/i18n/fa/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/fa/cosmic_applet_a11y.ftl index e43e3a1d..66820364 100644 --- a/cosmic-applet-a11y/i18n/fa/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/fa/cosmic_applet_a11y.ftl @@ -1,6 +1,6 @@ screen-reader = صفحه‌خوان magnifier = ذره‌بین -invert-colors = وارونه‌سازی رنگ‌ها +invert-colors = وارونه کردن رنگ‌ها settings = تنظیمات دسترسی‌پذیری... filter-colors = فیلتر رنگ‌ها high-contrast = کنتراست بالا diff --git a/cosmic-applet-a11y/i18n/hi/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/hi/cosmic_applet_a11y.ftl index a43e2110..97aace4d 100644 --- a/cosmic-applet-a11y/i18n/hi/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/hi/cosmic_applet_a11y.ftl @@ -1,4 +1,6 @@ screen-reader = स्क्रीन रीडर -filter-colors = रंग फ़िल्टर -settings = सुलभता सेटिंग..। -magnifier = आवर्धक +filter-colors = रंग फ़िल्टर करें +settings = एक्सेसिबिलिटी सेटिंग्स..। +magnifier = मैग्नीफायर +high-contrast = उच्च कंट्रास्ट +invert-colors = रंग उल्टे करें diff --git a/cosmic-applet-a11y/i18n/it/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/it/cosmic_applet_a11y.ftl index 2902795c..11e6a115 100644 --- a/cosmic-applet-a11y/i18n/it/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/it/cosmic_applet_a11y.ftl @@ -2,5 +2,5 @@ screen-reader = Lettore dello schermo magnifier = Lente di ingrandimento invert-colors = Inverti colori settings = Impostazioni accessibilità... -filter-colors = Filtra colori +filter-colors = Filtri colore high-contrast = Contrasto elevato diff --git a/cosmic-applet-a11y/i18n/sat/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/sat/cosmic_applet_a11y.ftl new file mode 100644 index 00000000..8c46d41c --- /dev/null +++ b/cosmic-applet-a11y/i18n/sat/cosmic_applet_a11y.ftl @@ -0,0 +1,2 @@ +screen-reader = ᱥᱠᱨᱤᱱ ᱨᱤᱰᱟᱨ +invert-colors = ᱨᱚᱝ ᱩᱞᱴᱟᱹ ᱪᱷᱚ diff --git a/cosmic-applet-audio/i18n/ca/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/ca/cosmic_applet_audio.ftl index e69de29b..0bbe1d5f 100644 --- a/cosmic-applet-audio/i18n/ca/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/ca/cosmic_applet_audio.ftl @@ -0,0 +1,7 @@ +output = Sortida +show-media-controls = Mostra els controls multimèdia a la barra +disconnected = PulseAudio desconnectat +no-device = No s'ha seleccionat cap dispositiu +input = Entrada +unknown-artist = Desconegut +sound-settings = Configuració de so... diff --git a/cosmic-applet-audio/i18n/de/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/de/cosmic_applet_audio.ftl index a0128f53..1b535907 100644 --- a/cosmic-applet-audio/i18n/de/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/de/cosmic_applet_audio.ftl @@ -1,7 +1,7 @@ output = Ausgabe input = Eingabe show-media-controls = Mediensteuerung im Panel anzeigen -sound-settings = Klang-Einstellungen... +sound-settings = Klang-Einstellungen ... disconnected = PulseAudio getrennt no-device = Kein Gerät ausgewählt unknown-artist = Unbekannt diff --git a/cosmic-applet-audio/i18n/it/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/it/cosmic_applet_audio.ftl index f48e0ac2..46f61b33 100644 --- a/cosmic-applet-audio/i18n/it/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/it/cosmic_applet_audio.ftl @@ -4,4 +4,4 @@ show-media-controls = Mostra controlli multimediali nel pannello in alto sound-settings = Impostazioni audio... disconnected = PulseAudio Disconnesso no-device = Nessun dispositivo selezionato -unknown-artist = Sconosciuto \ No newline at end of file +unknown-artist = Sconosciuto diff --git a/cosmic-applet-audio/i18n/lt/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/lt/cosmic_applet_audio.ftl index 4e96ec80..3152f388 100644 --- a/cosmic-applet-audio/i18n/lt/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/lt/cosmic_applet_audio.ftl @@ -4,4 +4,4 @@ no-device = Nepasirinktas įrenginys input = Įvestis output = Išvestis unknown-artist = Nežinomas atlikėjas -sound-settings = Garso Nustatymai... +sound-settings = Garso Nuostatos... diff --git a/cosmic-applet-audio/i18n/sat/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/sat/cosmic_applet_audio.ftl new file mode 100644 index 00000000..b248256d --- /dev/null +++ b/cosmic-applet-audio/i18n/sat/cosmic_applet_audio.ftl @@ -0,0 +1 @@ +output = ᱟᱨᱡᱟᱣ diff --git a/cosmic-applet-battery/i18n/de/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/de/cosmic_applet_battery.ftl index ec518e5f..283930e2 100644 --- a/cosmic-applet-battery/i18n/de/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/de/cosmic_applet_battery.ftl @@ -9,6 +9,6 @@ seconds = s minutes = m hours = h until-empty = bis leer -power-settings = Energie- und Akkueinstellungen... +power-settings = Energie- und Akkueinstellungen ... dgpu-running = Dedizierte GPU ist aktiv und kann die Akkulaufzeit reduzieren dgpu-applications = Anwendungen, welche die dedizierte GPU { $gpu_name } nutzen diff --git a/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl index 8c0d92d1..4f531fec 100644 --- a/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/kmr/cosmic_applet_battery.ftl @@ -2,7 +2,7 @@ battery = Betarî seconds = ç minutes = x hours = d -until-empty = Heya vala dibe +until-empty = heya vala dibe power-settings = Sazkariyên hêz û betariyê... battery-desc = Bikaranîna hêzê kêmkirî û performans. balanced = Hevseng diff --git a/cosmic-applet-battery/i18n/sat/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/sat/cosmic_applet_battery.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-bluetooth/i18n/de/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/de/cosmic_applet_bluetooth.ftl index 1fa64ced..79e52b06 100644 --- a/cosmic-applet-bluetooth/i18n/de/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/de/cosmic_applet_bluetooth.ftl @@ -1,6 +1,6 @@ bluetooth = Bluetooth other-devices = Andere Bluetooth-Geräte -settings = Bluetooth-Einstellungen... +settings = Bluetooth-Einstellungen ... connected = Verbunden confirm-pin = Bitte bestätige, dass die folgende PIN mit der auf { $deviceName } angezeigten PIN übereinstimmt confirm = Bestätigen diff --git a/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl index e69de29b..269cddff 100644 --- a/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl @@ -0,0 +1 @@ +cancel = Cancel diff --git a/cosmic-applet-bluetooth/i18n/fa/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/fa/cosmic_applet_bluetooth.ftl index 01262e21..76ff0338 100644 --- a/cosmic-applet-bluetooth/i18n/fa/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/fa/cosmic_applet_bluetooth.ftl @@ -2,11 +2,11 @@ bluetooth = بلوتوث other-devices = سایر دستگاه‌های بلوتوث settings = تنظیمات بلوتوث... connected = متصل -confirm-pin = لطفاً تأیید کنید که پین زیر با پین نمایش داده شده در {$deviceName} یکسان است. +confirm-pin = لطفاً تأیید کنید که پین زیر با پین نمایش داده شده در { $deviceName } یکسان است. confirm = تأیید cancel = لغو unsuccessful = جفت‌سازی ناموفق بود -check-device = مطمئن شوید که {$deviceName} روشن، در محدوده و آماده جفت‌سازی است. +check-device = مطمئن شوید که { $deviceName } روشن، در محدوده و آماده جفت‌سازی است. try-again = تلاش دوباره discoverable = قابل شناسایی pairable = قابل جفت‌سازی diff --git a/cosmic-applet-bluetooth/i18n/hi/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/hi/cosmic_applet_bluetooth.ftl index ca46bd08..f568bb11 100644 --- a/cosmic-applet-bluetooth/i18n/hi/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/hi/cosmic_applet_bluetooth.ftl @@ -2,11 +2,11 @@ bluetooth = ब्लूटूथ other-devices = अन्य ब्लूटूथ उपकरण settings = ब्लूटूथ सेटिंग्स... connected = जुड़े हुए -confirm-pin = कृपया सुनिश्चित करें कि निम्नलिखित PIN {$deviceName} पर प्रदर्शित PIN से मेल खाता है +confirm-pin = कृपया सुनिश्चित करें कि निम्नलिखित PIN { $deviceName } पर प्रदर्शित PIN से मेल खाता है confirm = पुष्टि करें cancel = रद्द करें unsuccessful = पेयरिंग असफल -check-device = सुनिश्चित करें कि {$deviceName} चालू है, रेंज में है, और पेयर करने के लिए तैयार है। +check-device = सुनिश्चित करें कि { $deviceName } चालू है, रेंज में है, और पेयर करने के लिए तैयार है। try-again = फिर से प्रयास करें discoverable = खोजने योग्य pairable = पेयर करने योग्य diff --git a/cosmic-applet-bluetooth/i18n/it/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/it/cosmic_applet_bluetooth.ftl index f1ac3a22..4e3d7233 100644 --- a/cosmic-applet-bluetooth/i18n/it/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/it/cosmic_applet_bluetooth.ftl @@ -2,11 +2,11 @@ bluetooth = Bluetooth other-devices = Altri dispositivi Bluetooth settings = Impostazioni Bluetooth... connected = Connesso -confirm-pin = Per favore conferma che il seguente PIN corrisponda a quello visualizzato nel dispositivo {$deviceName} +confirm-pin = Per favore conferma che il seguente PIN corrisponda a quello visualizzato nel dispositivo { $deviceName } confirm = Conferma cancel = Annulla unsuccessful = Accoppiamento fallito -check-device = Assicurati che il dispositivo {$deviceName} sia acceso, a portata e pronto per l'accoppiamento. +check-device = Assicurati che il dispositivo { $deviceName } sia acceso, a portata e pronto per l'accoppiamento. try-again = Riprova discoverable = Visibile -pairable = Accoppiabile \ No newline at end of file +pairable = Accoppiabile diff --git a/cosmic-applet-bluetooth/i18n/sat/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/sat/cosmic_applet_bluetooth.ftl new file mode 100644 index 00000000..67f522ad --- /dev/null +++ b/cosmic-applet-bluetooth/i18n/sat/cosmic_applet_bluetooth.ftl @@ -0,0 +1 @@ +cancel = ᱵᱟᱹᱛᱤᱞ diff --git a/cosmic-applet-bluetooth/i18n/zh-TW/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/zh-TW/cosmic_applet_bluetooth.ftl index fa1426a5..781a39ec 100644 --- a/cosmic-applet-bluetooth/i18n/zh-TW/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/zh-TW/cosmic_applet_bluetooth.ftl @@ -1,7 +1,7 @@ bluetooth = 藍牙 other-devices = 其他藍牙裝置 settings = 藍牙設定… -connected = 已經連線 +connected = 已連線 confirm-pin = 請確認此 PIN 碼與 { $deviceName } 上顯示的是否相符 confirm = 確認 cancel = 取消 diff --git a/cosmic-applet-input-sources/i18n/ca/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/ca/cosmic_applet_input_sources.ftl index e69de29b..12a2de28 100644 --- a/cosmic-applet-input-sources/i18n/ca/cosmic_applet_input_sources.ftl +++ b/cosmic-applet-input-sources/i18n/ca/cosmic_applet_input_sources.ftl @@ -0,0 +1,2 @@ +show-keyboard-layout = Mostra la disposició de teclat... +keyboard-settings = Configuració de teclat... diff --git a/cosmic-applet-input-sources/i18n/de/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/de/cosmic_applet_input_sources.ftl index 6be93fc6..ddc457d7 100644 --- a/cosmic-applet-input-sources/i18n/de/cosmic_applet_input_sources.ftl +++ b/cosmic-applet-input-sources/i18n/de/cosmic_applet_input_sources.ftl @@ -1,2 +1,2 @@ -show-keyboard-layout = Tastaturbelegung anzeigen... -keyboard-settings = Tastatureinstellungen... +show-keyboard-layout = Tastaturbelegung anzeigen ... +keyboard-settings = Tastatureinstellungen ... diff --git a/cosmic-applet-input-sources/i18n/sat/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/sat/cosmic_applet_input_sources.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-network/i18n/de/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/de/cosmic_applet_network.ftl index 0a913c0b..fe267462 100644 --- a/cosmic-applet-network/i18n/de/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/de/cosmic_applet_network.ftl @@ -12,7 +12,7 @@ connected = Verbunden connecting = Wird verbunden connect = Verbinden cancel = Abbrechen -settings = Netzwerkeinstellungen... +settings = Netzwerkeinstellungen ... visible-wireless-networks = Sichtbare Drahtlosnetzwerke enter-password = Gib das Passwort oder den Verschlüsselungsschlüssel ein router-wps-button = Du kannst dich auch verbinden, indem du die Taste „WPS” am Router drückst diff --git a/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl index e69de29b..269cddff 100644 --- a/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl @@ -0,0 +1 @@ +cancel = Cancel diff --git a/cosmic-applet-network/i18n/fr/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/fr/cosmic_applet_network.ftl index f2c0025d..427f8e96 100644 --- a/cosmic-applet-network/i18n/fr/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/fr/cosmic_applet_network.ftl @@ -9,7 +9,7 @@ mac = MAC megabits-per-second = Mbps connected = Connecté connecting = Connexion -connect = Connecter +connect = Se connecter cancel = Annuler settings = Paramètres réseaux... visible-wireless-networks = Réseaux Wi-Fi disponibles diff --git a/cosmic-applet-network/i18n/sat/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/sat/cosmic_applet_network.ftl new file mode 100644 index 00000000..67f522ad --- /dev/null +++ b/cosmic-applet-network/i18n/sat/cosmic_applet_network.ftl @@ -0,0 +1 @@ +cancel = ᱵᱟᱹᱛᱤᱞ diff --git a/cosmic-applet-network/i18n/zh-TW/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/zh-TW/cosmic_applet_network.ftl index 23234d4d..fb7946e6 100644 --- a/cosmic-applet-network/i18n/zh-TW/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/zh-TW/cosmic_applet_network.ftl @@ -8,7 +8,7 @@ ipv4 = IPv4 位址 ipv6 = IPv6 位址 mac = MAC megabits-per-second = Mbps -connected = 已經連線 +connected = 已連線 connecting = 連線中 connect = 連線 cancel = 取消 diff --git a/cosmic-applet-notifications/i18n/de/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/de/cosmic_applet_notifications.ftl index 6f103ed6..e40af6aa 100644 --- a/cosmic-applet-notifications/i18n/de/cosmic_applet_notifications.ftl +++ b/cosmic-applet-notifications/i18n/de/cosmic_applet_notifications.ftl @@ -15,5 +15,5 @@ show-more = { $more } weitere anzeigen clear-group = Gruppe leeren clear-all = Alle Benachrichtigungen leeren do-not-disturb = Nicht stören -notification-settings = Benachrichtigungseinstellungen... +notification-settings = Benachrichtigungseinstellungen ... no-notifications = Keine Benachrichtigungen diff --git a/cosmic-applet-notifications/i18n/sat/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/sat/cosmic_applet_notifications.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl index c1084630..8fcd19ec 100644 --- a/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/ca/cosmic_applet_power.ftl @@ -2,3 +2,35 @@ cancel = Cancel·lar confirm = Confirmar restart = Reinicia suspend = Suspèn +confirm-button = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] Apaga + [log-out] { log-out } + *[other] { confirm } + } +power = Energia +confirm-body = + { $action -> + [restart] L'ordinador es reiniciarà + [suspend] L'ordinador se suspendrà + [shutdown] L'ordinador s'apagarà + [lock-screen] La pantalla es bloquejarà + [log-out] La sessió es tancarà + *[other] L'acció seleccionada es durà a terme + } automàticament d'aquí a { $countdown } segons. +lock-screen = Bloqueja la pantalla +shutdown = Apaga +log-out = Tanca la sessió +log-out-shortcut = Súper + Majús + Esc +settings = Configuració... +lock-screen-shortcut = Súper + Esc +confirm-title = + ¿{ $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] { shutdown } + [log-out] Voleu tancar totes les aplicacions i tancar la sessió + *[other] Voleu dur a terme l'acció seleccionada + }? diff --git a/cosmic-applet-power/i18n/de/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/de/cosmic_applet_power.ftl index 652e2f9b..f630d8e4 100644 --- a/cosmic-applet-power/i18n/de/cosmic_applet_power.ftl +++ b/cosmic-applet-power/i18n/de/cosmic_applet_power.ftl @@ -1,5 +1,5 @@ power = Energie -settings = Einstellungen... +settings = Einstellungen ... lock-screen = Sperrbildschirm lock-screen-shortcut = Super + Esc log-out = Abmelden diff --git a/cosmic-applet-power/i18n/sat/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/sat/cosmic_applet_power.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-tiling/i18n/ca/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/ca/cosmic_applet_tiling.ftl index e69de29b..4160088d 100644 --- a/cosmic-applet-tiling/i18n/ca/cosmic_applet_tiling.ftl +++ b/cosmic-applet-tiling/i18n/ca/cosmic_applet_tiling.ftl @@ -0,0 +1,2 @@ +tile-windows = Organitza les finestres en mosaic automàticament +shortcuts = Dreceres diff --git a/cosmic-applet-tiling/i18n/de/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/de/cosmic_applet_tiling.ftl index 2f41f75e..4e367370 100644 --- a/cosmic-applet-tiling/i18n/de/cosmic_applet_tiling.ftl +++ b/cosmic-applet-tiling/i18n/de/cosmic_applet_tiling.ftl @@ -4,11 +4,11 @@ shortcuts = Tastenkombinationen navigate-windows = Fenster navigieren move-window = Fenster verschieben toggle-floating-window = Schwebendes Fenster umschalten -view-all-shortcuts = Alle Tastenkombinationen ansehen... +view-all-shortcuts = Alle Tastenkombinationen ansehen ... active-hint = Aktiv-Hinweis gaps = Lücken -floating-window-exceptions = Ausnahmen für schwebende Fenster... -window-management-settings = Einstellungen für die Fensterverwaltung... +floating-window-exceptions = Ausnahmen für schwebende Fenster ... +window-management-settings = Einstellungen für die Fensterverwaltung ... all-workspaces = Alle Arbeitsflächen per-workspace = Pro Arbeitsfläche super = Super diff --git a/cosmic-applet-tiling/i18n/sat/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/sat/cosmic_applet_tiling.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-time/i18n/ca/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/ca/cosmic_applet_time.ftl index e69de29b..daed32e1 100644 --- a/cosmic-applet-time/i18n/ca/cosmic_applet_time.ftl +++ b/cosmic-applet-time/i18n/ca/cosmic_applet_time.ftl @@ -0,0 +1 @@ +datetime-settings = Configuració de data, hora i calendari... diff --git a/cosmic-applet-time/i18n/de/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/de/cosmic_applet_time.ftl index e08a855a..e4e6c44a 100644 --- a/cosmic-applet-time/i18n/de/cosmic_applet_time.ftl +++ b/cosmic-applet-time/i18n/de/cosmic_applet_time.ftl @@ -1 +1 @@ -datetime-settings = Datum, Uhrzeit und Kalendereinstellungen... +datetime-settings = Datum, Uhrzeit und Kalendereinstellungen ... diff --git a/cosmic-applet-time/i18n/sat/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/sat/cosmic_applet_time.ftl new file mode 100644 index 00000000..e69de29b diff --git a/cosmic-applet-workspaces/i18n/ca/cosmic_applet_workspaces.ftl b/cosmic-applet-workspaces/i18n/ca/cosmic_applet_workspaces.ftl index e69de29b..3844b7a8 100644 --- a/cosmic-applet-workspaces/i18n/ca/cosmic_applet_workspaces.ftl +++ b/cosmic-applet-workspaces/i18n/ca/cosmic_applet_workspaces.ftl @@ -0,0 +1 @@ +cosmic-applet-workspaces = Espais de treball del COSMIC diff --git a/cosmic-applet-workspaces/i18n/sat/cosmic_applet_workspaces.ftl b/cosmic-applet-workspaces/i18n/sat/cosmic_applet_workspaces.ftl new file mode 100644 index 00000000..e69de29b diff --git a/i18n/ca/desktop_entries.ftl b/i18n/ca/desktop_entries.ftl index 8e680471..167c3614 100644 --- a/i18n/ca/desktop_entries.ftl +++ b/i18n/ca/desktop_entries.ftl @@ -1 +1,2 @@ cosmic-app-list = Safata d'Aplicacions +cosmic-app-list-comment = Inicieu aplicacions ancorades i gestioneu les finestres obertes diff --git a/i18n/cs/desktop_entries.ftl b/i18n/cs/desktop_entries.ftl index 44354f34..fc451530 100644 --- a/i18n/cs/desktop_entries.ftl +++ b/i18n/cs/desktop_entries.ftl @@ -1,4 +1,4 @@ -cosmic-app-list = Panel aplikací +cosmic-app-list = Oblast aplikací cosmic-applet-a11y = Přístupnost cosmic-applet-audio = Zvuk cosmic-applet-battery = Napájení a baterie @@ -8,7 +8,7 @@ cosmic-applet-minimize = Minimalizovaná okna cosmic-applet-network = Síť cosmic-applet-notifications = Centrum oznámení cosmic-applet-power = Uživatelská relace -cosmic-applet-status-area = Panel oznámení +cosmic-applet-status-area = Oznamovací oblast cosmic-applet-tiling = Dlaždicový režim oken cosmic-applet-time = Datum, čas a kalendář cosmic-applet-workspaces = Číslované pracovní plochy @@ -26,9 +26,9 @@ cosmic-applet-network-comment = Správa síťových připojení cosmic-applet-network-keywords = COSMIC;Applet;Síť; cosmic-applet-notifications-comment = Správa oznámení a režimu Nerušit cosmic-applet-notifications-keywords = COSMIC;Applet;Oznámení; -cosmic-applet-status-area-keywords = COSMIC;Applet;Aplikace;Indikátory;Oznámení;Notifikace;Panel;Status;Stav; +cosmic-applet-status-area-keywords = COSMIC;Applet;Aplikace;Indikátory;Oznámení;Notifikace;Oblast;Status;Stav; cosmic-app-list-comment = Správa otevřených oken a spouštění připnutých aplikací -cosmic-app-list-keywords = COSMIC;Applet;Aplikace;Panel;Seznam;Úloha;Úlohy;Lišta; +cosmic-app-list-keywords = COSMIC;Applet;Aplikace;Oblast;Seznam;Úloha;Úlohy;Lišta; cosmic-applet-a11y-comment = Konfigurace nastavení přístupnosti z panelu cosmic-applet-a11y-keywords = COSMIC;Applet;Přístupnost;A11y;Obrazovka;Obrazovky;Čtečka;Lupa;Kontrast;Barva;Barvy; cosmic-applet-audio-comment = Výběr zvukového zařízení, ovládání hlasitosti a ovládání médií MPRIS @@ -43,9 +43,9 @@ cosmic-applet-time-keywords = COSMIC;Applet;Datumy;Časy;Kalendář;Hodiny; cosmic-applet-workspaces-comment = Přepínání mezi číslovanými pracovními plochami v panelu cosmic-applet-workspaces-keywords = COSMIC;Applet;Pracovní;Plocha;Plochy; cosmic-panel-app-button-comment = Přístup ke knihovně pro spouštění nainstalovaných aplikací -cosmic-panel-app-button-keywords = COSMIC;Applet;Aplikace;Knihovna;Panel;Spuštění;Spouštění; +cosmic-panel-app-button-keywords = COSMIC;Applet;Aplikace;Knihovna;Oblast;Spuštění;Spouštění; cosmic-panel-launcher-button-comment = Přístup ke spouštěči pro vyhledávání aplikací a spouštění příkazů cosmic-panel-launcher-button-keywords = COSMIC;Applet;Spouštěč;Vyhledávání;Příkazy; cosmic-panel-workspaces-button-comment = Přístup k přehledu pracovních ploch pro jejich správu a přepínání cosmic-panel-workspaces-button-keywords = COSMIC;Applet;Pracovní;Plocha;Plochy;Přehled; -cosmic-applet-status-area-comment = Indikátory aplikací, které mohou exportovat menu do panelu +cosmic-applet-status-area-comment = Ikony aplikací, které mohou zobrazovat nabídky na panelu diff --git a/i18n/en-GB/desktop_entries.ftl b/i18n/en-GB/desktop_entries.ftl index e69de29b..87f50a21 100644 --- a/i18n/en-GB/desktop_entries.ftl +++ b/i18n/en-GB/desktop_entries.ftl @@ -0,0 +1,51 @@ +cosmic-app-list = App Tray +cosmic-app-list-comment = Launch pinned apps and manage open windows +cosmic-app-list-keywords = COSMIC;Applet;App;Tray;List;Task;Bar; +cosmic-applet-a11y = Accessibility +cosmic-applet-a11y-comment = Configure accessibility settings from the panel +cosmic-applet-a11y-keywords = COSMIC;Applet;Accessibility;A11y;Screen;Reader;Magnifier;Contrast;Colour; +cosmic-applet-audio = Sound +cosmic-applet-audio-comment = Audio device selection, volume control, and MPRIS media controls +cosmic-applet-audio-keywords = COSMIC;Applet;Sound;Audio;MPRIS; +cosmic-applet-battery = Power & Battery +cosmic-applet-battery-comment = Power modes and power saving options +cosmic-applet-battery-keywords = COSMIC;Applet;Power;Battery; +cosmic-applet-bluetooth = Bluetooth +cosmic-applet-bluetooth-comment = Manage Bluetooth devices +cosmic-applet-bluetooth-keywords = COSMIC;Applet;Bluetooth; +cosmic-applet-input-sources = Input Sources +cosmic-applet-input-sources-comment = Switch between input sources +cosmic-applet-input-sources-keywords = COSMIC;Applet;Input;Source; +cosmic-applet-minimize = Minimised Windows +cosmic-applet-minimize-comment = Manage minimised windows +cosmic-applet-minimize-keywords = COSMIC;Applet;Minimise; +cosmic-applet-network = Network +cosmic-applet-network-comment = Manage network connections +cosmic-applet-network-keywords = COSMIC;Applet;Network; +cosmic-applet-notifications = Notifications Centre +cosmic-applet-notifications-comment = Manage notifications and Do Not Disturb +cosmic-applet-notifications-keywords = COSMIC;Applet;Notification; +cosmic-applet-power = User Session +cosmic-applet-power-comment = Lock screen, log out, suspend, reboot, and shutdown +cosmic-applet-power-keywords = COSMIC;Applet;User;Session;Lock;Log out;Reboot;Shutdown;Suspend; +cosmic-applet-status-area = Notifications Tray +cosmic-applet-status-area-comment = Application indicators which may export menus to the panel +cosmic-applet-status-area-keywords = COSMIC;Applet;App;Indicator;Notification;Tray;Status; +cosmic-applet-tiling = Tiling +cosmic-applet-tiling-comment = Manage the active hint, current & per-workspace auto-tiling +cosmic-applet-tiling-keywords = COSMIC;Applet;Tiling;Hint;Workspace; +cosmic-applet-time = Date, Time & Calendar +cosmic-applet-time-comment = Display the current time in the panel with a calendar popup +cosmic-applet-time-keywords = COSMIC;Applet;Date;Time;Calendar; +cosmic-applet-workspaces = Numbered Workspaces +cosmic-applet-workspaces-comment = Switch between numbered workspaces in the panel +cosmic-applet-workspaces-keywords = COSMIC;Applet;Workspace; +cosmic-panel-app-button = App Library Button +cosmic-panel-app-button-comment = Open the application library for launching installed applications +cosmic-panel-app-button-keywords = COSMIC;Applet;App;Library;Tray; +cosmic-panel-launcher-button = Launcher Button +cosmic-panel-launcher-button-comment = Open the launcher to search applications and run commands +cosmic-panel-launcher-button-keywords = COSMIC;Applet;Launcher;Runner; +cosmic-panel-workspaces-button = Workspaces Button +cosmic-panel-workspaces-button-comment = Open the workspaces overview to manage and switch workspaces +cosmic-panel-workspaces-button-keywords = COSMIC;Applet;Workspace;Overview; diff --git a/i18n/fa/desktop_entries.ftl b/i18n/fa/desktop_entries.ftl index e69de29b..91683d53 100644 --- a/i18n/fa/desktop_entries.ftl +++ b/i18n/fa/desktop_entries.ftl @@ -0,0 +1,5 @@ +cosmic-app-list = نوار برنامه‌ها +cosmic-applet-a11y = دسترسی‌پذیری +cosmic-applet-audio = صدا +cosmic-applet-bluetooth = بلوتوث +cosmic-applet-bluetooth-comment = مدیریت دستگاه‌های بلوتوث diff --git a/i18n/hi/desktop_entries.ftl b/i18n/hi/desktop_entries.ftl index e69de29b..3ece3b53 100644 --- a/i18n/hi/desktop_entries.ftl +++ b/i18n/hi/desktop_entries.ftl @@ -0,0 +1,34 @@ +cosmic-applet-a11y = अभिगम्यता +cosmic-applet-a11y-comment = पैनल से अभिगम्यता सेटिंग्स विन्यस्त करें +cosmic-applet-audio = ध्वनि +cosmic-applet-audio-comment = ऑडियो उपकरण चयन, ध्वनि स्तर नियंत्रण और MPRIS मीडिया नियंत्रण +cosmic-applet-battery = पावर और बैटरी +cosmic-applet-battery-comment = पावर मोड और ऊर्जा बचत विकल्प +cosmic-applet-battery-keywords = COSMIC;ऐपलेट;पावर;बैटरी +cosmic-applet-bluetooth = ब्लूटूथ +cosmic-applet-bluetooth-comment = ब्लूटूथ डिवाइस प्रबंधित करें +cosmic-applet-input-sources = इनपुट स्रोत +cosmic-applet-input-sources-comment = इनपुट स्रोतों के बीच स्विच करें +cosmic-applet-input-sources-keywords = COSMIC; Applet; इनपुट; स्रोत; +cosmic-applet-minimize = न्यूनतम की गई विंडोज़ +cosmic-applet-minimize-comment = न्यूनतम की गई विंडोज़ प्रबंधित करें +cosmic-applet-network = नेटवर्क +cosmic-applet-network-comment = नेटवर्क कनेक्शन प्रबंधित करें +cosmic-applet-notifications = नोटिफ़िकेशन सेंटर +cosmic-applet-notifications-comment = नोटिफ़िकेशन और डु नॉट डिस्टर्ब प्रबंधित करें +cosmic-applet-power = यूज़र सेशन +cosmic-applet-power-comment = स्क्रीन लॉक करें, लॉग आउट करें, सस्पेंड करें, रीबूट करें और शटडाउन करें +cosmic-applet-status-area = नोटिफ़िकेशन ट्रे +cosmic-applet-status-area-comment = एप्लिकेशन इंडिकेटर जो पैनल में मेनू एक्सपोर्ट कर सकते हैं +cosmic-applet-tiling = टाइलिंग +cosmic-applet-tiling-comment = सक्रिय हिंट, वर्तमान और प्रति-वर्कस्पेस ऑटो-टाइलिंग प्रबंधित करें +cosmic-applet-time = दिनांक, समय और कैलेंडर +cosmic-applet-time-comment = पैनल में कैलेंडर पॉपअप के साथ वर्तमान समय प्रदर्शित करें +cosmic-applet-workspaces = क्रमांकित वर्कस्पेस +cosmic-applet-workspaces-comment = पैनल में क्रमांकित वर्कस्पेस के बीच स्विच करें +cosmic-panel-app-button = ऐप लाइब्रेरी बटन +cosmic-panel-app-button-comment = इंस्टॉल किए गए एप्लिकेशन लॉन्च करने के लिए ऐप लाइब्रेरी खोलें +cosmic-panel-launcher-button = लॉन्चर बटन +cosmic-panel-launcher-button-comment = एप्लिकेशन खोजने और कमांड चलाने के लिए लॉन्चर खोलें +cosmic-panel-workspaces-button = वर्कस्पेस बटन +cosmic-panel-workspaces-button-comment = वर्कस्पेस प्रबंधित करने और उनके बीच स्विच करने के लिए वर्कस्पेस ओवरव्यू खोलें diff --git a/i18n/hu/desktop_entries.ftl b/i18n/hu/desktop_entries.ftl index 82b4bfdb..1799fcb4 100644 --- a/i18n/hu/desktop_entries.ftl +++ b/i18n/hu/desktop_entries.ftl @@ -1,16 +1,16 @@ cosmic-app-list = Alkalmazástálca cosmic-applet-a11y = Akadálymentesség cosmic-applet-audio = Hang -cosmic-applet-battery = Energia és Akkumulátor +cosmic-applet-battery = Energia és akkumulátor cosmic-applet-bluetooth = Bluetooth -cosmic-applet-input-sources = Beviteli Források +cosmic-applet-input-sources = Beviteli források cosmic-applet-minimize = Minimalizált ablakok cosmic-applet-network = Hálózat cosmic-applet-notifications = Értesítési központ -cosmic-applet-power = Felhasználói Munkamenet +cosmic-applet-power = Felhasználói munkamenet cosmic-applet-status-area = Értesítési terület cosmic-applet-tiling = Csempézés -cosmic-applet-time = Dátum, Idő és Naptár +cosmic-applet-time = Dátum, idő és naptár cosmic-applet-workspaces = Számozott Munkaterületek cosmic-panel-app-button = Alkalmazáskönyvtár gomb cosmic-panel-launcher-button = Indító gomb @@ -21,7 +21,7 @@ cosmic-applet-audio-keywords = COSMIC;kisalkalmazás;hang;MPRIS; cosmic-applet-battery-keywords = COSMIC;kisalkalmazás;energia;akkumulátor; cosmic-applet-bluetooth-comment = Bluetooth-eszközök kezelése cosmic-applet-bluetooth-keywords = COSMIC;kisalkalmazás;bluetooth; -cosmic-applet-input-sources-keywords = COSMIC;kisalkalmazás;beviteli forrás; +cosmic-applet-input-sources-keywords = COSMIC;kisalkalmazás;beviteli;forrás; cosmic-applet-minimize-keywords = COSMIC;kisalkalmazás;minimizálás; cosmic-applet-network-keywords = COSMIC;kisalkalmazás;hálózat;internet; cosmic-applet-notifications-keywords = COSMIC;kisalkalmazás;értesítések; diff --git a/i18n/it/desktop_entries.ftl b/i18n/it/desktop_entries.ftl index d7ca6b16..083337f3 100644 --- a/i18n/it/desktop_entries.ftl +++ b/i18n/it/desktop_entries.ftl @@ -1,16 +1,48 @@ cosmic-app-list = Area applicazioni cosmic-applet-a11y = Accessibilità -cosmic-applet-audio = Audio -cosmic-applet-battery = Alimentazione e batteria +cosmic-applet-audio = Suono +cosmic-applet-battery = Potenza e batteria cosmic-applet-bluetooth = Bluetooth -cosmic-applet-input-sources = Sorgenti di immissione +cosmic-applet-input-sources = Sorgenti di input cosmic-applet-minimize = Finestre minimizzate cosmic-applet-network = Rete cosmic-applet-notifications = Centro notifiche cosmic-applet-power = Sessione utente cosmic-applet-status-area = Area notifiche -cosmic-applet-tiling = Tiling +cosmic-applet-tiling = Affiancamento finestre cosmic-applet-time = Data, ora e calendario -cosmic-applet-workspaces = Spazi di lavoro numerati -cosmic-panel-launcher-button = Tasto Launcher -cosmic-panel-workspaces-button = Tasto Spazi di lavoro +cosmic-applet-workspaces = Aree di lavoro numerate +cosmic-panel-launcher-button = Pulsante del launcher +cosmic-panel-workspaces-button = Pulsante aree di lavoro +cosmic-app-list-comment = Avvia le app fissate e gestisci le finestre aperte +cosmic-applet-a11y-comment = Configura le impostazioni di accessibilità dal pannello +cosmic-applet-audio-comment = Selezione dispositivi audio, controllo del volume e controlli multimediali MPRIS +cosmic-applet-battery-comment = Modalità di alimentazione e opzioni di risparmio energetico +cosmic-applet-bluetooth-comment = Gestione di dispositivi Bluetooth +cosmic-applet-input-sources-comment = Passa da una sorgente di input all’altra +cosmic-applet-minimize-comment = Gestisci le finestre minimizzate +cosmic-applet-network-comment = Gestisci le connessioni di rete +cosmic-applet-notifications-comment = Gestisci le notifiche e “Non disturbare” +cosmic-applet-power-comment = Blocca lo schermo, termina la sessione, sospendi, riavvia e spegni +cosmic-applet-status-area-comment = Indicatori di applicazioni che possono esportare menu nel pannello +cosmic-applet-tiling-comment = Gestisci il suggerimento attivo e l’affiancamento automatico corrente e per aree di lavoro +cosmic-applet-time-comment = Mostra l’ora corrente nel pannello con popup del calendario +cosmic-applet-workspaces-comment = Passa tra aree di lavoro numerate nel pannello +cosmic-panel-app-button = Pulsante della libreria delle applicazioni +cosmic-panel-app-button-comment = Apri la libreria delle applicazioni per avviare le applicazioni installate +cosmic-panel-launcher-button-comment = Apri il launcher per cercare applicazioni ed eseguire comandi +cosmic-panel-workspaces-button-comment = Apri la panoramica delle aree di lavoro per gestirle e passare da una all’altra +cosmic-app-list-keywords = COSMIC;Applet;Applicazione;Area di notifica;Elenco;Attività;Barra; +cosmic-applet-a11y-keywords = COSMIC;Applet;Accessibilità;A11y;Lettore di schermo;Lente d'ingrandimento;Contrasto;Colore; +cosmic-applet-audio-keywords = COSMIC;Applet;Suono;Audio;MPRIS; +cosmic-applet-battery-keywords = COSMIC;Applet;Potenza;Batteria; +cosmic-applet-bluetooth-keywords = COSMIC;Applet; Bluetooth; +cosmic-applet-input-sources-keywords = COSMIC;Applet;Input;Sorgente; +cosmic-applet-minimize-keywords = COSMIC;Applet;Minimizzare; +cosmic-applet-network-keywords = COSMIC;Applet;Rete; +cosmic-applet-notifications-keywords = COSMIC;Applet;Notifiche; +cosmic-applet-power-keywords = COSMIC;Applet;Utente;Sessione;Blocca;Termina sessione;Riavvia;Spegni;Sospendi; +cosmic-applet-status-area-keywords = COSMIC;Applet;Applicazione;Indicatore;Notifiche;Area;Stato; +cosmic-applet-tiling-keywords = COSMIC;Applet;Affiancamento;Suggerimento;Area di lavoro; +cosmic-applet-time-keywords = COSMIC;Applet;Data;Ora;Calendario; +cosmic-applet-workspaces-keywords = COSMIC;Applet;Area di lavoro; diff --git a/i18n/sat/desktop_entries.ftl b/i18n/sat/desktop_entries.ftl new file mode 100644 index 00000000..e69de29b diff --git a/i18n/zh-Hant/desktop_entries.ftl b/i18n/zh-Hant/desktop_entries.ftl index 7bac138d..ef886f04 100644 --- a/i18n/zh-Hant/desktop_entries.ftl +++ b/i18n/zh-Hant/desktop_entries.ftl @@ -1,31 +1,31 @@ -cosmic-applet-a11y-keywords = COSMIC;工具程式;無障礙;螢幕;閱讀器;放大鏡;對比;顏色; -cosmic-applet-audio-keywords = COSMIC;工具程式;音響;音頻;MPRIS; -cosmic-applet-battery-keywords = COSMIC;工具程式;電源;電池; -cosmic-applet-bluetooth-keywords = COSMIC;工具程式;藍牙; -cosmic-applet-input-sources-keywords = COSMIC;工具程式;輸入;輸入源; -cosmic-applet-minimize-keywords = COSMIC;工具程式;最小化; +cosmic-applet-a11y-keywords = COSMIC;小程式;無障礙;螢幕;閱讀器;放大鏡;對比;顏色; +cosmic-applet-audio-keywords = COSMIC;小程式;音效;音訊;MPRIS; +cosmic-applet-battery-keywords = COSMIC;小程式;電源;電池; +cosmic-applet-bluetooth-keywords = COSMIC;小程式;藍牙; +cosmic-applet-input-sources-keywords = COSMIC;小程式;輸入;輸入源; +cosmic-applet-minimize-keywords = COSMIC;小程式;最小化; cosmic-applet-network-keywords = COSMIC;工具程式;網路; cosmic-applet-notifications-keywords = COSMIC;工具程式;通知; cosmic-applet-power-keywords = COSMIC;工具程式;使用者;工作階段;鎖定;登入;登出;重新啟動;關閉電源;休眠; -cosmic-app-list = 應用程式匣盤 -cosmic-applet-status-area = 通知匣盤 -cosmic-applet-status-area-keywords = COSMIC;工具程式;应用;應用程式;指示器;通知;匣盤;狀態; +cosmic-app-list = 應用程式托盤 +cosmic-applet-status-area = 通知托盤 +cosmic-applet-status-area-keywords = COSMIC;小程式;應用程式;指示器;通知;托盤;狀態; cosmic-applet-status-area-comment = 可能在面板上顯示的應用指示器 -cosmic-panel-app-button-keywords = COSMIC;工具程式;應用;應用程式;庫;匣盤; +cosmic-panel-app-button-keywords = COSMIC;小程式;應用;應用程式;庫;托盤; cosmic-panel-workspaces-button = 工作區按鈕 cosmic-applet-tiling-comment = 管理啟用提示、當前和每個工作區自動視窗平鋪 -cosmic-applet-tiling-keywords = COSMIC;工具程式;平鋪;提示;工作區; +cosmic-applet-tiling-keywords = COSMIC;小程式;平鋪;提示;工作區; cosmic-applet-time = 日期、時間與行事曆 -cosmic-applet-time-comment = 在面板上顯示時間以及彈出日曆 -cosmic-applet-time-keywords = COSMIC;工具程式;日期;時間;日曆;行事曆; +cosmic-applet-time-comment = 在面板上顯示目前時間,並附帶彈出式日曆視窗 +cosmic-applet-time-keywords = COSMIC;小程式;日期;時間;日曆;行事曆; cosmic-applet-workspaces = 工作區編號 cosmic-applet-workspaces-comment = 在面板上切換帶有編號的工作區 -cosmic-applet-workspaces-keywords = COSMIC;工具程式;工作區; +cosmic-applet-workspaces-keywords = COSMIC;小程式;工作區; cosmic-panel-app-button = 應用程式庫按鈕 cosmic-panel-app-button-comment = 啟動應用程式庫來啟動已安裝的應用程式 cosmic-panel-launcher-button = 啟動器按鈕 cosmic-panel-launcher-button-comment = 開啟啟動器以搜尋應用程式以及執行命令 -cosmic-panel-launcher-button-keywords = COSMIC;工具程式;啟動器; +cosmic-panel-launcher-button-keywords = COSMIC;小程式;啟動器; cosmic-applet-notifications-comment = 管理通知和勿擾模式 cosmic-applet-a11y = 無障礙 cosmic-applet-bluetooth-comment = 管理藍牙裝置 @@ -35,11 +35,11 @@ cosmic-applet-notifications = 通知中心 cosmic-applet-network-comment = 管理網路連接 cosmic-applet-minimize-comment = 管理最小化的視窗 cosmic-applet-bluetooth = 藍牙 -cosmic-applet-audio = 音響 +cosmic-applet-audio = 音效 cosmic-applet-minimize = 最小化視窗 cosmic-app-list-comment = 啟動釘板的應用程式並管理開啟視窗 -cosmic-app-list-keywords = COSMIC;工具程式;應用程式;匣盤;列表;任務;列; -cosmic-applet-a11y-comment = 從面板調設無障礙設定 +cosmic-app-list-keywords = COSMIC;小程式;應用程式;匣盤;列表;任務;列; +cosmic-applet-a11y-comment = 從面板設定無障礙功能 cosmic-applet-audio-comment = 音訊裝置選擇、音量控制及 MPRIS 媒體控制 cosmic-applet-input-sources = 輸入來源 cosmic-applet-input-sources-comment = 切換各輸入來源 @@ -48,4 +48,4 @@ cosmic-applet-power = 使用者工作階段 cosmic-applet-power-comment = 鎖定畫面、登出、休眠、重新啟動及關機 cosmic-applet-tiling = 平鋪 cosmic-panel-workspaces-button-comment = 啟動工作區總覽以管理和切換工作區 -cosmic-panel-workspaces-button-keywords = COSMIC;工具程式;工作區;總覽; +cosmic-panel-workspaces-button-keywords = COSMIC;小程式;工作區;總覽; From a9f15d67a23a43f5fe389dc50cec1b7c0e1a9c12 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Wed, 29 Jul 2026 11:59:32 +0200 Subject: [PATCH 78/84] fix: handle wheel events before cursor bounds check in MouseArea Move the on_mouse_wheel handler before the cursor.is_over(bounds) guard. The panel's nested compositor only routes axis events to the applet surface when the pointer is over it, making the bounds check redundant for scroll events. This fixes scroll-to-adjust-volume not working on the audio applet after a fresh login, when the cursor coordinates sent by the panel may not match the applet's surface-local coordinate space. --- cosmic-applet-audio/src/mouse_area.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/cosmic-applet-audio/src/mouse_area.rs b/cosmic-applet-audio/src/mouse_area.rs index 38306e45..94efb4f7 100644 --- a/cosmic-applet-audio/src/mouse_area.rs +++ b/cosmic-applet-audio/src/mouse_area.rs @@ -307,6 +307,19 @@ fn update( shell: &mut Shell<'_, Message>, state: &mut State, ) { + // Handle wheel events before the bounds check. The panel's nested + // compositor routes axis events to this surface only when the pointer + // is over the applet, but the cursor coordinates it sends may be in + // panel-local space rather than surface-local space. This makes + // cursor.is_over() unreliable for scroll events. + if let Event::Mouse(mouse::Event::WheelScrolled { delta }) = event { + if let Some(message) = widget.on_mouse_wheel.as_ref() { + shell.publish((message)(*delta)); + shell.capture_event(); + return; + } + } + if !cursor.is_over(layout.bounds()) { if !state.is_out_of_bounds { if widget @@ -416,12 +429,4 @@ fn update( } } } - - if let Some(message) = widget.on_mouse_wheel.as_ref() { - if let Event::Mouse(mouse::Event::WheelScrolled { delta }) = event { - shell.publish((message)(*delta)); - shell.capture_event(); - return; - } - } } From 5b838a6795a2edc60367564968660011a369787b Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Fri, 31 Jul 2026 09:33:16 +0200 Subject: [PATCH 79/84] fix(audio): initialize volume ceilings at startup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit max_sink_volume and max_source_volume were only computed in the TogglePopup handler, so they kept their Default value of 0 until the popup had been opened once. The scroll-to-adjust handler clamps against max_sink_volume, which meant every wheel event resolved to SetSinkVolume(0) until the user had clicked the applet icon: scrolling up did nothing and scrolling down muted the sink. Extract refresh_volume_limits() and call it from init() as well as from TogglePopup, so the popup still picks up amplification config changes made during the session. This is the actual cause of "scroll does not adjust volume until the applet is clicked once" — the wheel events were reaching the widget all along, which is why a single click made scrolling work on plain hover from then on. Co-Authored-By: Claude Opus 5 (1M context) --- cosmic-applet-audio/src/lib.rs | 41 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index bd62dfbd..7647100d 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -111,6 +111,21 @@ impl Audio { "microphone-sensitivity-high-symbolic" } } + + /// Refresh the volume ceilings and slider breakpoints from the + /// amplification config. + /// + /// Must run at startup, not only when the popup opens: the + /// scroll-to-adjust handler clamps against `max_sink_volume`, which + /// `Default` leaves at 0. Until the popup had been opened once, every + /// wheel event therefore resolved to `SetSinkVolume(0)`. + fn refresh_volume_limits(&mut self) { + (self.max_sink_volume, self.sink_breakpoints) = + if amplification_sink() { (150, &[100][..]) } else { (100, &[][..]) }; + + (self.max_source_volume, self.source_breakpoints) = + if amplification_source() { (150, &[100][..]) } else { (100, &[][..]) }; + } } #[derive(Debug, PartialEq, Eq, Default)] @@ -256,13 +271,13 @@ impl cosmic::Application for Audio { const APP_ID: &'static str = "com.system76.CosmicAppletAudio"; fn init(core: cosmic::app::Core, _flags: ()) -> (Self, app::Task) { - ( - Self { - core, - ..Default::default() - }, - Task::none(), - ) + let mut app = Self { + core, + ..Default::default() + }; + app.refresh_volume_limits(); + + (app, Task::none()) } fn core(&self) -> &cosmic::app::Core { @@ -295,17 +310,7 @@ impl cosmic::Application for Audio { let new_id = window::Id::unique(); self.popup.replace(new_id); - (self.max_sink_volume, self.sink_breakpoints) = if amplification_sink() { - (150, &[100][..]) - } else { - (100, &[][..]) - }; - - (self.max_source_volume, self.source_breakpoints) = if amplification_source() { - (150, &[100][..]) - } else { - (100, &[][..]) - }; + self.refresh_volume_limits(); let mut popup_settings = self.core.applet.get_popup_settings( self.core.main_window_id().unwrap(), From fb33b39cecf719e32926947ca46c2f7fe1351285 Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Fri, 31 Jul 2026 09:47:24 +0200 Subject: [PATCH 80/84] fix(network): align applet with cosmic-settings 1.3 nmrs backend cosmic-settings 1.3 replaced its custom NetworkManager backend with nmrs and removed subscriptions/network-manager, which cosmic-applet-network still referenced by path. That broke manifest resolution for the whole workspace, so no applet package could be built at all. Take upstream's post-migration cosmic-applet-network wholesale (upstream e318f0d4 "migrate NetworkManager flow to nmrs 3.4" plus the nine network fixes that followed it). None of our local commits touched this crate's sources, only its manifest, so the only local adjustments to reapply are the libcosmic -> cosmic workspace alias and the 1.3.0 version. This also drops the cosmic-dbus-networkmanager dependency, and with it the last user of the now-dead cosmic-settings-network-manager and cosmic-settings-sound patch entries, which are removed from the workspace manifest. Co-Authored-By: Claude Opus 5 (1M context) --- Cargo.lock | 465 +++------- Cargo.toml | 3 - cosmic-applet-network/Cargo.toml | 10 +- cosmic-applet-network/src/app.rs | 1352 +++++++++++++++++----------- cosmic-applet-network/src/lib.rs | 1 - cosmic-applet-network/src/utils.rs | 18 - 6 files changed, 923 insertions(+), 926 deletions(-) delete mode 100644 cosmic-applet-network/src/utils.rs diff --git a/Cargo.lock b/Cargo.lock index 5ca8bed1..dc5deede 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -107,17 +107,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "ahash" version = "0.8.12" @@ -165,7 +154,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.1", + "bitflags 2.13.1", "cc", "jni", "libc", @@ -532,9 +521,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.1" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" dependencies = [ "serde_core", ] @@ -554,15 +543,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array", -] - [[package]] name = "block2" version = "0.5.1" @@ -722,7 +702,7 @@ version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "polling", "rustix 1.1.4", "slab", @@ -741,15 +721,6 @@ dependencies = [ "wayland-client", ] -[[package]] -name = "cbc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" -dependencies = [ - "cipher", -] - [[package]] name = "cc" version = "1.2.62" @@ -786,16 +757,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "clipboard-win" version = "5.4.1" @@ -951,7 +912,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "core-foundation 0.10.1", "libc", ] @@ -967,7 +928,7 @@ dependencies = [ [[package]] name = "cosmic-app-list" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-app-list-config", @@ -994,7 +955,7 @@ dependencies = [ [[package]] name = "cosmic-app-list-config" -version = "1.0.15" +version = "1.3.0" dependencies = [ "libcosmic-yoda", "serde", @@ -1002,7 +963,7 @@ dependencies = [ [[package]] name = "cosmic-applet-a11y" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -1021,7 +982,7 @@ dependencies = [ [[package]] name = "cosmic-applet-audio" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-settings-audio-client", "futures", @@ -1044,7 +1005,7 @@ dependencies = [ [[package]] name = "cosmic-applet-battery" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-applets-config", @@ -1069,7 +1030,7 @@ dependencies = [ [[package]] name = "cosmic-applet-bluetooth" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "bluer", @@ -1088,7 +1049,7 @@ dependencies = [ [[package]] name = "cosmic-applet-input-sources" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-comp-config", "i18n-embed", @@ -1104,7 +1065,7 @@ dependencies = [ [[package]] name = "cosmic-applet-minimize" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "i18n-embed", @@ -1122,12 +1083,9 @@ dependencies = [ [[package]] name = "cosmic-applet-network" -version = "1.0.15" +version = "1.3.0" dependencies = [ - "anyhow", "async-fn-stream", - "cosmic-dbus-networkmanager", - "cosmic-settings-network-manager-subscription", "futures", "futures-util", "i18n-embed", @@ -1143,12 +1101,11 @@ dependencies = [ "tracing-log", "tracing-subscriber", "uuid", - "zbus", ] [[package]] name = "cosmic-applet-notifications" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-notifications-config", @@ -1168,7 +1125,7 @@ dependencies = [ [[package]] name = "cosmic-applet-power" -version = "1.0.15" +version = "1.3.0" dependencies = [ "i18n-embed", "i18n-embed-fl", @@ -1185,7 +1142,7 @@ dependencies = [ [[package]] name = "cosmic-applet-status-area" -version = "1.0.15" +version = "1.3.0" dependencies = [ "futures", "libcosmic-yoda", @@ -1200,7 +1157,7 @@ dependencies = [ [[package]] name = "cosmic-applet-tiling" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -1219,7 +1176,7 @@ dependencies = [ [[package]] name = "cosmic-applet-time" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-applets-config", "i18n-embed", @@ -1239,7 +1196,7 @@ dependencies = [ [[package]] name = "cosmic-applet-workspaces" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -1256,7 +1213,7 @@ dependencies = [ [[package]] name = "cosmic-applets" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-app-list", "cosmic-applet-a11y", @@ -1282,7 +1239,7 @@ dependencies = [ [[package]] name = "cosmic-applets-config" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-config", "serde", @@ -1292,7 +1249,7 @@ dependencies = [ name = "cosmic-client-toolkit" version = "0.2.0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "cosmic-protocols", "libc", "smithay-client-toolkit", @@ -1340,22 +1297,11 @@ dependencies = [ [[package]] name = "cosmic-dbus-a11y" version = "0.1.0" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] -[[package]] -name = "cosmic-dbus-networkmanager" -version = "0.1.0" -dependencies = [ - "bitflags 2.11.1", - "derive_builder", - "jiff", - "procfs", - "zbus", - "zvariant", -] - [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" @@ -1392,7 +1338,7 @@ dependencies = [ [[package]] name = "cosmic-panel-button" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-config", "libcosmic-yoda", @@ -1405,7 +1351,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" -version = "0.1.0" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-config", @@ -1420,7 +1366,7 @@ dependencies = [ name = "cosmic-protocols" version = "0.2.0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -1510,24 +1456,6 @@ dependencies = [ "zbus", ] -[[package]] -name = "cosmic-settings-network-manager-subscription" -version = "1.0.7" -dependencies = [ - "bitflags 2.11.1", - "cosmic-dbus-networkmanager", - "futures", - "iced_futures", - "itertools", - "nm-secret-agent-manager", - "secret-service", - "secure-string", - "thiserror 2.0.18", - "tokio", - "tracing", - "zbus", -] - [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" @@ -1545,7 +1473,7 @@ dependencies = [ name = "cosmic-text" version = "0.19.0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "fontdb", "harfrust", "linebender_resource_handle", @@ -1831,37 +1759,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "derive_builder" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947" -dependencies = [ - "derive_builder_macro", -] - -[[package]] -name = "derive_builder_core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" -dependencies = [ - "darling 0.20.11", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_builder_macro" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" -dependencies = [ - "derive_builder_core", - "syn", -] - [[package]] name = "derive_setters" version = "0.1.9" @@ -1893,7 +1790,6 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", - "subtle", ] [[package]] @@ -1923,7 +1819,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -1953,7 +1849,7 @@ dependencies = [ name = "dnd" version = "0.1.0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "mime 0.1.0", "raw-window-handle", "smithay-client-toolkit", @@ -1985,7 +1881,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "drm-ffi", "drm-fourcc", @@ -2461,9 +2357,9 @@ checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" @@ -2616,7 +2512,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -2627,7 +2523,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] @@ -2664,7 +2560,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "core_maths", "read-fonts", @@ -2750,24 +2646,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - [[package]] name = "i18n-config" version = "0.4.8" @@ -2891,7 +2769,7 @@ dependencies = [ name = "iced_core" version = "0.14.0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytes", "cosmic-client-toolkit", "dnd", @@ -2937,7 +2815,7 @@ dependencies = [ name = "iced_graphics" version = "0.14.0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "cosmic-text", "half", @@ -3006,7 +2884,7 @@ dependencies = [ name = "iced_wgpu" version = "0.14.0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "cosmic-client-toolkit", "cryoglyph", @@ -3578,7 +3456,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "inotify-sys", "libc", ] @@ -3592,23 +3470,13 @@ dependencies = [ "libc", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "block-padding", - "generic-array", -] - [[package]] name = "input" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9793345a65d71317763a33066b5d8351f8760dde8d4930fe9e39b5f14a7959d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "input-sys", "libc", "log", @@ -3657,15 +3525,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.18" @@ -3814,7 +3673,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "serde", ] @@ -3860,7 +3719,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "libc", ] @@ -3989,7 +3848,7 @@ version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "libc", "plain", "redox_syscall 0.8.1", @@ -4074,9 +3933,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.29" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" [[package]] name = "logind-zbus" @@ -4209,7 +4068,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block", "core-graphics-types 0.2.0", "foreign-types", @@ -4289,7 +4148,7 @@ checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" dependencies = [ "arrayvec", "bit-set", - "bitflags 2.11.1", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "codespan-reporting", @@ -4313,7 +4172,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -4343,28 +4202,21 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", ] -[[package]] -name = "nm-secret-agent-manager" -version = "0.1.0" -dependencies = [ - "zbus", -] - [[package]] name = "nmrs" -version = "3.1.4" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9493a0dfbe50783b53ef52ec8ddb8d1f85fd45098be8210205236ff0f43bb7b" +checksum = "33e42c05118e18f29f55eefa2fbfd98a06b0c7a1a829bdb0f328137d358c6013" dependencies = [ "async-trait", "base64", - "bitflags 2.11.1", + "bitflags 2.13.1", "futures", "futures-timer", "log", @@ -4391,7 +4243,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "fsevent-sys", "inotify", "kqueue", @@ -4409,7 +4261,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] @@ -4421,20 +4273,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.4.6" @@ -4445,15 +4283,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - [[package]] name = "num-conv" version = "0.2.2" @@ -4480,17 +4309,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" version = "0.4.2" @@ -4585,7 +4403,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4601,7 +4419,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4614,7 +4432,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4626,7 +4444,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.6.2", "dispatch2", "objc2 0.6.4", @@ -4638,7 +4456,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "libc", "objc2-core-foundation", ] @@ -4661,7 +4479,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "objc2-core-foundation", "objc2-core-graphics", ] @@ -4678,7 +4496,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4690,7 +4508,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.6.2", "objc2 0.6.4", "objc2-core-foundation", @@ -4702,7 +4520,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4714,7 +4532,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -4727,7 +4545,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -5049,7 +4867,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "crc32fast", "fdeflate", "flate2", @@ -5186,27 +5004,6 @@ dependencies = [ "yansi", ] -[[package]] -name = "procfs" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" -dependencies = [ - "bitflags 2.11.1", - "procfs-core", - "rustix 1.1.4", -] - -[[package]] -name = "procfs-core" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6401bf7b6af22f78b563665d15a22e9aef27775b79b149a66ca022468a4e405" -dependencies = [ - "bitflags 2.11.1", - "hex", -] - [[package]] name = "profiling" version = "1.0.18" @@ -5350,7 +5147,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c07d0d6d291e3a951bd847b1cd4af32fc6243d64116cf7702838c02797688b7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "libredox", ] @@ -5360,7 +5157,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] @@ -5369,7 +5166,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b44b894f2a6e36457d665d1e08c3866add6ed5e70050c1b4ba8a8ddedb02ce7" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", ] [[package]] @@ -5495,7 +5292,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db09040cc89e461f1a265139777a2bde7f8d8c67c4936f700c63ce3e2904d468" dependencies = [ "base64", - "bitflags 2.11.1", + "bitflags 2.13.1", "serde", "serde_derive", "unicode-ident", @@ -5507,7 +5304,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "once_cell", "serde", "serde_derive", @@ -5582,7 +5379,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -5595,7 +5392,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -5614,7 +5411,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "core_maths", "log", @@ -5690,25 +5487,6 @@ dependencies = [ "tiny-skia", ] -[[package]] -name = "secret-service" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a62d7f86047af0077255a29494136b9aaaf697c76ff70b8e49cded4e2623c14" -dependencies = [ - "aes", - "cbc", - "futures-util", - "generic-array", - "getrandom 0.2.17", - "hkdf", - "num", - "once_cell", - "serde", - "sha2", - "zbus", -] - [[package]] name = "secure-string" version = "0.3.0" @@ -5946,7 +5724,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "calloop", "calloop-wayland-source", @@ -6031,7 +5809,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.1", + "bitflags 2.13.1", ] [[package]] @@ -6083,12 +5861,6 @@ dependencies = [ "syn", ] -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - [[package]] name = "svg_fmt" version = "0.4.5" @@ -6650,6 +6422,7 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "upower_dbus" version = "0.3.2" +source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "serde", "serde_repr", @@ -6716,9 +6489,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.23.1" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -6856,7 +6629,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "hashbrown 0.15.5", "indexmap 2.14.0", "semver", @@ -6896,7 +6669,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -6908,7 +6681,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "cursor-icon", "wayland-backend", ] @@ -6930,7 +6703,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -6943,7 +6716,7 @@ version = "20250721.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6956,7 +6729,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6969,7 +6742,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -6982,7 +6755,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7007,7 +6780,7 @@ version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc1846eb04c49182e04f4a099e2a830a2b745610bbc1d61246e206f29c7000a0" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "downcast-rs", "rustix 1.1.4", "wayland-backend", @@ -7059,7 +6832,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" dependencies = [ "arrayvec", - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "cfg-if", "cfg_aliases", @@ -7091,7 +6864,7 @@ dependencies = [ "arrayvec", "bit-set", "bit-vec", - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "cfg_aliases", "document-features", @@ -7151,7 +6924,7 @@ dependencies = [ "arrayvec", "ash", "bit-set", - "bitflags 2.11.1", + "bitflags 2.13.1", "block", "bytemuck", "cfg-if", @@ -7195,7 +6968,7 @@ version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "bytemuck", "js-sys", "log", @@ -7680,7 +7453,7 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" name = "winit" version = "0.31.0-beta.2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "cfg_aliases", "cursor-icon", "dpi", @@ -7705,7 +7478,7 @@ name = "winit-android" version = "0.31.0-beta.2" dependencies = [ "android-activity", - "bitflags 2.11.1", + "bitflags 2.13.1", "dpi", "ndk", "raw-window-handle", @@ -7718,7 +7491,7 @@ dependencies = [ name = "winit-appkit" version = "0.31.0-beta.2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.6.2", "dispatch2", "dpi", @@ -7752,7 +7525,7 @@ dependencies = [ name = "winit-core" version = "0.31.0-beta.2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "cursor-icon", "dpi", "keyboard-types", @@ -7765,7 +7538,7 @@ dependencies = [ name = "winit-orbital" version = "0.31.0-beta.2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "dpi", "libredox", "orbclient", @@ -7780,7 +7553,7 @@ dependencies = [ name = "winit-uikit" version = "0.31.0-beta.2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "block2 0.6.2", "dispatch2", "dpi", @@ -7800,7 +7573,7 @@ name = "winit-wayland" version = "0.31.0-beta.2" dependencies = [ "ahash", - "bitflags 2.11.1", + "bitflags 2.13.1", "calloop", "cursor-icon", "dpi", @@ -7825,7 +7598,7 @@ name = "winit-web" version = "0.31.0-beta.2" dependencies = [ "atomic-waker", - "bitflags 2.11.1", + "bitflags 2.13.1", "concurrent-queue", "cursor-icon", "dpi", @@ -7845,7 +7618,7 @@ dependencies = [ name = "winit-win32" version = "0.31.0-beta.2" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "cursor-icon", "dpi", "raw-window-handle", @@ -7929,7 +7702,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.1", + "bitflags 2.13.1", "indexmap 2.14.0", "log", "serde", @@ -7988,7 +7761,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" -version = "0.1.0" +version = "1.3.0" dependencies = [ "serde", "wayland-protocols-wlr", @@ -8055,7 +7828,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.1", + "bitflags 2.13.1", "dlib", "log", "once_cell", @@ -8135,9 +7908,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.15.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1" +checksum = "fe18fb60dc696039e738717b76eaea21e7a4489bbb1885020b43c94236d7e98a" dependencies = [ "async-broadcast", "async-executor", @@ -8195,9 +7968,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.15.0" +version = "5.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff" +checksum = "fe96480bed92df2b442a1a30df364e12d08eed03aeb061f2b8dc6afb2be91119" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8210,9 +7983,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", "winnow", @@ -8424,9 +8197,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.11.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" +checksum = "bee2a0bcd2a907786a456fff45aaaaf54c9ba5f50b71ae9ec1a4edd200c94911" dependencies = [ "endi", "enumflags2", @@ -8439,9 +8212,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.11.0" +version = "5.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" +checksum = "38a708216a18780796770bfe3f4739c7c83a3e8f789b755534bbbc06e4e23e12" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -8452,9 +8225,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.3.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691" +checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" dependencies = [ "proc-macro2", "quote", @@ -8467,10 +8240,6 @@ dependencies = [ name = "cosmic-settings-airplane-mode-subscription" version = "1.0.7" -[[patch.unused]] -name = "cosmic-settings-sound-subscription" -version = "1.0.7" - [[patch.unused]] name = "winit-x11" version = "0.31.0-beta.2" diff --git a/Cargo.toml b/Cargo.toml index 6f673cc2..ccbe504a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -118,13 +118,10 @@ cosmic-settings-a11y-manager-subscription = { path = "/home/lionel/Projets/COSMI cosmic-settings-accessibility-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/accessibility" } cosmic-settings-airplane-mode-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/airplane-mode" } cosmic-settings-daemon-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/settings-daemon" } -cosmic-settings-network-manager-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/network-manager" } -cosmic-settings-sound-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/sound" } cosmic-settings-upower-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/upower" } [patch."https://github.com/pop-os/cosmic-settings/"] cosmic-settings-airplane-mode-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/airplane-mode" } -cosmic-settings-network-manager-subscription = { path = "/home/lionel/Projets/COSMIC/cosmic-settings/subscriptions/network-manager" } [patch."https://github.com/pop-os/cosmic-text.git"] cosmic-text = { path = "../cosmic-text" } diff --git a/cosmic-applet-network/Cargo.toml b/cosmic-applet-network/Cargo.toml index 034cfb79..a41dc80f 100644 --- a/cosmic-applet-network/Cargo.toml +++ b/cosmic-applet-network/Cargo.toml @@ -5,9 +5,7 @@ edition = "2024" license = "GPL-3.0-or-later" [dependencies] -anyhow.workspace = true async-fn-stream = "0.3" -cosmic-dbus-networkmanager = { path = "../../dbus-settings-bindings/networkmanager" } futures.workspace = true futures-util.workspace = true i18n-embed-fl.workspace = true @@ -25,13 +23,7 @@ tokio.workspace = true tracing-log.workspace = true tracing-subscriber.workspace = true tracing.workspace = true -zbus.workspace = true indexmap = "2.13.0" secure-string = "0.3.0" uuid = { version = "1.21.0", features = ["v4"] } -nmrs = "3.1.3" - - - -[dependencies.cosmic-settings-network-manager-subscription] -path = "../../cosmic-settings/subscriptions/network-manager" +nmrs = "3.4.0" diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 0b6dbe24..b5f12bfa 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -1,13 +1,7 @@ -use anyhow::Context; -use cosmic_settings_network_manager_subscription::{ - self as network_manager, NetworkManagerState, UUID, - available_wifi::{AccessPoint, NetworkType}, - current_networks::ActiveConnectionInfo, - hw_address::HwAddress, -}; use indexmap::IndexMap; use nmrs::{ - NetworkManager as NmrsManager, SettingsSummary, + ActiveConnection, ActiveConnectionState, ConnectType, ConnectivityState, EapOptions, + NetworkEvent, NetworkManager as NmrsManager, NetworkSnapshot, WifiSecurity, agent::{SecretAgent, SecretAgentCapabilities, SecretRequest, SecretResponder, SecretSetting}, }; use rustc_hash::FxHashSet; @@ -15,11 +9,13 @@ use secure_string::SecureString; use std::{ borrow::Cow, collections::{BTreeMap, HashMap}, + fmt, + str::FromStr, sync::{Arc, LazyLock}, }; use cosmic::{ - Apply, Element, Task, app, + Element, Task, app, applet::{ menu_button, menu_control_padding, padded_control, token::subscription::{TokenRequest, TokenUpdate, activation_token_subscription}, @@ -29,7 +25,7 @@ use cosmic::{ iced::core::window, iced::{ Alignment, Length, Subscription, - platform_specific::shell::wayland::commands::popup::{destroy_popup, get_popup}, + platform_specific::shell::wayland::commands::popup::destroy_popup, }, surface, theme, widget::{ @@ -38,12 +34,12 @@ use cosmic::{ indeterminate_circular, row, scrollable, secure_input, text, text_input, toggler, }, }; -use cosmic_dbus_networkmanager::interface::enums::{ - ActiveConnectionState, DeviceState, NmConnectivityState, -}; -use futures::{StreamExt, lock::Mutex as AsyncMutex}; -use zbus::Connection; +use futures::{ + StreamExt, + channel::mpsc::{UnboundedReceiver, UnboundedSender, unbounded}, + lock::Mutex as AsyncMutex, +}; use crate::{config, fl}; @@ -64,17 +60,6 @@ enum NewConnectionState { Failure(AccessPoint), } -impl NewConnectionState { - pub fn ssid(&self) -> &str { - &match self { - Self::EnterPassword { access_point, .. } => access_point, - Self::Waiting(ap) => ap, - Self::Failure(ap) => ap, - } - .ssid - } -} - impl From for AccessPoint { fn from(connection_state: NewConnectionState) -> Self { match connection_state { @@ -87,13 +72,189 @@ impl From for AccessPoint { pub static SECURE_INPUT_WIFI: LazyLock = LazyLock::new(Id::unique); +type Uuid = Arc; +type Ssid = Arc; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum NetworkType { + Open, + Password, + Eap, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum DeviceState { + Unknown, + Unmanaged, + Unavailable, + Disconnected, + NeedAuth, + Activated, + Failed, + Other, +} + +impl From<&nmrs::DeviceState> for DeviceState { + fn from(state: &nmrs::DeviceState) -> Self { + match state { + nmrs::DeviceState::Unmanaged => Self::Unmanaged, + nmrs::DeviceState::Unavailable => Self::Unavailable, + nmrs::DeviceState::Disconnected => Self::Disconnected, + nmrs::DeviceState::NeedAuth => Self::NeedAuth, + nmrs::DeviceState::Activated => Self::Activated, + nmrs::DeviceState::Failed => Self::Failed, + nmrs::DeviceState::Other(_) => Self::Unknown, + _ => Self::Other, + } + } +} + +#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct HwAddress([u8; 6]); + +impl HwAddress { + fn as_string(self) -> String { + self.0 + .iter() + .map(|byte| format!("{byte:02X}")) + .collect::>() + .join(":") + } +} + +impl FromStr for HwAddress { + type Err = (); + + fn from_str(value: &str) -> Result { + let mut bytes = [0; 6]; + let mut parts = value.split(':'); + for byte in &mut bytes { + let Some(part) = parts.next() else { + return Err(()); + }; + *byte = u8::from_str_radix(part, 16).map_err(|_| ())?; + } + if parts.next().is_some() { + return Err(()); + } + Ok(Self(bytes)) + } +} + +impl fmt::Display for HwAddress { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(&self.as_string()) + } +} + +fn same_access_point(left: &AccessPoint, right: &AccessPoint) -> bool { + left.ssid == right.ssid + && left.hw_address == right.hw_address + && left.interface == right.interface +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct AccessPoint { + pub ssid: Ssid, + pub network_type: NetworkType, + pub hw_address: HwAddress, + pub strength: u8, + pub state: DeviceState, + pub working: bool, + pub wps_push: bool, + pub interface: Option, +} + +#[derive(Debug, Clone)] +pub enum ActiveConnectionInfo { + Wired { + name: String, + hw_address: String, + speed: u32, + ip4_address: Option, + ip6_address: Option, + }, + WiFi { + name: String, + ip4_address: Option, + ip6_address: Option, + state: ActiveConnectionState, + strength: u8, + hw_address: String, + }, + Vpn { + name: String, + ip4_address: Option, + ip6_address: Option, + }, +} + +impl ActiveConnectionInfo { + fn name(&self) -> &str { + match self { + Self::Wired { name, .. } | Self::WiFi { name, .. } | Self::Vpn { name, .. } => name, + } + } +} + +#[derive(Debug, Clone)] +pub struct NetworkManagerState { + pub wifi_enabled: bool, + pub airplane_mode: bool, + pub connectivity: ConnectivityState, + pub active_conns: Vec, + pub known_access_points: Vec, + pub wireless_access_points: Vec, +} + +impl Default for NetworkManagerState { + fn default() -> Self { + Self { + wifi_enabled: true, + airplane_mode: false, + connectivity: ConnectivityState::Unknown, + active_conns: Vec::new(), + known_access_points: Vec::new(), + wireless_access_points: Vec::new(), + } + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum DeviceType { + Wifi, +} + +#[derive(Clone, Debug)] +pub struct DeviceConnection { + pub id: String, +} + +#[derive(Clone, Debug)] +pub struct DeviceInfo { + pub interface: String, + pub device_type: DeviceType, + pub active_connection: Option<(DeviceConnection,)>, + pub known_connections: Vec, +} + +#[derive(Debug, Clone)] +pub struct AppletSnapshot { + pub state: NetworkManagerState, + pub devices: Vec, + pub known_vpns: IndexMap, + pub ssid_to_uuid: BTreeMap, Box>, + pub captive_portal_url: Option, +} + #[derive(Default, Debug, Clone)] pub struct MyNetworkState { - pub known_vpns: IndexMap, + pub known_vpns: IndexMap, pub ssid_to_uuid: BTreeMap, Box>, - pub devices: Vec>, + pub devices: Vec>, pub nm_state: NetworkManagerState, pub requested_vpn: Option, + pub pending_vpn: Option, } /// Shared, take-once handle to an `nmrs` [`SecretResponder`]. Cloned freely @@ -113,6 +274,18 @@ pub struct RequestedVpn { secret_keys: Vec, } +#[derive(Debug, Clone)] +pub struct PendingVpn { + uuid: Arc, + action: PendingVpnAction, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum PendingVpnAction { + Activate, + Deactivate, +} + #[derive(Clone, Debug)] pub enum ConnectionSettings { Vpn { id: String }, @@ -148,21 +321,19 @@ struct CosmicNetworkApplet { popup: Option, // NM state - nm_sender: Option>, - nm_task: Option>, nm_state: MyNetworkState, // UI state show_visible_networks: bool, show_available_vpns: bool, new_connection: Option, - conn: Option, toggle_wifi_ctr: u128, token_tx: Option>, + secret_agent_reregister_tx: Option>, failed_known_ssids: FxHashSet>, /// When defined, displays connections for the specific device. - active_device: Option>, + active_device: Option>, } fn wifi_icon(strength: u8) -> &'static str { @@ -264,6 +435,11 @@ fn vpn_section<'a>( let is_active = nm_state.nm_state.active_conns.iter().any( |conn| matches!(conn, ActiveConnectionInfo::Vpn { name, .. } if name == id), ); + let pending_action = nm_state + .pending_vpn + .as_ref() + .filter(|pending| pending.uuid.as_ref() == uuid.as_ref()) + .map(|pending| pending.action); let mut btn_content = vec![ icon::from_name("network-vpn-symbolic") @@ -276,6 +452,9 @@ fn vpn_section<'a>( if is_active { btn_content.push(text::body(fl!("connected")).align_x(Alignment::End).into()); } + if pending_action.is_some() { + btn_content.push(indeterminate_circular().size(24.0).into()); + } let mut btn = menu_button( row::with_children(btn_content) @@ -283,7 +462,9 @@ fn vpn_section<'a>( .spacing(8), ); - btn = if is_active { + btn = if pending_action.is_some() { + btn + } else if is_active { btn.on_press(Message::DeactivateVpn(uuid.clone())) } else { btn.on_press(Message::ActivateVpn(uuid.clone())) @@ -297,7 +478,341 @@ fn vpn_section<'a>( vpn_col } +fn ip_address_elements<'a>( + ip4_address: &Option, + _ip6_address: &Option, +) -> Vec> { + let mut elements = Vec::with_capacity(1); + if let Some(addr) = ip4_address { + // Strip the subnet mask (e.g. "10.0.0.2/24" -> "10.0.0.2"); the drop-down + // only needs the address itself for glancing at the host on a local network. + let addr = addr.split('/').next().unwrap_or(addr.as_str()); + elements.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); + } + elements +} + +fn network_type(security: nmrs::SecurityFeatures) -> NetworkType { + match security.preferred_connect_type() { + ConnectType::Open | ConnectType::Owe => NetworkType::Open, + ConnectType::Eap => NetworkType::Eap, + ConnectType::Psk | ConnectType::Sae => NetworkType::Password, + _ => NetworkType::Password, + } +} + +fn wifi_security( + access_point: &AccessPoint, + identity: Option, + password: Option, +) -> WifiSecurity { + match access_point.network_type { + NetworkType::Open => WifiSecurity::Open, + NetworkType::Eap => WifiSecurity::WpaEap { + opts: EapOptions::new( + identity.unwrap_or_default(), + password + .as_ref() + .map(|password| password.unsecure().to_owned()) + .unwrap_or_default(), + ), + }, + NetworkType::Password => WifiSecurity::WpaPsk { + psk: password + .as_ref() + .map(|password| password.unsecure().to_owned()) + .unwrap_or_default(), + }, + } +} + +fn connect_access_point_task( + access_point: AccessPoint, + identity: Option, + password: Option, +) -> Task> { + cosmic::task::future(async move { + let ssid = access_point.ssid.to_string(); + let interface = access_point.interface.clone(); + let bssid = access_point.hw_address.as_string(); + let security = wifi_security(&access_point, identity, password); + match NmrsManager::new().await { + Ok(nm) => { + match nm + .connect_to_bssid(&ssid, Some(&bssid), interface.as_deref(), security) + .await + { + Ok(()) => Message::ConnectionAttemptFinished { + access_point, + success: true, + error: None, + }, + Err(e) => Message::ConnectionAttemptFinished { + access_point, + success: false, + error: Some(e.to_string()), + }, + } + } + Err(e) => Message::Error(format!("nmrs init: {e}")), + } + }) + .map(cosmic::Action::App) +} + +fn snapshot_task() -> Task { + cosmic::task::future(async move { + let nm = match NmrsManager::new().await { + Ok(nm) => nm, + Err(e) => return Message::Error(format!("nmrs init: {e}")), + }; + + match nm.snapshot().await { + Ok(snapshot) => Message::Snapshot(snapshot_to_applet(snapshot)), + Err(e) => Message::Error(format!("snapshot: {e}")), + } + }) +} + +fn network_events_task() -> Task { + cosmic::Task::stream(async_fn_stream::fn_stream(|emitter| async move { + let nm = match NmrsManager::new().await { + Ok(nm) => nm, + Err(e) => { + let _ = emitter + .emit(Message::Error(format!("nmrs init: {e}"))) + .await; + return; + } + }; + let mut events = match nm.network_events().await { + Ok(events) => events, + Err(e) => { + let _ = emitter + .emit(Message::Error(format!("network events: {e}"))) + .await; + return; + } + }; + + while let Some(event) = events.next().await { + match event { + Ok(event) => { + let _ = emitter.emit(Message::NetworkEvent(event)).await; + } + Err(e) => { + let _ = emitter + .emit(Message::Error(format!("network event: {e}"))) + .await; + } + } + } + })) +} + +fn snapshot_to_applet(snapshot: NetworkSnapshot) -> AppletSnapshot { + let summary = snapshot.applet_summary(); + let mut known_vpns = IndexMap::new(); + for vpn in summary.saved_vpns.values() { + let uuid: Uuid = Arc::from(vpn.uuid.as_str()); + let entry = match vpn.kind { + Some(nmrs::VpnKind::WireGuard) => ConnectionSettings::Wireguard { id: vpn.id.clone() }, + _ => ConnectionSettings::Vpn { id: vpn.id.clone() }, + }; + known_vpns.insert(uuid, entry); + } + + let mut ssid_to_uuid = BTreeMap::new(); + for (ssid, profiles) in &summary.known_wifi { + if let Some(profile) = profiles.first() { + ssid_to_uuid.insert( + ssid.clone().into_boxed_str(), + profile.uuid.clone().into_boxed_str(), + ); + } + } + + let active_conns = snapshot + .active_connections + .iter() + .filter_map(|conn| match conn { + ActiveConnection::Wired(wired) => Some(ActiveConnectionInfo::Wired { + name: wired.id.clone(), + hw_address: wired.hw_address.clone().unwrap_or_default(), + speed: wired.speed_mbps.unwrap_or_default(), + ip4_address: wired.ip4_address.clone(), + ip6_address: wired.ip6_address.clone(), + }), + ActiveConnection::Wifi(wifi) + if known_vpns.values().any(|connection| { + matches!( + connection, + ConnectionSettings::Vpn { id } | ConnectionSettings::Wireguard { id } + if id == &wifi.ssid + ) + }) => + { + Some(ActiveConnectionInfo::Vpn { + name: wifi.ssid.clone(), + ip4_address: wifi.ip4_address.clone(), + ip6_address: wifi.ip6_address.clone(), + }) + } + ActiveConnection::Wifi(wifi) => Some(ActiveConnectionInfo::WiFi { + name: wifi.ssid.clone(), + ip4_address: wifi.ip4_address.clone(), + ip6_address: wifi.ip6_address.clone(), + state: wifi.state, + strength: wifi.strength.unwrap_or_default(), + hw_address: wifi.bssid.clone().unwrap_or_default(), + }), + ActiveConnection::Vpn(vpn) => Some(ActiveConnectionInfo::Vpn { + name: vpn.id.clone(), + ip4_address: vpn.ip4_address.clone(), + ip6_address: vpn.ip6_address.clone(), + }), + ActiveConnection::Other(_) | _ => None, + }) + .collect(); + + let mut wireless_access_points = summary + .wifi_groups + .iter() + .filter(|group| !group.ssid.is_empty() && !group.strongest.ssid_bytes.is_empty()) + .map(|group| { + let strongest = &group.strongest; + AccessPoint { + ssid: Arc::from(group.ssid.as_str()), + network_type: network_type(strongest.security), + hw_address: HwAddress::from_str(&strongest.bssid).unwrap_or_default(), + strength: strongest.strength, + state: DeviceState::from(&strongest.device_state), + working: false, + wps_push: strongest.security.wps, + interface: Some(group.interface.clone()), + } + }) + .collect::>(); + wireless_access_points.sort_by(|a, b| b.strength.cmp(&a.strength)); + + let known_access_points = summary + .wifi_groups + .iter() + .filter(|group| group.known || group.active) + .map(|group| { + let strongest = &group.strongest; + let device_state = DeviceState::from(&strongest.device_state); + AccessPoint { + ssid: Arc::from(group.ssid.as_str()), + network_type: network_type(strongest.security), + hw_address: HwAddress::from_str(&strongest.bssid).unwrap_or_default(), + strength: strongest.strength, + state: if group.active { + DeviceState::Activated + } else if matches!(device_state, DeviceState::Activated) { + DeviceState::Disconnected + } else { + device_state + }, + working: false, + wps_push: strongest.security.wps, + interface: Some(group.interface.clone()), + } + }) + .collect::>(); + + let devices = snapshot + .wifi_devices + .iter() + .map(|device| { + let known_connections = summary + .known_wifi + .iter() + .filter(|(ssid, _)| { + summary + .wifi_groups + .iter() + .any(|group| group.interface == device.interface && group.ssid == **ssid) + }) + .map(|(ssid, _)| DeviceConnection { id: ssid.clone() }) + .collect(); + DeviceInfo { + interface: device.interface.clone(), + device_type: DeviceType::Wifi, + active_connection: device + .active_ssid + .as_ref() + .map(|ssid| (DeviceConnection { id: ssid.clone() },)), + known_connections, + } + }) + .collect(); + + AppletSnapshot { + state: NetworkManagerState { + wifi_enabled: snapshot.wifi.enabled, + airplane_mode: summary.airplane_mode.is_airplane_mode(), + connectivity: summary.connectivity.state, + active_conns, + known_access_points, + wireless_access_points, + }, + devices, + known_vpns, + ssid_to_uuid, + captive_portal_url: summary.connectivity.captive_portal_url.clone(), + } +} + impl CosmicNetworkApplet { + fn apply_snapshot(&mut self, snapshot: AppletSnapshot) { + let previous_connectivity = self.nm_state.nm_state.connectivity; + self.nm_state.devices = snapshot.devices.into_iter().map(Arc::new).collect(); + self.nm_state.known_vpns = snapshot.known_vpns; + self.nm_state.ssid_to_uuid = snapshot.ssid_to_uuid; + self.update_nm_state(snapshot.state); + self.clear_completed_pending_vpn(); + + if !previous_connectivity.is_captive() && self.nm_state.nm_state.connectivity.is_captive() { + let mut browser = std::process::Command::new("xdg-open"); + browser.arg( + snapshot + .captive_portal_url + .as_deref() + .unwrap_or("http://204.pop-os.org/"), + ); + tokio::spawn(cosmic::process::spawn(browser)); + } + } + + fn clear_completed_pending_vpn(&mut self) { + let Some(pending) = self.nm_state.pending_vpn.as_ref() else { + return; + }; + let Some(connection) = self.nm_state.known_vpns.get(&pending.uuid) else { + self.nm_state.pending_vpn = None; + self.update_icon_name(); + return; + }; + let id = match connection { + ConnectionSettings::Vpn { id } | ConnectionSettings::Wireguard { id } => id, + }; + let is_active = self + .nm_state + .nm_state + .active_conns + .iter() + .any(|conn| matches!(conn, ActiveConnectionInfo::Vpn { name, .. } if name == id)); + let completed = match pending.action { + PendingVpnAction::Activate => is_active, + PendingVpnAction::Deactivate => !is_active, + }; + if completed { + self.nm_state.pending_vpn = None; + self.update_icon_name(); + } + } + fn update_nm_state(&mut self, mut new_state: NetworkManagerState) { self.update_togglers(&new_state); // check for failed conns that can be reset @@ -307,7 +822,7 @@ impl CosmicNetworkApplet { }; if matches!(state, ActiveConnectionState::Activated) { - self.failed_known_ssids.remove(new_s.name().as_str()); + self.failed_known_ssids.remove(new_s.name()); continue; } if matches!( @@ -334,6 +849,22 @@ impl CosmicNetworkApplet { } fn update_icon_name(&mut self) { + if self + .nm_state + .pending_vpn + .as_ref() + .is_some_and(|pending| pending.action == PendingVpnAction::Activate) + || self + .nm_state + .nm_state + .active_conns + .iter() + .any(|conn| matches!(conn, ActiveConnectionInfo::Vpn { .. })) + { + self.icon_name = "network-vpn-symbolic".to_string(); + return; + } + self.icon_name = self .nm_state .nm_state @@ -346,12 +877,7 @@ impl CosmicNetworkApplet { "network-wired-disconnected-symbolic", ActiveConnectionInfo::WiFi { strength, .. }, ) => wifi_icon(*strength), - (_, ActiveConnectionInfo::Wired { .. }) - if icon_name != "network-vpn-symbolic" => - { - "network-wired-symbolic" - } - (_, ActiveConnectionInfo::Vpn { .. }) => "network-vpn-symbolic", + (_, ActiveConnectionInfo::Wired { .. }) => "network-wired-symbolic", _ => icon_name, }, ) @@ -388,20 +914,30 @@ impl CosmicNetworkApplet { fn connect_vpn(&mut self, uuid: Arc) -> Task> { cosmic::task::future(async move { - match NmrsManager::new().await { - Ok(nm) => match nm.connect_vpn_by_uuid(&uuid).await { - Ok(()) => Message::Refresh, - Err(e) => Message::Error(format!("activate VPN {uuid}: {e}")), - }, - Err(e) => Message::Error(format!("nmrs init: {e}")), + let error = match NmrsManager::new().await { + Ok(nm) => nm + .connect_vpn_by_uuid(&uuid) + .await + .err() + .map(|e| format!("activate VPN {uuid}: {e}")), + Err(e) => Some(format!("nmrs init: {e}")), + }; + Message::VpnOperationFinished { + uuid, + action: PendingVpnAction::Activate, + error, } }) + .map(cosmic::Action::App) } } /// Registers an `nmrs` secret agent on the system bus and yields its /// requests + cancellations as [`NmAgentEvent`] for the applet to handle. -fn secret_agent_task(identifier: String) -> Task { +fn secret_agent_task( + identifier: String, + mut reregister_requests: UnboundedReceiver<()>, +) -> Task { cosmic::Task::stream(async_fn_stream::fn_stream(move |emitter| async move { let registration = SecretAgent::builder() .with_identifier(identifier) @@ -433,6 +969,11 @@ fn secret_agent_task(identifier: String) -> Task { } None => break, }, + Some(()) = reregister_requests.next() => { + if let Err(e) = handle.reregister().await { + tracing::warn!("failed to re-register secret agent: {e}"); + } + }, } } @@ -490,32 +1031,35 @@ pub(crate) enum Message { Surface(surface::Action), ActivateVpn(Arc), // UUID of VPN to activate DeactivateVpn(Arc), // UUID of VPN to deactivate - ToggleVpnList, // Show/hide available VPNs + VpnOperationFinished { + uuid: Arc, + action: PendingVpnAction, + error: Option, + }, + ToggleVpnList, // Show/hide available VPNs /// An update from the secret agent SecretAgent(NmAgentEvent), /// Connect to a WiFi network access point. - Connect(network_manager::SSID, HwAddress), + Connect(Ssid, HwAddress), /// Connect with a password ConnectWithPassword, - KnownConnections(IndexMap), - /// Settings for known connections. - ConnectionSettings(BTreeMap, Box>), /// Disconnect from an access point. - Disconnect(network_manager::SSID, HwAddress), + Disconnect(Ssid, HwAddress), + ConnectionAttemptFinished { + access_point: AccessPoint, + success: bool, + error: Option, + }, /// An error occurred. Error(String), /// Identity update from the dialog IdentityUpdate(String), - /// An update from the network manager daemon - NetworkManager(network_manager::Event), - /// Successfully connected to the system dbus. - NetworkManagerConnect(zbus::Connection), + /// An update from NetworkManager. + NetworkEvent(NetworkEvent), /// Update the password from the dialog PasswordUpdate(SecureString), - /// Update NetworkManagerState - UpdateState(NetworkManagerState), - /// Update the devices lists - UpdateDevices(Vec), + /// Update applet state from NetworkManager. + Snapshot(AppletSnapshot), /// Toggle WiFi access WiFiEnable(bool), /// Refresh state @@ -525,176 +1069,7 @@ pub(crate) enum Message { VPNPasswordUpdate(SecureString), CancelVPNConnection, /// Selects a device to display connections from - SelectDevice(Option>), -} - -fn connection_settings(conn: zbus::Connection) -> Task { - let settings = async move { - let settings = network_manager::dbus::settings::NetworkManagerSettings::new(&conn).await?; - - _ = settings.load_connections(&[]).await; - - let settings = settings - // Get a list of known connections. - .list_connections() - .await? - // Prepare for wrapping in a concurrent stream. - .into_iter() - .map(|conn| async move { conn }) - // Create a concurrent stream for each connection. - .apply(futures::stream::FuturesOrdered::from_iter) - // Concurrently fetch settings for each connection. - .filter_map(|conn| async move { - conn.get_settings() - .await - .map(network_manager::Settings::new) - .ok() - }) - // Reduce the settings list into a SSID->UUID map. - .fold(BTreeMap::new(), |mut set, settings| async move { - if let Some(ref wifi) = settings.wifi - && let Some(ssid) = wifi - .ssid - .clone() - .and_then(|ssid| String::from_utf8(ssid).ok()) - && let Some(ref connection) = settings.connection - && let Some(uuid) = connection.uuid.clone() - { - set.insert(ssid.into(), uuid.into()); - return set; - } - - set - }) - .await; - - Ok::<_, zbus::Error>(settings) - }; - - cosmic::task::future(async move { - settings - .await - .context("failed to get connection settings") - .map_or_else( - |why| Message::Error(why.to_string()), - Message::ConnectionSettings, - ) - }) -} - -pub fn update_state(conn: zbus::Connection) -> Task { - cosmic::task::future(async move { - match NetworkManagerState::new(&conn).await { - Ok(state) => Message::UpdateState(state), - Err(why) => Message::Error(why.to_string()), - } - }) -} - -pub fn update_devices(conn: zbus::Connection) -> Task { - cosmic::task::future(async move { - let filter = - |device_type| matches!(device_type, network_manager::devices::DeviceType::Wifi); - match network_manager::devices::list(&conn, filter).await { - Ok(devices) => Message::UpdateDevices(devices), - Err(why) => Message::Error(why.to_string()), - } - }) -} - -impl CosmicNetworkApplet { - fn connect(&mut self, conn: zbus::Connection) -> Task { - if self.nm_task.is_none() { - let popup = self.popup; - let (canceller, task) = crate::utils::forward_event_loop(move |emitter| async move { - let (tx, mut rx) = futures::channel::mpsc::channel(1); - - if popup.is_some() { - let watchers = std::pin::pin!(async move { - futures::join!( - network_manager::watch(conn.clone(), tx.clone()), - network_manager::active_conns::watch(conn.clone(), tx.clone(),), - network_manager::wireless_enabled::watch(conn.clone(), tx.clone()), - network_manager::watch_connections_changed(conn, tx,) - ); - }); - let forwarder = std::pin::pin!(async move { - while let Some(message) = rx.next().await { - _ = emitter.emit(Message::NetworkManager(message)).await; - } - }); - - futures::future::select(watchers, forwarder).await; - } else { - let watchers = std::pin::pin!(async move { - futures::join!( - network_manager::watch(conn.clone(), tx.clone()), - network_manager::active_conns::watch(conn.clone(), tx.clone(),), - network_manager::wireless_enabled::watch(conn.clone(), tx.clone()), - ); - }); - let forwarder = std::pin::pin!(async move { - while let Some(message) = rx.next().await { - _ = emitter.emit(Message::NetworkManager(message)).await; - } - }); - - futures::future::select(watchers, forwarder).await; - }; - }); - - self.nm_task = Some(canceller); - return task.map(Message::from); - } - - Task::none() - } -} - -fn load_vpns(_conn: zbus::Connection) -> Task { - cosmic::task::future(async move { - let nm = match NmrsManager::new().await { - Ok(nm) => nm, - Err(e) => return Message::Error(format!("nmrs init: {e}")), - }; - - let saved = match nm.list_saved_connections().await { - Ok(saved) => saved, - Err(e) => return Message::Error(format!("list saved connections: {e}")), - }; - - let mut map: IndexMap = IndexMap::new(); - for c in saved { - // Skip in-memory-only NM connections — assumed connections that NM - // auto-generated from externally-managed interfaces (e.g. one - // brought up by wg-quick@wg0.service) report unsaved=true and - // evaporate on deactivate, leaving the applet's toggle dead. - if c.unsaved { - continue; - } - let uuid: UUID = Arc::from(c.uuid.as_str()); - let entry = match c.summary { - SettingsSummary::WireGuard { .. } => ConnectionSettings::Wireguard { id: c.id }, - SettingsSummary::Vpn { .. } => ConnectionSettings::Vpn { id: c.id }, - _ => continue, - }; - map.insert(uuid, entry); - } - - Message::KnownConnections(map) - }) -} - -fn system_conn() -> Task { - cosmic::Task::future(async move { - zbus::Connection::system() - .await - .context("failed to create system dbus connection") - .map_or_else( - |why| Message::Error(why.to_string()), - Message::NetworkManagerConnect, - ) - }) + SelectDevice(Option>), } impl cosmic::Application for CosmicNetworkApplet { @@ -711,7 +1086,23 @@ impl cosmic::Application for CosmicNetworkApplet { ..Default::default() }; - (applet, system_conn().map(cosmic::Action::App)) + let uuid = uuid::Uuid::new_v4().to_string().replace("-", "_"); + let my_id = + format!("com.system76.CosmicSettings.Applet._{uuid}.NetworkManager.SecretAgent",); + let (secret_agent_reregister_tx, secret_agent_reregister_rx) = unbounded(); + + ( + Self { + secret_agent_reregister_tx: Some(secret_agent_reregister_tx), + ..applet + }, + Task::batch(vec![ + snapshot_task(), + network_events_task(), + secret_agent_task(my_id, secret_agent_reregister_rx).map(Message::SecretAgent), + ]) + .map(cosmic::Action::App), + ) } fn core(&self) -> &cosmic::app::Core { @@ -730,33 +1121,28 @@ impl cosmic::Application for CosmicNetworkApplet { return destroy_popup(p); } else { let mut tasks = Vec::with_capacity(2); - if let Some(conn) = self.conn.clone() { - tasks.push(update_state(conn.clone())); - tasks.push(update_devices(conn.clone())); - tasks.push(load_vpns(conn)); - let uuid = uuid::Uuid::new_v4().to_string().replace("-", "_"); + tasks.push(snapshot_task().map(cosmic::Action::App)); + tasks.push(cosmic::surface::surface_task( + cosmic::surface::action::app_popup( + |_| Default::default(), + |app: &mut Self| { + let new_id = window::Id::unique(); + app.popup.replace(new_id); - let my_id = format!( - "com.system76.CosmicSettings.Applet._{uuid}.NetworkManager.SecretAgent", - ); - tasks.push(secret_agent_task(my_id).map(Message::SecretAgent)); - } - // TODO request update of state maybe - let new_id = window::Id::unique(); - self.popup.replace(new_id); + let popup_settings = app.core.applet.get_popup_settings( + app.core.main_window_id().unwrap(), + new_id, + None, + None, + None, + ); + popup_settings + }, + None, + ), + )); - let popup_settings = self.core.applet.get_popup_settings( - self.core.main_window_id().unwrap(), - new_id, - None, - None, - None, - ); - - tasks.push(system_conn()); - tasks.push(get_popup(popup_settings)); - - return Task::batch(tasks).map(cosmic::Action::App); + return Task::batch(tasks); } } Message::ToggleAirplaneMode(enabled) => { @@ -777,45 +1163,20 @@ impl cosmic::Application for CosmicNetworkApplet { .map(cosmic::Action::App); } Message::SelectWirelessAccessPoint(access_point) => { - let Some(tx) = self.nm_sender.as_ref() else { - return Task::none(); - }; - if matches!(access_point.network_type, NetworkType::Open) { - if let Err(err) = - tx.unbounded_send(network_manager::Request::SelectAccessPoint( - access_point.ssid.clone(), - access_point.network_type, - None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); - } - self.new_connection = Some(NewConnectionState::Waiting(access_point)); + self.new_connection = Some(NewConnectionState::Waiting(access_point.clone())); + return connect_access_point_task(access_point, None, None); } else { - if self + let known = self .nm_state .nm_state .known_access_points - .contains(&access_point) - && let Err(err) = - tx.unbounded_send(network_manager::Request::SelectAccessPoint( - access_point.ssid.clone(), - access_point.network_type, - None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) - { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + .iter() + .any(|known| same_access_point(known, &access_point)); + if known { + self.new_connection = + Some(NewConnectionState::Waiting(access_point.clone())); + return connect_access_point_task(access_point, None, None); } self.new_connection = Some(NewConnectionState::EnterPassword { access_point, @@ -850,11 +1211,6 @@ impl cosmic::Application for CosmicNetworkApplet { Message::CloseRequested(id) => { if Some(id) == self.popup { self.popup = None; - if let Some(cancel) = self.nm_task.take() { - _ = cancel.send(()); - } - - return system_conn().map(cosmic::Action::App); } } Message::OpenSettings => { @@ -934,7 +1290,7 @@ impl cosmic::Application for CosmicNetworkApplet { } }) .map(cosmic::Action::App); - let reconnect_task = self.update(Message::SelectWirelessAccessPoint(ap)); + let reconnect_task = connect_access_point_task(ap, None, None); return Task::batch(vec![forget_task, reconnect_task]); } Message::Surface(a) => { @@ -943,59 +1299,75 @@ impl cosmic::Application for CosmicNetworkApplet { )); } Message::ActivateVpn(uuid) => { - return self.connect_vpn(uuid.clone()); + self.nm_state.pending_vpn = Some(PendingVpn { + uuid: uuid.clone(), + action: PendingVpnAction::Activate, + }); + self.update_icon_name(); + return Task::batch(vec![ + snapshot_task().map(cosmic::Action::App), + self.connect_vpn(uuid.clone()), + ]); } Message::DeactivateVpn(uuid) => { - return cosmic::task::future(async move { - match NmrsManager::new().await { - Ok(nm) => match nm.disconnect_vpn_by_uuid(&uuid).await { - Ok(()) => Message::Refresh, - Err(e) => Message::Error(format!("disconnect VPN {uuid}: {e}")), - }, - Err(e) => Message::Error(format!("nmrs init: {e}")), + self.nm_state.pending_vpn = Some(PendingVpn { + uuid: uuid.clone(), + action: PendingVpnAction::Deactivate, + }); + self.update_icon_name(); + let disconnect_task = cosmic::task::future(async move { + let error = match NmrsManager::new().await { + Ok(nm) => nm + .disconnect_vpn_by_uuid(&uuid) + .await + .err() + .map(|e| format!("disconnect VPN {uuid}: {e}")), + Err(e) => Some(format!("nmrs init: {e}")), + }; + Message::VpnOperationFinished { + uuid, + action: PendingVpnAction::Deactivate, + error, } }) .map(cosmic::Action::App); + return Task::batch(vec![ + snapshot_task().map(cosmic::Action::App), + disconnect_task, + ]); + } + Message::VpnOperationFinished { + uuid, + action, + error, + } => { + if self.nm_state.pending_vpn.as_ref().is_some_and(|pending| { + pending.uuid.as_ref() == uuid.as_ref() && pending.action == action + }) { + self.nm_state.pending_vpn = None; + self.update_icon_name(); + } + if let Some(error) = error { + tracing::error!("{error}"); + } + return snapshot_task().map(cosmic::Action::App); } Message::ToggleVpnList => { self.show_available_vpns = !self.show_available_vpns; } Message::Connect(ssid, hw_address) => { - let mut network_type = NetworkType::Open; - let tx = if let Some(tx) = self.nm_sender.as_ref() { - if let Some(ap) = self - .nm_state - .nm_state - .known_access_points - .iter_mut() - .find(|c| c.ssid == ssid && c.hw_address == hw_address) - { - network_type = ap.network_type; - ap.working = true; - } - tx - } else { - return Task::none(); - }; - if let Err(err) = tx.unbounded_send(network_manager::Request::SelectAccessPoint( - ssid, - network_type, - None, - self.active_device.as_ref().map(|d| d.interface.clone()), - )) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + if let Some(ap) = self + .nm_state + .nm_state + .known_access_points + .iter_mut() + .find(|c| c.ssid == ssid && c.hw_address == hw_address) + { + ap.working = true; + return connect_access_point_task(ap.clone(), None, None); } } Message::ConnectWithPassword => { - // save password - let Some(tx) = self.nm_sender.as_ref() else { - return Task::none(); - }; - if let Some(NewConnectionState::EnterPassword { password, access_point, @@ -1003,55 +1375,44 @@ impl cosmic::Application for CosmicNetworkApplet { .. }) = self.new_connection.take() { - let is_enterprise: bool = matches!(access_point.network_type, NetworkType::EAP); - - if let Err(err) = tx.unbounded_send(network_manager::Request::Authenticate { - ssid: access_point.ssid.to_string(), - identity: is_enterprise.then(|| identity.clone()), - password, - secret_tx: None, - interface: self.active_device.as_ref().map(|d| d.interface.clone()), - }) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - tracing::error!("Failed to authenticate with network manager"); - } self.new_connection - .replace(NewConnectionState::Waiting(access_point)); + .replace(NewConnectionState::Waiting(access_point.clone())); + return connect_access_point_task(access_point, Some(identity), Some(password)); } } - Message::ConnectionSettings(btree_map) => { - self.nm_state.ssid_to_uuid = btree_map; - } Message::Disconnect(ssid, hw_address) => { self.new_connection = None; - let tx = if let Some(tx) = self.nm_sender.as_ref() { - if let Some(ActiveConnectionInfo::WiFi { state, .. }) = - self.nm_state.nm_state.active_conns.iter_mut().find(|c| { - let c_hw_address = match c { - ActiveConnectionInfo::Wired { hw_address, .. } - | ActiveConnectionInfo::WiFi { hw_address, .. } => { - HwAddress::from_str(hw_address).unwrap() - } - ActiveConnectionInfo::Vpn { .. } => HwAddress::default(), - }; - c.name().as_str() == ssid.as_ref() && c_hw_address == hw_address - }) - { - *state = ActiveConnectionState::Deactivating; - } - tx - } else { - return Task::none(); - }; - if let Err(err) = tx.unbounded_send(network_manager::Request::Disconnect(ssid)) { - if err.is_disconnected() { - return system_conn().map(cosmic::Action::App); - } - - tracing::error!("{err:?}"); + let interface = self + .nm_state + .nm_state + .known_access_points + .iter() + .find(|ap| ap.ssid == ssid && ap.hw_address == hw_address) + .and_then(|ap| ap.interface.clone()); + if let Some(ActiveConnectionInfo::WiFi { state, .. }) = + self.nm_state.nm_state.active_conns.iter_mut().find(|c| { + let c_hw_address = match c { + ActiveConnectionInfo::Wired { hw_address, .. } + | ActiveConnectionInfo::WiFi { hw_address, .. } => { + HwAddress::from_str(hw_address).unwrap_or_default() + } + ActiveConnectionInfo::Vpn { .. } => HwAddress::default(), + }; + c.name() == ssid.as_ref() && c_hw_address == hw_address + }) + { + *state = ActiveConnectionState::Deactivating; } + return cosmic::task::future(async move { + match NmrsManager::new().await { + Ok(nm) => match nm.disconnect(interface.as_deref()).await { + Ok(()) => Message::Refresh, + Err(e) => Message::Error(format!("disconnect {ssid}: {e}")), + }, + Err(e) => Message::Error(format!("nmrs init: {e}")), + } + }) + .map(cosmic::Action::App); } Message::Error(error) => { tracing::error!("error: {error:?}") @@ -1063,132 +1424,37 @@ impl cosmic::Application for CosmicNetworkApplet { *identity = new_identity; } } - Message::NetworkManager(event) => match event { - network_manager::Event::Init { - conn, - sender, - state, - } => { - self.nm_sender = Some(sender); - self.update_nm_state(state); - self.conn = Some(conn); - } - network_manager::Event::WiFiEnabled(_) - | network_manager::Event::WirelessAccessPoints - | network_manager::Event::ActiveConns => { - if let Some(conn) = self.conn.clone() { - return Task::future(async move { - let conn = conn.clone(); - NetworkManagerState::new(&conn).await - }) - .map(|res| match res { - Ok(s) => Message::UpdateState(s), - Err(err) => Message::Error(err.to_string()), - }) - .map(cosmic::Action::App); + Message::ConnectionAttemptFinished { + access_point, + success, + error, + } => { + if success { + self.failed_known_ssids.remove(access_point.ssid.as_ref()); + self.new_connection = None; + self.show_visible_networks = false; + } else { + if let Some(error) = error { + tracing::warn!("connect {} failed: {error}", access_point.ssid); } + self.failed_known_ssids.insert(access_point.ssid.clone()); + self.new_connection = Some(NewConnectionState::Failure(access_point)); } - network_manager::Event::RequestResponse { - mut state, - success, - req, - } => { - if let network_manager::Request::SelectAccessPoint( - ssid, - _hw_address, - _network_type, - _secret_tx, - ) = &req - { - let conn_match = self - .new_connection - .as_ref() - .is_some_and(|c| c.ssid() == ssid.as_ref() ); - - if conn_match && success { - if let Some(ActiveConnectionInfo::WiFi { state, .. }) = state - .active_conns - .iter_mut() - .find(|ap| ap.name().as_str() == ssid.as_ref()) - { - *state = ActiveConnectionState::Activated; - } - self.failed_known_ssids.remove(ssid); - self.new_connection = None; - self.show_visible_networks = false; - } else if !matches!( - &self.new_connection, - Some(NewConnectionState::EnterPassword { .. }) - ) && !success { - self.failed_known_ssids.insert(ssid.clone()); + return snapshot_task().map(cosmic::Action::App); + } + Message::NetworkEvent(event) => { + if matches!(event, NetworkEvent::NetworkManagerRestarted) { + tracing::debug!( + "NetworkManager restarted; refreshing network snapshot and secret agent" + ); + if let Some(mut tx) = self.secret_agent_reregister_tx.clone() { + if let Err(e) = tx.unbounded_send(()) { + tracing::warn!("secret agent re-registration task stopped: {e}"); + self.secret_agent_reregister_tx = None; } - } else if let network_manager::Request::Authenticate { - ssid, - identity: _, - password: _, - secret_tx: _, - interface: _, - } = &req - { - if let Some(NewConnectionState::Waiting(access_point)) = - self.new_connection.as_ref() - { - if !success - && ssid.as_str() == access_point.ssid.as_ref() - { - self.new_connection = - Some(NewConnectionState::Failure(access_point.clone())); - } else { - self.show_visible_networks = false; - } - } else if let Some(NewConnectionState::EnterPassword { access_point, .. }) = - self.new_connection.as_ref() - && success - && ssid.as_str() == access_point.ssid.as_ref() - { - self.new_connection = None; - self.show_visible_networks = false; - } - } else if self - .new_connection - .as_ref() - .map(NewConnectionState::ssid).is_some_and(|ssid| { - state.active_conns.iter().any(|c| - matches!(c, ActiveConnectionInfo::WiFi { name, state: ActiveConnectionState::Activated, .. } if ssid == name) - ) - }) { - self.new_connection = None; - self.show_visible_networks = false; - } - - if !matches!(req, network_manager::Request::Reload) - && matches!(state.connectivity, NmConnectivityState::Portal) - { - let mut browser = std::process::Command::new("xdg-open"); - browser.arg("http://204.pop-os.org/"); - - tokio::spawn(cosmic::process::spawn(browser)); - } - - self.update_nm_state(state); - } - - cosmic_settings_network_manager_subscription::Event::Devices => { - if let Some(conn) = self.conn.clone() { - return update_devices(conn).map(cosmic::Action::App); } } - cosmic_settings_network_manager_subscription::Event::WiFiCredentials { - ssid: _, - password: _, - security_type: _, - } => {} - }, - Message::NetworkManagerConnect(connection) => { - return cosmic::task::batch(vec![ - self.connect(connection.clone()), - connection_settings(connection), - ]); + return snapshot_task().map(cosmic::Action::App); } Message::PasswordUpdate(entered_pw) => { if let Some(NewConnectionState::EnterPassword { password, .. }) = @@ -1197,11 +1463,8 @@ impl cosmic::Application for CosmicNetworkApplet { *password = entered_pw; } } - Message::UpdateState(network_manager_state) => { - self.update_nm_state(network_manager_state); - } - Message::UpdateDevices(device_infos) => { - self.nm_state.devices = device_infos.into_iter().map(Arc::new).collect(); + Message::Snapshot(snapshot) => { + self.apply_snapshot(snapshot); } Message::WiFiEnable(enable) => { self.nm_state.nm_state.wifi_enabled = enable; @@ -1291,18 +1554,8 @@ impl cosmic::Application for CosmicNetworkApplet { tracing::error!("Error from secret agent: {error}"); } }, - Message::KnownConnections(index_map) => { - self.nm_state.known_vpns = index_map; - } Message::Refresh => { - if let Some(conn) = self.conn.clone() { - return Task::batch(vec![ - update_state(conn.clone()), - update_devices(conn.clone()), - load_vpns(conn), - ]) - .map(cosmic::Action::App); - } + return snapshot_task().map(cosmic::Action::App); } Message::ToggleVPNPasswordVisibility => { if let Some(requested_vpn) = self.nm_state.requested_vpn.as_mut() { @@ -1378,16 +1631,20 @@ impl cosmic::Application for CosmicNetworkApplet { let mut known_wifi = Vec::new(); for conn in &self.nm_state.nm_state.active_conns { match conn { - ActiveConnectionInfo::Vpn { name, ip_addresses } => { + ActiveConnectionInfo::Vpn { + name, + ip4_address, + ip6_address, + } => { if self.active_device.as_ref().is_some_and(|d| { d.active_connection.as_ref().is_none_or(|a| a.0.id != *name) }) { continue; } - let mut ipv4 = Vec::with_capacity(ip_addresses.len() + 1); - ipv4.push(text::body(name).into()); - for addr in ip_addresses { - ipv4.push(text::caption(format!("{}: {}", fl!("ipv4"), addr)).into()); + let mut info_col = Vec::with_capacity(3); + info_col.push(text::body(name).into()); + for elem in ip_address_elements(ip4_address, ip6_address) { + info_col.push(elem); } vpn_ethernet_col = vpn_ethernet_col.push( column::with_capacity::(2) @@ -1395,13 +1652,13 @@ impl cosmic::Application for CosmicNetworkApplet { row::with_children([ Element::from( icon::icon( - icon::from_name(self.icon_name.clone()) + icon::from_name("network-vpn-symbolic") .symbolic(true) .into(), ) .size(40), ), - column::with_children(ipv4).into(), + column::with_children(info_col).into(), text::body(fl!("connected")) .width(Length::Fill) .align_x(Alignment::End) @@ -1421,18 +1678,17 @@ impl cosmic::Application for CosmicNetworkApplet { name, hw_address: _, speed, - ip_addresses, + ip4_address, + ip6_address, } => { if self.active_device.as_ref().is_some_and(|d| { d.active_connection.as_ref().is_none_or(|a| a.0.id != *name) }) { continue; } - let mut ipv4 = Vec::with_capacity(ip_addresses.len() + 1); - ipv4.push(text::body(name).into()); - for addr in ip_addresses { - ipv4.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); - } + let mut info_col = Vec::with_capacity(3); + info_col.push(text::body(name).into()); + info_col.extend(ip_address_elements(ip4_address, ip6_address)); let mut right_column = vec![text::body(fl!("connected")).into()]; @@ -1464,13 +1720,13 @@ impl cosmic::Application for CosmicNetworkApplet { row::with_children([ Element::from( icon::icon( - icon::from_name(self.icon_name.clone()) + icon::from_name("network-wired-symbolic") .symbolic(true) .into(), ) .size(40), ), - column::with_children(ipv4).into(), + column::with_children(info_col).into(), column::with_children(right_column) .width(Length::Fill) .align_x(Alignment::End) @@ -1488,7 +1744,8 @@ impl cosmic::Application for CosmicNetworkApplet { } ActiveConnectionInfo::WiFi { name, - ip_addresses, + ip4_address, + ip6_address, state, strength, hw_address, @@ -1498,10 +1755,7 @@ impl cosmic::Application for CosmicNetworkApplet { }) { continue; } - let mut ipv4 = Vec::with_capacity(ip_addresses.len()); - for addr in ip_addresses { - ipv4.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); - } + let ip_elements = ip_address_elements(ip4_address, ip6_address); let mut btn_content = vec![ icon::from_name(wifi_icon(*strength)) .size(24) @@ -1509,7 +1763,7 @@ impl cosmic::Application for CosmicNetworkApplet { .into(), column::with_children([ text::body(name).into(), - column::with_children(ipv4).into(), + column::with_children(ip_elements).into(), ]) .width(Length::Fill) .into(), @@ -1534,7 +1788,7 @@ impl cosmic::Application for CosmicNetworkApplet { .icon_size(16) .on_press(Message::ResetFailedKnownSsid( name.clone(), - HwAddress::from_str(hw_address).unwrap(), + HwAddress::from_str(hw_address).unwrap_or_default(), )) .into(), ); @@ -1549,7 +1803,7 @@ impl cosmic::Application for CosmicNetworkApplet { ) .on_press(Message::Disconnect( Arc::from(name.as_str()), - HwAddress::from_str(hw_address).unwrap(), + HwAddress::from_str(hw_address).unwrap_or_default(), )), )]) .align_x(Alignment::Center), @@ -1662,7 +1916,7 @@ impl cosmic::Application for CosmicNetworkApplet { .nm_state .devices .iter() - .filter(|d| matches!(d.device_type, network_manager::devices::DeviceType::Wifi)) + .filter(|d| matches!(d.device_type, DeviceType::Wifi)) .collect::>(); if wireless_hw_devices.len() > 1 && self.active_device.is_none() { @@ -1706,6 +1960,9 @@ impl cosmic::Application for CosmicNetworkApplet { } for known in &self.nm_state.nm_state.known_access_points { + if matches!(known.state, DeviceState::Activated) { + continue; + } if let Some(active_device) = self.active_device.as_ref() && active_device .known_connections @@ -1749,7 +2006,7 @@ impl cosmic::Application for CosmicNetworkApplet { .icon_size(16) .on_press(Message::ResetFailedKnownSsid( known.ssid.to_string(), - known.hw_address, + known.hw_address.clone(), )) .into(), ); @@ -1761,6 +2018,8 @@ impl cosmic::Application for CosmicNetworkApplet { .spacing(8), ); btn = match known.state { + // Activated entries are skipped above (shown in the active + // connections section instead), so no Disconnect arm is needed here. DeviceState::Failed | DeviceState::Unknown | DeviceState::Unmanaged @@ -1768,9 +2027,6 @@ impl cosmic::Application for CosmicNetworkApplet { | DeviceState::NeedAuth => { btn.on_press(Message::Connect(known.ssid.clone(), known.hw_address)) } - DeviceState::Activated => { - btn.on_press(Message::Disconnect(known.ssid.clone(), known.hw_address)) - } _ => btn, }; known_wifi.push(Element::from( @@ -1838,7 +2094,7 @@ impl cosmic::Application for CosmicNetworkApplet { ); content = content.push(id); - let is_enterprise = matches!(access_point.network_type, NetworkType::EAP); + let is_enterprise = matches!(access_point.network_type, NetworkType::Eap); let enter_password_col = cosmic::widget::column::with_capacity(4) .push_maybe(is_enterprise.then(|| text::body(fl!("identity")))) .push_maybe(is_enterprise.then(|| { @@ -2018,7 +2274,9 @@ impl cosmic::Application for CosmicNetworkApplet { fn active_conn_hw_address(conn: &ActiveConnectionInfo) -> HwAddress { match conn { ActiveConnectionInfo::Wired { hw_address, .. } - | ActiveConnectionInfo::WiFi { hw_address, .. } => HwAddress::from_str(hw_address).unwrap(), + | ActiveConnectionInfo::WiFi { hw_address, .. } => { + HwAddress::from_str(hw_address).unwrap_or_default() + } ActiveConnectionInfo::Vpn { .. } => HwAddress::default(), } } diff --git a/cosmic-applet-network/src/lib.rs b/cosmic-applet-network/src/lib.rs index 7d5414a5..f1ce1c6e 100644 --- a/cosmic-applet-network/src/lib.rs +++ b/cosmic-applet-network/src/lib.rs @@ -3,7 +3,6 @@ mod app; mod config; mod localize; -mod utils; use crate::localize::localize; diff --git a/cosmic-applet-network/src/utils.rs b/cosmic-applet-network/src/utils.rs deleted file mode 100644 index f802010f..00000000 --- a/cosmic-applet-network/src/utils.rs +++ /dev/null @@ -1,18 +0,0 @@ -use futures_util::future::select; - -/// Spawn a background tasks and forward its messages -pub fn forward_event_loop + Send + 'static>( - event_loop: impl FnOnce(async_fn_stream::StreamEmitter) -> T + Send + 'static, -) -> (tokio::sync::oneshot::Sender<()>, cosmic::Task) { - let (cancel_tx, cancel_rx) = tokio::sync::oneshot::channel::<()>(); - - let task = cosmic::Task::stream(async_fn_stream::fn_stream(|emitter| async move { - select( - std::pin::pin!(cancel_rx), - std::pin::pin!(event_loop(emitter)), - ) - .await; - })); - - (cancel_tx, task) -} From 63292ab74dc8ef9c8d4e04055047c7671554e937 Mon Sep 17 00:00:00 2001 From: Rafael Kraut <14234815+RafaelKr@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:41:53 +0200 Subject: [PATCH 81/84] fix(status-area): constrain menu icon-data to icon size Menu items expose their icon as a themed `icon-name` or raw PNG `icon-data`. The named-icon branch renders at a fixed `.size(14)`, but the icon-data branch wrapped the pixmap in a bare `Image` with no size constraint, so it rendered at the PNG's native dimensions. Apps may send full-resolution pixmaps, which then render oversized in the menu. Constrain icon-data to the same 14px box with ContentFit::Contain, matching how KDE (Qt small-icon size) and GNOME (St.Icon popup-menu-icon) render menu item icons. Co-Authored-By: Claude Opus 4.8 (1M context) --- cosmic-applet-status-area/src/components/status_menu.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cosmic-applet-status-area/src/components/status_menu.rs b/cosmic-applet-status-area/src/components/status_menu.rs index e706f37b..a228d745 100644 --- a/cosmic-applet-status-area/src/components/status_menu.rs +++ b/cosmic-applet-status-area/src/components/status_menu.rs @@ -232,7 +232,11 @@ fn layout_view(layout: &Layout, expanded: Option) -> cosmic::Element<'_, Ms } if let Some(icon_data) = i.icon_data() { let handle = iced::widget::image::Handle::from_bytes(icon_data.to_vec()); - children.insert(0, iced::widget::Image::new(handle).into()); + let icon = iced::widget::Image::new(handle) + .width(iced::Length::Fixed(14.0)) + .height(iced::Length::Fixed(14.0)) + .content_fit(iced::core::ContentFit::Contain); + children.insert(0, icon.into()); } else if let Some(icon_name) = i.icon_name() { let icon = cosmic::widget::icon::from_name(icon_name) .size(14) From 4285090a443ba34badffecdf77dc6fafa05289ac Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 18 Aug 2026 07:51:47 +0200 Subject: [PATCH 82/84] i18n: translation updates from weblate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andi Chandler Co-authored-by: CodeBeats Co-authored-by: David Carvalho Co-authored-by: Ettore Atalan Co-authored-by: Feike Donia Co-authored-by: Hosted Weblate Co-authored-by: Hugo Carvalho Co-authored-by: Jens Peter Nielsen Co-authored-by: Martin Meizoso Co-authored-by: Michael Millet Co-authored-by: Prasanta-Hembram Co-authored-by: Quentin PAGÈS Co-authored-by: Steen Rabol Co-authored-by: Walter William Beckerleg Bruckman Co-authored-by: Wilbur Lindqvist Co-authored-by: lucamosca1 Co-authored-by: sicKat Co-authored-by: the-forest-watches Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/oc/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-app-list/sat/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-a11y/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-audio/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/it/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-battery/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-bluetooth/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/en_GB/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-network/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-notifications/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-power/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-tiling/nl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applet-time/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/de/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/it/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/nl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/oc/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/pt/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-applets-desktop-entries/sat/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-input-sources-applet/da/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-input-sources-applet/gl/ Translate-URL: https://hosted.weblate.org/projects/pop-os/cosmic-workspaces-applet/gl/ Translation: Pop OS/COSMIC Accessibility Applet Translation: Pop OS/COSMIC App List Applet Translation: Pop OS/COSMIC Applets Desktop Entries Translation: Pop OS/COSMIC Audio Applet Translation: Pop OS/COSMIC Battery Applet Translation: Pop OS/COSMIC Bluetooth Applet Translation: Pop OS/COSMIC Input Sources Applet Translation: Pop OS/COSMIC Network Applet Translation: Pop OS/COSMIC Notifications Applet Translation: Pop OS/COSMIC Power Applet Translation: Pop OS/COSMIC Tiling Applet Translation: Pop OS/COSMIC Time Applet Translation: Pop OS/COSMIC Workspaces Applet --- cosmic-app-list/i18n/da/cosmic_app_list.ftl | 8 +++ .../i18n/en-GB/cosmic_app_list.ftl | 7 +++ cosmic-app-list/i18n/gl/cosmic_app_list.ftl | 8 +++ cosmic-app-list/i18n/oc/cosmic_app_list.ftl | 1 + .../i18n/pt-BR/cosmic_app_list.ftl | 2 +- cosmic-app-list/i18n/sat/cosmic_app_list.ftl | 2 + .../i18n/da/cosmic_applet_a11y.ftl | 6 +++ .../i18n/gl/cosmic_applet_a11y.ftl | 6 +++ .../i18n/da/cosmic_applet_audio.ftl | 7 +++ .../i18n/en-GB/cosmic_applet_audio.ftl | 7 +++ .../i18n/gl/cosmic_applet_audio.ftl | 7 +++ .../i18n/da/cosmic_applet_battery.ftl | 14 +++++ .../i18n/en-GB/cosmic_applet_battery.ftl | 14 +++++ .../i18n/gl/cosmic_applet_battery.ftl | 14 +++++ .../i18n/it/cosmic_applet_battery.ftl | 16 +++--- .../i18n/pt-BR/cosmic_applet_battery.ftl | 10 ++-- .../i18n/zh-TW/cosmic_applet_battery.ftl | 6 +-- .../i18n/da/cosmic_applet_bluetooth.ftl | 12 +++++ .../i18n/en-GB/cosmic_applet_bluetooth.ftl | 11 ++++ .../i18n/gl/cosmic_applet_bluetooth.ftl | 12 +++++ .../i18n/da/cosmic_applet_input_sources.ftl | 2 + .../i18n/gl/cosmic_applet_input_sources.ftl | 2 + .../i18n/da/cosmic_applet_network.ftl | 6 +++ .../i18n/en-GB/cosmic_applet_network.ftl | 1 + .../i18n/gl/cosmic_applet_network.ftl | 24 +++++++++ .../i18n/gl/cosmic_applet_notifications.ftl | 19 +++++++ .../i18n/gl/cosmic_applet_power.ftl | 36 +++++++++++++ .../i18n/gl/cosmic_applet_tiling.ftl | 20 ++++++++ .../i18n/nl/cosmic_applet_tiling.ftl | 4 +- .../i18n/gl/cosmic_applet_time.ftl | 1 + .../i18n/gl/cosmic_applet_workspaces.ftl | 1 + i18n/da/desktop_entries.ftl | 51 +++++++++++++++++++ i18n/de/desktop_entries.ftl | 2 +- i18n/gl/desktop_entries.ftl | 51 +++++++++++++++++++ i18n/it/desktop_entries.ftl | 2 + i18n/nl/desktop_entries.ftl | 44 ++++++++++++++-- i18n/oc/desktop_entries.ftl | 19 +++++++ i18n/pt/desktop_entries.ftl | 2 +- i18n/sat/desktop_entries.ftl | 10 ++++ 39 files changed, 441 insertions(+), 26 deletions(-) create mode 100644 cosmic-app-list/i18n/gl/cosmic_app_list.ftl create mode 100644 cosmic-applet-a11y/i18n/gl/cosmic_applet_a11y.ftl create mode 100644 cosmic-applet-audio/i18n/gl/cosmic_applet_audio.ftl create mode 100644 cosmic-applet-battery/i18n/gl/cosmic_applet_battery.ftl create mode 100644 cosmic-applet-bluetooth/i18n/gl/cosmic_applet_bluetooth.ftl create mode 100644 cosmic-applet-input-sources/i18n/gl/cosmic_applet_input_sources.ftl create mode 100644 cosmic-applet-network/i18n/gl/cosmic_applet_network.ftl create mode 100644 cosmic-applet-notifications/i18n/gl/cosmic_applet_notifications.ftl create mode 100644 cosmic-applet-power/i18n/gl/cosmic_applet_power.ftl create mode 100644 cosmic-applet-tiling/i18n/gl/cosmic_applet_tiling.ftl create mode 100644 cosmic-applet-time/i18n/gl/cosmic_applet_time.ftl create mode 100644 cosmic-applet-workspaces/i18n/gl/cosmic_applet_workspaces.ftl create mode 100644 i18n/gl/desktop_entries.ftl diff --git a/cosmic-app-list/i18n/da/cosmic_app_list.ftl b/cosmic-app-list/i18n/da/cosmic_app_list.ftl index e69de29b..3396ed61 100644 --- a/cosmic-app-list/i18n/da/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/da/cosmic_app_list.ftl @@ -0,0 +1,8 @@ +run = Kør +run-on = Kør på { $gpu } +run-on-default = (Standard) +cosmic-app-list = Programbakke +new-window = Nyt Vindue +quit = Afslut +quit-all = Forlad Alle +pin = Fastgør til app-skuffe diff --git a/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl b/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl index 5e538121..f3afe950 100644 --- a/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/en-GB/cosmic_app_list.ftl @@ -1 +1,8 @@ cosmic-app-list = App Tray +new-window = New Window +quit = Quit +run = Run +run-on = Run on { $gpu } +quit-all = Quit All +run-on-default = (Default) +pin = Pin to app tray diff --git a/cosmic-app-list/i18n/gl/cosmic_app_list.ftl b/cosmic-app-list/i18n/gl/cosmic_app_list.ftl new file mode 100644 index 00000000..4fa947a7 --- /dev/null +++ b/cosmic-app-list/i18n/gl/cosmic_app_list.ftl @@ -0,0 +1,8 @@ +quit = Pechar +run = Executar +cosmic-app-list = Bandexa de aplicacións +pin = Fixar na bandexa de aplicacións +quit-all = Quitar todo +new-window = Nova Xanela +run-on = Executar en { $gpu } +run-on-default = (Por defecto) diff --git a/cosmic-app-list/i18n/oc/cosmic_app_list.ftl b/cosmic-app-list/i18n/oc/cosmic_app_list.ftl index e69de29b..9129b9b4 100644 --- a/cosmic-app-list/i18n/oc/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/oc/cosmic_app_list.ftl @@ -0,0 +1 @@ +cosmic-app-list = Cinta d’aplicacions diff --git a/cosmic-app-list/i18n/pt-BR/cosmic_app_list.ftl b/cosmic-app-list/i18n/pt-BR/cosmic_app_list.ftl index 2b94e0e9..0a28b697 100644 --- a/cosmic-app-list/i18n/pt-BR/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/pt-BR/cosmic_app_list.ftl @@ -1,6 +1,6 @@ cosmic-app-list = Bandeja de aplicativos pin = Fixar na bandeja de aplicativos -quit = Sair +quit = Encerrar quit-all = Sair de Todos new-window = Nova Janela run = Executar diff --git a/cosmic-app-list/i18n/sat/cosmic_app_list.ftl b/cosmic-app-list/i18n/sat/cosmic_app_list.ftl index e69de29b..32be0db1 100644 --- a/cosmic-app-list/i18n/sat/cosmic_app_list.ftl +++ b/cosmic-app-list/i18n/sat/cosmic_app_list.ftl @@ -0,0 +1,2 @@ +run-on = { $gpu } ᱨᱮ ᱫᱟᱹᱲ ᱟᱭ +run-on-default = (ᱢᱩᱞ) diff --git a/cosmic-applet-a11y/i18n/da/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/da/cosmic_applet_a11y.ftl index e69de29b..85729331 100644 --- a/cosmic-applet-a11y/i18n/da/cosmic_applet_a11y.ftl +++ b/cosmic-applet-a11y/i18n/da/cosmic_applet_a11y.ftl @@ -0,0 +1,6 @@ +screen-reader = Skærmlæser +invert-colors = Invertér farver +high-contrast = Høj kontrast +filter-colors = Filtrér farver +settings = Tilgængelighedsindstillinger... +magnifier = Forstørrelsesglas diff --git a/cosmic-applet-a11y/i18n/gl/cosmic_applet_a11y.ftl b/cosmic-applet-a11y/i18n/gl/cosmic_applet_a11y.ftl new file mode 100644 index 00000000..d0da1ab5 --- /dev/null +++ b/cosmic-applet-a11y/i18n/gl/cosmic_applet_a11y.ftl @@ -0,0 +1,6 @@ +screen-reader = Lector de pantalla +magnifier = Lupa +invert-colors = Invertir cores +settings = Configuración de accesibilidade... +filter-colors = Filtro de cores +high-contrast = Alto contraste diff --git a/cosmic-applet-audio/i18n/da/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/da/cosmic_applet_audio.ftl index e69de29b..7cdb3d06 100644 --- a/cosmic-applet-audio/i18n/da/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/da/cosmic_applet_audio.ftl @@ -0,0 +1,7 @@ +show-media-controls = Vis mediekontrol på panel +disconnected = PulseAudio Afbrudt +no-device = Ingen enhed valgt +input = Indgang +output = Udgang +unknown-artist = Ukendt +sound-settings = Lydindstillinger... diff --git a/cosmic-applet-audio/i18n/en-GB/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/en-GB/cosmic_applet_audio.ftl index e69de29b..cb19412d 100644 --- a/cosmic-applet-audio/i18n/en-GB/cosmic_applet_audio.ftl +++ b/cosmic-applet-audio/i18n/en-GB/cosmic_applet_audio.ftl @@ -0,0 +1,7 @@ +show-media-controls = Show media controls on panel +disconnected = PulseAudio Disconnected +no-device = No device selected +input = Input +output = Output +unknown-artist = Unknown +sound-settings = Sound Settings... diff --git a/cosmic-applet-audio/i18n/gl/cosmic_applet_audio.ftl b/cosmic-applet-audio/i18n/gl/cosmic_applet_audio.ftl new file mode 100644 index 00000000..c0a90f1e --- /dev/null +++ b/cosmic-applet-audio/i18n/gl/cosmic_applet_audio.ftl @@ -0,0 +1,7 @@ +output = Saída +input = Entrada +show-media-controls = Mostrar os controis multimedia no panel +sound-settings = Axustes do son... +disconnected = PulseAudio Desconectado +no-device = Ningún dipositivo seleccionado +unknown-artist = Descoñecido diff --git a/cosmic-applet-battery/i18n/da/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/da/cosmic_applet_battery.ftl index e69de29b..28cf327a 100644 --- a/cosmic-applet-battery/i18n/da/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/da/cosmic_applet_battery.ftl @@ -0,0 +1,14 @@ +power-settings = Strøm- og Batteriindstillinger... +hours = t +until-empty = indtil tom +battery-desc = Reduceret strømforbrug og ydeevne. +max-charge = Forøg dit batteris levetid, ved at angive en maksimal opladningsværdi på 80% +balanced = Balanceret +battery = Batteri +seconds = s +dgpu-running = Diskret GPU er aktiv og kan reducere batterilevetiden +performance = Høj Ydeevne +performance-desc = Høj ydeevne og strømforbrug. +minutes = m +balanced-desc = Standard ydeevne og batteriforbrug. +dgpu-applications = Applikationer som bruger { $gpu_name } diskret GPU diff --git a/cosmic-applet-battery/i18n/en-GB/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/en-GB/cosmic_applet_battery.ftl index e69de29b..11833e03 100644 --- a/cosmic-applet-battery/i18n/en-GB/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/en-GB/cosmic_applet_battery.ftl @@ -0,0 +1,14 @@ +power-settings = Power & Battery settings... +hours = h +until-empty = until empty +battery-desc = Reduced power usage and performance. +max-charge = Increase the lifespan of your battery by setting a maximum charge value of 80% +balanced = Balanced +battery = Battery +seconds = s +dgpu-running = Discrete GPU is active and can reduce battery life +performance = High Performance +performance-desc = High performance and power usage. +minutes = m +balanced-desc = Standard performance and battery usage. +dgpu-applications = Applications using { $gpu_name } discrete GPU diff --git a/cosmic-applet-battery/i18n/gl/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/gl/cosmic_applet_battery.ftl new file mode 100644 index 00000000..0146556a --- /dev/null +++ b/cosmic-applet-battery/i18n/gl/cosmic_applet_battery.ftl @@ -0,0 +1,14 @@ +battery = Batería +battery-desc = Reduce o consumo de enerxía e o rendemento. +balanced = Balanceado +balanced-desc = Rendemento e consumo de batería estándar. +performance = Alto rendemento +performance-desc = Alto rendemento e maior consumo de enerxía. +max-charge = Aumenta a vida útil da batería limitando a carga máxima ao 80 % +seconds = s +minutes = m +hours = h +until-empty = ata baleirar +power-settings = Axustes de enexía e batería... +dgpu-running = A GPU dedicada está activa e pode reducir a duración da batería +dgpu-applications = Aplicacións que están a usar a GPU dedicada { $gpu_name } diff --git a/cosmic-applet-battery/i18n/it/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/it/cosmic_applet_battery.ftl index 6f3bbd9c..375e29e0 100644 --- a/cosmic-applet-battery/i18n/it/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/it/cosmic_applet_battery.ftl @@ -1,14 +1,14 @@ -battery = Risparmio energetico -battery-desc = Consumi minimi, performance ridotta. -balanced = Bilanciato -balanced-desc = Consumi bilanciati, performance dinamica. -performance = Performance -performance-desc = Consumi alti, performance massima. -max-charge = Migliora la durata di vita della batteria caricandola fino all'80% +battery = Batteria +battery-desc = Prestazioni e consumo energetico ridotti. +balanced = Equilibrato +balanced-desc = Prestazioni e consumo energetico normali. +performance = Prestazioni elevate +performance-desc = Prestazioni elevate e consumo energetico. +max-charge = Aumenta la durata della batteria impostando un valore massimo di carica dell’80% seconds = s minutes = m hours = h -until-empty = fino alla scarica +until-empty = finché non è vuoto power-settings = Impostazioni energetiche... dgpu-running = La GPU discreta è attiva e può ridurre la durata della batteria dgpu-applications = Applicazioni che stanno usando la GPU discreta { $gpu_name } diff --git a/cosmic-applet-battery/i18n/pt-BR/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/pt-BR/cosmic_applet_battery.ftl index e5a72d03..49565b54 100644 --- a/cosmic-applet-battery/i18n/pt-BR/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/pt-BR/cosmic_applet_battery.ftl @@ -1,14 +1,14 @@ -battery = Bateria +battery = Economia de energia battery-desc = Uso reduzido de energia e desempenho limitado. balanced = Balanceado balanced-desc = Desempenho padrão e uso de bateria moderado. -performance = Alto Desempenho +performance = Alto desempenho performance-desc = Máximo desempenho e alto uso de energia. max-charge = Aumente a vida útil da sua bateria definindo um valor máximo de carga de 80% seconds = s minutes = m hours = h -until-empty = até esvaziar +until-empty = até ficar descarregada power-settings = Configurações de energia e bateria... -dgpu-running = GPU discreta está ativa e pode reduzir a vida útil da bateria -dgpu-applications = Aplicativos usando GPU discreta { $gpu_name } +dgpu-running = A GPU dedicada está ativa e pode reduzir a vida útil da bateria +dgpu-applications = Aplicativos usando a GPU dedicada { $gpu_name } diff --git a/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl b/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl index f5378e27..13f245e7 100644 --- a/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl +++ b/cosmic-applet-battery/i18n/zh-TW/cosmic_applet_battery.ftl @@ -6,9 +6,9 @@ performance = 高效能 performance-desc = 高效能與高耗電量。 max-charge = 將電池充電上限設定為 80%,以延長電池使用壽命 seconds = 秒 -minutes = 分 -hours = 時 +minutes = 分鍾 +hours = 小時 until-empty = 直到電量耗盡 power-settings = 電源與電池設定… dgpu-running = 獨立顯示卡已啟用,可能會縮短電池續航力 -dgpu-applications = 使用 { $gpu_name } 獨立顯示卡的應用程式 +dgpu-applications = 使用獨立顯示卡 { $gpu_name } 的應用程式 diff --git a/cosmic-applet-bluetooth/i18n/da/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/da/cosmic_applet_bluetooth.ftl index e69de29b..f95158bb 100644 --- a/cosmic-applet-bluetooth/i18n/da/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/da/cosmic_applet_bluetooth.ftl @@ -0,0 +1,12 @@ +cancel = Annuller +confirm-pin = Bekræft venligst, at følgende pinkode matcher den, der vises på { $deviceName } +bluetooth = Bluetooth +unsuccessful = Parring Mislykkedes +pairable = Parbare +try-again = Prøv Igen +check-device = Sørg for, at { $deviceName } er slået til, inden for rækkevidde og klar til parring. +other-devices = Andre Bluetooth-enheder +connected = Forbundet +confirm = Bekræft +settings = Bluetooth-indstillinger... +discoverable = Synlig diff --git a/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl index 269cddff..9d6e5223 100644 --- a/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl +++ b/cosmic-applet-bluetooth/i18n/en-GB/cosmic_applet_bluetooth.ftl @@ -1 +1,12 @@ cancel = Cancel +confirm-pin = Please confirm that the following PIN matches the one displayed on { $deviceName } +bluetooth = Bluetooth +unsuccessful = Pairing Unsuccessful +pairable = Pairable +try-again = Try Again +check-device = Make sure { $deviceName } is turned on, in range, and is ready to pair. +other-devices = Other Bluetooth devices +connected = Connected +confirm = Confirm +settings = Bluetooth settings... +discoverable = Discoverable diff --git a/cosmic-applet-bluetooth/i18n/gl/cosmic_applet_bluetooth.ftl b/cosmic-applet-bluetooth/i18n/gl/cosmic_applet_bluetooth.ftl new file mode 100644 index 00000000..c2424610 --- /dev/null +++ b/cosmic-applet-bluetooth/i18n/gl/cosmic_applet_bluetooth.ftl @@ -0,0 +1,12 @@ +cancel = Cancelar +bluetooth = Bluetooth +other-devices = Outros dispositivos Bluetooth +settings = Axustes Bluetooth… +connected = Conectado +confirm-pin = Por favor, confirme que o seguinte PIN coincide co que se mostra en{ $deviceName } +confirm = Confirmar +unsuccessful = Enparellamento non exitoso +check-device = Asegurate de que { $deviceName } está acendido, dentro do alcance e listo para emparellar. +try-again = Reintentar +discoverable = Atopable +pairable = Emparellable diff --git a/cosmic-applet-input-sources/i18n/da/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/da/cosmic_applet_input_sources.ftl index e69de29b..9759ea2a 100644 --- a/cosmic-applet-input-sources/i18n/da/cosmic_applet_input_sources.ftl +++ b/cosmic-applet-input-sources/i18n/da/cosmic_applet_input_sources.ftl @@ -0,0 +1,2 @@ +show-keyboard-layout = Vis Tastaturopsætning... +keyboard-settings = Tastaturindstillinger... diff --git a/cosmic-applet-input-sources/i18n/gl/cosmic_applet_input_sources.ftl b/cosmic-applet-input-sources/i18n/gl/cosmic_applet_input_sources.ftl new file mode 100644 index 00000000..85e8072c --- /dev/null +++ b/cosmic-applet-input-sources/i18n/gl/cosmic_applet_input_sources.ftl @@ -0,0 +1,2 @@ +show-keyboard-layout = Mostrar a disposición do teclado... +keyboard-settings = Axustes do teclado... diff --git a/cosmic-applet-network/i18n/da/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/da/cosmic_applet_network.ftl index e69de29b..23aecd3d 100644 --- a/cosmic-applet-network/i18n/da/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/da/cosmic_applet_network.ftl @@ -0,0 +1,6 @@ +cancel = Annuller +connected = Forbundet +connect = Opret forbindelse +wifi = Wi-Fi +identity = Identitet +network = Netværk diff --git a/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl index 269cddff..72b1d8d4 100644 --- a/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl +++ b/cosmic-applet-network/i18n/en-GB/cosmic_applet_network.ftl @@ -1 +1,2 @@ cancel = Cancel +connected = Connected diff --git a/cosmic-applet-network/i18n/gl/cosmic_applet_network.ftl b/cosmic-applet-network/i18n/gl/cosmic_applet_network.ftl new file mode 100644 index 00000000..33d76626 --- /dev/null +++ b/cosmic-applet-network/i18n/gl/cosmic_applet_network.ftl @@ -0,0 +1,24 @@ +cancel = Cancelar +connected = Conectado +connect = Conectar +identity = Identidade +wifi = Wi-Fi +network = Rede +airplane-mode = Modo avión +airplane-mode-on = O modo avión está activo +turn-off-airplane-mode = Desactívao para activar a wifi, o Bluetooth e a banda larga móbil. +ipv4 = Dirección IPv4 +ipv6 = Dirección IPv6 +mac = MAC +megabits-per-second = Mbps +gigabits-per-second = Gbps +terabits-per-second = Tbps +connecting = Conectando +settings = Axustes da rede... +visible-wireless-networks = Redes sen fíos visibles +vpn-connections = Conexións VPN +enter-password = Introduce o contrasinal ou a chave de cifrado +router-wps-button = Tamén podes conectarte premendo o botón "WPS" do router +unable-to-connect = Non se puido conectar á rede +check-wifi-connection = Asegúrate de que a wifi está conectada a Internet e de que o contrasinal é correcto +reset = Restablecer diff --git a/cosmic-applet-notifications/i18n/gl/cosmic_applet_notifications.ftl b/cosmic-applet-notifications/i18n/gl/cosmic_applet_notifications.ftl new file mode 100644 index 00000000..411d92c1 --- /dev/null +++ b/cosmic-applet-notifications/i18n/gl/cosmic_applet_notifications.ftl @@ -0,0 +1,19 @@ +hours-ago = + { $duration -> + [0] Xusto agora + [one] Hai 1 hora + *[other] Hai { $duration } horas + } +minutes-ago = + { $duration -> + [0] Xusto agora + [one] Hai 1 minuto + *[other] Hai { $duration } minutos + } +show-less = Mostrar menos +show-more = Mostrar { $more } máis +clear-group = Limpar grupo +clear-all = Limpar todas as notificacións +do-not-disturb = Non Molestar +notification-settings = Configuración das notificacións... +no-notifications = Sen notificacións diff --git a/cosmic-applet-power/i18n/gl/cosmic_applet_power.ftl b/cosmic-applet-power/i18n/gl/cosmic_applet_power.ftl new file mode 100644 index 00000000..50aff75b --- /dev/null +++ b/cosmic-applet-power/i18n/gl/cosmic_applet_power.ftl @@ -0,0 +1,36 @@ +power = Enerxía +settings = Axustes... +lock-screen = Pantalla de Bloqueo +lock-screen-shortcut = Super + Esc +log-out = Pechar Sesión +log-out-shortcut = Super + Maiús + Esc +suspend = Suspender +restart = Reiniciar +shutdown = Apagar +confirm = Confirmar +cancel = Cancelar +confirm-button = + { $action -> + [restart] { restart } + [suspend] { suspend } + [shutdown] Apagar + [log-out] { log-out } + *[other] { confirm } + } +confirm-title = + { $action -> + [restart] { restart } agora? + [suspend] { suspend } agora? + [shutdown] { shutdown } agora? + [log-out] Pechar todas as aplicacións e pechar a sesión agora? + *[other] Aplicar a acción seleccionada agora + } +confirm-body = + O sistema { $action -> + [restart] reiniciarase + [suspend] suspenderase + [shutdown] apagarase + [lock-screen] bloqueará a pantalla + [log-out] pechará a sesión + *[other] aplicará a acción seleccionada + } automaticamente en { $countdown } segundos. diff --git a/cosmic-applet-tiling/i18n/gl/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/gl/cosmic_applet_tiling.ftl new file mode 100644 index 00000000..1bd9f731 --- /dev/null +++ b/cosmic-applet-tiling/i18n/gl/cosmic_applet_tiling.ftl @@ -0,0 +1,20 @@ +tile-windows = Dispoñer as xanelas en mosaico automaticamente +tile-current = Dispoñer en mosaico o espazo de traballo actual +shortcuts = Atallos +navigate-windows = Navergar polas xanelas +move-window = Mover a xanela +toggle-floating-window = Alternar xanela flotante +view-all-shortcuts = Ver todos os atallos... +active-hint = Indicador de foco activo +gaps = Espazos +floating-window-exceptions = Excepcións de xanelas flotantes... +window-management-settings = Axustes da xestión de xanelas... +all-workspaces = Todos os espazos de traballo +per-workspace = Por espazo de traballo +super = Super +shift = Maiús +arrow-keys = frechas +tiled = En mosaico +floating = Flotante +autotile-behavior = Organizar as xanelas en mosaico nos espazos de traballo +new-workspace = Comportamento dos novos espazos de traballo diff --git a/cosmic-applet-tiling/i18n/nl/cosmic_applet_tiling.ftl b/cosmic-applet-tiling/i18n/nl/cosmic_applet_tiling.ftl index fcae7910..9b2c50bf 100644 --- a/cosmic-applet-tiling/i18n/nl/cosmic_applet_tiling.ftl +++ b/cosmic-applet-tiling/i18n/nl/cosmic_applet_tiling.ftl @@ -3,9 +3,9 @@ tile-current = Huidig werkblad tegelen shortcuts = Sneltoetsen navigate-windows = Tussen vensters schakelen move-window = Venster verplaatsen -toggle-floating-window = Zet zwevende vensters aan/uit +toggle-floating-window = Zweven aan- of uitzetten voor venster view-all-shortcuts = Alle sneltoetsen bekijken… -active-hint = Visuele hint actief venster +active-hint = Vensterfocus-aanduiding gaps = Ruimte rond getegelde vensters floating-window-exceptions = Uitzonderingen voor zwevende vensters… window-management-settings = Instellingen voor vensterbeheer… diff --git a/cosmic-applet-time/i18n/gl/cosmic_applet_time.ftl b/cosmic-applet-time/i18n/gl/cosmic_applet_time.ftl new file mode 100644 index 00000000..d00079ad --- /dev/null +++ b/cosmic-applet-time/i18n/gl/cosmic_applet_time.ftl @@ -0,0 +1 @@ +datetime-settings = Axustes de data, hora e calendario... diff --git a/cosmic-applet-workspaces/i18n/gl/cosmic_applet_workspaces.ftl b/cosmic-applet-workspaces/i18n/gl/cosmic_applet_workspaces.ftl new file mode 100644 index 00000000..a56114fd --- /dev/null +++ b/cosmic-applet-workspaces/i18n/gl/cosmic_applet_workspaces.ftl @@ -0,0 +1 @@ +cosmic-applet-workspaces = Espazos de traballo de COSMIC diff --git a/i18n/da/desktop_entries.ftl b/i18n/da/desktop_entries.ftl index e69de29b..6026b028 100644 --- a/i18n/da/desktop_entries.ftl +++ b/i18n/da/desktop_entries.ftl @@ -0,0 +1,51 @@ +cosmic-app-list = Programbakke +cosmic-app-list-comment = Start fastgjorte apps og håndter åbne vinduer +cosmic-app-list-keywords = COSMIC;Applet;App;Statusområde;Liste;Opgave;Bjælke; +cosmic-applet-a11y = Tilgængelighed +cosmic-applet-a11y-comment = Konfigurer tilgængelighedsindstillinger fra panelet +cosmic-applet-a11y-keywords = COSMIC;Applet;Tilgængelighed;A11y;Skærm;Skærmlæser;Forstørrelsesglas;Kontrast;Farve; +cosmic-applet-audio = Lyd +cosmic-applet-audio-comment = Valg af lydenhed, lydstyrkekontrol og MPRIS-mediekontrol +cosmic-applet-audio-keywords = COSMIC;Applet;Lyd;Lyd;MPRIS; +cosmic-applet-battery = Strøm og batteri +cosmic-applet-battery-comment = Strømtilstande og strømspareindstillinger +cosmic-applet-battery-keywords = COSMIC;Applet;Strøm;Batteri; +cosmic-applet-bluetooth = Bluetooth +cosmic-applet-bluetooth-comment = Administrer Bluetooth-enheder +cosmic-applet-bluetooth-keywords = COSMIC;Applet;Bluetooth; +cosmic-applet-input-sources = Inputkilder +cosmic-applet-input-sources-comment = Skift mellem inputkilder +cosmic-applet-input-sources-keywords = COSMIC;Applet;Input;Kilde; +cosmic-applet-minimize = Minimerede vinduer +cosmic-applet-minimize-comment = Administrer minimerede vinduer +cosmic-applet-minimize-keywords = COSMIC;Applet;Minimer; +cosmic-applet-network = Netværk +cosmic-applet-network-comment = Administrer netværksforbindelser +cosmic-applet-network-keywords = COSMIC;Applet;Netværk; +cosmic-applet-notifications = Notifikationscenter +cosmic-applet-notifications-comment = Administrer notifikationer og Forstyr ikke +cosmic-applet-notifications-keywords = COSMIC;Applet;Notifikation; +cosmic-applet-power = Brugersession +cosmic-applet-power-comment = Låseskærm, log ud, dvale, genstart og luk ned +cosmic-applet-power-keywords = COSMIC;Applet;Bruger;Session;Lås;Log;Genstart;Luk ned;Dvale; +cosmic-applet-status-area = Notifikationsområde +cosmic-applet-status-area-comment = Programindikatorer, som kan eksportere menuer til panelet +cosmic-applet-status-area-keywords = COSMIC;Applet;App;Indikator;Notifikation;Statusområde;Status; +cosmic-applet-tiling = Opdeling +cosmic-applet-tiling-comment = Administrer aktiv hint samt automatisk opdeling for aktuelt og pr. arbejdsområde +cosmic-applet-tiling-keywords = COSMIC;Applet;Opdeling;Hint;Arbejdsområde; +cosmic-applet-time = Dato, tid og kalender +cosmic-applet-time-comment = Vis den aktuelle tid i panelet med en kalenderpopup +cosmic-applet-time-keywords = COSMIC;Applet;Dato;Tid;Kalender; +cosmic-applet-workspaces = Nummererede arbejdsområder +cosmic-applet-workspaces-comment = Skift mellem nummererede arbejdsområder i panelet +cosmic-applet-workspaces-keywords = COSMIC;Applet;Arbejdsområde; +cosmic-panel-app-button = Appbibliotek-knap +cosmic-panel-app-button-comment = Åbn applikationsbiblioteket for at starte installerede programmer +cosmic-panel-app-button-keywords = COSMIC;Applet;App;Bibliotek;Statusområde; +cosmic-panel-launcher-button = Starterknap +cosmic-panel-launcher-button-keywords = COSMIC;Applet;Starter;Kører; +cosmic-panel-workspaces-button = Arbejdsområdeknap +cosmic-panel-workspaces-button-comment = Åbn oversigten over arbejdsområder for at administrere og skifte mellem arbejdsområder +cosmic-panel-workspaces-button-keywords = COSMIC;Applet;Arbejdsområde;Oversigt; +cosmic-panel-launcher-button-comment = Åbn starteren for at søge efter programmer og køre kommandoer diff --git a/i18n/de/desktop_entries.ftl b/i18n/de/desktop_entries.ftl index 6cb50a22..fd41e5be 100644 --- a/i18n/de/desktop_entries.ftl +++ b/i18n/de/desktop_entries.ftl @@ -37,7 +37,7 @@ cosmic-app-list-comment = Angeheftete Apps starten und geöffnete Fenster verwal cosmic-applet-a11y-comment = Einstellungen für Barrierefreiheit über das Panel konfigurieren cosmic-applet-power-comment = Bildschirm sperren, abmelden, anhalten, neu starten und herunterfahren cosmic-applet-status-area = Benachrichtigungsübersicht -cosmic-applet-time-comment = Aktuelle Uhrzeit im Fenster mit einem Kalender-Popup anzeigen +cosmic-applet-time-comment = Aktuelle Uhrzeit im Panel mit einem Kalender-Popup anzeigen cosmic-panel-app-button-comment = Öffne die Anwendungsbibliothek, um installierte Anwendungen zu starten cosmic-panel-launcher-button-comment = Öffne den Starter, um nach Anwendungen zu suchen und Befehle auszuführen cosmic-panel-workspaces-button-comment = Öffne die Arbeitsflächenübersicht, um Arbeitsflächen zu verwalten und zwischen ihnen zu wechseln diff --git a/i18n/gl/desktop_entries.ftl b/i18n/gl/desktop_entries.ftl new file mode 100644 index 00000000..01a642f4 --- /dev/null +++ b/i18n/gl/desktop_entries.ftl @@ -0,0 +1,51 @@ +cosmic-app-list = Bandexa de aplicacións +cosmic-app-list-comment = Inicia as aplicacións fixadas e xestiona as xanelas abertas +cosmic-app-list-keywords = COSMIC;Miniaplicación;Aplicación;Bandexa;Lista;Tarefa;Barra; +cosmic-applet-a11y = Accesibilidade +cosmic-applet-a11y-comment = Configurar os axustes de accesibilidade dende o panel +cosmic-applet-a11y-keywords = COSMIC;Miniaplicación;Accesibilidade;A11y;Pantalla;Lector;Lupa;Contraste;Cor; +cosmic-applet-audio = Son +cosmic-applet-audio-comment = Selección do dispositivo de son, control do volume e controis multimedia MPRIS +cosmic-applet-audio-keywords = COSMIC;Miniaplicación;Son;Audio;MPRIS; +cosmic-applet-battery = Enerxía e Batería +cosmic-applet-battery-comment = Modos de enerxía e opcións de aforro enerxético +cosmic-applet-battery-keywords = COSMIC;Miniaplicación;Enerxía;Batería; +cosmic-applet-bluetooth = Bluetooth +cosmic-applet-bluetooth-comment = Xestionar dispositivos Bluetooth +cosmic-applet-bluetooth-keywords = COSMIC;Miniaplicación;Bluetooth; +cosmic-applet-input-sources = Fontes de Entrada +cosmic-applet-input-sources-comment = Cambiar entre fontes de entrada +cosmic-applet-input-sources-keywords = COSMIC;Miniaplicación;Entrada;Fonte; +cosmic-applet-minimize = Xanelas minimizadas +cosmic-applet-minimize-comment = Xestionar xanelas minimizadas +cosmic-applet-minimize-keywords = COSMIC;Miniaplicación;Minimizar; +cosmic-applet-network = Rede +cosmic-applet-network-comment = Xestionar as conexións de rede +cosmic-applet-network-keywords = COSMIC;Miniaplicación;Rede; +cosmic-applet-notifications = Centro de notificacións +cosmic-applet-notifications-comment = Xestionar as notificacións e o modo Non molestar +cosmic-applet-notifications-keywords = COSMIC;Miniaplicación;Notificación; +cosmic-applet-power = Sesión de usuario +cosmic-applet-power-comment = Bloquear a pantalla, pechar a sesión, suspender, reiniciar e apagar +cosmic-applet-power-keywords = COSMIC;Miniaplicación;Usuario;Sesión;Bloquear;Pechar sesión;Reiniciar;Apagar;Suspender; +cosmic-applet-status-area = Bandexa de Notificacións +cosmic-applet-status-area-comment = Indicadores de aplicación que poden exportar menús ao panel +cosmic-applet-status-area-keywords = COSMIC;Miniaplicación;Aplicación;Indicador;Notificación;Bandexa;Estado; +cosmic-applet-tiling = Mosaico +cosmic-applet-tiling-comment = Xestiona a indicación activa e o mosaico automático actual e por espazo de traballo +cosmic-applet-tiling-keywords = COSMIC;Miniaplicación;Mosaico;Indicación;Espazo de traballo; +cosmic-applet-time = Data, hora e calendario +cosmic-applet-time-comment = Mostra a hora actual no panel cun calendario emerxente +cosmic-applet-time-keywords = COSMIC;Miniaplicación;Data;Hora;Calendario; +cosmic-applet-workspaces = Espazos de traballo numerados +cosmic-applet-workspaces-comment = Cambia entre os espazos de traballo numerados desde o panel +cosmic-applet-workspaces-keywords = COSMIC;Miniaplicación;Espazo de traballo; +cosmic-panel-app-button = Botón da biblioteca de aplicacións +cosmic-panel-app-button-comment = Abre a biblioteca de aplicacións para iniciar as aplicacións instaladas +cosmic-panel-app-button-keywords = COSMIC;Miniaplicación;Aplicación;Biblioteca;Bandexa; +cosmic-panel-launcher-button = Botón do lanzador +cosmic-panel-launcher-button-comment = Abre o lanzador para buscar aplicacións e executar ordes +cosmic-panel-launcher-button-keywords = COSMIC;Miniaplicación;Lanzador;Executor de ordes; +cosmic-panel-workspaces-button = Botón dos espazos de traballo +cosmic-panel-workspaces-button-comment = Abre a vista xeral dos espazos de traballo para xestionalos e cambiar entre eles +cosmic-panel-workspaces-button-keywords = COSMIC;Miniaplicación;Espazo de traballo;Vista xeral; diff --git a/i18n/it/desktop_entries.ftl b/i18n/it/desktop_entries.ftl index 083337f3..e15f8291 100644 --- a/i18n/it/desktop_entries.ftl +++ b/i18n/it/desktop_entries.ftl @@ -46,3 +46,5 @@ cosmic-applet-status-area-keywords = COSMIC;Applet;Applicazione;Indicatore;Notif cosmic-applet-tiling-keywords = COSMIC;Applet;Affiancamento;Suggerimento;Area di lavoro; cosmic-applet-time-keywords = COSMIC;Applet;Data;Ora;Calendario; cosmic-applet-workspaces-keywords = COSMIC;Applet;Area di lavoro; +cosmic-panel-app-button-keywords = COSMIC;Applet;App;Libreria;Tray; +cosmic-panel-launcher-button-keywords = COSMIC;Applet;Launcher;Runner; diff --git a/i18n/nl/desktop_entries.ftl b/i18n/nl/desktop_entries.ftl index 6a65d46b..aee16383 100644 --- a/i18n/nl/desktop_entries.ftl +++ b/i18n/nl/desktop_entries.ftl @@ -8,10 +8,44 @@ cosmic-applet-minimize = Geminimaliseerde vensters cosmic-applet-network = Netwerk cosmic-applet-notifications = Meldingscentrum cosmic-applet-power = Gebruikerssessie -cosmic-applet-status-area = Meldingsvlak +cosmic-applet-status-area = Statusvak cosmic-applet-tiling = Vensters tegelen -cosmic-applet-time = Datum, tijd en agenda +cosmic-applet-time = Datum, tijd, en agenda cosmic-applet-workspaces = Genummerde werkbladen -cosmic-panel-app-button = Knop appbibliotheek -cosmic-panel-launcher-button = Knop snelstarter -cosmic-panel-workspaces-button = Knop werkbladenoverzicht +cosmic-panel-app-button = Toepassingskiezersknop +cosmic-panel-launcher-button = Snelstarterknop +cosmic-panel-workspaces-button = Werkbladoverzichtsknop +cosmic-applet-battery-comment = Instellingen voor prestaties en energieverbruik +cosmic-applet-a11y-comment = Pas toegankelijkheidsinstellingen aan via het paneel +cosmic-applet-input-sources-comment = Schakel tussen invoerbronnen +cosmic-applet-workspaces-comment = Schakel tussen genummerde werkbladen via het paneel +cosmic-app-list-comment = Start vastgemaakte toepassingen en beheer openstaande vensters +cosmic-applet-audio-comment = Beheer audioapparaten, volume-instellingen, en mediaspelers +cosmic-applet-audio-keywords = COSMIC;Applet;Geluid;Audio;MPRIS; +cosmic-applet-battery-keywords = COSMIC;Applet;Energie;Verbruik;Energieverbruik;Batterij;Stroom; +cosmic-applet-bluetooth-comment = Beheer Bluetooth-apparaten +cosmic-applet-bluetooth-keywords = COSMIC;Applet;Bluetooth; +cosmic-applet-input-sources-keywords = COSMIC;Applet;Invoer;Bron;Methode;Invoerbron;Invoermethode; +cosmic-applet-minimize-comment = Beheer geminimaliseerde vensters +cosmic-applet-network-comment = Beheer netwerkverbindingen +cosmic-applet-network-keywords = COSMIC;Applet;Netwerk; +cosmic-applet-notifications-comment = Beheer meldingen en niet storen +cosmic-applet-notifications-keywords = COSMIC;Applet;Melding; +cosmic-applet-power-comment = Vergrendel scherm, afmelden, slaapstand, herstarten, en afsluiten +cosmic-app-list-keywords = COSMIC;Applet;Toepassing;Taakbalk;Lijst;Taken;Balk; +cosmic-applet-a11y-keywords = COSMIC;Applets;Toegankelijkheid;A11y;Schermlezer;Vergrootglas;Contrast;Kleur; +cosmic-applet-minimize-keywords = COSMIC;Applet;Minimaliseer;Geminimaliseerd; +cosmic-applet-power-keywords = COSMIC;Applet;Gebruiker;Sessie;Vergrendelen;Afmelden;Opnieuw;Opstarten;Herstarten;Afsluiten;Slaapstand; +cosmic-applet-status-area-comment = Statusindicators met contextmenu's van toepassingen +cosmic-applet-tiling-comment = Beheer de vensterfocus-aanduiding en tegelen voor huidige en nieuwe werkbladen +cosmic-applet-tiling-keywords = COSMIC;Applet;Tegelen;Venster;Focus;Aanduiding;Werkblad; +cosmic-applet-time-comment = Toon de huidige datum en tijd met een pop-upagenda in het paneel +cosmic-applet-time-keywords = COSMIC;Applet;Datum;Tijd;Agenda; +cosmic-applet-workspaces-keywords = COSMIC;Applet;Werkblad; +cosmic-panel-app-button-comment = Open de toepassingskiezer om geïnstalleerde toepassingen te starten +cosmic-panel-app-button-keywords = COSMIC;Applet;Toepassing;Kiezer;Toepassingskiezer; +cosmic-panel-launcher-button-comment = Open de snelstarter om toepassingen te zoeken en commando's uit te voeren +cosmic-panel-launcher-button-keywords = COSMIC;Applet;Snelstarter;Uitvoeren; +cosmic-panel-workspaces-button-comment = Open het werkbladoverzicht om tussen werkbladen te schakelen en ze te beheren +cosmic-panel-workspaces-button-keywords = COSMIC;Applet;Werkblad;Overzicht;Werkbladoverzicht; +cosmic-applet-status-area-keywords = COSMIC;Applet;Toepassing;Indicator;Status;Vak; diff --git a/i18n/oc/desktop_entries.ftl b/i18n/oc/desktop_entries.ftl index e69de29b..894d5e1d 100644 --- a/i18n/oc/desktop_entries.ftl +++ b/i18n/oc/desktop_entries.ftl @@ -0,0 +1,19 @@ +cosmic-app-list = Cinta d’aplicacions +cosmic-app-list-comment = Lançar d’aplicacions penjadas e gerir las fenèstras dobèrtas +cosmic-app-list-keywords = COSMIC;Applet;Ajuston;Microaplicacion;Miniaplicacion;App;Aplicacion;Cinta;Lista;Prètzfach;Prètzfait;Barra; +cosmic-applet-a11y = Accessibilitat +cosmic-applet-a11y-comment = Configurar los paramètres d’accessibilitat del panèl estant +cosmic-applet-audio = Son +cosmic-applet-battery = Energia e batariá +cosmic-applet-battery-comment = Mòdes d’energia e opcions d’estalvi d’energia +cosmic-applet-bluetooth = Bluetooth +cosmic-applet-bluetooth-comment = Gerir los aparelhs Bluetooth +cosmic-applet-input-sources = Fonts d’entrada +cosmic-applet-network = Ret +cosmic-applet-network-comment = Gerir las connexion ret +cosmic-applet-notifications = Centre de notificacions +cosmic-applet-notifications-comment = Gerir las notificacions e lo mòde Destorbar pas +cosmic-applet-power = Session utilizaire +cosmic-applet-status-area = Cinta de notificacions +cosmic-applet-time = Data, ora e calendièr +cosmic-applet-workspaces = Espacis de trabalha numerotats diff --git a/i18n/pt/desktop_entries.ftl b/i18n/pt/desktop_entries.ftl index 1fe912c3..68cc145a 100644 --- a/i18n/pt/desktop_entries.ftl +++ b/i18n/pt/desktop_entries.ftl @@ -21,7 +21,7 @@ cosmic-applet-workspaces-keywords = COSMIC;Miniaplicação;Applet;Área;Trabalho cosmic-panel-workspaces-button-comment = Abrir a visão geral das áreas de trabalho para gerir e alternar entre elas cosmic-panel-workspaces-button-keywords = COSMIC;Miniaplicação;Applet;Área;Trabalho;Visão;Geral; cosmic-applet-a11y-comment = Configurar definições de acessibilidade a partir do painel -cosmic-applet-battery = Energia e Bateria +cosmic-applet-battery = Energia e bateria cosmic-app-list-keywords = COSMIC;Miniaplicação;Applet;Aplicação;Bandeja;Lista;Tarefa;Barra; cosmic-applet-a11y-keywords = COSMIC;Miniaplicação;Applet;Acessibilidade;A11y;Ecrã;Leitor;Lupa;Ampliador;Contraste;Cor; cosmic-applet-audio-keywords = COSMIC;Miniaplicação;Applet;Som;Áudio;MPRIS; diff --git a/i18n/sat/desktop_entries.ftl b/i18n/sat/desktop_entries.ftl index e69de29b..3bef0114 100644 --- a/i18n/sat/desktop_entries.ftl +++ b/i18n/sat/desktop_entries.ftl @@ -0,0 +1,10 @@ +cosmic-applet-a11y-keywords = COSMIC; ᱮᱯᱞᱮᱴ; ᱮᱠᱥᱮᱥᱤᱵᱤᱞᱤᱴᱤ; A11y; ᱥᱠᱨᱤᱱ; ᱨᱤᱰᱟᱨ; ᱢᱮᱜᱽᱱᱤᱯᱷᱟᱭᱟᱨ; ᱠᱚᱱᱴᱨᱟᱥᱴ; ᱨᱚᱝ; +cosmic-applet-bluetooth-comment = ᱵᱞᱩᱴᱩᱛᱷ ᱥᱟᱫᱷᱚᱱ ᱠᱚ ᱥᱚᱢᱵᱷᱲᱟᱣ ᱢᱮ +cosmic-applet-input-sources-comment = ᱤᱱᱯᱩᱴ ᱥᱚᱨᱥ ᱠᱚ ᱛᱟᱞᱟ ᱨᱮ ᱵᱚᱫᱚᱞ ᱢᱮ +cosmic-applet-input-sources-keywords = ᱠᱚᱥᱢᱤᱠ; ᱮᱯᱞᱮᱴ; ᱤᱱᱯᱩᱴ; ᱥᱨᱚᱛ; +cosmic-applet-minimize = ᱦᱩᱰᱤᱧ ᱟᱠᱟᱱ ᱡᱟᱨᱞᱟ +cosmic-applet-status-area = ᱱᱚᱴᱤᱯᱷᱤᱠᱮᱥᱚᱱ ᱴᱨᱮ +cosmic-applet-status-area-comment = ᱮᱯᱞᱤᱠᱮᱥᱚᱱ ᱤᱱᱰᱤᱠᱮᱴᱚᱨ ᱚᱠᱟ ᱫᱚ ᱯᱮᱱᱮᱞ ᱨᱮ ᱢᱮᱱᱭᱩᱥ ᱮ ᱮᱠᱥᱯᱚᱨᱴ ᱫᱟᱲᱮᱭᱟᱜᱼᱟ +cosmic-applet-status-area-keywords = ᱠᱚᱥᱢᱤᱠ; ᱮᱯᱞᱮᱴ; ᱮᱯ; ᱤᱱᱰᱤᱠᱮᱴᱚᱨ; ᱱᱚᱴᱤᱯᱷᱤᱠᱮᱥᱚᱱ; ᱴᱨᱮ; ᱥᱴᱮᱴᱟᱥ; +cosmic-applet-time = ᱢᱟᱦᱟᱸ, ᱚᱠᱛᱚ ᱟᱨ ᱠᱮᱞᱮᱱᱰᱟᱨ +cosmic-panel-launcher-button = ᱞᱚᱱᱪᱟᱨ ᱵᱩᱛᱟᱢ From 73d727814c25864eb24c0b0f573c44ad5f1fc239 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 16 Jul 2026 07:05:25 +0200 Subject: [PATCH 83/84] fix(audio): debounce volume updates by 128ms --- cosmic-applet-audio/src/lib.rs | 93 ++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 31 deletions(-) diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index 508bd6e8..515acb04 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -33,10 +33,15 @@ use cosmic::{ }; use cosmic_settings_audio_client::{self as audio_client, CosmicAudioProxy}; use futures::SinkExt; -use iced::platform_specific::shell::wayland::commands::popup::{destroy_popup, get_popup}; use mpris_subscription::{MprisRequest, MprisUpdate}; use mpris2_zbus::player::PlaybackStatus; -use std::{cell::RefCell, rc::Rc, sync::Arc}; +use std::{ + sync::{ + Arc, + atomic::{self, AtomicU32}, + }, + time::Duration, +}; mod config; mod mpris_subscription; @@ -58,11 +63,15 @@ pub struct Audio { /// Track the applet's popup window. popup: Option, /// Varlink connection to `com.system76.CosmicSettings.Audio`. - audio_client: Option>>, + audio_client: Option, /// Known audio device state model: model::Model, /// Whether to expand the revealer of a source or sink device. is_open: IsOpen, + /// Used to debounce sink volume updates. + applied_sink_volume: Arc, + /// Used to deboune source volume updates. + applied_source_volume: Arc, /// Max slider volume for the sink device, as determined by the amplification property. max_sink_volume: u32, /// Max slider volume for the source device, as determined by the amplification property. @@ -125,26 +134,27 @@ enum IsOpen { pub enum Message { /// Connection to `com.system76.CosmicSettings`. Client(Arc), - Ignore, - SetSinkVolume(u32), - SetSourceVolume(u32), - ToggleSinkMute, - ToggleSourceMute, - SetDefaultSink(usize), - SetDefaultSource(usize), - OutputToggle, - InputToggle, - TogglePopup, CloseRequested(window::Id), - ToggleMediaControlsInTopPanel(bool), ConfigChanged(AudioAppletConfig), + Ignore, + InputToggle, Mpris(mpris_subscription::MprisUpdate), MprisRequest(MprisRequest), - Token(TokenUpdate), OpenSettings, + OutputToggle, + ReattachClient(Arc), + Rectangle(RectangleUpdate), + SetDefaultSink(usize), + SetDefaultSource(usize), + SetSinkVolume(u32), + SetSourceVolume(u32), Subscription(audio_client::Event), Surface(surface::Action), - Rectangle(RectangleUpdate), + ToggleMediaControlsInTopPanel(bool), + TogglePopup, + ToggleSinkMute, + ToggleSourceMute, + Token(TokenUpdate), } // TODO @@ -287,6 +297,11 @@ impl cosmic::Application for Audio { self.rectangle_tracker.replace(tracker); } }, + Message::ReattachClient(client) => { + if let Some(client) = Arc::into_inner(client) { + self.audio_client = Some(client); + } + } Message::Ignore => {} Message::TogglePopup => { if let Some(p) = self.popup.take() { @@ -359,7 +374,7 @@ impl cosmic::Application for Audio { && let Some(client) = self.audio_client.as_mut() { futures::executor::block_on(async { - _ = client.borrow_mut().conn.set_default(node_id, true).await; + _ = client.conn.set_default(node_id, true).await; }); } } @@ -370,7 +385,7 @@ impl cosmic::Application for Audio { && let Some(client) = self.audio_client.as_mut() { futures::executor::block_on(async { - _ = client.borrow_mut().conn.set_default(node_id, true).await; + _ = client.conn.set_default(node_id, true).await; }); } } @@ -378,7 +393,7 @@ impl cosmic::Application for Audio { Message::ToggleSinkMute => { if let Some(ref mut client) = self.audio_client { futures::executor::block_on(async { - _ = client.borrow_mut().conn.sink_mute_toggle().await; + _ = client.conn.sink_mute_toggle().await; }); } } @@ -386,27 +401,43 @@ impl cosmic::Application for Audio { Message::ToggleSourceMute => { if let Some(ref mut client) = self.audio_client { futures::executor::block_on(async { - _ = client.borrow_mut().conn.source_mute_toggle().await; + _ = client.conn.source_mute_toggle().await; }); } } Message::SetSinkVolume(volume) => { - if let Some(ref mut client) = self.audio_client { - self.model.active_sink.volume = volume; - self.model.active_sink.volume_text = volume.to_string(); - futures::executor::block_on(async { - _ = client.borrow_mut().conn.set_sink_volume(volume).await; + self.applied_sink_volume + .store(volume, atomic::Ordering::Relaxed); + self.model.active_sink.volume = volume; + self.model.active_sink.volume_text = volume.to_string(); + if let Some(mut client) = self.audio_client.take() { + let volume = Arc::clone(&self.applied_sink_volume); + return cosmic::Task::future(async move { + tokio::time::sleep(Duration::from_millis(128)).await; + _ = client + .conn + .set_sink_volume(volume.load(atomic::Ordering::Relaxed)) + .await; + Message::ReattachClient(Arc::new(client)).into() }); } } Message::SetSourceVolume(volume) => { - if let Some(ref mut client) = self.audio_client { - self.model.active_source.volume = volume; - self.model.active_source.volume_text = volume.to_string(); - futures::executor::block_on(async { - _ = client.borrow_mut().conn.set_source_volume(volume).await; + self.applied_source_volume + .store(volume, atomic::Ordering::Relaxed); + self.model.active_source.volume = volume; + self.model.active_source.volume_text = volume.to_string(); + if let Some(mut client) = self.audio_client.take() { + let volume = Arc::clone(&self.applied_source_volume); + return cosmic::Task::future(async move { + tokio::time::sleep(Duration::from_millis(128)).await; + _ = client + .conn + .set_sink_volume(volume.load(atomic::Ordering::Relaxed)) + .await; + Message::ReattachClient(Arc::new(client)).into() }); } } @@ -517,7 +548,7 @@ impl cosmic::Application for Audio { } Message::Client(client) => { if let Some(client) = Arc::into_inner(client) { - self.audio_client = Some(Rc::new(RefCell::new(client))); + self.audio_client = Some(client); self.model = model::Model::default(); } } From b2126a9f2b4316d63ffcb66d2fcb4129b0ba303a Mon Sep 17 00:00:00 2001 From: Lionel DARNIS Date: Wed, 19 Aug 2026 22:18:37 +0200 Subject: [PATCH 84/84] fix: appeler refresh_volume_limits sur app, pas self Le patch yoda 5b838a67 est conserve (il initialise les plafonds sink ET source, contrairement au code inline amont) mais il est desormais dans une closure recevant `app: &mut Self` : l appel sur `self` ne compilait plus. Co-Authored-By: Claude Opus 5 (1M context) --- Cargo.lock | 536 +++++++++++---------------------- cosmic-applet-audio/src/lib.rs | 2 +- 2 files changed, 183 insertions(+), 355 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 356ec0c8..b0754023 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -223,12 +223,6 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" -[[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" - [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -380,7 +374,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -415,7 +409,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -480,7 +474,7 @@ dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -648,6 +642,13 @@ dependencies = [ "num-traits", ] +[[package]] +name = "build_helpers" +version = "0.14.0" +dependencies = [ + "cfg_aliases", +] + [[package]] name = "bumpalo" version = "3.20.3" @@ -677,7 +678,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -775,7 +776,6 @@ dependencies = [ [[package]] name = "clipboard_macos" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "objc", "objc-foundation", @@ -785,22 +785,12 @@ dependencies = [ [[package]] name = "clipboard_wayland" version = "0.2.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "dnd", "mime 0.1.0", "smithay-clipboard", ] -[[package]] -name = "clipboard_x11" -version = "0.4.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" -dependencies = [ - "thiserror 1.0.69", - "x11rb", -] - [[package]] name = "cocoa" version = "0.25.0" @@ -951,7 +941,7 @@ dependencies = [ [[package]] name = "cosmic-app-list" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-app-list-config", @@ -962,7 +952,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "image", - "libcosmic", + "libcosmic-yoda", "memmap2 0.9.11", "rust-embed", "rustc-hash 2.1.3", @@ -978,15 +968,15 @@ dependencies = [ [[package]] name = "cosmic-app-list-config" -version = "1.0.15" +version = "1.3.0" dependencies = [ - "libcosmic", + "libcosmic-yoda", "serde", ] [[package]] name = "cosmic-applet-a11y" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -995,7 +985,7 @@ dependencies = [ "cosmic-settings-accessibility-subscription", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1005,14 +995,14 @@ dependencies = [ [[package]] name = "cosmic-applet-audio" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-settings-audio-client", "futures", "i18n-embed", "i18n-embed-fl", "intmap", - "libcosmic", + "libcosmic-yoda", "mpris2-zbus", "rust-embed", "serde", @@ -1028,18 +1018,18 @@ dependencies = [ [[package]] name = "cosmic-applet-battery" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-applets-config", "cosmic-config", "cosmic-settings-daemon-subscription", "cosmic-settings-upower-subscription", - "drm 0.14.1", + "drm", "futures", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "rustc-hash 2.1.3", "serde", @@ -1053,7 +1043,7 @@ dependencies = [ [[package]] name = "cosmic-applet-bluetooth" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "bluer", @@ -1061,7 +1051,7 @@ dependencies = [ "futures", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "rustc-hash 2.1.3", "tokio", @@ -1072,14 +1062,14 @@ dependencies = [ [[package]] name = "cosmic-applet-input-sources" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-client-toolkit", "cosmic-comp-config", "futures", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1090,13 +1080,13 @@ dependencies = [ [[package]] name = "cosmic-applet-minimize" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "i18n-embed", "i18n-embed-fl", "image", - "libcosmic", + "libcosmic-yoda", "memmap2 0.9.11", "rust-embed", "rustix 1.1.4", @@ -1108,7 +1098,7 @@ dependencies = [ [[package]] name = "cosmic-applet-network" -version = "1.0.15" +version = "1.3.0" dependencies = [ "async-fn-stream", "futures", @@ -1116,7 +1106,7 @@ dependencies = [ "i18n-embed", "i18n-embed-fl", "indexmap 2.14.0", - "libcosmic", + "libcosmic-yoda", "nmrs", "rust-embed", "rustc-hash 2.1.3", @@ -1130,7 +1120,7 @@ dependencies = [ [[package]] name = "cosmic-applet-notifications" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-notifications-config", @@ -1138,7 +1128,7 @@ dependencies = [ "futures-util", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1150,11 +1140,11 @@ dependencies = [ [[package]] name = "cosmic-applet-power" -version = "1.0.15" +version = "1.3.0" dependencies = [ "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "logind-zbus", "rust-embed", "rustix 1.1.4", @@ -1167,10 +1157,10 @@ dependencies = [ [[package]] name = "cosmic-applet-status-area" -version = "1.0.15" +version = "1.3.0" dependencies = [ "futures", - "libcosmic", + "libcosmic-yoda", "rustc-hash 2.1.3", "serde", "tokio", @@ -1182,7 +1172,7 @@ dependencies = [ [[package]] name = "cosmic-applet-tiling" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-client-toolkit", @@ -1190,7 +1180,7 @@ dependencies = [ "cosmic-protocols", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "rustc-hash 2.1.3", "tokio", @@ -1201,14 +1191,14 @@ dependencies = [ [[package]] name = "cosmic-applet-time" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-applets-config", "i18n-embed", "i18n-embed-fl", "icu", "jiff", - "libcosmic", + "libcosmic-yoda", "logind-zbus", "rust-embed", "timedate-zbus", @@ -1221,14 +1211,14 @@ dependencies = [ [[package]] name = "cosmic-applet-workspaces" -version = "1.0.15" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-client-toolkit", "futures", "i18n-embed", "i18n-embed-fl", - "libcosmic", + "libcosmic-yoda", "rust-embed", "tokio", "tracing", @@ -1238,7 +1228,7 @@ dependencies = [ [[package]] name = "cosmic-applets" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-app-list", "cosmic-applet-a11y", @@ -1255,7 +1245,7 @@ dependencies = [ "cosmic-applet-time", "cosmic-applet-workspaces", "cosmic-panel-button", - "libcosmic", + "libcosmic-yoda", "tracing", "tracing-log", "tracing-subscriber", @@ -1264,7 +1254,7 @@ dependencies = [ [[package]] name = "cosmic-applets-config" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-config", "serde", @@ -1273,7 +1263,6 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f" dependencies = [ "bitflags 2.13.0", "cosmic-protocols", @@ -1285,8 +1274,7 @@ dependencies = [ [[package]] name = "cosmic-comp-config" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-comp.git?rev=5eb5af4#5eb5af46756f2f2bc5e812cf68fe4c4b79efd924" +version = "1.0.0" dependencies = [ "cosmic-config", "input", @@ -1296,7 +1284,6 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1317,10 +1304,9 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1334,7 +1320,6 @@ dependencies = [ [[package]] name = "cosmic-freedesktop-icons" version = "0.4.0" -source = "git+https://github.com/pop-os/freedesktop-icons#ab4c57b8e416c6af9297cb04d101889896fd9a92" dependencies = [ "bstr", "btoi", @@ -1348,7 +1333,6 @@ dependencies = [ [[package]] name = "cosmic-notifications-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#7c723b7705ec77b1ad5396a1baa9ae1c0cb5a0da" dependencies = [ "cosmic-config", "serde", @@ -1357,10 +1341,9 @@ dependencies = [ [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#7c723b7705ec77b1ad5396a1baa9ae1c0cb5a0da" dependencies = [ "fast_image_resize", - "libcosmic", + "libcosmic-yoda", "serde", "tl", "tracing", @@ -1370,10 +1353,10 @@ dependencies = [ [[package]] name = "cosmic-panel-button" -version = "1.0.15" +version = "1.3.0" dependencies = [ "cosmic-config", - "libcosmic", + "libcosmic-yoda", "rustc-hash 2.1.3", "serde", "tracing", @@ -1383,8 +1366,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#d520b1e9ef2c990cbb57a8c5838ce94b7d75530a" +version = "1.3.0" dependencies = [ "anyhow", "cosmic-config", @@ -1398,7 +1380,6 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols//?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f" dependencies = [ "bitflags 2.13.0", "wayland-backend", @@ -1412,7 +1393,6 @@ dependencies = [ [[package]] name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "cosmic-protocols", "iced_futures", @@ -1426,7 +1406,6 @@ dependencies = [ [[package]] name = "cosmic-settings-accessibility-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "cosmic-dbus-a11y", "futures", @@ -1439,7 +1418,6 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-client" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#8c54bbbc10485c31e8717c21e119e19b87eeb3ea" dependencies = [ "cosmic-settings-audio-core", "dirs", @@ -1455,7 +1433,6 @@ dependencies = [ [[package]] name = "cosmic-settings-audio-core" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#8c54bbbc10485c31e8717c21e119e19b87eeb3ea" dependencies = [ "dirs", "ron 0.12.2", @@ -1466,7 +1443,6 @@ dependencies = [ [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#1af414fc6cb9080349847382a66db9fd69dbe964" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1478,8 +1454,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon" -version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" +version = "0.1.1-yoda.1" dependencies = [ "zbus", ] @@ -1487,7 +1462,6 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "futures", "iced_futures", @@ -1500,7 +1474,6 @@ dependencies = [ [[package]] name = "cosmic-settings-upower-subscription" version = "1.0.7" -source = "git+https://github.com/pop-os/cosmic-settings#ae5c7506627373f62e78372ce9e932fb591de35b" dependencies = [ "futures", "iced_futures", @@ -1514,8 +1487,6 @@ dependencies = [ [[package]] name = "cosmic-text" version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73" dependencies = [ "bitflags 2.13.0", "fontdb", @@ -1533,12 +1504,12 @@ dependencies = [ "unicode-linebreak", "unicode-script", "unicode-segmentation", + "unicode-width", ] [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "almost", "configparser", @@ -1586,7 +1557,6 @@ checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "cryoglyph" version = "0.1.0" -source = "git+https://github.com/iced-rs/cryoglyph.git?rev=e429a025df36ab8145708acb309080ae3deec17a#e429a025df36ab8145708acb309080ae3deec17a" dependencies = [ "cosmic-text", "etagere", @@ -1622,15 +1592,6 @@ dependencies = [ "uncased", ] -[[package]] -name = "ctor" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" -dependencies = [ - "dtor", -] - [[package]] name = "cursor-icon" version = "1.2.0" @@ -1655,7 +1616,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn", + "syn 2.0.118", "synstructure", ] @@ -1700,7 +1661,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.118", ] [[package]] @@ -1714,7 +1675,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.118", ] [[package]] @@ -1727,7 +1688,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.118", ] [[package]] @@ -1738,7 +1699,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1749,7 +1710,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1760,7 +1721,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core 0.23.0", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1821,7 +1782,7 @@ dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1851,7 +1812,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1862,7 +1823,7 @@ checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1917,7 +1878,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -1932,7 +1893,6 @@ dependencies = [ [[package]] name = "dnd" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "bitflags 2.13.0", "mime 0.1.0", @@ -1959,20 +1919,6 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" - -[[package]] -name = "drm" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" -dependencies = [ - "bitflags 2.13.0", - "bytemuck", - "drm-ffi 0.7.1", - "drm-fourcc", - "rustix 0.38.44", -] [[package]] name = "drm" @@ -1982,29 +1928,19 @@ checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" dependencies = [ "bitflags 2.13.0", "bytemuck", - "drm-ffi 0.9.1", + "drm-ffi", "drm-fourcc", "libc", "rustix 0.38.44", ] -[[package]] -name = "drm-ffi" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" -dependencies = [ - "drm-sys 0.6.1", - "rustix 0.38.44", -] - [[package]] name = "drm-ffi" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51a91c9b32ac4e8105dec255e849e0d66e27d7c34d184364fb93e469db08f690" dependencies = [ - "drm-sys 0.8.1", + "drm-sys", "rustix 1.1.4", ] @@ -2014,16 +1950,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" -[[package]] -name = "drm-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" -dependencies = [ - "libc", - "linux-raw-sys 0.6.5", -] - [[package]] name = "drm-sys" version = "0.8.1" @@ -2034,12 +1960,6 @@ dependencies = [ "linux-raw-sys 0.9.4", ] -[[package]] -name = "dtor" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" - [[package]] name = "dyn-clone" version = "1.0.20" @@ -2076,7 +1996,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -2344,7 +2264,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -2398,9 +2318,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -2413,9 +2333,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -2423,15 +2343,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -2440,9 +2360,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -2459,26 +2379,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-timer" @@ -2488,9 +2408,9 @@ checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -2503,16 +2423,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gethostname" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" -dependencies = [ - "rustix 1.1.4", - "windows-link 0.2.1", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -2828,7 +2738,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.118", "unic-langid", ] @@ -2842,7 +2752,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -2872,8 +2782,8 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ + "build_helpers", "dnd", "iced_accessibility", "iced_core", @@ -2893,7 +2803,6 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "accesskit", "accesskit_winit", @@ -2902,9 +2811,9 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "bitflags 2.13.0", + "build_helpers", "bytes", "cosmic-client-toolkit", "dnd", @@ -2927,7 +2836,6 @@ dependencies = [ [[package]] name = "iced_debug" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "iced_core", "iced_futures", @@ -2937,7 +2845,6 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "futures", "iced_core", @@ -2951,7 +2858,6 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "bitflags 2.13.0", "bytemuck", @@ -2972,7 +2878,6 @@ dependencies = [ [[package]] name = "iced_program" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "iced_graphics", "iced_runtime", @@ -2981,7 +2886,6 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2993,8 +2897,8 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ + "build_helpers", "bytes", "cosmic-client-toolkit", "dnd", @@ -3008,7 +2912,6 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ "bytemuck", "cosmic-text", @@ -3025,10 +2928,9 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ - "as-raw-xcb-connection", "bitflags 2.13.0", + "build_helpers", "bytemuck", "cosmic-client-toolkit", "cryoglyph", @@ -3043,22 +2945,19 @@ dependencies = [ "resvg", "rustc-hash 2.1.3", "rustix 0.38.44", - "smithay-client-toolkit", "thiserror 2.0.18", - "tiny-xlib", "wayland-backend", "wayland-client", "wayland-protocols", "wayland-sys", "wgpu", - "x11rb", ] [[package]] name = "iced_widget" version = "0.14.2" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ + "build_helpers", "cosmic-client-toolkit", "dnd", "iced_renderer", @@ -3075,8 +2974,8 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" dependencies = [ + "build_helpers", "cosmic-client-toolkit", "cursor-icon", "dnd", @@ -3615,9 +3514,9 @@ dependencies = [ [[package]] name = "input" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" +checksum = "f9793345a65d71317763a33066b5d8351f8760dde8d4930fe9e39b5f14a7959d" dependencies = [ "bitflags 2.13.0", "input-sys", @@ -3704,7 +3603,7 @@ checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -3749,7 +3648,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.118", ] [[package]] @@ -3777,7 +3676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -3900,13 +3799,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] -name = "libcosmic" -version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#511384f6206527cf87369da67a9164831afbabef" +name = "libcosmic-yoda" +version = "0.1.0-yoda.2" dependencies = [ "apply", "ashpd 0.12.3", "auto_enums", + "build_helpers", "cosmic-client-toolkit", "cosmic-config", "cosmic-freedesktop-icons", @@ -4023,12 +3922,6 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" -[[package]] -name = "linux-raw-sys" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" - [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -4224,7 +4117,6 @@ dependencies = [ [[package]] name = "mime" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "smithay-clipboard", ] @@ -4280,7 +4172,6 @@ dependencies = [ [[package]] name = "mpris2-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "futures-util", "jiff", @@ -4453,7 +4344,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4505,7 +4396,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4778,7 +4669,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4812,7 +4703,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4907,7 +4798,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -4920,7 +4811,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn", + "syn 2.0.118", "uncased", ] @@ -4966,7 +4857,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -5125,7 +5016,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -5145,7 +5036,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", "version_check", "yansi", ] @@ -5352,7 +5243,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -5494,7 +5385,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn", + "syn 2.0.118", "walkdir", ] @@ -5704,7 +5595,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -5729,7 +5620,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -5761,7 +5652,7 @@ dependencies = [ "darling 0.23.0", "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -5923,7 +5814,6 @@ dependencies = [ [[package]] name = "smithay-clipboard" version = "0.8.0" -source = "git+https://github.com/pop-os/smithay-clipboard?tag=sctk-0.20#859b02c88f45c554049a67c6ddeec1692ce0e20b" dependencies = [ "libc", "raw-window-handle", @@ -5954,31 +5844,26 @@ dependencies = [ [[package]] name = "softbuffer" version = "0.4.1" -source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#c2b2c19ddb38ff17495643699f97cb1f2064a1be" dependencies = [ - "as-raw-xcb-connection", "bytemuck", "cfg_aliases", "cocoa", "core-graphics", - "drm 0.11.1", "fastrand", "foreign-types", "js-sys", + "libredox", "log", "memmap2 0.9.11", "objc", "raw-window-handle", - "redox_syscall 0.5.18", "rustix 0.38.44", - "tiny-xlib", "wasm-bindgen", "wayland-backend", "wayland-client", "wayland-sys", "web-sys", "windows-sys 0.52.0", - "x11rb", ] [[package]] @@ -6036,7 +5921,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 2.0.118", ] [[package]] @@ -6069,7 +5954,6 @@ dependencies = [ [[package]] name = "switcheroo-control" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -6085,6 +5969,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.13.2" @@ -6093,7 +5988,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -6171,7 +6066,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -6182,7 +6077,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -6227,7 +6122,6 @@ dependencies = [ [[package]] name = "timedate-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793" dependencies = [ "zbus", ] @@ -6258,19 +6152,6 @@ dependencies = [ "strict-num", ] -[[package]] -name = "tiny-xlib" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" -dependencies = [ - "as-raw-xcb-connection", - "ctor", - "libloading", - "pkg-config", - "tracing", -] - [[package]] name = "tinystr" version = "0.8.3" @@ -6305,9 +6186,9 @@ checksum = "b130bd8a58c163224b44e217b4239ca7b927d82bf6cc2fea1fc561d15056e3f7" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -6329,14 +6210,14 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] name = "tokio-stream" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" +checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" dependencies = [ "futures-core", "pin-project-lite", @@ -6416,7 +6297,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -6765,7 +6646,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.118", "wasm-bindgen-shared", ] @@ -7152,12 +7033,10 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" version = "0.4.1" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c" dependencies = [ "clipboard-win", "clipboard_macos", "clipboard_wayland", - "clipboard_x11", "dnd", "mime 0.1.0", "raw-window-handle", @@ -7263,7 +7142,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -7274,7 +7153,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -7597,7 +7476,6 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "cfg_aliases", @@ -7617,13 +7495,11 @@ dependencies = [ "winit-wayland", "winit-web", "winit-win32", - "winit-x11", ] [[package]] name = "winit-android" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "android-activity", "bitflags 2.13.0", @@ -7638,7 +7514,6 @@ dependencies = [ [[package]] name = "winit-appkit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "block2 0.6.2", @@ -7660,7 +7535,6 @@ dependencies = [ [[package]] name = "winit-common" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "memmap2 0.9.11", "objc2 0.6.4", @@ -7668,14 +7542,12 @@ dependencies = [ "smol_str", "tracing", "winit-core", - "x11-dl", "xkbcommon-dl", ] [[package]] name = "winit-core" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "cursor-icon", @@ -7689,7 +7561,6 @@ dependencies = [ [[package]] name = "winit-orbital" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "dpi", @@ -7705,7 +7576,6 @@ dependencies = [ [[package]] name = "winit-uikit" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "block2 0.6.2", @@ -7725,7 +7595,6 @@ dependencies = [ [[package]] name = "winit-wayland" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "ahash", "bitflags 2.13.0", @@ -7751,7 +7620,6 @@ dependencies = [ [[package]] name = "winit-web" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "atomic-waker", "bitflags 2.13.0", @@ -7773,7 +7641,6 @@ dependencies = [ [[package]] name = "winit-win32" version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" dependencies = [ "bitflags 2.13.0", "cursor-icon", @@ -7786,29 +7653,6 @@ dependencies = [ "winit-core", ] -[[package]] -name = "winit-x11" -version = "0.31.0-beta.2" -source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8" -dependencies = [ - "bitflags 2.13.0", - "bytemuck", - "calloop", - "cursor-icon", - "dpi", - "libc", - "percent-encoding", - "raw-window-handle", - "rustix 1.1.4", - "smol_str", - "tracing", - "winit-common", - "winit-core", - "x11-dl", - "x11rb", - "xkbcommon-dl", -] - [[package]] name = "winnow" version = "1.0.3" @@ -7839,39 +7683,6 @@ dependencies = [ "either", ] -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading", - "once_cell", - "rustix 1.1.4", - "x11rb-protocol", - "xcursor", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" - [[package]] name = "xcursor" version = "0.3.10" @@ -7886,8 +7697,7 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "xdg-shell-wrapper-config" -version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#d520b1e9ef2c990cbb57a8c5838ce94b7d75530a" +version = "1.3.0" dependencies = [ "serde", "wayland-protocols-wlr", @@ -8028,15 +7838,15 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", "synstructure", ] [[package]] name = "zbus" -version = "5.17.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28b97f866896a4be7aefd2b5a8e01bb6773d19a775d54ab28b4d094b9a4480e" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -8086,7 +7896,7 @@ checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", "zbus-lockstep", "zbus_xml", "zvariant", @@ -8094,14 +7904,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.17.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e05ad887425eecf5e8384dc2406a4a9313eb73468712fc1cdea362eb4fe0469" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.3", "zbus_names", "zvariant", "zvariant_utils", @@ -8109,9 +7919,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.3" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039ca249fee9559680f3a9f05b55e0761fee51af4f6c1e7d8c1f31e549721d2" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", "winnow", @@ -8130,6 +7940,15 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + [[package]] name = "zeno" version = "0.3.3" @@ -8153,7 +7972,7 @@ checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -8173,7 +7992,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", "synstructure", ] @@ -8215,7 +8034,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -8254,7 +8073,7 @@ checksum = "e6f2416a5f504dfd7e04fee49f31abafe3314a3f62b4ddaa8e9a5fd496d4dd50" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.118", ] [[package]] @@ -8323,41 +8142,50 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.13.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cf057bb00bf5c9ad77abb6147b0ca4818236a1858416e9d988e40d6322fefa7" +checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147" dependencies = [ "endi", "enumflags2", "serde", "url", "winnow", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.13.0" +version = "5.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8118ca6bda77bfc0ab51d660db0c955f2505eef854c9a449435bccb616933b31" +checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.3", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.5.0" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90cb9383f9b45290407a1258b202d3f8f01db719eb60b4e4055c6375af4fc7c7" +checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3" dependencies = [ "proc-macro2", "quote", "serde", - "syn", + "syn 3.0.3", "winnow", ] + +[[patch.unused]] +name = "winit-x11" +version = "0.31.0-beta.2" + +[[patch.unused]] +name = "cosmic-settings-airplane-mode-subscription" +version = "1.0.7" diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index 95a0e84c..daa54ef9 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -330,7 +330,7 @@ impl cosmic::Application for Audio { let new_id = window::Id::unique(); app.popup.replace(new_id); - self.refresh_volume_limits(); + app.refresh_volume_limits(); let mut popup_settings = app.core.applet.get_popup_settings( app.core.main_window_id().unwrap(),