diff --git a/Cargo.lock b/Cargo.lock index b887815f..0ab877c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "ab_glyph" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -21,12 +21,12 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" version = "0.16.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" [[package]] name = "accesskit_consumer" version = "0.24.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" dependencies = [ "accesskit", "immutable-chunkmap", @@ -35,7 +35,7 @@ dependencies = [ [[package]] name = "accesskit_macos" version = "0.17.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" dependencies = [ "accesskit", "accesskit_consumer", @@ -48,7 +48,7 @@ dependencies = [ [[package]] name = "accesskit_windows" version = "0.22.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" dependencies = [ "accesskit", "accesskit_consumer", @@ -60,7 +60,7 @@ dependencies = [ [[package]] name = "accesskit_winit" version = "0.22.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13#956955342dadab7e588e21be726817fca39510f3" +source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" dependencies = [ "accesskit", "accesskit_macos", @@ -71,9 +71,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -145,12 +145,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -162,9 +156,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "appendlist" @@ -196,6 +190,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + [[package]] name = "arrayref" version = "0.3.9" @@ -263,20 +263,20 @@ dependencies = [ [[package]] name = "async-io" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19634d6336019ef220f09fd31168ce5c184b295cbf80345437cc36094ef223ca" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 1.0.8", + "rustix 1.1.2", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -292,9 +292,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65daa13722ad51e6ab1a1b9c01299142bc75135b337923cfa10e79bbbd669f00" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel", "async-io", @@ -305,7 +305,7 @@ dependencies = [ "cfg-if", "event-listener", "futures-lite", - "rustix 1.0.8", + "rustix 1.1.2", ] [[package]] @@ -321,9 +321,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f567af260ef69e1d52c2b560ce0ea230763e6fbb9214a85d768760a920e3e3c1" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ "async-io", "async-lock", @@ -331,10 +331,10 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 1.0.8", + "rustix 1.1.2", "signal-hook-registry", "slab", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -396,9 +396,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -406,7 +406,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -415,6 +415,15 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "basic-toml" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" +dependencies = [ + "serde", +] + [[package]] name = "bit-set" version = "0.6.0" @@ -482,6 +491,17 @@ dependencies = [ "piper", ] +[[package]] +name = "bstr" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "bumpalo" version = "3.19.0" @@ -496,18 +516,18 @@ checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytemuck" -version = "1.23.2" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.1" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" +checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", @@ -549,7 +569,7 @@ dependencies = [ "async-task", "bitflags 2.9.4", "polling", - "rustix 1.0.8", + "rustix 1.1.2", "slab", "tracing", ] @@ -568,21 +588,21 @@ dependencies = [ [[package]] name = "calloop-wayland-source" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a7a1dbbe026a55ef47a500b123af5a9a0914520f061d467914cf21be95daf" +checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ "calloop 0.14.3", - "rustix 0.38.44", + "rustix 1.1.2", "wayland-backend", "wayland-client", ] [[package]] name = "cc" -version = "1.2.35" +version = "1.2.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" +checksum = "e1d05d92f4b1fd76aad469d46cdd858ca761576082cd37df81416691e50199fb" dependencies = [ "find-msvc-tools", "jobserver", @@ -626,11 +646,10 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", @@ -824,7 +843,7 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.1.0" -source = "git+https://github.com/pop-os//cosmic-protocols#6254f50abc6dbfccadc6939f80e20081ab5f9d51" +source = "git+https://github.com/pop-os//cosmic-protocols#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ "bitflags 2.9.4", "cosmic-protocols", @@ -837,7 +856,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -847,18 +866,17 @@ dependencies = [ "iced_futures", "known-folders", "notify", - "once_cell", - "ron 0.9.0", + "ron", "serde", "tracing", - "xdg", + "xdg 3.0.0", "zbus", ] [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "quote", "syn 2.0.106", @@ -872,16 +890,17 @@ dependencies = [ "dirs 5.0.1", "ini_core", "memmap2", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", - "xdg", + "xdg 2.5.2", ] [[package]] name = "cosmic-notifications-util" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-notifications#744439a6e79f7bcb74ba861d525318f9b774c7f5" +source = "git+https://github.com/pop-os/cosmic-notifications#81b636c069c0d931ba4d1d3823eba70ed8e54ba2" dependencies = [ + "libcosmic", "serde", "tracing", "url", @@ -909,8 +928,8 @@ dependencies = [ "ordered-float", "ordered-stream", "rand 0.9.2", - "ron 0.11.0", - "rustix 1.0.8", + "ron", + "rustix 1.1.2", "shlex", "smithay", "smithay-client-toolkit 0.20.0", @@ -943,7 +962,7 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.1.0" -source = "git+https://github.com/pop-os//cosmic-protocols#6254f50abc6dbfccadc6939f80e20081ab5f9d51" +source = "git+https://github.com/pop-os//cosmic-protocols#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ "bitflags 2.9.4", "wayland-backend", @@ -957,7 +976,7 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#3b86984332be2c930a3536ab714b843c851fa8ca" +source = "git+https://github.com/pop-os/dbus-settings-bindings#37cbe4e8c165428178be23a14bd37f19a19d3757" dependencies = [ "zbus", ] @@ -965,19 +984,20 @@ dependencies = [ [[package]] name = "cosmic-text" version = "0.14.2" -source = "git+https://github.com/pop-os/cosmic-text.git#f7033bb0433f6a9ba109007027781ba46ea9ba27" +source = "git+https://github.com/pop-os/cosmic-text.git#6514323fbe764998415068e3ae40cf476753d425" dependencies = [ "bitflags 2.9.4", "fontdb 0.23.0", + "harfrust", + "linebender_resource_handle", "log", "rangemap", "rustc-hash 1.1.0", - "rustybuzz", "self_cell", + "skrifa", "smol_str", "swash", "sys-locale", - "ttf-parser 0.21.1", "unicode-bidi", "unicode-linebreak", "unicode-script", @@ -987,18 +1007,17 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "almost", "cosmic-config", "csscolorparser", "dirs 6.0.0", - "lazy_static", "palette", - "ron 0.9.0", + "ron", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -1193,7 +1212,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1252,7 +1271,7 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dpi" version = "0.1.1" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13#1cc02bdab141072eaabad639d74b032fd0fcc62e" +source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#8dfaba290f9a00d3e13be71f1e6f438889cf5546" [[package]] name = "drm" @@ -1368,12 +1387,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -1443,17 +1462,26 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "find-crate" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" +dependencies = [ + "toml", +] + [[package]] name = "find-msvc-tools" -version = "0.1.0" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" +checksum = "0399f9d26e5191ce32c498bebd31e7a3ceabc2745f0ac54af3f335126c3f24b3" [[package]] name = "flate2" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" dependencies = [ "crc32fast", "miniz_oxide", @@ -1471,6 +1499,51 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" +[[package]] +name = "fluent" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" +dependencies = [ + "fluent-bundle", + "unic-langid", +] + +[[package]] +name = "fluent-bundle" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash 2.1.1", + "self_cell", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" +dependencies = [ + "memchr", + "thiserror 2.0.17", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1485,9 +1558,9 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "font-types" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7" +checksum = "511e2c18a516c666d27867d2f9821f76e7d591f762e9fc41dd6cc5c90fe54b0b" dependencies = [ "bytemuck", ] @@ -1567,16 +1640,17 @@ dependencies = [ [[package]] name = "freedesktop-desktop-entry" -version = "0.7.14" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de88bb3b555a4b38372082c5ede431e1e0e14f32be1d02998c6366eb4d2682ed" +checksum = "528df05c8ed0bfd569c7018914ba1995be2a133ba9ead17628ddb0ff94b86331" dependencies = [ + "bstr", "gettext-rs", "log", "memchr", - "thiserror 2.0.16", + "thiserror 2.0.17", "unicase", - "xdg", + "xdg 3.0.0", ] [[package]] @@ -1731,7 +1805,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "windows-targets 0.52.6", ] @@ -1755,7 +1829,7 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.3+wasi-0.2.4", + "wasi 0.14.7+wasi-0.2.4", ] [[package]] @@ -1790,9 +1864,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "gl_generator" @@ -1872,7 +1946,7 @@ checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ "bitflags 2.9.4", "gpu-descriptor-types", - "hashbrown", + "hashbrown 0.15.5", ] [[package]] @@ -1886,9 +1960,9 @@ dependencies = [ [[package]] name = "grid" -version = "0.11.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df00eed8d1f0db937f6be10e46e8072b0671accb504cf0f959c5c52c679f5b9" +checksum = "12101ecc8225ea6d675bc70263074eab6169079621c2186fe0c66590b2df9681" [[package]] name = "guillotiere" @@ -1910,6 +1984,19 @@ dependencies = [ "crunchy", ] +[[package]] +name = "harfrust" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3fd23d35c2d8bcf34a1f0e9ea8c0ad263f0c8a9a47108eee23aac76e71645a" +dependencies = [ + "bitflags 2.9.4", + "bytemuck", + "core_maths", + "read-fonts", + "smallvec", +] + [[package]] name = "hashbrown" version = "0.15.5" @@ -1919,6 +2006,12 @@ dependencies = [ "foldhash", ] +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + [[package]] name = "hassle-rs" version = "0.11.0" @@ -1958,11 +2051,78 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "i18n-config" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef" +dependencies = [ + "basic-toml", + "log", + "serde", + "serde_derive", + "thiserror 1.0.69", + "unic-langid", +] + +[[package]] +name = "i18n-embed" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a217bbb075dcaefb292efa78897fc0678245ca67f265d12c351e42268fcb0305" +dependencies = [ + "arc-swap", + "fluent", + "fluent-langneg", + "fluent-syntax", + "i18n-embed-impl", + "intl-memoizer", + "log", + "parking_lot 0.12.5", + "rust-embed", + "sys-locale", + "thiserror 1.0.69", + "unic-langid", + "walkdir", +] + +[[package]] +name = "i18n-embed-fl" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e598ed73b67db92f61e04672e599eef2991a262a40e1666735b8a86d2e7e9f30" +dependencies = [ + "find-crate", + "fluent", + "fluent-syntax", + "i18n-config", + "i18n-embed", + "proc-macro-error2", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", + "unic-langid", +] + +[[package]] +name = "i18n-embed-impl" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2cc0e0523d1fe6fc2c6f66e5038624ea8091b3e7748b5e8e0c84b1698db6c2" +dependencies = [ + "find-crate", + "i18n-config", + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1970,7 +2130,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core 0.61.2", + "windows-core 0.62.2", ] [[package]] @@ -1985,7 +2145,7 @@ dependencies = [ [[package]] name = "iced" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "dnd", "iced_accessibility", @@ -2003,7 +2163,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "accesskit", "accesskit_winit", @@ -2012,7 +2172,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "bitflags 2.9.4", "bytes", @@ -2036,7 +2196,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "futures", "iced_core", @@ -2061,7 +2221,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "bitflags 2.9.4", "bytemuck", @@ -2083,7 +2243,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2095,7 +2255,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "bytes", "dnd", @@ -2110,7 +2270,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "bytemuck", "cosmic-text", @@ -2126,7 +2286,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "as-raw-xcb-connection", "bitflags 2.9.4", @@ -2157,7 +2317,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "dnd", "iced_accessibility", @@ -2176,7 +2336,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "dnd", "iced_accessibility", @@ -2311,14 +2471,15 @@ dependencies = [ [[package]] name = "image" -version = "0.25.6" +version = "0.25.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" dependencies = [ "bytemuck", "byteorder-lite", + "moxcms", "num-traits", - "png", + "png 0.18.0", "zune-core", "zune-jpeg", ] @@ -2331,21 +2492,21 @@ checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" [[package]] name = "immutable-chunkmap" -version = "2.1.0" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2194c61e2a29841937e84ec2264a905985c397ccccfbd4783191d3285fa92ef" +checksum = "9a3e98b1520e49e252237edc238a39869da9f3241f2ec19dc788c1d24694d1e4" dependencies = [ "arrayvec", ] [[package]] name = "indexmap" -version = "2.11.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.0", ] [[package]] @@ -2386,6 +2547,25 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "intl-memoizer" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" +dependencies = [ + "unic-langid", +] + [[package]] name = "io-uring" version = "0.7.10" @@ -2452,9 +2632,9 @@ checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -2559,14 +2739,14 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#4d06524f2c0a2c9fc8911f8aefae0bfb2b3e13d7" +source = "git+https://github.com/pop-os/libcosmic#4c4eddb50c79ace202c76b0f6972596930537e1b" dependencies = [ "apply", "auto_enums", @@ -2578,6 +2758,8 @@ dependencies = [ "css-color", "derive_setters", "futures", + "i18n-embed", + "i18n-embed-fl", "iced", "iced_accessibility", "iced_core", @@ -2587,13 +2769,13 @@ dependencies = [ "iced_tiny_skia", "iced_widget", "image", - "lazy_static", "palette", "raw-window-handle", + "rust-embed", "serde", "slotmap", "taffy", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "unicode-segmentation", "url", @@ -2602,12 +2784,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-link", ] [[package]] @@ -2618,15 +2800,21 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ "bitflags 2.9.4", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", ] +[[package]] +name = "linebender_resource_handle" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" + [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -2641,9 +2829,9 @@ checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -2672,19 +2860,18 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "log-panics" @@ -2704,9 +2891,9 @@ checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" [[package]] name = "lyon" -version = "1.0.1" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e7f9cda98b5430809e63ca5197b06c7d191bf7e26dfc467d5a3f0290e2a74f" +checksum = "dbcb7d54d54c8937364c9d41902d066656817dce1e03a44e5533afebd1ef4352" dependencies = [ "lyon_algorithms", "lyon_tessellation", @@ -2714,9 +2901,9 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "1.0.5" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f13c9be19d257c7d37e70608ed858e8eab4b2afcea2e3c9a622e892acbf43c08" +checksum = "f4c0829e28c4f336396f250d850c3987e16ce6db057ffe047ce0dd54aab6b647" dependencies = [ "lyon_path", "num-traits", @@ -2724,9 +2911,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.6" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af69edc087272df438b3ee436c4bb6d7c04aa8af665cfd398feae627dbd8570" +checksum = "4e16770d760c7848b0c1c2d209101e408207a65168109509f8483837a36cf2e7" dependencies = [ "arrayvec", "euclid", @@ -2735,9 +2922,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.7" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0047f508cd7a85ad6bad9518f68cce7b1bf6b943fb71f6da0ee3bc1e8cb75f25" +checksum = "1aeca86bcfd632a15984ba029b539ffb811e0a70bf55e814ef8b0f54f506fdeb" dependencies = [ "lyon_geom", "num-traits", @@ -2745,9 +2932,9 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579d42360a4b09846eff2feef28f538696c7d6c7439bfa65874ff3cbe0951b2c" +checksum = "f3f586142e1280335b1bc89539f7c97dd80f08fc43e9ab1b74ef0a42b04aa353" dependencies = [ "float_next_after", "lyon_path", @@ -2774,9 +2961,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memmap2" @@ -2841,6 +3028,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "moxcms" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cc7d85f3d741164e8972ad355e26ac6e51b20fcae5f911c7da8f2d8bbbb3f33" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "mutate_once" version = "0.1.2" @@ -3241,9 +3438,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -3271,9 +3468,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "5.0.0" +version = "5.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" dependencies = [ "num-traits", ] @@ -3365,12 +3562,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", - "parking_lot_core 0.9.11", + "parking_lot_core 0.9.12", ] [[package]] @@ -3389,15 +3586,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.17", + "redox_syscall 0.5.18", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -3522,18 +3719,31 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "png" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" +dependencies = [ + "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + [[package]] name = "polling" -version = "3.10.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5bd19146350fe804f7cb2669c851c03d69da628803dab0d98018142aaa5d829" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] @@ -3562,13 +3772,35 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "proc-macro2" version = "1.0.101" @@ -3610,6 +3842,15 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "pxfm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde" +dependencies = [ + "num-traits", +] + [[package]] name = "quick-xml" version = "0.37.5" @@ -3621,9 +3862,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -3713,11 +3954,12 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "read-fonts" -version = "0.29.3" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ca636dac446b5664bd16c069c00a9621806895b8bb02c2dc68542b23b8f25d" +checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" dependencies = [ "bytemuck", + "core_maths", "font-types", ] @@ -3732,18 +3974,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags 2.9.4", ] @@ -3767,14 +4000,14 @@ checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ "getrandom 0.2.16", "libredox", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "regex" -version = "1.11.2" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", @@ -3784,9 +4017,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", @@ -3830,19 +4063,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "ron" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63f3aa105dea217ef30d89581b65a4d527a19afc95ef5750be3890e8d3c5b837" -dependencies = [ - "base64", - "bitflags 2.9.4", - "serde", - "serde_derive", - "unicode-ident", -] - [[package]] name = "ron" version = "0.11.0" @@ -3862,6 +4082,40 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" +[[package]] +name = "rust-embed" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.106", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "rustc-demangle" version = "0.1.26" @@ -3895,15 +4149,15 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "linux-raw-sys 0.11.0", + "windows-sys 0.61.2", ] [[package]] @@ -3920,7 +4174,6 @@ checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ "bitflags 2.9.4", "bytemuck", - "libm", "smallvec", "ttf-parser 0.21.1", "unicode-bidi-mirroring", @@ -3977,18 +4230,28 @@ checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -3997,15 +4260,16 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "indexmap", "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -4077,9 +4341,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "skrifa" -version = "0.31.3" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbeb4ca4399663735553a09dd17ce7e49a0a0203f03b706b39628c4d913a8607" +checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" dependencies = [ "bytemuck", "read-fonts", @@ -4129,11 +4393,11 @@ dependencies = [ "libloading", "profiling", "rand 0.9.2", - "rustix 1.0.8", + "rustix 1.1.2", "sha2", "smallvec", "tempfile", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", "wayland-backend", "wayland-protocols", @@ -4178,14 +4442,14 @@ dependencies = [ "bitflags 2.9.4", "bytemuck", "calloop 0.14.3", - "calloop-wayland-source 0.4.0", + "calloop-wayland-source 0.4.1", "cursor-icon", "libc", "log", "memmap2", "pkg-config", - "rustix 1.0.8", - "thiserror 2.0.16", + "rustix 1.1.2", + "thiserror 2.0.17", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -4232,7 +4496,7 @@ dependencies = [ [[package]] name = "softbuffer" version = "0.4.1" -source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#6e75b1ad7e98397d37cb187886d05969bc480995" +source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#a3f77e251e7422803f693df6e3fc313c010c4dcb" dependencies = [ "as-raw-xcb-connection", "bytemuck", @@ -4247,7 +4511,7 @@ dependencies = [ "memmap2", "objc", "raw-window-handle", - "redox_syscall 0.4.1", + "redox_syscall 0.5.18", "rustix 0.38.44", "tiny-xlib", "wasm-bindgen", @@ -4313,9 +4577,9 @@ dependencies = [ [[package]] name = "swash" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f745de914febc7c9ab4388dfaf94bbc87e69f57bb41133a9b0c84d4be49856f3" +checksum = "47846491253e976bdd07d0f9cc24b7daf24720d11309302ccbbc6e6b6e53550a" dependencies = [ "skrifa", "yazi", @@ -4372,12 +4636,13 @@ dependencies = [ [[package]] name = "taffy" -version = "0.3.11" -source = "git+https://github.com/DioxusLabs/taffy?rev=7781c70#7781c70241f7f572130c13106f2a869a9cf80885" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b25026fb8cc9ab51ab9fdabe5d11706796966f6d1c78e19871ef63be2b8f0644" dependencies = [ "arrayvec", "grid", - "num-traits", + "serde", "slotmap", ] @@ -4389,15 +4654,15 @@ checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" [[package]] name = "tempfile" -version = "3.21.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.8", - "windows-sys 0.60.2", + "rustix 1.1.2", + "windows-sys 0.61.2", ] [[package]] @@ -4420,11 +4685,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -4440,9 +4705,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -4469,7 +4734,7 @@ dependencies = [ "bytemuck", "cfg-if", "log", - "png", + "png 0.17.16", "tiny-skia-path", ] @@ -4566,20 +4831,42 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +dependencies = [ + "serde_core", +] [[package]] name = "toml_edit" -version = "0.22.27" +version = "0.23.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" dependencies = [ "indexmap", "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +dependencies = [ "winnow", ] @@ -4658,11 +4945,20 @@ dependencies = [ "core_maths", ] +[[package]] +name = "type-map" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" +dependencies = [ + "rustc-hash 2.1.1", +] + [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uds_windows" @@ -4675,6 +4971,25 @@ dependencies = [ "winapi", ] +[[package]] +name = "unic-langid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" +dependencies = [ + "unic-langid-impl", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" +dependencies = [ + "serde", + "tinystr", +] + [[package]] name = "unicase" version = "2.8.1" @@ -4701,9 +5016,9 @@ checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-linebreak" @@ -4822,30 +5137,40 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.3+wasi-0.2.4" +version = "0.14.7+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -4857,9 +5182,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -4870,9 +5195,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4880,9 +5205,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -4893,9 +5218,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -4923,7 +5248,7 @@ checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" dependencies = [ "cc", "downcast-rs", - "rustix 1.0.8", + "rustix 1.1.2", "scoped-tls", "smallvec", "wayland-sys", @@ -4936,7 +5261,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" dependencies = [ "bitflags 2.9.4", - "rustix 1.0.8", + "rustix 1.1.2", "wayland-backend", "wayland-scanner", ] @@ -4958,7 +5283,7 @@ version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" dependencies = [ - "rustix 1.0.8", + "rustix 1.1.2", "wayland-client", "xcursor", ] @@ -5059,7 +5384,7 @@ checksum = "fcbd4f3aba6c9fba70445ad2a484c0ef0356c1a9459b1e8e435bedc1971a6222" dependencies = [ "bitflags 2.9.4", "downcast-rs", - "rustix 1.0.8", + "rustix 1.1.2", "wayland-backend", "wayland-scanner", ] @@ -5080,9 +5405,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -5116,7 +5441,7 @@ dependencies = [ "js-sys", "log", "naga", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "profiling", "raw-window-handle", "smallvec", @@ -5144,7 +5469,7 @@ dependencies = [ "log", "naga", "once_cell", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "profiling", "raw-window-handle", "rustc-hash 1.1.0", @@ -5185,7 +5510,7 @@ dependencies = [ "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", - "parking_lot 0.12.4", + "parking_lot 0.12.5", "profiling", "range-alloc", "raw-window-handle", @@ -5234,11 +5559,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -5305,14 +5630,14 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link", - "windows-result 0.3.4", + "windows-result 0.4.1", "windows-strings", ] @@ -5329,9 +5654,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -5351,9 +5676,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -5362,9 +5687,9 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" @@ -5377,18 +5702,18 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] @@ -5435,7 +5760,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", ] [[package]] @@ -5486,19 +5820,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -5521,9 +5855,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -5545,9 +5879,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -5569,9 +5903,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -5581,9 +5915,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -5605,9 +5939,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -5629,9 +5963,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -5653,9 +5987,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -5677,14 +6011,14 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" version = "0.30.5" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13#1cc02bdab141072eaabad639d74b032fd0fcc62e" +source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#8dfaba290f9a00d3e13be71f1e6f438889cf5546" dependencies = [ "ahash", "android-activity", @@ -5711,7 +6045,7 @@ dependencies = [ "percent-encoding", "pin-project", "raw-window-handle", - "redox_syscall 0.4.1", + "redox_syscall 0.5.18", "rustix 0.38.44", "sctk-adwaita", "smithay-client-toolkit 0.19.2", @@ -5743,9 +6077,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" @@ -5775,7 +6109,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.0.8", + "rustix 1.1.2", "x11rb-protocol", "xcursor", ] @@ -5798,6 +6132,12 @@ version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" +[[package]] +name = "xdg" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" + [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" @@ -5900,9 +6240,9 @@ dependencies = [ [[package]] name = "zbus" -version = "5.10.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a073be99ace1adc48af593701c8015cd9817df372e14a1a6b0ee8f8bf043be" +checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" dependencies = [ "async-broadcast", "async-executor", @@ -5935,9 +6275,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.10.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e80cd713a45a49859dcb648053f63265f4f2851b6420d47a958e5697c68b131" +checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5968,18 +6308,18 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -6048,9 +6388,9 @@ checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" [[package]] name = "zune-jpeg" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1f7e205ce79eb2da3cd71c5f55f3589785cb7c79f6a03d1c8d1491bda5d089" +checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core", ] diff --git a/cosmic-panel-bin/src/space/layout.rs b/cosmic-panel-bin/src/space/layout.rs index 30717ea4..1fdce5b4 100644 --- a/cosmic-panel-bin/src/space/layout.rs +++ b/cosmic-panel-bin/src/space/layout.rs @@ -16,6 +16,7 @@ use crate::{ self, OverflowButton, OverflowButtonElement, overflow_button_element, }, overflow_popup::{BORDER_WIDTH, overflow_popup_element}, + target::SpaceTarget, }, }, minimize::MinimizeApplet, @@ -48,18 +49,25 @@ impl PanelSpace { self.remap_attempts = self.remap_attempts.saturating_sub(1); let make_indices_contiguous = - |windows: &mut Vec<(usize, CosmicMappedInternal, Option)>| { + |windows: &mut Vec<(usize, CosmicMappedInternal, Option, bool)>| { windows.sort_by(|(a_i, ..), (b_i, ..)| a_i.cmp(b_i)); for (j, (i, ..)) in windows.iter_mut().enumerate() { *i = j; } + for i in 0..windows.len() { + let Some(prev_shrinkable) = windows.get(i + 1) else { + windows[i].3 &= false; + continue; + }; + windows[i].3 &= prev_shrinkable.3; + } }; let mut left_overflow_button = None; let mut right_overflow_button = None; let mut center_overflow_button = None; - let to_map = self + let mut to_map = self .space .elements() .cloned() @@ -112,14 +120,14 @@ impl PanelSpace { }; self.clients_left.lock().unwrap().iter().enumerate().find_map(|(i, c)| { if matches!(w, CosmicMappedInternal::Spacer(ref s) if s.name == c.name) { - Some((i, w.clone(), c.minimize_priority)) + Some((i, w.clone(), c.minimize_priority, c.padding_shrinkable)) } else if w .toplevel() .and_then(|t| t.wl_surface().client()) .zip(c.client.as_ref()) .is_some_and(|(c, w_c)| c.id() == w_c.id()) { - Some((i, w.clone(), c.minimize_priority)) + Some((i, w.clone(), c.minimize_priority, c.padding_shrinkable)) } else { None } @@ -139,14 +147,14 @@ impl PanelSpace { }; self.clients_center.lock().unwrap().iter().enumerate().find_map(|(i, c)| { if matches!(w, CosmicMappedInternal::Spacer(ref s) if s.name == c.name) { - Some((i, w.clone(), c.minimize_priority)) + Some((i, w.clone(), c.minimize_priority, c.padding_shrinkable)) } else if w .toplevel() .and_then(|t| t.wl_surface().client()) .zip(c.client.as_ref()) .is_some_and(|(c, w_c)| c.id() == w_c.id()) { - Some((i, w.clone(), c.minimize_priority)) + Some((i, w.clone(), c.minimize_priority, c.padding_shrinkable)) } else { None } @@ -165,14 +173,14 @@ impl PanelSpace { }; self.clients_right.lock().unwrap().iter().enumerate().find_map(|(i, c)| { if matches!(w, CosmicMappedInternal::Spacer(ref s) if s.name == c.name) { - Some((i, w.clone(), c.minimize_priority)) + Some((i, w.clone(), c.minimize_priority, c.padding_shrinkable)) } else if w .toplevel() .and_then(|t| t.wl_surface().client()) .zip(c.client.as_ref()) .is_some_and(|(c, w_c)| c.id() == w_c.id()) { - Some((i, w.clone(), c.minimize_priority)) + Some((i, w.clone(), c.minimize_priority, c.padding_shrinkable)) } else { None } @@ -205,14 +213,18 @@ impl PanelSpace { pub(crate) fn layout( &mut self, - mut windows_left: Vec<(usize, CosmicMappedInternal, Option)>, - mut windows_center: Vec<(usize, CosmicMappedInternal, Option)>, - mut windows_right: Vec<(usize, CosmicMappedInternal, Option)>, + mut windows_left: Vec<(usize, CosmicMappedInternal, Option, bool)>, + mut windows_center: Vec<(usize, CosmicMappedInternal, Option, bool)>, + mut windows_right: Vec<(usize, CosmicMappedInternal, Option, bool)>, mut left_overflow_button: Option, mut right_overflow_button: Option, mut center_overflow_button: Option, ) -> anyhow::Result<()> { self.space.refresh(); + let padding_overlap = self.config.padding_overlap(); + let applet_padding = + self.config.size.get_applet_shrinkable_padding(true) as f32 * padding_overlap; + let mut bg_color = self.bg_color(); for c in 0..3 { bg_color[c] *= bg_color[3]; @@ -253,10 +265,11 @@ impl PanelSpace { } fn map_fn( - (i, w, _): &(usize, CosmicMappedInternal, Option), + (i, w, _, padding_shrinkable): &(usize, CosmicMappedInternal, Option, bool), anchor: PanelAnchor, alignment: Alignment, - ) -> (Alignment, usize, i32, i32, i32) { + applet_padding: f32, + ) -> (Alignment, usize, i32, i32, i32, i32) { let (mut size, mut suggested_bounds) = w .toplevel() .map(|t| { @@ -290,22 +303,34 @@ impl PanelSpace { } match anchor { - PanelAnchor::Left | PanelAnchor::Right => { - (alignment, *i, size.h, size.w, suggested_bounds.h.min(size.h)) - }, - PanelAnchor::Top | PanelAnchor::Bottom => { - (alignment, *i, size.w, size.h, suggested_bounds.w.min(suggested_bounds.w)) - }, + PanelAnchor::Left | PanelAnchor::Right => ( + alignment, + *i, + size.h, + size.w, + suggested_bounds.h.min(size.h), + if *padding_shrinkable { applet_padding as i32 } else { 0 }, + ), + PanelAnchor::Top | PanelAnchor::Bottom => ( + alignment, + *i, + size.w, + size.h, + suggested_bounds.w.min(suggested_bounds.w), + if *padding_shrinkable { applet_padding as i32 } else { 0 }, + ), } } - let left = windows_left.iter().map(|e| map_fn(e, anchor, Alignment::Left)); + let left = windows_left.iter().map(|e| map_fn(e, anchor, Alignment::Left, applet_padding)); - let left_sum_scaled = - left.clone().map(|(_, _, _, _, suggested_length)| suggested_length).sum::() as f64 - * self.scale - + spacing_scaled * windows_left.len().saturating_sub(1) as f64; - let left_sum_scaled = if let Some(left_button) = left_overflow_button.as_ref() { + let left_sum_scaled = left + .clone() + .map(|(_, _, _, _, suggested_length, padding)| suggested_length - padding) + .sum::() as f64 + * self.scale + + spacing_scaled * windows_left.len().saturating_sub(1) as f64; + let mut left_sum_scaled = if let Some(left_button) = left_overflow_button.as_ref() { let size = left_button.geometry().size.to_f64() * self.scale; left_sum_scaled + if self.config.is_horizontal() { size.w } else { size.h } @@ -313,15 +338,18 @@ impl PanelSpace { } else { left_sum_scaled }; - - let center = windows_center.iter().map(|e| map_fn(e, anchor, Alignment::Center)); - let center_sum_scaled = - center.clone().map(|(_, _, _, _, suggested_length)| suggested_length).sum::() - as f64 - * self.scale - + spacing_scaled * windows_center.len().saturating_sub(1) as f64; - - let center_sum_scaled = if let Some(center_button) = center_overflow_button.as_ref() { + left_sum_scaled = left_sum_scaled.max(0.0); + + let center = + windows_center.iter().map(|e| map_fn(e, anchor, Alignment::Center, applet_padding)); + let center_sum_scaled = center + .clone() + .map(|(_, _, _, _, suggested_length, padding)| suggested_length - padding) + .sum::() as f64 + * self.scale + + spacing_scaled * windows_center.len().saturating_sub(1) as f64; + + let mut center_sum_scaled = if let Some(center_button) = center_overflow_button.as_ref() { let size = center_button.geometry().size.to_f64() * self.scale; center_sum_scaled + if self.config.is_horizontal() { size.w } else { size.h } @@ -329,15 +357,18 @@ impl PanelSpace { } else { center_sum_scaled }; - - let right = windows_right.iter().map(|e| map_fn(e, anchor, Alignment::Right)); - let right_sum_scaled = - right.clone().map(|(_, _, _length, _, suggested_length)| suggested_length).sum::() - as f64 - * self.scale - + spacing_scaled * windows_right.len().saturating_sub(1) as f64; - - let right_sum_scaled = if let Some(right_button) = right_overflow_button.as_ref() { + center_sum_scaled = center_sum_scaled.max(0.0); + + let right = + windows_right.iter().map(|e| map_fn(e, anchor, Alignment::Right, applet_padding)); + let right_sum_scaled = right + .clone() + .map(|(_, _, _length, _, suggested_length, padding)| suggested_length - padding) + .sum::() as f64 + * self.scale + + spacing_scaled * windows_right.len().saturating_sub(1) as f64; + + let mut right_sum_scaled = if let Some(right_button) = right_overflow_button.as_ref() { let size = right_button.geometry().size.to_f64() * self.scale; right_sum_scaled + if self.config.is_horizontal() { size.w } else { size.h } @@ -345,6 +376,7 @@ impl PanelSpace { } else { right_sum_scaled }; + right_sum_scaled = right_sum_scaled.max(0.0); let total_sum_scaled = left_sum_scaled + center_sum_scaled + right_sum_scaled; let new_list_length = (total_sum_scaled @@ -353,7 +385,7 @@ impl PanelSpace { as i32; let new_list_thickness = (2.0 * padding_scaled + chain!(left.clone(), center.clone(), right.clone()) - .map(|(_, _, _, thickness, _)| thickness) + .map(|(_, _, _, thickness, _, _)| thickness) .max() .unwrap_or(0) as f64 * self.scale) as i32; @@ -549,7 +581,7 @@ impl PanelSpace { // XXX this is a bit of a hack around the fact that we want the spacer to be // placed before the overflow button if windows_left.is_empty() && !windows_center.is_empty() && is_overlapping_start { - let (_, CosmicMappedInternal::Spacer(s), _) = windows_center.remove(0) else { + let (_, CosmicMappedInternal::Spacer(s), _, _) = windows_center.remove(0) else { panic!("No spacer found"); }; let size = s.bbox().size.to_f64(); @@ -587,12 +619,13 @@ impl PanelSpace { center_pos += size.h + spacing_u32 as f64; } - let mut map_windows = |windows: IterMut<'_, (usize, CosmicMappedInternal, Option)>, + let mut map_windows = |windows: IterMut< + '_, + (usize, CosmicMappedInternal, Option, bool), + >, mut prev| -> f64 { - for (_, w, minimize_priority) in windows { - // XXX this is a hack to get the logical size of the window - // TODO improve how this is done + for (_, w, minimize_priority, padding_shrinkable) in windows { let mut size = w.geometry().size.to_f64(); let configured_size = w.toplevel().and_then(|t| t.current_state().bounds).unwrap_or_else(|| { @@ -622,7 +655,8 @@ impl PanelSpace { ), ); (x, y) = (cur.0 as i32, cur.1); - prev += size.w + spacing_u32 as f64; + prev += size.w + spacing_u32 as f64 + - if *padding_shrinkable { applet_padding } else { 0. } as f64; self.space.map_element(w.clone(), (x, y), false); } else { let cur = ( @@ -634,7 +668,8 @@ impl PanelSpace { cur, ); (x, y) = (cur.0, cur.1 as i32); - prev += size.h + spacing_u32 as f64; + prev += size.h + spacing_u32 as f64 + - if *padding_shrinkable { applet_padding } else { 0. } as f64; self.space.map_element(w.clone(), (x, y), false); } if minimize_priority.is_some() { @@ -685,6 +720,23 @@ impl PanelSpace { }; self.space.map_element(CosmicMappedInternal::OverflowButton(left_button), loc, false); } + for s in self.s_hovered_surface.iter().map(|s| s.surface.clone()) { + let element = match s { + SpaceTarget::OverflowButton(b) => CosmicMappedInternal::OverflowButton(b), + SpaceTarget::Surface(ref s) => { + let Some(w) = windows_left + .iter() + .chain(windows_center.iter()) + .chain(windows_right.iter()) + .find(|w| w.1.wl_surface().is_some_and(|w| w.as_ref() == s)) + else { + continue; + }; + w.1.clone() + }, + }; + self.space.raise_element(&element, false); + } self.space.refresh(); let mut panel_size = self.actual_size.to_f64().to_physical(self.scale); @@ -954,6 +1006,16 @@ impl PanelSpace { pos_a.cmp(&pos_b) }); + let (major_padding, cross_padding) = ( + self.config.size.get_applet_shrinkable_padding(true), + self.config.size.get_applet_padding(true), + ); + + let (applet_size_unit_major, applet_size_unit_cross) = ( + self.config.size.get_applet_icon_size(true) + 2 * major_padding as u32, + self.config.size.get_applet_icon_size(true) + 2 * cross_padding as u32, + ); + for e in elements { match &e { PopupMappedInternal::Window(w) => { @@ -962,11 +1024,9 @@ impl PanelSpace { } else { let x_i = overflow_cnt % 8; let mut x = BORDER_WIDTH as i32 - + padding - + x_i as i32 * (applet_size_unit as i32 + spacing); + + x_i as i32 * (applet_size_unit_major as i32 + spacing); let mut y = BORDER_WIDTH as i32 - + padding - + (overflow_cnt / 8) as i32 * (applet_size_unit as i32 + spacing); + + (overflow_cnt / 8) as i32 * (applet_size_unit_cross as i32 + spacing); if !self.config.is_horizontal() { std::mem::swap(&mut x, &mut y); } @@ -979,12 +1039,10 @@ impl PanelSpace { if prev_cnt != cur_cnt { let actual = cur_cnt.saturating_sub(1); let mut popup_major = 2. * BORDER_WIDTH as f32 - + actual.min(8) as f32 * applet_size_unit as f32 - + 2. * padding as f32 + + actual.min(8) as f32 * applet_size_unit_major as f32 + (actual.min(8).saturating_sub(1) as f32) * spacing as f32; let mut popup_cross = 2. * BORDER_WIDTH as f32 - + (actual as f32 / 8.).ceil().min(1.0) * applet_size_unit as f32 - + 2. * padding as f32; + + (actual as f32 / 8.).ceil().min(1.0) * applet_size_unit_cross as f32; if !self.config.is_horizontal() { std::mem::swap(&mut popup_major, &mut popup_cross); } @@ -1043,17 +1101,27 @@ impl PanelSpace { continue; }; if let Some(shrink_min_size) = c.shrink_min_size { - overflow_partition.shrinkable.push((w.0, w.1 as i32, shrink_min_size)); + overflow_partition.shrinkable.push(ShrinkableClient { + window: w.0, + priority: w.1 as i32, + shrink_size: shrink_min_size, + padding_overlap: 0.0, + }); } else if c.shrink_priority.is_some() { overflow_partition.movable.push(w); } else { // make shrinkable if no shrink priority with lowest priority so it is moved // last - overflow_partition.shrinkable.push((w.0, -1, ClientShrinkSize::AppletUnit(1))); + overflow_partition.shrinkable.push(ShrinkableClient { + window: w.0, + priority: -1, + shrink_size: ClientShrinkSize::AppletUnit(1), + padding_overlap: 0.0, + }); } } // sort by priority - overflow_partition.shrinkable.sort_by(|(_, a, _), (_, b, _)| b.cmp(a)); + overflow_partition.shrinkable.sort_by(|a, b| b.priority.cmp(&a.priority)); overflow_partition.movable.sort_by(|(_, a), (_, b)| b.cmp(a)); overflow_partition } @@ -1099,7 +1167,9 @@ impl PanelSpace { let unit_size = self.config.size.get_applet_icon_size_with_padding(true); let mut sum = 0.; - for (w, priority, min_units) in clients.shrinkable.iter_mut() { + for ShrinkableClient { window: w, priority, shrink_size: min_units, .. } in + clients.shrinkable.iter_mut() + { if overflow == 0 { break; } @@ -1198,6 +1268,15 @@ impl PanelSpace { tracing::info!("Needs at least 2 movable clients to move to overflow space."); return overflow; } + let (major_padding, cross_padding) = ( + self.config.size.get_applet_shrinkable_padding(true), + self.config.size.get_applet_padding(true), + ); + let (h_padding, v_padding) = if self.config.is_horizontal() { + (major_padding as f32, cross_padding as f32) + } else { + (cross_padding as f32, major_padding as f32) + }; info!("Moving clients to overflow space {section:?} {overflow}"); let overflow_space = match section { OverflowSection::Left => &mut self.overflow_left, @@ -1205,12 +1284,19 @@ impl PanelSpace { OverflowSection::Right => &mut self.overflow_right, }; let mut overflow_cnt = overflow_space.elements().count(); - let applet_size_unit = self.config.size.get_applet_icon_size(true) - + 2 * self.config.size.get_applet_padding(true) as u32; + let (applet_size_unit_major, applet_size_unit_cross) = ( + self.config.size.get_applet_icon_size(true) + 2 * major_padding as u32, + self.config.size.get_applet_icon_size(true) + 2 * cross_padding as u32, + ); + let (applet_size_unit_h, applet_size_unit_v) = if is_horizontal { + (applet_size_unit_major, applet_size_unit_cross) + } else { + (applet_size_unit_cross, applet_size_unit_major) + }; let spacing = self.config.spacing; if overflow_cnt == 0 { - overflow += applet_size_unit + spacing; + overflow += applet_size_unit_major + spacing; } let space = &mut self.space; @@ -1230,20 +1316,18 @@ impl PanelSpace { } let diff = if is_horizontal { bbox.size.w as u32 } else { bbox.size.h as u32 }; overflow = overflow.saturating_sub(diff); - let padding = self.config.padding as i32; - // TODO spacing & padding + let x_i = overflow_cnt % 8; - let mut x = padding - + x_i as i32 * (applet_size_unit as i32 + spacing as i32) - + BORDER_WIDTH as i32; + let mut x = + x_i as i32 * (applet_size_unit_major as i32 + spacing as i32) + BORDER_WIDTH as i32; let mut y = BORDER_WIDTH as i32 - + (overflow_cnt / 8) as i32 * (applet_size_unit + spacing) as i32; + + (overflow_cnt / 8) as i32 * (applet_size_unit_cross + spacing) as i32; if !self.config.is_horizontal() { std::mem::swap(&mut x, &mut y); } space.unmap_elem(&CosmicMappedInternal::Window(w.0.clone())); - overflow_space.map_element(PopupMappedInternal::Window(w.0.clone()), (x, y), true); + overflow_space.map_element(PopupMappedInternal::Window(w.0.clone()), (x, y / 2), true); // Rows of 8 with configured applet size if let Some(t) = w.0.toplevel() { with_states(t.wl_surface(), |states| { @@ -1252,8 +1336,8 @@ impl PanelSpace { }); }); t.with_pending_state(|s| { - s.size = Some((applet_size_unit as i32, applet_size_unit as i32).into()); - s.bounds = Some((applet_size_unit as i32, applet_size_unit as i32).into()); + s.size = Some((applet_size_unit_h as i32, applet_size_unit_v as i32).into()); + s.bounds = Some((applet_size_unit_h as i32, applet_size_unit_v as i32).into()); }); t.send_pending_configure(); @@ -1267,14 +1351,12 @@ impl PanelSpace { .count(); let space = self.config.spacing as f32; - let padding = self.config.padding as f32; + let mut popup_major = 2. * BORDER_WIDTH as f32 - + overflow_cnt.min(8) as f32 * applet_size_unit as f32 - + 2. * padding + + overflow_cnt.min(8) as f32 * applet_size_unit_major as f32 + (overflow_cnt.min(8).saturating_sub(1) as f32) * space; let mut popup_cross = 2. * BORDER_WIDTH as f32 - + (overflow_cnt as f32 / 8.).ceil().min(1.0) * applet_size_unit as f32 - + 2. * padding; + + (overflow_cnt as f32 / 8.).ceil().min(1.0) * applet_size_unit_cross as f32; if !self.config.is_horizontal() { std::mem::swap(&mut popup_major, &mut popup_cross); } @@ -1295,6 +1377,7 @@ impl PanelSpace { } }) .cloned(); + let new_popup = |count| { PopupMappedInternal::Popup(overflow_popup_element( match section { @@ -1338,7 +1421,6 @@ impl PanelSpace { }; let icon_size = self.config.size.get_applet_icon_size(true); - let padding = self.config.size.get_applet_padding(true); let icon = if self.config.is_horizontal() { "view-more-horizontal-symbolic" } else { @@ -1348,7 +1430,7 @@ impl PanelSpace { id, (0, 0).into(), u16::try_from(icon_size).unwrap_or(32), - (padding as f32).into(), + [v_padding, h_padding].into(), Arc::new(AtomicBool::new(false)), icon.into(), self.shared.loop_handle.clone(), @@ -1551,7 +1633,7 @@ impl PanelSpace { if self.remap_attempts > 0 { return; } - for (w, ..) in + for ShrinkableClient { window: w, .. } in clients.constrained_shrinkables(self.config.is_horizontal(), self.scale).drain(..).rev() { let expand = extra_space as i32; @@ -1657,11 +1739,19 @@ pub enum OverflowSection { Right, } +#[derive(Debug, Clone)] +pub struct ShrinkableClient { + window: Window, + priority: i32, + shrink_size: ClientShrinkSize, + padding_overlap: f32, +} + #[derive(Debug, Default, Clone)] pub struct OverflowClientPartition { /// windows for clients that can be shrunk, but not moved to the overflow /// popup - pub(crate) shrinkable: Vec<(Window, i32, ClientShrinkSize)>, + pub(crate) shrinkable: Vec, /// windows for clients that can be moved to the overflow popup, but not /// shrunk pub(crate) movable: Vec<(Window, u32)>, @@ -1669,14 +1759,10 @@ pub struct OverflowClientPartition { } impl OverflowClientPartition { - fn constrained_shrinkables( - &self, - is_horizontal: bool, - scale: f64, - ) -> Vec<(Window, i32, ClientShrinkSize)> { + fn constrained_shrinkables(&self, is_horizontal: bool, scale: f64) -> Vec { self.shrinkable .iter() - .filter(|(w, ..)| { + .filter(|ShrinkableClient { window: w, .. }| { w.toplevel().is_some_and(|t| { let state = t.current_state(); let cur_size = w.geometry().size; @@ -1703,7 +1789,7 @@ impl OverflowClientPartition { fn shrinkable_is_relaxed(&self, is_horizontal: bool, scale: f64) -> bool { self.shrinkable.is_empty() || { - self.shrinkable.iter().all(|(w, ..)| { + self.shrinkable.iter().all(|ShrinkableClient { window: w, .. }| { w.toplevel().is_some_and(|t| { let state = t.current_state(); let cur_size = w.geometry().size; diff --git a/cosmic-panel-bin/src/space/panel_space.rs b/cosmic-panel-bin/src/space/panel_space.rs index 3c870598..9a366380 100644 --- a/cosmic-panel-bin/src/space/panel_space.rs +++ b/cosmic-panel-bin/src/space/panel_space.rs @@ -75,7 +75,7 @@ use smithay::{ compositor::with_states, fractional_scale::with_fractional_scale, seat::WaylandFocus, - shell::xdg::{PopupSurface, PositionerState}, + shell::xdg::{PopupSurface, PositionerState, ToplevelSurface}, }, }; use tokio::sync::{mpsc, oneshot}; @@ -138,6 +138,7 @@ pub struct PanelClient { pub is_notification_applet: Option, pub shrink_priority: Option, pub shrink_min_size: Option, + pub padding_shrinkable: bool, /// If there is an existing popup, this applet with be pressed when hovered. pub auto_popup_hover_press: Option, } @@ -206,6 +207,7 @@ impl PanelClient { requests_wayland_display: None, is_notification_applet: None, auto_popup_hover_press: None, + padding_shrinkable: false, shrink_priority: None, shrink_min_size: None, } @@ -311,6 +313,7 @@ pub struct PanelSpace { pub c_display: Option, pub config: CosmicPanelConfig, pub space: Space, + pub unmapped_windows: Vec, pub damage_tracked_renderer: Option, pub clients_left: Clients, pub clients_center: Clients, @@ -394,6 +397,7 @@ impl PanelSpace { config, shared: shared.clone(), space: Space::default(), + unmapped_windows: Vec::new(), overflow_left: Space::default(), overflow_center: Space::default(), overflow_right: Space::default(), @@ -600,6 +604,7 @@ impl PanelSpace { is_notification_applet: None, shrink_priority: None, shrink_min_size: None, + padding_shrinkable: false, auto_popup_hover_press: None, }; @@ -653,6 +658,7 @@ impl PanelSpace { is_notification_applet: None, shrink_priority: None, shrink_min_size: None, + padding_shrinkable: false, auto_popup_hover_press: None, }; // add to list if not already there @@ -1936,6 +1942,55 @@ impl PanelSpace { }); } } + + pub fn minimize_window(&mut self, surface: ToplevelSurface) -> bool { + let w = self + .space + .elements() + .find(|e| { + if let CosmicMappedInternal::Window(w) = e { + if let Some(t) = w.toplevel() { + return *t == surface; + } + } + false + }) + .cloned(); + + if let Some(window) = w { + self.space.unmap_elem(&window); + self.unmapped_windows.push(window); + true + } else { + false + } + } + + pub fn unminimize_window(&mut self, surface: ToplevelSurface) -> bool { + let pos = self.unmapped_windows.iter().position(|e| { + if let CosmicMappedInternal::Window(w) = e { + if let Some(t) = w.toplevel() { + return *t == surface; + } + } + false + }); + + if let Some(idx) = pos { + let window = self.unmapped_windows.remove(idx); + if let Some(wl_surface) = window.wl_surface() { + with_states(&wl_surface, |states| { + with_fractional_scale(states, |fractional_scale| { + fractional_scale.set_preferred_scale(self.scale); + }); + }); + } + self.space.map_element(window, (0, 0), false); + true + } else { + false + } + } } impl Drop for PanelSpace { diff --git a/cosmic-panel-bin/src/space/render.rs b/cosmic-panel-bin/src/space/render.rs index c141c144..a6ad5f43 100644 --- a/cosmic-panel-bin/src/space/render.rs +++ b/cosmic-panel-bin/src/space/render.rs @@ -113,7 +113,6 @@ impl PanelSpace { let hovered_clients: HashSet<_> = self .s_hovered_surface .iter() - .chain(self.s_hovered_surface.iter()) .filter_map(|c| c.surface.wl_surface().map(|s| s.id())) .collect(); tracing::trace!("Rendering space"); diff --git a/cosmic-panel-bin/src/space/wrapper_space.rs b/cosmic-panel-bin/src/space/wrapper_space.rs index 122733a8..ca7fd07a 100644 --- a/cosmic-panel-bin/src/space/wrapper_space.rs +++ b/cosmic-panel-bin/src/space/wrapper_space.rs @@ -451,6 +451,8 @@ impl WrapperSpace for PanelSpace { let config_anchor = ron::ser::to_string(&self.config.anchor).unwrap_or_default(); let config_bg = ron::ser::to_string(&self.config.background).unwrap_or_default(); let config_spacing = ron::ser::to_string(&self.config.spacing).unwrap_or_default(); + let config_padding_overlap = + ron::ser::to_string(&self.config.padding_overlap()).unwrap_or_default(); let config_name = self.config.name.clone(); let env_vars = vec![ ("COSMIC_PANEL_NAME".to_string(), config_name), @@ -458,6 +460,7 @@ impl WrapperSpace for PanelSpace { ("COSMIC_PANEL_SPACING".to_string(), config_spacing), ("COSMIC_PANEL_ANCHOR".to_string(), config_anchor), ("COSMIC_PANEL_BACKGROUND".to_string(), config_bg), + ("COSMIC_PANEL_PADDING_OVERLAP".to_string(), config_padding_overlap), ]; info!("{:?}", &desktop_ids); @@ -492,6 +495,10 @@ impl WrapperSpace for PanelSpace { panel_client.shrink_priority = entry .desktop_entry("X-OverflowPriority") .and_then(|x| x.parse::().ok()); + panel_client.padding_shrinkable = entry + .desktop_entry("X-CosmicShrinkable") + .map(|x| x == "true") + .unwrap_or_default(); panel_client.minimize_priority = if let Some(x_minimize_entry) = entry.desktop_entry("X-MinimizeApplet") diff --git a/cosmic-panel-bin/src/space_container/space_container.rs b/cosmic-panel-bin/src/space_container/space_container.rs index ad371819..27b38a76 100644 --- a/cosmic-panel-bin/src/space_container/space_container.rs +++ b/cosmic-panel-bin/src/space_container/space_container.rs @@ -36,6 +36,7 @@ use smithay::{ backend::renderer::gles::GlesRenderer, output::Output, reexports::wayland_server::{self, backend::ClientId}, + wayland::shell::xdg::ToplevelSurface, }; use tokio::sync::mpsc; use tracing::{error, info}; @@ -295,6 +296,8 @@ impl SpaceContainer { || self.config.config_list.iter().any(|c| { // size changed c.name == entry.name && c.size != entry.size + // spacing changed + || (c.name == entry.name && c.spacing != entry.spacing) // size overrides changed || (c.name == entry.name && (c.size_center != entry.size_center || c.size_wings != entry.size_wings)) // output changed @@ -567,4 +570,20 @@ impl SpaceContainer { ); } } + + pub(crate) fn minimize_window(&mut self, surface: ToplevelSurface) { + for space in &mut self.space_list { + if space.minimize_window(surface.clone()) { + break; + } + } + } + + pub(crate) fn maximize_window(&mut self, surface: ToplevelSurface) { + for space in &mut self.space_list { + if space.unminimize_window(surface.clone()) { + break; + } + } + } } diff --git a/cosmic-panel-bin/src/xdg_shell_wrapper/server/handlers/xdg_shell.rs b/cosmic-panel-bin/src/xdg_shell_wrapper/server/handlers/xdg_shell.rs index caecc5e2..eed8d485 100644 --- a/cosmic-panel-bin/src/xdg_shell_wrapper/server/handlers/xdg_shell.rs +++ b/cosmic-panel-bin/src/xdg_shell_wrapper/server/handlers/xdg_shell.rs @@ -114,6 +114,14 @@ impl XdgShellHandler for GlobalState { fn popup_destroyed(&mut self, surface: PopupSurface) { self.server_state.popup_manager.commit(surface.wl_surface()); } + + fn minimize_request(&mut self, surface: ToplevelSurface) { + self.space.minimize_window(surface.clone()); + } + + fn maximize_request(&mut self, surface: ToplevelSurface) { + self.space.maximize_window(surface.clone()); + } } // Xdg Shell diff --git a/cosmic-panel-config/src/container_config.rs b/cosmic-panel-config/src/container_config.rs index 6b5c1ba0..9e2a8f2f 100644 --- a/cosmic-panel-config/src/container_config.rs +++ b/cosmic-panel-config/src/container_config.rs @@ -157,13 +157,14 @@ impl Default for CosmicPanelContainerConfig { size_center: None, expand_to_edges: true, padding: 0, - spacing: 2, + spacing: 0, border_radius: 0, exclusive_zone: true, autohide: None, margin: 0, opacity: 1.0, autohover_delay_ms: Some(500), + padding_overlap: 0.5, }, CosmicPanelConfig { name: "Dock".to_string(), @@ -186,9 +187,9 @@ impl Default for CosmicPanelContainerConfig { size_wings: None, size_center: None, expand_to_edges: false, - padding: 0, - spacing: 4, - border_radius: 160, + padding: 4, + spacing: 0, + border_radius: 12, exclusive_zone: false, autohide: Some(crate::AutoHide { wait_time: 500, @@ -199,6 +200,7 @@ impl Default for CosmicPanelContainerConfig { margin: 0, opacity: 1.0, autohover_delay_ms: Some(500), + padding_overlap: 0.5, }, ], } diff --git a/cosmic-panel-config/src/panel_config.rs b/cosmic-panel-config/src/panel_config.rs index 6c7eca82..b0562158 100644 --- a/cosmic-panel-config/src/panel_config.rs +++ b/cosmic-panel-config/src/panel_config.rs @@ -194,6 +194,34 @@ impl PanelSize { } } + pub fn get_applet_shrinkable_padding(&self, is_symbolic: bool) -> u16 { + if is_symbolic { + match self { + PanelSize::XS => 12, + PanelSize::S => 14, + PanelSize::M => 18, + PanelSize::L => 20, + PanelSize::XL => 20, + PanelSize::Custom(s) => { + let s = (*s).max(16) / 4 * 4; + 4 + (s / 4) as u16 + }, + } + } else { + match self { + PanelSize::XS => 8, + PanelSize::S => 8, + PanelSize::M => 12, + PanelSize::L => 12, + PanelSize::XL => 16, + PanelSize::Custom(s) => { + let s = (*s).max(16) / 4 * 4; + 4 + (s * 3 / 20) as u16 + }, + } + } + } + pub fn get_applet_icon_size_with_padding(&self, is_symbolic: bool) -> u32 { self.get_applet_icon_size(is_symbolic) + self.get_applet_padding(is_symbolic) as u32 * 2 } @@ -382,6 +410,8 @@ pub struct CosmicPanelConfig { /// autohover popup delay duration in milliseconds /// If None, then it is disabled pub autohover_delay_ms: Option, + /// padding overlap ratio + pub padding_overlap: f32, } impl PartialEq for CosmicPanelConfig { @@ -429,13 +459,14 @@ impl Default for CosmicPanelConfig { size_center: Default::default(), expand_to_edges: true, padding: 4, - spacing: 4, + spacing: 0, exclusive_zone: true, autohide: Some(AutoHide::default()), border_radius: 8, margin: 4, opacity: 0.8, autohover_delay_ms: Some(500), + padding_overlap: 0.5, } } } @@ -449,6 +480,10 @@ pub enum Side { #[cfg(feature = "wayland-rs")] impl CosmicPanelConfig { + pub fn padding_overlap(&self) -> f32 { + self.padding_overlap.clamp(0., 1.) + } + /// get the applet size given its side pub fn get_effective_applet_size(&self, side: Side) -> PanelSize { match side { diff --git a/data/default_schema/com.system76.CosmicPanel.Dock/v1/border_radius b/data/default_schema/com.system76.CosmicPanel.Dock/v1/border_radius index 9da06a18..3cacc0b9 100644 --- a/data/default_schema/com.system76.CosmicPanel.Dock/v1/border_radius +++ b/data/default_schema/com.system76.CosmicPanel.Dock/v1/border_radius @@ -1 +1 @@ -160 \ No newline at end of file +12 \ No newline at end of file diff --git a/data/default_schema/com.system76.CosmicPanel.Dock/v1/padding b/data/default_schema/com.system76.CosmicPanel.Dock/v1/padding index c2270834..bf0d87ab 100644 --- a/data/default_schema/com.system76.CosmicPanel.Dock/v1/padding +++ b/data/default_schema/com.system76.CosmicPanel.Dock/v1/padding @@ -1 +1 @@ -0 \ No newline at end of file +4 \ No newline at end of file diff --git a/data/default_schema/com.system76.CosmicPanel.Dock/v1/spacing b/data/default_schema/com.system76.CosmicPanel.Dock/v1/spacing index bf0d87ab..c2270834 100644 --- a/data/default_schema/com.system76.CosmicPanel.Dock/v1/spacing +++ b/data/default_schema/com.system76.CosmicPanel.Dock/v1/spacing @@ -1 +1 @@ -4 \ No newline at end of file +0 \ No newline at end of file diff --git a/data/default_schema/com.system76.CosmicPanel.Panel/v1/spacing b/data/default_schema/com.system76.CosmicPanel.Panel/v1/spacing index d8263ee9..c2270834 100644 --- a/data/default_schema/com.system76.CosmicPanel.Panel/v1/spacing +++ b/data/default_schema/com.system76.CosmicPanel.Panel/v1/spacing @@ -1 +1 @@ -2 \ No newline at end of file +0 \ No newline at end of file