From cf7fc32adfbc2cc91b52dab24029905bb627a399 Mon Sep 17 00:00:00 2001 From: Ashley Wulber <48420062+wash2@users.noreply.github.com> Date: Tue, 17 Mar 2026 16:56:55 -0400 Subject: [PATCH] feat: libcosmic iced 0.14 rebase --- Cargo.lock | 2636 ++++++++--------- Cargo.toml | 24 +- cosmic-settings/Cargo.toml | 16 +- .../src/pages/accessibility/magnifier.rs | 2 +- .../src/pages/accessibility/mod.rs | 2 +- .../src/pages/applications/default_apps.rs | 22 +- .../pages/applications/legacy_applications.rs | 2 +- cosmic-settings/src/pages/bluetooth/mod.rs | 26 +- .../pages/desktop/appearance/font_config.rs | 4 +- .../src/pages/desktop/appearance/mod.rs | 6 +- .../src/pages/desktop/panel/applets_inner.rs | 54 +- .../src/pages/desktop/panel/inner.rs | 67 +- .../src/pages/desktop/wallpaper/mod.rs | 11 +- .../src/pages/desktop/wallpaper/widgets.rs | 3 +- .../src/pages/desktop/window_management.rs | 17 +- .../src/pages/display/arrangement.rs | 27 +- cosmic-settings/src/pages/display/mod.rs | 13 +- .../src/pages/input/keyboard/mod.rs | 82 +- .../pages/input/keyboard/shortcuts/common.rs | 1 + .../src/pages/input/keyboard/shortcuts/mod.rs | 3 +- cosmic-settings/src/pages/input/mouse.rs | 72 +- .../src/pages/networking/vpn/mod.rs | 5 +- cosmic-settings/src/pages/networking/wifi.rs | 11 +- cosmic-settings/src/pages/networking/wired.rs | 4 +- cosmic-settings/src/pages/power/mod.rs | 154 +- cosmic-settings/src/pages/sound/mod.rs | 45 +- cosmic-settings/src/pages/system/about.rs | 92 +- cosmic-settings/src/pages/system/users/mod.rs | 11 +- cosmic-settings/src/pages/time/date.rs | 4 +- cosmic-settings/src/pages/time/region.rs | 6 +- cosmic-settings/src/subscription/daytime.rs | 9 +- .../src/subscription/desktop_files.rs | 70 +- .../src/subscription/wallpapers.rs | 11 +- cosmic-settings/src/theme.rs | 2 + cosmic-settings/src/widget/mod.rs | 13 +- subscriptions/accessibility/src/lib.rs | 20 +- subscriptions/airplane-mode/src/lib.rs | 9 +- .../network-manager/src/active_conns.rs | 10 +- subscriptions/network-manager/src/devices.rs | 36 +- subscriptions/network-manager/src/lib.rs | 39 +- .../network-manager/src/nm_secret_agent.rs | 14 +- .../network-manager/src/wireless_enabled.rs | 10 +- subscriptions/pulse/Cargo.toml | 12 + subscriptions/pulse/src/lib.rs | 751 +++++ subscriptions/settings-daemon/src/lib.rs | 103 +- subscriptions/sound/src/lib.rs | 55 +- subscriptions/upower/src/lib.rs | 14 +- 47 files changed, 2731 insertions(+), 1869 deletions(-) create mode 100644 subscriptions/pulse/Cargo.toml create mode 100644 subscriptions/pulse/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index b6c91bd..e99c25f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,75 +20,78 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" -version = "0.16.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +version = "0.22.0" +source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f" +dependencies = [ + "uuid", +] [[package]] name = "accesskit_atspi_common" -version = "0.9.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +version = "0.15.0" +source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f" dependencies = [ "accesskit", "accesskit_consumer", "atspi-common", "serde", - "thiserror 1.0.69", - "zvariant 3.15.2", + "zvariant", ] [[package]] name = "accesskit_consumer" -version = "0.24.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +version = "0.32.0" +source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f" dependencies = [ "accesskit", - "immutable-chunkmap", + "hashbrown 0.16.1", ] [[package]] name = "accesskit_macos" -version = "0.17.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +version = "0.23.0" +source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f" dependencies = [ "accesskit", "accesskit_consumer", + "hashbrown 0.16.1", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", - "once_cell", ] [[package]] name = "accesskit_unix" -version = "0.12.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +version = "0.18.0" +source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f" dependencies = [ "accesskit", "accesskit_atspi_common", "atspi", - "futures-lite 1.13.0", + "futures-lite", "serde", "tokio", "tokio-stream", - "zbus 3.15.2", + "zbus", ] [[package]] name = "accesskit_windows" -version = "0.22.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +version = "0.30.0" +source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f" dependencies = [ "accesskit", "accesskit_consumer", - "paste", + "hashbrown 0.16.1", "static_assertions", - "windows 0.54.0", + "windows 0.61.3", + "windows-core 0.61.2", ] [[package]] name = "accesskit_winit" -version = "0.22.0" -source = "git+https://github.com/wash2/accesskit?tag=iced-xdg-surface-0.13-rc#c46afc041b1968a5af0186fa6aba3ea9cf24c8c3" +version = "0.30.0" +source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f" dependencies = [ "accesskit", "accesskit_macos", @@ -101,9 +104,9 @@ dependencies = [ [[package]] name = "accounts-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "zbus 5.13.2", + "zbus", ] [[package]] @@ -215,7 +218,7 @@ dependencies = [ "log", "ndk", "ndk-context", - "ndk-sys 0.6.0+11769913", + "ndk-sys", "num_enum", "thiserror 1.0.69", ] @@ -247,9 +250,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -262,15 +265,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] @@ -297,9 +300,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "apply" @@ -339,7 +342,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -393,14 +396,14 @@ dependencies = [ "serde_repr", "tokio", "url", - "zbus 5.13.2", + "zbus", ] [[package]] name = "ashpd" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522dc9bec59923af17c43c5911cdabbacdb32ed4f955e83ecf592855618b20b5" +checksum = "33a3c86f3fd70c0ffa500ed189abfa90b5a52398a45d5dc372fcc38ebeb7a645" dependencies = [ "enumflags2", "futures-channel", @@ -413,17 +416,7 @@ dependencies = [ "wayland-backend", "wayland-client", "wayland-protocols", - "zbus 5.13.2", -] - -[[package]] -name = "async-broadcast" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" -dependencies = [ - "event-listener 2.5.3", - "futures-core", + "zbus", ] [[package]] @@ -432,7 +425,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.1", + "event-listener", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -458,32 +451,12 @@ checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.3.0", - "futures-lite 2.6.1", + "fastrand", + "futures-lite", "pin-project-lite", "slab", ] -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.28", - "slab", - "socket2 0.4.10", - "waker-fn", -] - [[package]] name = "async-io" version = "2.6.0" @@ -494,51 +467,25 @@ dependencies = [ "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.6.1", + "futures-lite", "parking", - "polling 3.11.0", - "rustix 1.1.3", + "polling", + "rustix 1.1.4", "slab", "windows-sys 0.61.2", ] -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] - [[package]] name = "async-lock" version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ - "event-listener 5.4.1", + "event-listener", "event-listener-strategy", "pin-project-lite", ] -[[package]] -name = "async-process" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" -dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", - "async-signal", - "blocking", - "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.44", - "windows-sys 0.48.0", -] - [[package]] name = "async-process" version = "2.5.0" @@ -546,15 +493,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" dependencies = [ "async-channel", - "async-io 2.6.0", - "async-lock 3.4.2", + "async-io", + "async-lock", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener 5.4.1", - "futures-lite 2.6.1", - "rustix 1.1.3", + "event-listener", + "futures-lite", + "rustix 1.1.4", ] [[package]] @@ -565,7 +512,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -574,13 +521,13 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" dependencies = [ - "async-io 2.6.0", - "async-lock 3.4.2", + "async-io", + "async-lock", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 1.1.3", + "rustix 1.1.4", "signal-hook-registry", "slab", "windows-sys 0.61.2", @@ -600,7 +547,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -621,62 +568,48 @@ dependencies = [ [[package]] name = "atspi" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" +version = "0.29.0" +source = "git+https://github.com/wash2/atspi#e1e6e8bcd781a3155a9ff7e0b1e5193e5587f94c" dependencies = [ "atspi-common", - "atspi-connection", "atspi-proxies", ] [[package]] name = "atspi-common" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" +version = "0.13.0" +source = "git+https://github.com/wash2/atspi#e1e6e8bcd781a3155a9ff7e0b1e5193e5587f94c" dependencies = [ "enumflags2", "serde", "static_assertions", - "zbus 3.15.2", - "zbus_names 2.6.1", - "zvariant 3.15.2", -] - -[[package]] -name = "atspi-connection" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" -dependencies = [ - "atspi-common", - "atspi-proxies", - "futures-lite 1.13.0", - "zbus 3.15.2", + "zbus", + "zbus-lockstep", + "zbus-lockstep-macros", + "zbus_names", + "zvariant", ] [[package]] name = "atspi-proxies" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" +version = "0.13.0" +source = "git+https://github.com/wash2/atspi#e1e6e8bcd781a3155a9ff7e0b1e5193e5587f94c" dependencies = [ "atspi-common", "serde", - "zbus 3.15.2", + "zbus", ] [[package]] name = "auto_enums" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c170965892137a3a9aeb000b4524aa3cc022a310e709d848b6e1cdce4ab4781" +checksum = "65398a2893f41bce5c9259f6e1a4f03fbae40637c1bdc755b4f387f48c613b03" dependencies = [ "derive_utils", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -740,7 +673,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -774,23 +707,23 @@ dependencies = [ "regex", "rustc-hash 2.1.1", "shlex", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "bit-set" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bit_field" @@ -870,7 +803,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ - "objc2 0.6.3", + "objc2 0.6.4", ] [[package]] @@ -882,7 +815,7 @@ dependencies = [ "async-channel", "async-task", "futures-io", - "futures-lite 2.6.1", + "futures-lite", "piper", ] @@ -900,12 +833,21 @@ dependencies = [ [[package]] name = "bluez-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ "futures-channel", "futures-util", "tracing", - "zbus 5.13.2", + "zbus", +] + +[[package]] +name = "borsh" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" +dependencies = [ + "cfg_aliases 0.2.1", ] [[package]] @@ -946,9 +888,9 @@ checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" -version = "3.20.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6f81257d10a0f602a294ae4182251151ff97dbb504ef9afcdda4a64b24d9b4" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "by_address" @@ -973,7 +915,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -1004,20 +946,6 @@ dependencies = [ "displaydoc", ] -[[package]] -name = "calloop" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" -dependencies = [ - "bitflags 2.11.0", - "log", - "polling 3.11.0", - "rustix 0.38.44", - "slab", - "thiserror 1.0.69", -] - [[package]] name = "calloop" version = "0.14.4" @@ -1025,32 +953,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ "bitflags 2.11.0", - "polling 3.11.0", - "rustix 1.1.3", + "polling", + "rustix 1.1.4", "slab", "tracing", ] -[[package]] -name = "calloop-wayland-source" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" -dependencies = [ - "calloop 0.13.0", - "rustix 0.38.44", - "wayland-backend", - "wayland-client", -] - [[package]] name = "calloop-wayland-source" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ - "calloop 0.14.4", - "rustix 1.1.3", + "calloop", + "rustix 1.1.4", "wayland-backend", "wayland-client", ] @@ -1066,9 +982,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.56" +version = "1.2.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" dependencies = [ "find-msvc-tools", "jobserver", @@ -1104,9 +1020,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.20.6" +version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78cef5b5a1a6827c7322ae2a636368a573006b27cfa76c7ebd53e834daeaab6a" +checksum = "3c6b04e07d8080154ed4ac03546d9a2b303cc2fe1901ba0b35b301516e289368" dependencies = [ "smallvec", "target-lexicon", @@ -1132,16 +1048,16 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.43" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -1176,9 +1092,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.59" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499" +checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" dependencies = [ "clap_builder", "clap_derive", @@ -1186,9 +1102,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.59" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstream", "anstyle", @@ -1198,21 +1114,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.55" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" +checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "clap_lex" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "clipboard-win" @@ -1226,7 +1142,7 @@ dependencies = [ [[package]] name = "clipboard_macos" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#3a7af79e54db6854d8aa9d9e2866a9288d0f95d5" dependencies = [ "objc", "objc-foundation", @@ -1236,7 +1152,7 @@ dependencies = [ [[package]] name = "clipboard_wayland" version = "0.2.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#3a7af79e54db6854d8aa9d9e2866a9288d0f95d5" dependencies = [ "dnd", "mime 0.1.0", @@ -1246,7 +1162,7 @@ dependencies = [ [[package]] name = "clipboard_x11" version = "0.4.2" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#3a7af79e54db6854d8aa9d9e2866a9288d0f95d5" dependencies = [ "thiserror 1.0.69", "x11rb", @@ -1261,7 +1177,7 @@ dependencies = [ "bitflags 1.3.2", "block", "cocoa-foundation", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", "foreign-types", "libc", @@ -1276,20 +1192,21 @@ checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ "bitflags 1.3.2", "block", - "core-foundation", - "core-graphics-types", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", "libc", "objc", ] [[package]] name = "codespan-reporting" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ + "serde", "termcolor", - "unicode-width 0.1.14", + "unicode-width 0.2.2", ] [[package]] @@ -1327,40 +1244,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "com" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" -dependencies = [ - "com_macros", -] - -[[package]] -name = "com_macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" -dependencies = [ - "com_macros_support", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "com_macros_support" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" @@ -1412,6 +1298,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1425,8 +1321,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", "foreign-types", "libc", ] @@ -1438,7 +1334,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.10.1", "libc", ] @@ -1463,7 +1370,7 @@ dependencies = [ [[package]] name = "cosmic-bg-config" version = "1.0.3" -source = "git+https://github.com/pop-os/cosmic-bg#4396743bef03e1c55029714d1958e21aef5257fa" +source = "git+https://github.com/pop-os/cosmic-bg#644993abd84bf04d7b3f2211e3656002c2a6f00b" dependencies = [ "cosmic-config", "derive_setters", @@ -1475,12 +1382,12 @@ dependencies = [ [[package]] name = "cosmic-client-toolkit" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" +source = "git+https://github.com/pop-os/cosmic-protocols//?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ "bitflags 2.11.0", - "cosmic-protocols 0.1.0", + "cosmic-protocols", "libc", - "smithay-client-toolkit 0.20.0", + "smithay-client-toolkit", "wayland-client", "wayland-protocols", ] @@ -1488,11 +1395,11 @@ dependencies = [ [[package]] name = "cosmic-comp-config" version = "1.0.0" -source = "git+https://github.com/pop-os/cosmic-comp#ef14b7e29469c4dc066e1c8cf096868d08213caf" +source = "git+https://github.com/pop-os/cosmic-comp#b28a435b18a3c1a8dfb8dbf781b40610aca03604" dependencies = [ "cosmic-config", "input", - "ron 0.11.0", + "ron 0.12.0", "serde", "tracing", ] @@ -1500,7 +1407,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1515,37 +1422,37 @@ dependencies = [ "tokio", "tracing", "xdg", - "zbus 5.13.2", + "zbus", ] [[package]] name = "cosmic-config-derive" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "cosmic-dbus-a11y" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "zbus 5.13.2", + "zbus", ] [[package]] name = "cosmic-dbus-networkmanager" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ "bitflags 2.11.0", "derive_builder", + "jiff", "procfs", - "time", - "zbus 5.13.2", - "zvariant 5.9.2", + "zbus", + "zvariant", ] [[package]] @@ -1578,19 +1485,19 @@ source = "git+https://github.com/pop-os/cosmic-mime-apps#673f3758920a7b20d307d35 dependencies = [ "freedesktop-desktop-entry", "mime 0.3.17", - "quick-xml", + "quick-xml 0.38.4", "xdg", ] [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#6a783a18c3079955ff4cde1d00eaadf8e77b869c" +source = "git+https://github.com/pop-os/cosmic-panel#45a62ed812248544290dba11566aa07b92825f07" dependencies = [ "anyhow", "cosmic-config", "serde", - "smithay-client-toolkit 0.20.0", + "smithay-client-toolkit", "tracing", "wayland-protocols-wlr", "xdg-shell-wrapper-config", @@ -1612,21 +1519,7 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-protocols?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" -dependencies = [ - "bitflags 2.11.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-wlr", - "wayland-scanner", - "wayland-server", -] - -[[package]] -name = "cosmic-protocols" -version = "0.2.0" -source = "git+https://github.com/pop-os/cosmic-protocols#160b086abe03cd34a8a375d7fbe47b24308d1f38" +source = "git+https://github.com/pop-os/cosmic-protocols//?rev=d0e95be#d0e95be25e423cfe523b11111a3666ed7aaf0dc4" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -1642,7 +1535,7 @@ name = "cosmic-randr" version = "0.1.0" source = "git+https://github.com/pop-os/cosmic-randr#6e8e795970fa06d434af22775e415b517f7552d3" dependencies = [ - "cosmic-protocols 0.2.0", + "cosmic-protocols", "indexmap 2.13.0", "thiserror 2.0.18", "tokio", @@ -1667,7 +1560,7 @@ version = "1.0.7" dependencies = [ "accounts-zbus", "anyhow", - "ashpd 0.12.2", + "ashpd 0.12.3", "bluez-zbus", "chrono", "clap", @@ -1679,7 +1572,7 @@ dependencies = [ "cosmic-idle-config", "cosmic-mime-apps", "cosmic-panel-config", - "cosmic-protocols 0.2.0", + "cosmic-protocols", "cosmic-randr", "cosmic-randr-shell", "cosmic-settings-a11y-manager-subscription", @@ -1696,7 +1589,7 @@ dependencies = [ "derive_setters", "dirs", "eyre", - "fontdb 0.23.0", + "fontdb", "freedesktop-desktop-entry", "futures", "gettext-rs", @@ -1721,12 +1614,12 @@ dependencies = [ "regex", "ron 0.12.0", "rust-embed", - "rustix 1.1.3", + "rustix 1.1.4", "secure-string", "serde", "slab", "slotmap", - "smithay-client-toolkit 0.20.0", + "smithay-client-toolkit", "static_init", "sunrise", "sysinfo", @@ -1741,7 +1634,7 @@ dependencies = [ "xdgen", "xkb-data", "xkeysym", - "zbus 5.13.2", + "zbus", "zbus_polkit", ] @@ -1749,11 +1642,11 @@ dependencies = [ name = "cosmic-settings-a11y-manager-subscription" version = "1.0.7" dependencies = [ - "cosmic-protocols 0.2.0", + "cosmic-protocols", "iced_futures", "num-derive", "num-traits", - "smithay-client-toolkit 0.20.0", + "smithay-client-toolkit", "tokio", "tracing", ] @@ -1767,7 +1660,7 @@ dependencies = [ "iced_futures", "tokio", "tracing", - "zbus 5.13.2", + "zbus", ] [[package]] @@ -1777,7 +1670,7 @@ dependencies = [ "futures", "iced_futures", "log", - "rustix 1.1.3", + "rustix 1.1.4", "tokio", ] @@ -1790,13 +1683,13 @@ dependencies = [ "iced_futures", "tokio", "tracing", - "zbus 5.13.2", + "zbus", ] [[package]] name = "cosmic-settings-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#6c3add2e19e22296d53fb0b034bc05e8b64e7631" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#e37160f14d1e7ee428f973cd2848b4e95f83dfe1" dependencies = [ "cosmic-config", "ron 0.11.0", @@ -1809,15 +1702,15 @@ dependencies = [ [[package]] name = "cosmic-settings-daemon" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "zbus 5.13.2", + "zbus", ] [[package]] name = "cosmic-settings-daemon-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-settings-daemon#6c3add2e19e22296d53fb0b034bc05e8b64e7631" +source = "git+https://github.com/pop-os/cosmic-settings-daemon#e37160f14d1e7ee428f973cd2848b4e95f83dfe1" dependencies = [ "cosmic-config", "serde", @@ -1832,7 +1725,7 @@ dependencies = [ "log", "tokio", "tokio-stream", - "zbus 5.13.2", + "zbus", ] [[package]] @@ -1850,7 +1743,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "tracing", - "zbus 5.13.2", + "zbus", ] [[package]] @@ -1866,6 +1759,17 @@ dependencies = [ "url", ] +[[package]] +name = "cosmic-settings-pulse-subscription" +version = "0.1.0" +dependencies = [ + "futures", + "iced_futures", + "libpulse-binding", + "log", + "rustix 1.1.4", +] + [[package]] name = "cosmic-settings-sound-subscription" version = "1.0.7" @@ -1875,7 +1779,7 @@ dependencies = [ "intmap", "libcosmic", "numtoa", - "rustix 1.1.3", + "rustix 1.1.4", "tokio", "tracing", ] @@ -1890,7 +1794,7 @@ dependencies = [ "tokio", "tokio-stream", "upower_dbus", - "zbus 5.13.2", + "zbus", ] [[package]] @@ -1902,7 +1806,7 @@ dependencies = [ "dirs", "eyre", "fast_image_resize", - "futures-lite 2.6.1", + "futures-lite", "futures-util", "image", "infer", @@ -1914,11 +1818,11 @@ dependencies = [ [[package]] name = "cosmic-text" -version = "0.18.0" -source = "git+https://github.com/pop-os/cosmic-text.git#cd1d3aa1efb7d5529fb9de09d37fbc85b8ce1253" +version = "0.18.2" +source = "git+https://github.com/pop-os/cosmic-text.git#d5a972a2b63649fad11ea3a7e80f7dc4c592f01a" dependencies = [ "bitflags 2.11.0", - "fontdb 0.23.0", + "fontdb", "harfrust", "linebender_resource_handle", "log", @@ -1926,7 +1830,7 @@ dependencies = [ "rustc-hash 2.1.1", "self_cell", "skrifa 0.40.0", - "smol_str 0.3.5", + "smol_str", "swash", "sys-locale", "unicode-bidi", @@ -1938,7 +1842,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "almost", "configparser", @@ -2001,6 +1905,18 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "cryoglyph" +version = "0.1.0" +source = "git+https://github.com/pop-os/glyphon.git?tag=cosmic-0.14#c49de15bce4d8254ac136d1be9911960cc85ce12" +dependencies = [ + "cosmic-text", + "etagere", + "lru", + "rustc-hash 2.1.1", + "wgpu", +] + [[package]] name = "crypto-common" version = "0.1.7" @@ -2029,9 +1945,9 @@ checksum = "42aaeae719fd78ce501d77c6cdf01f7e96f26bcd5617a4903a1c2b97e388543a" [[package]] name = "csscolorparser" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a878cfd6075649977f548ed439564cfdbe1f190a6656a00b48af7740f2f148" +checksum = "199f851bd3cb5004c09474252c7f74e7c047441ed0979bf3688a7106a13da952" dependencies = [ "num-traits", "phf 0.13.1", @@ -2051,17 +1967,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" -[[package]] -name = "d3d12" -version = "22.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdbd1f579714e3c809ebd822c81ef148b1ceaeb3d535352afc73fd0c4c6a0017" -dependencies = [ - "bitflags 2.11.0", - "libloading", - "winapi", -] - [[package]] name = "darling" version = "0.20.11" @@ -2082,6 +1987,16 @@ dependencies = [ "darling_macro 0.21.3", ] +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + [[package]] name = "darling_core" version = "0.20.11" @@ -2093,7 +2008,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2107,7 +2022,20 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", ] [[package]] @@ -2118,7 +2046,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2129,7 +2057,18 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.116", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote", + "syn 2.0.117", ] [[package]] @@ -2140,25 +2079,14 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" [[package]] name = "deranged" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", "serde_core", ] -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "derive_builder" version = "0.20.2" @@ -2177,7 +2105,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2187,7 +2115,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2199,18 +2127,18 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "derive_utils" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" +checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2254,22 +2182,16 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - [[package]] name = "dispatch2" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ "bitflags 2.11.0", "block2 0.6.2", "libc", - "objc2 0.6.3", + "objc2 0.6.4", ] [[package]] @@ -2280,14 +2202,14 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "dlib" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" dependencies = [ "libloading", ] @@ -2295,12 +2217,12 @@ dependencies = [ [[package]] name = "dnd" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#3a7af79e54db6854d8aa9d9e2866a9288d0f95d5" dependencies = [ "bitflags 2.11.0", "mime 0.1.0", "raw-window-handle", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "smithay-clipboard", ] @@ -2327,8 +2249,8 @@ checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "dpi" -version = "0.1.1" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#dd46a1499bcc38f2134ab869e8860a32e091c55b" +version = "0.1.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" [[package]] name = "drm" @@ -2405,15 +2327,9 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] -[[package]] -name = "env_home" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" - [[package]] name = "equator" version = "0.4.2" @@ -2431,7 +2347,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2475,23 +2391,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - [[package]] name = "event-listener" version = "5.4.1" @@ -2509,7 +2408,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.1", + "event-listener", "pin-project-lite", ] @@ -2558,15 +2457,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.3.0" @@ -2590,7 +2480,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2644,6 +2534,15 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +[[package]] +name = "float-cmp" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" +dependencies = [ + "num-traits", +] + [[package]] name = "float_next_after" version = "1.0.0" @@ -2707,6 +2606,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "font-types" version = "0.10.1" @@ -2734,20 +2639,6 @@ dependencies = [ "roxmltree", ] -[[package]] -name = "fontdb" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32eac81c1135c1df01d4e6d4233c47ba11f6a6d07f33e0bba09d18797077770" -dependencies = [ - "fontconfig-parser", - "log", - "memmap2 0.9.10", - "slotmap", - "tinyvec", - "ttf-parser 0.21.1", -] - [[package]] name = "fontdb" version = "0.23.0" @@ -2759,7 +2650,7 @@ dependencies = [ "memmap2 0.9.10", "slotmap", "tinyvec", - "ttf-parser 0.25.1", + "ttf-parser", ] [[package]] @@ -2780,7 +2671,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2890,28 +2781,13 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - [[package]] name = "futures-lite" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ - "fastrand 2.3.0", + "fastrand", "futures-core", "futures-io", "parking", @@ -2926,7 +2802,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -2974,8 +2850,8 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.3", - "windows-link", + "rustix 1.1.4", + "windows-link 0.2.1", ] [[package]] @@ -2997,19 +2873,19 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", ] [[package]] name = "getrandom" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 6.0.0", "wasip2", "wasip3", ] @@ -3085,9 +2961,9 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "glow" -version = "0.13.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" dependencies = [ "js-sys", "slotmap", @@ -3125,15 +3001,14 @@ dependencies = [ [[package]] name = "gpu-allocator" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" dependencies = [ "log", "presser", "thiserror 1.0.69", - "winapi", - "windows 0.52.0", + "windows 0.58.0", ] [[package]] @@ -3180,14 +3055,15 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "num-traits", "zerocopy", ] [[package]] name = "harfrust" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f9f40651a03bc0f7316bd75267ff5767e93017ef3cfffe76c6aa7252cc5a31c" +checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" dependencies = [ "bitflags 2.11.0", "bytemuck", @@ -3208,7 +3084,7 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "foldhash", + "foldhash 0.1.5", ] [[package]] @@ -3216,20 +3092,8 @@ name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - -[[package]] -name = "hassle-rs" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" dependencies = [ - "bitflags 2.11.0", - "com", - "libc", - "libloading", - "thiserror 1.0.69", - "widestring", - "winapi", + "foldhash 0.2.0", ] [[package]] @@ -3305,9 +3169,9 @@ checksum = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2" [[package]] name = "hostname1-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "zbus 5.13.2", + "zbus", ] [[package]] @@ -3337,7 +3201,7 @@ dependencies = [ "i18n-embed-impl", "intl-memoizer", "log", - "parking_lot 0.12.5", + "parking_lot", "rust-embed", "sys-locale", "thiserror 1.0.69", @@ -3360,7 +3224,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.116", + "syn 2.0.117", "unic-langid", ] @@ -3374,7 +3238,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -3403,26 +3267,29 @@ dependencies = [ [[package]] name = "iced" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "dnd", "iced_accessibility", "iced_core", + "iced_debug", "iced_futures", + "iced_program", "iced_renderer", + "iced_runtime", "iced_widget", "iced_winit", "image", "mime 0.1.0", - "thiserror 1.0.69", + "thiserror 2.0.18", "window_clipboard", ] [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "accesskit", "accesskit_winit", @@ -3430,8 +3297,8 @@ dependencies = [ [[package]] name = "iced_core" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "bitflags 2.11.0", "bytes", @@ -3439,24 +3306,34 @@ dependencies = [ "dnd", "glam", "iced_accessibility", + "lilt", "log", "mime 0.1.0", "num-traits", - "once_cell", "palette", "raw-window-handle", "rustc-hash 2.1.1", "serde", - "smol_str 0.2.2", - "thiserror 1.0.69", + "smol_str", + "thiserror 2.0.18", "web-time", "window_clipboard", ] +[[package]] +name = "iced_debug" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" +dependencies = [ + "iced_core", + "iced_futures", + "log", +] + [[package]] name = "iced_futures" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "futures", "iced_core", @@ -3464,25 +3341,13 @@ dependencies = [ "rustc-hash 2.1.1", "tokio", "wasm-bindgen-futures", - "wasm-timer", -] - -[[package]] -name = "iced_glyphon" -version = "0.6.0" -source = "git+https://github.com/pop-os/glyphon.git?tag=iced-0.14-dev#6ef9d12a20cfd0f7bdf38136a26ded9f7459ec8b" -dependencies = [ - "cosmic-text", - "etagere", - "lru", - "rustc-hash 2.1.1", - "wgpu", + "wasmtimer", ] [[package]] name = "iced_graphics" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "bitflags 2.11.0", "bytemuck", @@ -3494,29 +3359,37 @@ dependencies = [ "kamadak-exif", "log", "lyon_path", - "once_cell", "raw-window-handle", "rustc-hash 2.1.1", - "thiserror 1.0.69", + "thiserror 2.0.18", "unicode-segmentation", ] +[[package]] +name = "iced_program" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" +dependencies = [ + "iced_graphics", + "iced_runtime", +] + [[package]] name = "iced_renderer" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "iced_graphics", "iced_tiny_skia", "iced_wgpu", "log", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] name = "iced_runtime" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "bytes", "cosmic-client-toolkit", @@ -3525,17 +3398,18 @@ dependencies = [ "iced_core", "iced_futures", "raw-window-handle", - "thiserror 1.0.69", + "thiserror 2.0.18", "window_clipboard", ] [[package]] name = "iced_tiny_skia" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "bytemuck", "cosmic-text", + "iced_debug", "iced_graphics", "kurbo 0.10.4", "log", @@ -3547,26 +3421,26 @@ dependencies = [ [[package]] name = "iced_wgpu" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "as-raw-xcb-connection", "bitflags 2.11.0", "bytemuck", "cosmic-client-toolkit", + "cryoglyph", "futures", "glam", "guillotiere", - "iced_glyphon", + "iced_debug", "iced_graphics", "log", "lyon", - "once_cell", "raw-window-handle", "resvg", "rustc-hash 2.1.1", "rustix 0.38.44", - "thiserror 1.0.69", + "thiserror 2.0.18", "tiny-xlib", "wayland-backend", "wayland-client", @@ -3578,8 +3452,8 @@ dependencies = [ [[package]] name = "iced_widget" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.2" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "cosmic-client-toolkit", "dnd", @@ -3588,32 +3462,33 @@ dependencies = [ "iced_runtime", "log", "num-traits", - "once_cell", "ouroboros", "qrcode", "rustc-hash 2.1.1", - "thiserror 1.0.69", + "thiserror 2.0.18", "unicode-segmentation", "window_clipboard", ] [[package]] name = "iced_winit" -version = "0.14.0-dev" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +version = "0.14.0" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "cosmic-client-toolkit", + "cursor-icon", "dnd", "iced_accessibility", + "iced_debug", "iced_futures", "iced_graphics", + "iced_program", "iced_runtime", "log", "raw-window-handle", "rustc-hash 2.1.1", "rustix 0.38.44", - "thiserror 1.0.69", - "tracing", + "thiserror 2.0.18", "wasm-bindgen-futures", "wayland-backend", "wayland-client", @@ -3622,6 +3497,7 @@ dependencies = [ "winapi", "window_clipboard", "winit", + "winit-core", "xkbcommon 0.7.0", "xkbcommon-dl", "xkeysym", @@ -4057,9 +3933,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.9" +version = "0.25.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" dependencies = [ "bytemuck", "byteorder-lite", @@ -4076,7 +3952,7 @@ dependencies = [ "rgb", "tiff", "zune-core 0.5.1", - "zune-jpeg 0.5.12", + "zune-jpeg 0.5.13", ] [[package]] @@ -4091,9 +3967,9 @@ dependencies = [ [[package]] name = "imagesize" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" +checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" [[package]] name = "imgref" @@ -4101,15 +3977,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" -[[package]] -name = "immutable-chunkmap" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3e98b1520e49e252237edc238a39869da9f3241f2ec19dc788c1d24694d1e4" -dependencies = [ - "arrayvec", -] - [[package]] name = "indenter" version = "0.3.4" @@ -4150,9 +4017,9 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199" dependencies = [ "bitflags 2.11.0", "inotify-sys", @@ -4197,15 +4064,6 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd4f5b4d1c00331c5245163aacfe5f20be75b564c7112d45893d4ae038119eb0" -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - [[package]] name = "interpolate_name" version = "0.2.4" @@ -4214,7 +4072,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -4291,9 +4149,9 @@ checksum = "84de9d95a6d2547d9b77ee3f25fa0ee32e3c3a6484d47a55adebc0439c077992" [[package]] name = "jiff" -version = "0.2.20" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -4306,20 +4164,20 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.20" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "jiff-tzdb" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" +checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" [[package]] name = "jiff-tzdb-platform" @@ -4362,17 +4220,11 @@ dependencies = [ "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" dependencies = [ "once_cell", "wasm-bindgen", @@ -4560,9 +4412,9 @@ dependencies = [ [[package]] name = "kamadak-exif" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4fc70d0ab7e5b6bafa30216a6b48705ea964cdfc29c050f2412295eba58077" +checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837" dependencies = [ "mutate_once", ] @@ -4578,6 +4430,16 @@ dependencies = [ "winnow 0.6.24", ] +[[package]] +name = "keyboard-types" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d" +dependencies = [ + "bitflags 2.11.0", + "serde", +] + [[package]] name = "khronos-egl" version = "6.0.0" @@ -4597,9 +4459,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "known-folders" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d463f34ca3c400fde3a054da0e0b8c6ffa21e4590922f3e18281bb5eeef4cbdc" +checksum = "770919970f7d2f74fea948900d35e2ef64f44129e8ae4015f59de1f0aca7c2a5" dependencies = [ "windows-sys 0.61.2", ] @@ -4665,17 +4527,17 @@ checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" [[package]] name = "libcosmic" version = "1.0.0" -source = "git+https://github.com/pop-os/libcosmic#b9bd773940950dc07b2cfa7c62c2588b0a653017" +source = "git+https://github.com/pop-os/libcosmic#9602dfd2f12b667e0afacdccd0e403d8152dde5a" dependencies = [ "apply", - "ashpd 0.12.2", + "ashpd 0.12.3", "auto_enums", "cosmic-client-toolkit", "cosmic-config", @@ -4685,6 +4547,7 @@ dependencies = [ "cosmic-theme", "css-color", "derive_setters", + "float-cmp 0.10.0", "freedesktop-desktop-entry", "futures", "i18n-embed", @@ -4710,7 +4573,7 @@ dependencies = [ "rfd", "ron 0.12.0", "rust-embed", - "rustix 1.1.3", + "rustix 1.1.4", "serde", "shlex", "slotmap", @@ -4720,7 +4583,7 @@ dependencies = [ "tracing", "unicode-segmentation", "url", - "zbus 5.13.2", + "zbus", ] [[package]] @@ -4740,7 +4603,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -4750,14 +4613,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] -name = "libredox" -version = "0.1.12" +name = "libpulse-binding" +version = "2.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "909eb3049e16e373680fe65afe6e2a722ace06b671250cc4849557bc57d6a397" dependencies = [ "bitflags 2.11.0", "libc", - "redox_syscall 0.7.1", + "libpulse-sys", + "num-derive", + "num-traits", + "winapi", +] + +[[package]] +name = "libpulse-sys" +version = "1.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d74371848b22e989f829cc1621d2ebd74960711557d8b45cfe740f60d0a05e61" +dependencies = [ + "libc", + "num-derive", + "num-traits", + "pkg-config", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" +dependencies = [ + "bitflags 2.11.0", + "libc", + "plain", + "redox_syscall 0.7.3", ] [[package]] @@ -4772,7 +4663,7 @@ dependencies = [ "cookie-factory", "libc", "libspa-sys", - "nix 0.30.1", + "nix", "nom 8.0.0", "system-deps", ] @@ -4798,18 +4689,21 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "lilt" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f67562e5eff6b20553fa9be1c503356768420994e28f67e3eafe6f41910e57ad" +dependencies = [ + "web-time", +] + [[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.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -4824,9 +4718,9 @@ checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" @@ -4843,9 +4737,9 @@ checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "locale1" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "zbus 5.13.2", + "zbus", ] [[package]] @@ -4898,15 +4792,15 @@ dependencies = [ [[package]] name = "lru" -version = "0.12.5" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" [[package]] name = "lyon" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcb7d54d54c8937364c9d41902d066656817dce1e03a44e5533afebd1ef4352" +checksum = "bd0578bdecb7d6d88987b8b2b1e3a4e2f81df9d0ece1078623324a567904e7b7" dependencies = [ "lyon_algorithms", "lyon_tessellation", @@ -4914,9 +4808,9 @@ dependencies = [ [[package]] name = "lyon_algorithms" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c0829e28c4f336396f250d850c3987e16ce6db057ffe047ce0dd54aab6b647" +checksum = "9815fac08e6fd96733a11dce4f9d15a3f338e96a2e2311ee21e1b738efc2bc0f" dependencies = [ "lyon_path", "num-traits", @@ -4924,9 +4818,9 @@ dependencies = [ [[package]] name = "lyon_geom" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e260b6de923e6e47adfedf6243013a7a874684165a6a277594ee3906021b2343" +checksum = "4336502e29e32af93cf2dad2214ed6003c17ceb5bd499df77b1de663b9042b92" dependencies = [ "arrayvec", "euclid", @@ -4935,9 +4829,9 @@ dependencies = [ [[package]] name = "lyon_path" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aeca86bcfd632a15984ba029b539ffb811e0a70bf55e814ef8b0f54f506fdeb" +checksum = "5c463f9c428b7fc5ec885dcd39ce4aa61e29111d0e33483f6f98c74e89d8621e" dependencies = [ "lyon_geom", "num-traits", @@ -4945,9 +4839,9 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.16" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f586142e1280335b1bc89539f7c97dd80f08fc43e9ab1b74ef0a42b04aa353" +checksum = "05a35a7dd71b845ff317ce1834c4185506b79790294bde397df8d5c23031e357" dependencies = [ "float_next_after", "lyon_path", @@ -5017,15 +4911,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -5037,13 +4922,13 @@ dependencies = [ [[package]] name = "metal" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" dependencies = [ "bitflags 2.11.0", "block", - "core-graphics-types", + "core-graphics-types 0.2.0", "foreign-types", "log", "objc", @@ -5063,7 +4948,7 @@ dependencies = [ [[package]] name = "mime" version = "0.1.0" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#3a7af79e54db6854d8aa9d9e2866a9288d0f95d5" dependencies = [ "smithay-clipboard", ] @@ -5104,9 +4989,9 @@ dependencies = [ [[package]] name = "moxcms" -version = "0.7.11" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" dependencies = [ "num-traits", "pxfm", @@ -5120,23 +5005,28 @@ checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af" [[package]] name = "naga" -version = "22.1.0" +version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad" +checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" dependencies = [ "arrayvec", "bit-set", "bitflags 2.11.0", - "cfg_aliases 0.1.1", + "cfg-if", + "cfg_aliases 0.2.1", "codespan-reporting", + "half", + "hashbrown 0.16.1", "hexf-parse", "indexmap 2.13.0", + "libm", "log", + "num-traits", + "once_cell", "rustc-hash 1.1.0", "spirv", - "termcolor", - "thiserror 1.0.69", - "unicode-xid", + "thiserror 2.0.18", + "unicode-ident", ] [[package]] @@ -5148,7 +5038,7 @@ dependencies = [ "bitflags 2.11.0", "jni-sys", "log", - "ndk-sys 0.6.0+11769913", + "ndk-sys", "num_enum", "raw-window-handle", "thiserror 1.0.69", @@ -5160,15 +5050,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" -[[package]] -name = "ndk-sys" -version = "0.5.0+25.2.9519653" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" -dependencies = [ - "jni-sys", -] - [[package]] name = "ndk-sys" version = "0.6.0+11769913" @@ -5184,18 +5065,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", -] - [[package]] name = "nix" version = "0.30.1" @@ -5211,9 +5080,9 @@ dependencies = [ [[package]] name = "nm-secret-agent-manager" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "zbus 5.13.2", + "zbus", ] [[package]] @@ -5333,7 +5202,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5379,9 +5248,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -5389,14 +5258,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5443,9 +5312,9 @@ dependencies = [ [[package]] name = "objc2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" dependencies = [ "objc2-encode", ] @@ -5468,38 +5337,15 @@ dependencies = [ [[package]] name = "objc2-app-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.11.0", "block2 0.6.2", - "objc2 0.6.3", - "objc2-foundation 0.3.1", -] - -[[package]] -name = "objc2-cloud-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" -dependencies = [ - "bitflags 2.11.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-contacts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", ] [[package]] @@ -5516,13 +5362,25 @@ dependencies = [ [[package]] name = "objc2-core-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags 2.11.0", + "block2 0.6.2", "dispatch2", - "objc2 0.6.3", + "objc2 0.6.4", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.11.0", + "libc", + "objc2-core-foundation", ] [[package]] @@ -5538,15 +5396,14 @@ dependencies = [ ] [[package]] -name = "objc2-core-location" -version = "0.2.2" +name = "objc2-core-video" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-contacts", - "objc2-foundation 0.2.2", + "bitflags 2.11.0", + "objc2-core-foundation", + "objc2-core-graphics", ] [[package]] @@ -5563,44 +5420,32 @@ checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.11.0", "block2 0.5.1", - "dispatch", "libc", "objc2 0.5.2", ] [[package]] name = "objc2-foundation" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.11.0", - "objc2 0.6.3", + "block2 0.6.2", + "objc2 0.6.4", "objc2-core-foundation", ] [[package]] name = "objc2-io-kit" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ "libc", "objc2-core-foundation", ] -[[package]] -name = "objc2-link-presentation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", -] - [[package]] name = "objc2-metal" version = "0.2.2" @@ -5626,59 +5471,16 @@ dependencies = [ "objc2-metal", ] -[[package]] -name = "objc2-symbols" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" -dependencies = [ - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - [[package]] name = "objc2-ui-kit" -version = "0.2.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ "bitflags 2.11.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation 0.2.2", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.11.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", ] [[package]] @@ -5701,9 +5503,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" @@ -5725,14 +5527,23 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.50" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ad2c6bae700b7aa5d1cc30c59bdd3a1c180b09dbaea51e2ae2b8e1cf211fdd" +checksum = "59aed3b33578edcfa1bc96a321d590d31832b6ad55a26f0313362ce687e9abd6" dependencies = [ "libc", "libredox", ] +[[package]] +name = "ordered-float" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -5764,7 +5575,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5773,14 +5584,14 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ - "ttf-parser 0.25.1", + "ttf-parser", ] [[package]] name = "owo-colors" -version = "4.2.3" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" +checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" [[package]] name = "palette" @@ -5804,7 +5615,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5813,17 +5624,6 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.5" @@ -5831,21 +5631,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", - "parking_lot_core 0.9.12", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -5858,7 +5644,7 @@ dependencies = [ "libc", "redox_syscall 0.5.18", "smallvec", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -5916,7 +5702,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ - "fastrand 2.3.0", + "fastrand", "phf_shared 0.13.1", ] @@ -5930,7 +5716,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -5943,7 +5729,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "uncased", ] @@ -5974,29 +5760,29 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pin-utils" @@ -6006,12 +5792,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" dependencies = [ "atomic-waker", - "fastrand 2.3.0", + "fastrand", "futures-io", ] @@ -6026,7 +5812,7 @@ dependencies = [ "libc", "libspa", "libspa-sys", - "nix 0.30.1", + "nix", "once_cell", "pipewire-sys", "thiserror 2.0.18", @@ -6049,6 +5835,12 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "png" version = "0.17.16" @@ -6075,22 +5867,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - [[package]] name = "polling" version = "3.11.0" @@ -6101,7 +5877,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.5.2", "pin-project-lite", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -6119,9 +5895,9 @@ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" +checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" dependencies = [ "portable-atomic", ] @@ -6165,26 +5941,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit", ] [[package]] @@ -6206,7 +5972,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6226,7 +5992,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "version_check", "yansi", ] @@ -6239,7 +6005,7 @@ checksum = "25485360a54d6861439d60facef26de713b1e126bf015ec8f98239467a2b82f7" dependencies = [ "bitflags 2.11.0", "procfs-core", - "rustix 1.1.3", + "rustix 1.1.4", ] [[package]] @@ -6268,7 +6034,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6288,12 +6054,9 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" -dependencies = [ - "num-traits", -] +checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" [[package]] name = "qoi" @@ -6321,15 +6084,25 @@ name = "quick-xml" version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -6340,6 +6113,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" version = "0.8.5" @@ -6401,9 +6180,9 @@ dependencies = [ [[package]] name = "range-alloc" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" [[package]] name = "rangemap" @@ -6448,9 +6227,9 @@ dependencies = [ [[package]] name = "ravif" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" +checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45" dependencies = [ "avif-serialize", "imgref", @@ -6508,25 +6287,6 @@ dependencies = [ "font-types 0.11.0", ] -[[package]] -name = "redox_event" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3514da49aa6ca4cff5088a1b382ef3a0d9149964d29bb49ebd03fd66cc575a18" -dependencies = [ - "bitflags 2.11.0", - "libredox", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.18" @@ -6538,9 +6298,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" +checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" dependencies = [ "bitflags 2.11.0", ] @@ -6573,7 +6333,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6601,9 +6361,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "renderdoc-sys" @@ -6613,18 +6373,19 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "resvg" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "944d052815156ac8fa77eaac055220e95ba0b01fa8887108ca710c03805d9051" +checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" dependencies = [ "gif 0.13.3", - "jpeg-decoder", + "image-webp", "log", "pico-args", "rgb", "svgtypes", "tiny-skia", "usvg", + "zune-jpeg 0.4.21", ] [[package]] @@ -6638,10 +6399,10 @@ dependencies = [ "dispatch2", "js-sys", "log", - "objc2 0.6.3", - "objc2-app-kit 0.3.1", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", "objc2-core-foundation", - "objc2-foundation 0.3.1", + "objc2-foundation 0.3.2", "pollster", "raw-window-handle", "urlencoding", @@ -6653,9 +6414,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.52" +version = "0.8.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" +checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" dependencies = [ "bytemuck", ] @@ -6713,7 +6474,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.116", + "syn 2.0.117", "walkdir", ] @@ -6745,20 +6506,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustix" -version = "0.37.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.44" @@ -6774,14 +6521,14 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys 0.11.0", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] @@ -6793,14 +6540,16 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustybuzz" -version = "0.14.1" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" +checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ "bitflags 2.11.0", "bytemuck", + "core_maths", + "log", "smallvec", - "ttf-parser 0.21.1", + "ttf-parser", "unicode-bidi-mirroring", "unicode-ccc", "unicode-properties", @@ -6854,14 +6603,14 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +checksum = "1dd3accc0f3f4bbaf2c9e1957a030dc582028130c67660d44c0a0345a22ca69b" dependencies = [ "ab_glyph", "log", "memmap2 0.9.10", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "tiny-skia", ] @@ -6881,7 +6630,7 @@ dependencies = [ "once_cell", "serde", "sha2 0.10.9", - "zbus 5.13.2", + "zbus", ] [[package]] @@ -6945,7 +6694,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6970,7 +6719,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -6984,9 +6733,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.16.1" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" dependencies = [ "base64", "chrono", @@ -7003,14 +6752,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.16.1" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" dependencies = [ - "darling 0.21.3", + "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7026,17 +6775,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - [[package]] name = "sha2" version = "0.9.9" @@ -7157,31 +6895,6 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -[[package]] -name = "smithay-client-toolkit" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" -dependencies = [ - "bitflags 2.11.0", - "calloop 0.13.0", - "calloop-wayland-source 0.3.0", - "cursor-icon", - "libc", - "log", - "memmap2 0.9.10", - "rustix 0.38.44", - "thiserror 1.0.69", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", - "wayland-scanner", - "xkeysym", -] - [[package]] name = "smithay-client-toolkit" version = "0.20.0" @@ -7190,14 +6903,14 @@ checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ "bitflags 2.11.0", "bytemuck", - "calloop 0.14.4", - "calloop-wayland-source 0.4.1", + "calloop", + "calloop-wayland-source", "cursor-icon", "libc", "log", "memmap2 0.9.10", "pkg-config", - "rustix 1.1.3", + "rustix 1.1.4", "thiserror 2.0.18", "wayland-backend", "wayland-client", @@ -7215,47 +6928,32 @@ dependencies = [ [[package]] name = "smithay-clipboard" version = "0.8.0" -source = "git+https://github.com/pop-os/smithay-clipboard?tag=pop-dnd-5#5a3007def49eb678d1144850c9ee04b80707c56a" +source = "git+https://github.com/pop-os/smithay-clipboard?tag=sctk-0.20#859b02c88f45c554049a67c6ddeec1692ce0e20b" dependencies = [ "libc", "raw-window-handle", - "smithay-client-toolkit 0.19.2", + "smithay-client-toolkit", "wayland-backend", ] [[package]] name = "smol_str" -version = "0.2.2" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523" dependencies = [ - "serde", -] - -[[package]] -name = "smol_str" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7a918bd2a9951d18ee6e48f076843e8e73a9a5d22cf05bcd4b7a81bdd04e17" - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", + "borsh", + "serde_core", ] [[package]] name = "socket2" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -7269,7 +6967,7 @@ dependencies = [ "cocoa", "core-graphics", "drm", - "fastrand 2.3.0", + "fastrand", "foreign-types", "js-sys", "log", @@ -7318,8 +7016,8 @@ dependencies = [ "bitflags 1.3.2", "cfg_aliases 0.2.1", "libc", - "parking_lot 0.12.5", - "parking_lot_core 0.9.12", + "parking_lot", + "parking_lot_core", "static_init_macro", "winapi", ] @@ -7343,7 +7041,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" dependencies = [ - "float-cmp", + "float-cmp 0.9.0", ] [[package]] @@ -7407,9 +7105,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.116" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -7424,7 +7122,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7438,9 +7136,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.38.2" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efc19935b4b66baa6f654ac7924c192f55b175c00a7ab72410fc24284dacda8" +checksum = "fe840c5b1afe259a5657392a4dbb74473a14c8db999c3ec2f4ae812e028a94da" dependencies = [ "libc", "memchr", @@ -7489,14 +7187,14 @@ checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" [[package]] name = "tempfile" -version = "3.25.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ - "fastrand 2.3.0", - "getrandom 0.4.1", + "fastrand", + "getrandom 0.4.2", "once_cell", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -7535,7 +7233,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7546,7 +7244,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7560,16 +7258,16 @@ dependencies = [ [[package]] name = "tiff" -version = "0.10.3" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" +checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" dependencies = [ "fax", "flate2", "half", "quick-error", "weezl", - "zune-jpeg 0.4.21", + "zune-jpeg 0.5.13", ] [[package]] @@ -7606,9 +7304,9 @@ dependencies = [ [[package]] name = "timedate-zbus" version = "0.1.0" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ - "zbus 5.13.2", + "zbus", ] [[package]] @@ -7663,9 +7361,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -7678,16 +7376,16 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.2", + "socket2", "tokio-macros", "tracing", "windows-sys 0.61.2", @@ -7695,13 +7393,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7736,15 +7434,9 @@ dependencies = [ "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 0.7.14", + "winnow 0.7.15", ] -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" @@ -7755,26 +7447,24 @@ dependencies = [ ] [[package]] -name = "toml_edit" -version = "0.19.15" +name = "toml_datetime" +version = "1.0.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" dependencies = [ - "indexmap 2.13.0", - "toml_datetime 0.6.11", - "winnow 0.5.40", + "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" dependencies = [ "indexmap 2.13.0", - "toml_datetime 0.7.5+spec-1.1.0", + "toml_datetime 1.0.0+spec-1.1.0", "toml_parser", - "winnow 0.7.14", + "winnow 0.7.15", ] [[package]] @@ -7783,7 +7473,7 @@ version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ - "winnow 0.7.14", + "winnow 0.7.15", ] [[package]] @@ -7812,7 +7502,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -7848,9 +7538,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.22" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -7864,12 +7554,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "ttf-parser" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" - [[package]] name = "ttf-parser" version = "0.25.1" @@ -7914,13 +7598,13 @@ dependencies = [ [[package]] name = "uds_windows" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" dependencies = [ - "memoffset 0.9.1", + "memoffset", "tempfile", - "winapi", + "windows-sys 0.61.2", ] [[package]] @@ -7965,15 +7649,15 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-bidi-mirroring" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" +checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" [[package]] name = "unicode-ccc" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" +checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" [[package]] name = "unicode-ident" @@ -8032,11 +7716,11 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "upower_dbus" version = "0.3.2" -source = "git+https://github.com/pop-os/dbus-settings-bindings#0fa672f8dadb884001ef9a251b149ed432879629" +source = "git+https://github.com/pop-os/dbus-settings-bindings#507e342c21d3ce6ae41b1d4f3fa2f0ad5ee23e75" dependencies = [ "serde", "serde_repr", - "zbus 5.13.2", + "zbus", ] [[package]] @@ -8060,14 +7744,14 @@ checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "usvg" -version = "0.42.0" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84ea542ae85c715f07b082438a4231c3760539d902e11d093847a0b22963032" +checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" dependencies = [ "base64", "data-url", "flate2", - "fontdb 0.18.0", + "fontdb", "imagesize", "kurbo 0.11.3", "log", @@ -8105,9 +7789,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" dependencies = [ "js-sys", "serde_core", @@ -8143,12 +7827,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "walkdir" version = "2.5.0" @@ -8185,9 +7863,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" dependencies = [ "cfg-if", "once_cell", @@ -8198,9 +7876,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" dependencies = [ "cfg-if", "futures-util", @@ -8212,9 +7890,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8222,22 +7900,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" dependencies = [ "unicode-ident", ] @@ -8264,21 +7942,6 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "wasm-timer" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" -dependencies = [ - "futures", - "js-sys", - "parking_lot 0.11.2", - "pin-utils", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "wasmparser" version = "0.244.0" @@ -8292,14 +7955,28 @@ dependencies = [ ] [[package]] -name = "wayland-backend" -version = "0.3.12" +name = "wasmtimer" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" +checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + +[[package]] +name = "wayland-backend" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa75f400b7f719bcd68b3f47cd939ba654cedeef690f486db71331eec4c6a406" dependencies = [ "cc", "downcast-rs 1.2.1", - "rustix 1.1.3", + "rustix 1.1.4", "scoped-tls", "smallvec", "wayland-sys", @@ -8307,12 +7984,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.12" +version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" +checksum = "ab51d9f7c071abeee76007e2b742499e535148035bb835f97aaed1338cf516c3" dependencies = [ "bitflags 2.11.0", - "rustix 1.1.3", + "rustix 1.1.4", "wayland-backend", "wayland-scanner", ] @@ -8330,20 +8007,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.12" +version = "0.31.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" +checksum = "4b3298683470fbdc6ca40151dfc48c8f2fd4c41a26e13042f801f85002384091" dependencies = [ - "rustix 1.1.3", + "rustix 1.1.4", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.10" +version = "0.32.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" +checksum = "b23b5df31ceff1328f06ac607591d5ba360cf58f90c8fad4ac8d3a55a3c4aec7" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8367,9 +8044,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" +checksum = "429b99200febaf95d4f4e46deff6fe4382bcff3280ee16a41cf887b3c3364984" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8380,9 +8057,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" +checksum = "d392fc283a87774afc9beefcd6f931582bb97fe0e6ced0b306a62cb1d026527c" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8393,9 +8070,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" +checksum = "78248e4cc0eff8163370ba5c158630dcae1f3497a586b826eca2ef5f348d6235" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -8407,33 +8084,33 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.8" +version = "0.31.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" +checksum = "c86287151a309799b821ca709b7345a048a2956af05957c89cb824ab919fa4e3" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.39.2", "quote", ] [[package]] name = "wayland-server" -version = "0.31.11" +version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9297ab90f8d1f597711d36455c5b1b2290eca59b8134485e377a296b80b118c9" +checksum = "63736a4a73e781cf6a736aa32c5d6773c3eb5389197562742a8c611b49b5e359" dependencies = [ "bitflags 2.11.0", "downcast-rs 1.2.1", - "rustix 1.1.3", + "rustix 1.1.4", "wayland-backend", "wayland-scanner", ] [[package]] name = "wayland-sys" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" +checksum = "374f6b70e8e0d6bf9461a32988fd553b59ff630964924dad6e4a4eb6bd538d17" dependencies = [ "dlib", "log", @@ -8443,9 +8120,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" dependencies = [ "js-sys", "wasm-bindgen", @@ -8469,17 +8146,21 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wgpu" -version = "22.1.0" +version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433" +checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" dependencies = [ "arrayvec", - "cfg_aliases 0.1.1", + "bitflags 2.11.0", + "cfg-if", + "cfg_aliases 0.2.1", "document-features", + "hashbrown 0.16.1", "js-sys", "log", "naga", - "parking_lot 0.12.5", + "parking_lot", + "portable-atomic", "profiling", "raw-window-handle", "smallvec", @@ -8494,34 +8175,68 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "22.1.0" +version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a" +checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" dependencies = [ "arrayvec", + "bit-set", "bit-vec", "bitflags 2.11.0", - "cfg_aliases 0.1.1", + "bytemuck", + "cfg_aliases 0.2.1", "document-features", + "hashbrown 0.16.1", "indexmap 2.13.0", "log", "naga", "once_cell", - "parking_lot 0.12.5", + "parking_lot", + "portable-atomic", "profiling", "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.18", + "wgpu-core-deps-apple", + "wgpu-core-deps-emscripten", + "wgpu-core-deps-windows-linux-android", "wgpu-hal", "wgpu-types", ] [[package]] -name = "wgpu-hal" -version = "22.0.0" +name = "wgpu-core-deps-apple" +version = "27.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f" +checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-emscripten" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06ac3444a95b0813ecfd81ddb2774b66220b264b3e2031152a4a29fda4da6b5" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "27.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "27.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" dependencies = [ "android_system_properties", "arrayvec", @@ -8529,15 +8244,16 @@ dependencies = [ "bit-set", "bitflags 2.11.0", "block", - "cfg_aliases 0.1.1", - "core-graphics-types", - "d3d12", + "bytemuck", + "cfg-if", + "cfg_aliases 0.2.1", + "core-graphics-types 0.2.0", "glow", "glutin_wgl_sys", "gpu-alloc", "gpu-allocator", "gpu-descriptor", - "hassle-rs", + "hashbrown 0.16.1", "js-sys", "khronos-egl", "libc", @@ -8545,51 +8261,49 @@ dependencies = [ "log", "metal", "naga", - "ndk-sys 0.5.0+25.2.9519653", + "ndk-sys", "objc", "once_cell", - "parking_lot 0.12.5", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", "profiling", "range-alloc", "raw-window-handle", "renderdoc-sys", - "rustc-hash 1.1.0", "smallvec", - "thiserror 1.0.69", + "thiserror 2.0.18", "wasm-bindgen", "web-sys", "wgpu-types", - "winapi", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] name = "wgpu-types" -version = "22.0.0" +version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d" +checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" dependencies = [ "bitflags 2.11.0", + "bytemuck", "js-sys", + "log", + "thiserror 2.0.18", "web-sys", ] [[package]] name = "which" -version = "8.0.0" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" +checksum = "81995fafaaaf6ae47a7d0cc83c67caf92aeb7e5331650ae6ff856f7c0c60c459" dependencies = [ - "env_home", - "rustix 1.1.3", - "winsafe", + "libc", ] -[[package]] -name = "widestring" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" - [[package]] name = "winapi" version = "0.3.9" @@ -8624,7 +8338,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window_clipboard" version = "0.4.1" -source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-0.13-2#6b9faab87bea9cebec6ae036906fd67fed254f5f" +source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#3a7af79e54db6854d8aa9d9e2866a9288d0f95d5" dependencies = [ "clipboard-win", "clipboard_macos", @@ -8638,24 +8352,25 @@ dependencies = [ [[package]] name = "windows" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.52.0", + "windows-core 0.58.0", "windows-targets 0.52.6", ] [[package]] name = "windows" -version = "0.54.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-core 0.54.0", - "windows-implement 0.53.0", - "windows-interface 0.53.0", - "windows-targets 0.52.6", + "windows-collections 0.2.0", + "windows-core 0.61.2", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", ] [[package]] @@ -8664,10 +8379,19 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ - "windows-collections", + "windows-collections 0.3.2", "windows-core 0.62.2", - "windows-future", - "windows-numerics", + "windows-future 0.3.2", + "windows-numerics 0.3.1", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", ] [[package]] @@ -8681,21 +8405,28 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ + "windows-implement 0.58.0", + "windows-interface 0.58.0", + "windows-result 0.2.0", + "windows-strings 0.1.0", "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.54.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-result 0.1.2", - "windows-targets 0.52.6", + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -8706,9 +8437,20 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement 0.60.2", "windows-interface 0.59.3", - "windows-link", + "windows-link 0.2.1", "windows-result 0.4.1", - "windows-strings", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading 0.1.0", ] [[package]] @@ -8718,19 +8460,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ "windows-core 0.62.2", - "windows-link", - "windows-threading", + "windows-link 0.2.1", + "windows-threading 0.2.1", ] [[package]] name = "windows-implement" -version = "0.53.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8741,18 +8483,18 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] name = "windows-interface" -version = "0.53.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -8763,15 +8505,31 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + [[package]] name = "windows-numerics" version = "0.3.1" @@ -8779,25 +8537,53 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ "windows-core 0.62.2", - "windows-link", + "windows-link 0.2.1", ] [[package]] name = "windows-result" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-result" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result 0.2.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -8806,7 +8592,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -8860,7 +8646,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -8915,7 +8701,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", + "windows-link 0.2.1", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -8926,13 +8712,22 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-threading" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -9117,63 +8912,217 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" -version = "0.30.5" -source = "git+https://github.com/pop-os/winit.git?tag=iced-xdg-surface-0.13-rc#dd46a1499bcc38f2134ab869e8860a32e091c55b" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" dependencies = [ - "ahash", - "android-activity", - "atomic-waker", "bitflags 2.11.0", - "block2 0.5.1", - "bytemuck", - "calloop 0.13.0", "cfg_aliases 0.2.1", - "concurrent-queue", - "core-foundation", - "core-graphics", "cursor-icon", "dpi", - "js-sys", "libc", - "libredox", - "memmap2 0.9.10", - "ndk", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", - "objc2-ui-kit", - "orbclient", - "percent-encoding", - "pin-project", "raw-window-handle", - "redox_event", - "rustix 0.38.44", - "sctk-adwaita", - "smithay-client-toolkit 0.19.2", - "smol_str 0.2.2", + "rustix 1.1.4", + "smol_str", "tracing", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", - "web-sys", - "web-time", - "windows-sys 0.52.0", + "winit-android", + "winit-appkit", + "winit-common", + "winit-core", + "winit-orbital", + "winit-uikit", + "winit-wayland", + "winit-web", + "winit-win32", + "winit-x11", +] + +[[package]] +name = "winit-android" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "android-activity", + "bitflags 2.11.0", + "dpi", + "ndk", + "raw-window-handle", + "smol_str", + "tracing", + "winit-core", +] + +[[package]] +name = "winit-appkit" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "bitflags 2.11.0", + "block2 0.6.2", + "dispatch2", + "dpi", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-video", + "objc2-foundation 0.3.2", + "raw-window-handle", + "smol_str", + "tracing", + "winit-common", + "winit-core", +] + +[[package]] +name = "winit-common" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "memmap2 0.9.10", + "objc2 0.6.4", + "objc2-core-foundation", + "smol_str", + "tracing", + "winit-core", "x11-dl", - "x11rb", "xkbcommon-dl", ] [[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +name = "winit-core" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" dependencies = [ - "memchr", + "bitflags 2.11.0", + "cursor-icon", + "dpi", + "keyboard-types", + "raw-window-handle", + "smol_str", + "web-time", +] + +[[package]] +name = "winit-orbital" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "bitflags 2.11.0", + "dpi", + "libredox", + "orbclient", + "raw-window-handle", + "redox_syscall 0.7.3", + "smol_str", + "tracing", + "winit-core", +] + +[[package]] +name = "winit-uikit" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "bitflags 2.11.0", + "block2 0.6.2", + "dispatch2", + "dpi", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-ui-kit", + "raw-window-handle", + "smol_str", + "tracing", + "winit-common", + "winit-core", +] + +[[package]] +name = "winit-wayland" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "ahash", + "bitflags 2.11.0", + "calloop", + "cursor-icon", + "dpi", + "libc", + "memmap2 0.9.10", + "raw-window-handle", + "rustix 1.1.4", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str", + "tracing", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "winit-common", + "winit-core", +] + +[[package]] +name = "winit-web" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "atomic-waker", + "bitflags 2.11.0", + "concurrent-queue", + "cursor-icon", + "dpi", + "js-sys", + "pin-project", + "raw-window-handle", + "smol_str", + "tracing", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time", + "winit-core", +] + +[[package]] +name = "winit-win32" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "bitflags 2.11.0", + "cursor-icon", + "dpi", + "raw-window-handle", + "smol_str", + "tracing", + "unicode-segmentation", + "windows-sys 0.59.0", + "winit-core", +] + +[[package]] +name = "winit-x11" +version = "0.31.0-beta.2" +source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#a610ac9c7a72b39ff102ed4d946291618dc725b6" +dependencies = [ + "bitflags 2.11.0", + "bytemuck", + "calloop", + "cursor-icon", + "dpi", + "libc", + "percent-encoding", + "raw-window-handle", + "rustix 1.1.4", + "smol_str", + "tracing", + "winit-common", + "winit-core", + "x11-dl", + "x11rb", + "xkbcommon-dl", ] [[package]] @@ -9187,19 +9136,13 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" dependencies = [ "memchr", ] -[[package]] -name = "winsafe" -version = "0.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" - [[package]] name = "wit-bindgen" version = "0.51.0" @@ -9230,7 +9173,7 @@ dependencies = [ "heck 0.5.0", "indexmap 2.13.0", "prettyplease", - "syn 2.0.116", + "syn 2.0.117", "wasm-metadata", "wit-bindgen-core", "wit-component", @@ -9246,7 +9189,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "wit-bindgen-core", "wit-bindgen-rust", ] @@ -9325,7 +9268,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.1.3", + "rustix 1.1.4", "x11rb-protocol", "xcursor", ] @@ -9348,20 +9291,10 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" -[[package]] -name = "xdg-home" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "xdg-shell-wrapper-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#6a783a18c3079955ff4cde1d00eaadf8e77b869c" +source = "git+https://github.com/pop-os/cosmic-panel#45a62ed812248544290dba11566aa07b92825f07" dependencies = [ "serde", "wayland-protocols-wlr", @@ -9508,69 +9441,33 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] [[package]] name = "zbus" -version = "3.15.2" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" +checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" dependencies = [ - "async-broadcast 0.5.1", - "async-process 1.8.1", - "async-recursion", - "async-trait", - "byteorder", - "derivative", - "enumflags2", - "event-listener 2.5.3", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix 0.26.4", - "once_cell", - "ordered-stream", - "rand 0.8.5", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tokio", - "tracing", - "uds_windows", - "winapi", - "xdg-home", - "zbus_macros 3.15.2", - "zbus_names 2.6.1", - "zvariant 3.15.2", -] - -[[package]] -name = "zbus" -version = "5.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfeff997a0aaa3eb20c4652baf788d2dfa6d2839a0ead0b3ff69ce2f9c4bdd1" -dependencies = [ - "async-broadcast 0.7.2", + "async-broadcast", "async-executor", - "async-io 2.6.0", - "async-lock 3.4.2", - "async-process 2.5.0", + "async-io", + "async-lock", + "async-process", "async-recursion", "async-task", "async-trait", "blocking", "enumflags2", - "event-listener 5.4.1", + "event-listener", "futures-core", - "futures-lite 2.6.1", + "futures-lite", "hex", "libc", "ordered-stream", - "rustix 1.1.3", + "rustix 1.1.4", "serde", "serde_repr", "tokio", @@ -9578,50 +9475,49 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 0.7.14", - "zbus_macros 5.13.2", - "zbus_names 4.3.1", - "zvariant 5.9.2", + "winnow 0.7.15", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus-lockstep" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863" +dependencies = [ + "zbus_xml", + "zvariant", +] + +[[package]] +name = "zbus-lockstep-macros" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "zbus-lockstep", + "zbus_xml", + "zvariant", ] [[package]] name = "zbus_macros" -version = "3.15.2" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" +checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", - "regex", - "syn 1.0.109", - "zvariant_utils 1.0.1", -] - -[[package]] -name = "zbus_macros" -version = "5.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bbd5a90dbe8feee5b13def448427ae314ccd26a49cac47905cafefb9ff846f1" -dependencies = [ - "proc-macro-crate 3.4.0", - "proc-macro2", - "quote", - "syn 2.0.116", - "zbus_names 4.3.1", - "zvariant 5.9.2", - "zvariant_utils 3.3.0", -] - -[[package]] -name = "zbus_names" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" -dependencies = [ - "serde", - "static_assertions", - "zvariant 3.15.2", + "syn 2.0.117", + "zbus_names", + "zvariant", + "zvariant_utils", ] [[package]] @@ -9631,8 +9527,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", - "winnow 0.7.14", - "zvariant 5.9.2", + "winnow 0.7.15", + "zvariant", ] [[package]] @@ -9645,7 +9541,19 @@ dependencies = [ "serde", "serde_repr", "static_assertions", - "zbus 5.13.2", + "zbus", +] + +[[package]] +name = "zbus_xml" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "441a0064125265655bccc3a6af6bef56814d9277ac83fce48b1cd7e160b80eac" +dependencies = [ + "quick-xml 0.38.4", + "serde", + "zbus_names", + "zvariant", ] [[package]] @@ -9656,22 +9564,22 @@ checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9691,7 +9599,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", "synstructure", ] @@ -9732,7 +9640,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.116", + "syn 2.0.117", ] [[package]] @@ -9773,77 +9681,39 @@ dependencies = [ [[package]] name = "zune-jpeg" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" +checksum = "ec5f41c76397b7da451efd19915684f727d7e1d516384ca6bd0ec43ec94de23c" dependencies = [ "zune-core 0.5.1", ] [[package]] name = "zvariant" -version = "3.15.2" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" -dependencies = [ - "byteorder", - "enumflags2", - "libc", - "serde", - "static_assertions", - "zvariant_derive 3.15.2", -] - -[[package]] -name = "zvariant" -version = "5.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b64ef4f40c7951337ddc7023dd03528a57a3ce3408ee9da5e948bd29b232c4" +checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" dependencies = [ "endi", "enumflags2", "serde", "url", - "winnow 0.7.14", - "zvariant_derive 5.9.2", - "zvariant_utils 3.3.0", + "winnow 0.7.15", + "zvariant_derive", + "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "3.15.2" +version = "5.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" +checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", - "zvariant_utils 1.0.1", -] - -[[package]] -name = "zvariant_derive" -version = "5.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "484d5d975eb7afb52cc6b929c13d3719a20ad650fea4120e6310de3fc55e415c" -dependencies = [ - "proc-macro-crate 3.4.0", - "proc-macro2", - "quote", - "syn 2.0.116", - "zvariant_utils 3.3.0", -] - -[[package]] -name = "zvariant_utils" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "syn 2.0.117", + "zvariant_utils", ] [[package]] @@ -9855,6 +9725,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.116", - "winnow 0.7.14", + "syn 2.0.117", + "winnow 0.7.15", ] diff --git a/Cargo.toml b/Cargo.toml index e370ef2..a86204d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,14 @@ cosmic-randr = { git = "https://github.com/pop-os/cosmic-randr" } tokio = { version = "1.49.0", features = ["macros"] } [workspace.dependencies.libcosmic] -features = ["dbus-config", "desktop", "multi-window", "winit", "tokio", "qr_code"] +features = [ + "dbus-config", + "desktop", + "multi-window", + "winit", + "tokio", + "qr_code", +] git = "https://github.com/pop-os/libcosmic" [workspace.dependencies.cosmic-config] @@ -54,9 +61,9 @@ debug = true # [patch.'https://github.com/pop-os/cosmic-text'] # cosmic-text = { git = "https://github.com/pop-os/cosmic-text//", rev = "b017d7c" } -# [patch.'https://github.com/pop-os/cosmic-protocols'] -# cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "d0e95be" } -# cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "d0e95be" } +[patch.'https://github.com/pop-os/cosmic-protocols'] +cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "d0e95be" } +cosmic-client-toolkit = { git = "https://github.com/pop-os/cosmic-protocols//", rev = "d0e95be" } # [patch.'https://github.com/pop-os/cosmic-settings-daemon'] # cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon//", branch = "input_nobuild" } @@ -67,8 +74,17 @@ debug = true # cosmic-config = { path = "../libcosmic/cosmic-config" } # cosmic-theme = { path = "../libcosmic/cosmic-theme" } # iced_futures = { path = "../libcosmic/iced/futures" } +# +#iced_futures = { git = "https://github.com/pop-os/libcosmic//" } +#libcosmic = { git = "https://github.com/pop-os/libcosmic//" } +#cosmic-config = { git = "https://github.com/pop-os/libcosmic//" } +#cosmic-theme = { git = "https://github.com/pop-os/libcosmic//" } # [patch.'https://github.com/pop-os/dbus-settings-bindings'] # cosmic-dbus-networkmanager = { path = "../dbus-settings-bindings/networkmanager" } # upower_dbus = { path = "../dbus-settings-bindings/upower" } # nm-secret-agent-manager = { git = "https://github.com/pop-os/dbus-settings-bindings//", branch = "nm-secret-agent" } + +[patch.crates-io] +atspi = { git = "https://github.com/wash2/atspi" } +atspi-common = { git = "https://github.com/wash2/atspi" } diff --git a/cosmic-settings/Cargo.toml b/cosmic-settings/Cargo.toml index 6bad69d..5cfd7ed 100644 --- a/cosmic-settings/Cargo.toml +++ b/cosmic-settings/Cargo.toml @@ -61,7 +61,7 @@ itertools = "0.14.0" itoa = "1.0.17" libcosmic.workspace = true locale1 = { git = "https://github.com/pop-os/dbus-settings-bindings", optional = true } -sysinfo = { version = "0.38.2", optional = true } +sysinfo = { version = "=0.38.0", optional = true } mime-apps = { package = "cosmic-mime-apps", git = "https://github.com/pop-os/cosmic-mime-apps", optional = true } notify = "8.2.0" regex = "1.12.3" @@ -173,7 +173,13 @@ page-networking = [ "dep:zbus", ] page-power = ["dep:upower_dbus", "dep:zbus"] -page-region = ["gettext", "dep:locales-rs", "dep:locale1", "dep:zbus", "dep:accounts-zbus"] +page-region = [ + "gettext", + "dep:locales-rs", + "dep:locale1", + "dep:zbus", + "dep:accounts-zbus", +] page-sound = ["dep:cosmic-settings-sound-subscription"] page-users = ["xdg-portal", "dep:accounts-zbus", "dep:zbus", "dep:zbus_polkit"] page-window-management = ["cosmic-comp-config", "dep:cosmic-settings-config"] @@ -186,10 +192,6 @@ cosmic-comp-config = ["dep:cosmic-comp-config"] dbus-config = ["libcosmic/dbus-config", "cosmic-config/dbus"] single-instance = ["libcosmic/single-instance"] test = [] -wayland = [ - "libcosmic/wayland", - "dep:cosmic-panel-config", - "dep:cosmic-randr" -] +wayland = ["libcosmic/wayland", "dep:cosmic-panel-config", "dep:cosmic-randr"] wgpu = ["libcosmic/wgpu"] xdg-portal = ["ashpd", "libcosmic/xdg-portal"] diff --git a/cosmic-settings/src/pages/accessibility/magnifier.rs b/cosmic-settings/src/pages/accessibility/magnifier.rs index 92606ba..ec156ae 100644 --- a/cosmic-settings/src/pages/accessibility/magnifier.rs +++ b/cosmic-settings/src/pages/accessibility/magnifier.rs @@ -131,7 +131,7 @@ impl page::Page for Page { return cosmic::Task::stream(cosmic::iced_futures::stream::channel( 1, - |mut sender| async move { + |mut sender: futures::channel::mpsc::Sender| async move { while let Some(event) = rx.recv().await { let _ = sender .send(crate::pages::Message::AccessibilityMagnifier( diff --git a/cosmic-settings/src/pages/accessibility/mod.rs b/cosmic-settings/src/pages/accessibility/mod.rs index cad369c..4578311 100644 --- a/cosmic-settings/src/pages/accessibility/mod.rs +++ b/cosmic-settings/src/pages/accessibility/mod.rs @@ -129,7 +129,7 @@ impl page::Page for Page { return cosmic::Task::stream(cosmic::iced_futures::stream::channel( 1, - |mut sender| async move { + |mut sender: futures::channel::mpsc::Sender| async move { while let Some(event) = rx.recv().await { let _ = sender .send(crate::pages::Message::Accessibility(Message::Event( diff --git a/cosmic-settings/src/pages/applications/default_apps.rs b/cosmic-settings/src/pages/applications/default_apps.rs index 7079aec..8e22373 100644 --- a/cosmic-settings/src/pages/applications/default_apps.rs +++ b/cosmic-settings/src/pages/applications/default_apps.rs @@ -10,7 +10,9 @@ use std::{ }; use cosmic::{ - Apply, Element, Task, surface, + Apply, Element, Task, + iced::Alignment, + surface, widget::{self, dropdown, icon, settings}, }; use cosmic_config::{ConfigGet, ConfigSet}; @@ -296,6 +298,7 @@ fn apps() -> Section { fl!("default-apps", "web-browser"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "web-browser"), @@ -313,6 +316,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) .min_item_width(300.0) } }) @@ -323,6 +327,7 @@ fn apps() -> Section { fl!("default-apps", "file-manager"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "file-manager"), @@ -340,6 +345,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .add({ @@ -349,6 +355,7 @@ fn apps() -> Section { fl!("default-apps", "mail-client"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "mail-client"), @@ -366,6 +373,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .add({ @@ -375,6 +383,7 @@ fn apps() -> Section { fl!("default-apps", "music"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "music"), @@ -392,6 +401,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .add({ @@ -401,6 +411,7 @@ fn apps() -> Section { fl!("default-apps", "video"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "video"), @@ -418,6 +429,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .add({ @@ -427,6 +439,7 @@ fn apps() -> Section { fl!("default-apps", "photos"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "photos"), @@ -444,6 +457,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .add({ @@ -453,6 +467,7 @@ fn apps() -> Section { fl!("default-apps", "calendar"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "calendar"), @@ -470,6 +485,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .add({ @@ -479,6 +495,7 @@ fn apps() -> Section { fl!("default-apps", "terminal"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "terminal"), @@ -496,6 +513,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .add({ @@ -505,6 +523,7 @@ fn apps() -> Section { fl!("default-apps", "text-editor"), widget::text(fl!("default-apps", "not-installed")), ) + .align_items(Alignment::Center) } else { settings::flex_item( fl!("default-apps", "text-editor"), @@ -522,6 +541,7 @@ fn apps() -> Section { ) .icons(Cow::Borrowed(&meta.icons)), ) + .align_items(Alignment::Center) } }) .apply(Element::from) diff --git a/cosmic-settings/src/pages/applications/legacy_applications.rs b/cosmic-settings/src/pages/applications/legacy_applications.rs index 5fb3edd..4df50b5 100644 --- a/cosmic-settings/src/pages/applications/legacy_applications.rs +++ b/cosmic-settings/src/pages/applications/legacy_applications.rs @@ -137,7 +137,7 @@ impl page::Page for Page { // Forward messages from another thread to prevent the monitoring thread from blocking. let (randr_task, randr_handle) = Task::stream(cosmic::iced_futures::stream::channel( 1, - |mut sender| async move { + |mut sender: futures::channel::mpsc::Sender<_>| async move { while let Some(message) = rx.recv().await { if let cosmic_randr::Message::ManagerDone = message && !refresh_pending.swap(true, Ordering::SeqCst) diff --git a/cosmic-settings/src/pages/bluetooth/mod.rs b/cosmic-settings/src/pages/bluetooth/mod.rs index b24a2f8..d2da586 100644 --- a/cosmic-settings/src/pages/bluetooth/mod.rs +++ b/cosmic-settings/src/pages/bluetooth/mod.rs @@ -3,7 +3,7 @@ use cosmic::iced::{Alignment, Length, color}; use cosmic::iced_core::text::Wrapping; -use cosmic::widget::{self, settings, text}; +use cosmic::widget::{self, settings, space::horizontal as horizontal_space, text}; use cosmic::{Apply, Element, Task, theme}; use cosmic_settings_bluetooth_subscription::*; use cosmic_settings_page::{self as page, Section, section}; @@ -878,7 +878,7 @@ fn connected_devices() -> Section { .wrapping(Wrapping::Word) .into() }, - widget::horizontal_space().into(), + horizontal_space().into(), match device.enabled { Active::Enabled => widget::text(&descriptions[device_connected]).into(), Active::Enabling => widget::text(&descriptions[device_connecting]) @@ -936,18 +936,26 @@ fn available_devices() -> Section { let mut items = vec![ widget::icon::from_name(device.icon).size(16).into(), text(device.alias_or_addr()).wrapping(Wrapping::Word).into(), - widget::horizontal_space().into(), + horizontal_space().into(), ]; if device.enabled == Active::Disabled { - items.push(widget::button::text(&descriptions[device_connect]).on_press(Message::ConnectDevice(path.clone())).into(), ) + items.push( + widget::button::text(&descriptions[device_connect]) + .on_press(Message::ConnectDevice(path.clone())) + .into(), + ) } if device.enabled == Active::Enabling || device.enabled == Active::Enabled { - items.push(text(&descriptions[device_connecting]).class(theme::Text::Color(color!(128, 128, 128))).into(), ); + items.push( + text(&descriptions[device_connecting]) + .class(theme::Text::Color(color!(128, 128, 128))) + .into(), + ); } - Some(widget::mouse_area(settings::item_row(items)).into(), ) + Some(widget::mouse_area(settings::item_row(items)).into()) }) .fold(section, settings::Section::add) .apply(Element::from) @@ -978,11 +986,9 @@ fn multiple_adapter() -> Section { widget::icon::from_name("bluetooth-symbolic") .size(20) .into(), - widget::horizontal_space() - .width(theme::spacing().space_xxs) - .into(), + horizontal_space().width(theme::spacing().space_xxs).into(), text(&adapter.alias).wrapping(Wrapping::Word).into(), - widget::horizontal_space().into(), + horizontal_space().into(), widget::icon::from_name("go-next-symbolic").into(), ]; if page.model.adapter_connected(path) { diff --git a/cosmic-settings/src/pages/desktop/appearance/font_config.rs b/cosmic-settings/src/pages/desktop/appearance/font_config.rs index d3651b4..84ed6c8 100644 --- a/cosmic-settings/src/pages/desktop/appearance/font_config.rs +++ b/cosmic-settings/src/pages/desktop/appearance/font_config.rs @@ -8,7 +8,7 @@ use cosmic::{ Apply, Element, Task, config::{CosmicTk, FontConfig}, iced_core::text::Wrapping, - widget::{self, settings, svg}, + widget::{self, settings, space::horizontal as horizontal_space, svg}, }; use cosmic_config::ConfigSet; @@ -213,7 +213,7 @@ impl Model { .class(cosmic::theme::Svg::Custom(svg_accent.clone())) .into() } else { - widget::horizontal_space().width(16).into() + horizontal_space().width(16.).into() }, ]) .apply(widget::container) diff --git a/cosmic-settings/src/pages/desktop/appearance/mod.rs b/cosmic-settings/src/pages/desktop/appearance/mod.rs index 807d3c1..2d80de1 100644 --- a/cosmic-settings/src/pages/desktop/appearance/mod.rs +++ b/cosmic-settings/src/pages/desktop/appearance/mod.rs @@ -22,8 +22,8 @@ use cosmic::dialog::file_chooser::{self, FileFilter}; use cosmic::iced::Subscription; use cosmic::iced_core::{Alignment, Length}; use cosmic::widget::{ - button, color_picker::ColorPickerUpdate, container, horizontal_space, radio, row, settings, - text, + button, color_picker::ColorPickerUpdate, container, radio, row, settings, + space::horizontal as horizontal_space, text, }; use cosmic::{Apply, Element, Task, widget}; #[cfg(feature = "wayland")] @@ -926,7 +926,7 @@ pub fn reset_button() -> Section { .on_press(Message::Reset) .into() } else { - horizontal_space().width(1).apply(Element::from) + horizontal_space().width(1.).apply(Element::from) } .map(crate::pages::Message::Appearance) }) diff --git a/cosmic-settings/src/pages/desktop/panel/applets_inner.rs b/cosmic-settings/src/pages/desktop/panel/applets_inner.rs index e131302..f2ddbe1 100644 --- a/cosmic-settings/src/pages/desktop/panel/applets_inner.rs +++ b/cosmic-settings/src/pages/desktop/panel/applets_inner.rs @@ -899,30 +899,28 @@ where } fn layout( - &self, + &mut self, tree: &mut Tree, renderer: &cosmic::Renderer, limits: &layout::Limits, ) -> layout::Node { - let inner_layout = self - .inner - .as_widget() - .layout(&mut tree.children[0], renderer, limits); + let inner_layout = + self.inner + .as_widget_mut() + .layout(&mut tree.children[0], renderer, limits); layout::Node::with_children(inner_layout.size(), vec![inner_layout]) } fn operate( - &self, + &mut self, tree: &mut Tree, layout: layout::Layout<'_>, renderer: &cosmic::Renderer, operation: &mut dyn Operation<()>, ) { - let state = tree.state.downcast_mut::(); + operation.container(Some(&self.id), layout.bounds()); - operation.custom(state, Some(&self.id)); - - self.inner.as_widget().operate( + self.inner.as_widget_mut().operate( &mut tree.children[0], layout.children().next().unwrap(), renderer, @@ -931,31 +929,31 @@ where } #[allow(clippy::too_many_lines, clippy::needless_match)] - fn on_event( + fn update( &mut self, tree: &mut Tree, - event: event::Event, + event: &event::Event, layout: layout::Layout<'_>, cursor_position: mouse::Cursor, renderer: &cosmic::Renderer, clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, viewport: &Rectangle, - ) -> event::Status { + ) { let space_xxs = theme::spacing().space_xxs; - let mut ret = match self.inner.as_widget_mut().on_event( + self.inner.as_widget_mut().update( &mut tree.children[0], - event.clone(), + event, layout.children().next().unwrap(), cursor_position, renderer, clipboard, shell, viewport, - ) { - event::Status::Captured => return event::Status::Captured, - event::Status::Ignored => event::Status::Ignored, - }; + ); + if shell.is_event_captured() { + return; + } let height = (layout.bounds().height - space_xxs as f32 * (self.info.len().saturating_sub(1)) as f32) @@ -967,15 +965,14 @@ where DraggingState::Dragging(applet) => match &event { event::Event::Dnd(DndEvent::Source(source_event)) => match source_event { SourceEvent::Cancelled => { - ret = event::Status::Captured; + shell.capture_event(); if let Some(on_cancel) = self.on_cancel.clone() { shell.publish(on_cancel); } DraggingState::None } SourceEvent::Finished => { - ret = event::Status::Captured; - + shell.capture_event(); DraggingState::None } _ => DraggingState::Dragging(applet), @@ -989,7 +986,7 @@ where | event::Event::Touch(touch::Event::FingerPressed { .. }) if cursor_position.is_over(layout.bounds()) => { - ret = event::Status::Captured; + shell.capture_event(); DraggingState::Pressed(cursor_position.position().unwrap_or_default()) } @@ -1040,7 +1037,8 @@ where Box::new(AppletString(p.clone())), DndAction::Move, ); - ret = event::Status::Captured; + shell.capture_event(); + let reordered = self .info .iter() @@ -1063,7 +1061,7 @@ where | event::Event::Touch( touch::Event::FingerLifted { .. } | touch::Event::FingerLost { .. }, ) => { - ret = event::Status::Captured; + shell.capture_event(); DraggingState::None } _ => DraggingState::Pressed(start), @@ -1161,8 +1159,6 @@ where _ => DndOfferState::HandlingOffer, }, }; - - ret } fn draw( @@ -1189,14 +1185,16 @@ where fn overlay<'b>( &'b mut self, tree: &'b mut Tree, - layout: layout::Layout<'_>, + layout: layout::Layout<'b>, renderer: &cosmic::Renderer, + viewport: &Rectangle, translation: Vector, ) -> Option> { self.inner.as_widget_mut().overlay( &mut tree.children[0], layout.children().next().unwrap(), renderer, + viewport, translation, ) } diff --git a/cosmic-settings/src/pages/desktop/panel/inner.rs b/cosmic-settings/src/pages/desktop/panel/inner.rs index dd04ce9..e5d5d74 100644 --- a/cosmic-settings/src/pages/desktop/panel/inner.rs +++ b/cosmic-settings/src/pages/desktop/panel/inner.rs @@ -6,7 +6,8 @@ use cosmic::{ iced::{Alignment, Length}, surface, theme, widget::{ - button, container, dropdown, horizontal_space, icon, row, settings, slider, text, toggler, + button, container, dropdown, icon, row, settings, slider, + space::horizontal as horizontal_space, text, toggler, }, }; @@ -203,8 +204,7 @@ pub(crate) fn style< move |a| crate::app::Message::PageMessage(msg_map(a)), ), )) - .add(settings::flex_item( - &descriptions[size], + .add(settings::item::builder(&descriptions[size]).flex_control({ // TODO custom discrete slider variant row::with_children(vec![ text::body(fl!("small")).into(), @@ -232,35 +232,43 @@ pub(crate) fn style< } }, ) + .width(Length::Fill) + .apply(cosmic::widget::container) + .max_width(250) .into(), text::body(fl!("large")).into(), ]) .align_y(Alignment::Center) - .spacing(8), - )) - .add(settings::flex_item( - &descriptions[background_opacity], - row::with_capacity(2) - .align_y(Alignment::Center) - .spacing(8) - .push( - text::body(fl!( - "number", - HashMap::from_iter(vec![( + .spacing(8) + .width(Length::Fill) + })) + .add( + settings::item::builder(&descriptions[background_opacity]).flex_control({ + row::with_capacity(2) + .align_y(Alignment::Center) + .spacing(8) + .width(Length::Fill) + .push( + text::body(fl!( "number", - (panel_config.opacity * 100.0) as i32 - )]) - )) - .width(Length::Fixed(22.0)) - .align_x(Alignment::Center), - ) - .push( - slider(0..=100, (panel_config.opacity * 100.0) as i32, |v| { - Message::OpacityRequest(v as f32 / 100.0) - }) - .breakpoints(&[50]), - ), - )) + HashMap::from_iter(vec![( + "number", + (panel_config.opacity * 100.0) as i32 + )]) + )) + .width(Length::Fixed(22.0)) + .align_x(Alignment::Center), + ) + .push( + slider(0..=100, (panel_config.opacity * 100.0) as i32, |v| { + Message::OpacityRequest(v as f32 / 100.0) + }) + .width(Length::Fill) + .apply(container) + .max_width(250), + ) + }), + ) .apply(Element::from) .map(msg_map) }) @@ -293,10 +301,13 @@ pub(crate) fn configuration + PanelPage>( settings::item::builder(&*descriptions[applets_label]) .control(control) .spacing(16) + .width(Length::Fill) .apply(container) .class(theme::Container::List) .apply(button::custom) + .width(Length::Fill) .class(theme::Button::Transparent) + .width(Length::Fill) .on_press(crate::pages::Message::Page(panel_applets_entity)), ) } else { @@ -347,7 +358,7 @@ pub fn reset_button< let descriptions = §ion.descriptions; let inner = page.inner(); if inner.system_default == inner.panel_config { - Element::from(horizontal_space().width(1)) + Element::from(horizontal_space().width(1.)) } else { button::standard(&descriptions[reset_to_default]) .on_press(Message::ResetPanel) diff --git a/cosmic-settings/src/pages/desktop/wallpaper/mod.rs b/cosmic-settings/src/pages/desktop/wallpaper/mod.rs index 6fbd15d..a58bb2e 100644 --- a/cosmic-settings/src/pages/desktop/wallpaper/mod.rs +++ b/cosmic-settings/src/pages/desktop/wallpaper/mod.rs @@ -25,7 +25,9 @@ use cosmic::{ widget::{ button, dropdown, list_column, row, segmented_button::{self, SingleSelectModel}, - settings, tab_bar, text, toggler, + settings, + space::horizontal as horizontal_space, + tab_bar, text, toggler, }, }; use cosmic::{ @@ -691,7 +693,10 @@ impl Page { .width(Length::Fixed(SIMULATED_WIDTH as f32)) .into(), - None => cosmic::widget::Space::new(SIMULATED_WIDTH, SIMULATED_HEIGHT).into(), + None => cosmic::widget::Space::new() + .width(Length::Fixed(SIMULATED_WIDTH as f32)) + .height(Length::Fixed(SIMULATED_HEIGHT as f32)) + .into(), } } @@ -1342,7 +1347,7 @@ pub fn settings() -> Section { }, ) .push(category_selection) - .push(cosmic::widget::horizontal_space()) + .push(horizontal_space()) .push_maybe(add_button) .into(), ); diff --git a/cosmic-settings/src/pages/desktop/wallpaper/widgets.rs b/cosmic-settings/src/pages/desktop/wallpaper/widgets.rs index f1e5e08..c1be603 100644 --- a/cosmic-settings/src/pages/desktop/wallpaper/widgets.rs +++ b/cosmic-settings/src/pages/desktop/wallpaper/widgets.rs @@ -47,11 +47,12 @@ pub fn color_image<'a, M: 'a>( height: u16, border_radius: Option, ) -> Element<'a, M> { - container(Space::new(width, height)) + container(Space::new().width(width).height(height)) .class(cosmic::theme::Container::custom(move |theme| { container::Style { icon_color: None, text_color: None, + snap: true, background: Some(match &color { wallpaper::Color::Single([r, g, b]) => { Background::Color(Color::from_rgb(*r, *g, *b)) diff --git a/cosmic-settings/src/pages/desktop/window_management.rs b/cosmic-settings/src/pages/desktop/window_management.rs index d446efc..354972c 100644 --- a/cosmic-settings/src/pages/desktop/window_management.rs +++ b/cosmic-settings/src/pages/desktop/window_management.rs @@ -3,7 +3,7 @@ use cosmic::{ Apply, Element, - iced::Length, + iced::{Alignment, Length}, surface, widget::{self, settings, toggler}, }; @@ -258,12 +258,15 @@ pub fn window_management() -> Section { }, ), )) - .add(settings::flex_item( - &descriptions[edge_gravity], - toggler(page.edge_snap_threshold != 0).on_toggle(|is_enabled| { - Message::SetEdgeSnapThreshold(if is_enabled { 10 } else { 0 }) - }), - )) + .add( + settings::flex_item( + &descriptions[edge_gravity], + toggler(page.edge_snap_threshold != 0).on_toggle(|is_enabled| { + Message::SetEdgeSnapThreshold(if is_enabled { 10 } else { 0 }) + }), + ) + .align_items(Alignment::Center), + ) .apply(Element::from) .map(crate::pages::Message::WindowManagement) }) diff --git a/cosmic-settings/src/pages/display/arrangement.rs b/cosmic-settings/src/pages/display/arrangement.rs index 73c5a09..ca92bae 100644 --- a/cosmic-settings/src/pages/display/arrangement.rs +++ b/cosmic-settings/src/pages/display/arrangement.rs @@ -9,7 +9,7 @@ use cosmic::iced_core::{ Shell, Size, Widget, }; use cosmic::iced_core::{Point, layout, mouse, renderer, touch}; -use cosmic::iced_core::{alignment, event, text}; +use cosmic::iced_core::{alignment, text}; use cosmic::widget::segmented_button::{self, SingleSelectModel}; use cosmic_randr_shell::{self as randr, OutputKey}; use randr::Transform; @@ -96,7 +96,7 @@ impl Widget for Arrangement<'_ } fn layout( - &self, + &mut self, tree: &mut Tree, _renderer: &Renderer, limits: &layout::Limits, @@ -157,17 +157,17 @@ impl Widget for Arrangement<'_ layout::Node::new(size) } - fn on_event( + fn update( &mut self, tree: &mut Tree, - event: cosmic::iced_core::Event, + event: &cosmic::iced_core::Event, layout: Layout<'_>, cursor: mouse::Cursor, _renderer: &Renderer, _clipboard: &mut dyn Clipboard, shell: &mut Shell<'_, Message>, viewport: &Rectangle, - ) -> event::Status { + ) { let bounds = layout.bounds(); match event { @@ -198,7 +198,7 @@ impl Widget for Arrangement<'_ ), ); - return event::Status::Captured; + shell.capture_event(); } } } @@ -217,7 +217,7 @@ impl Widget for Arrangement<'_ state.drag_from = position; state.offset = (position.x - output_region.x, position.y - output_region.y); state.dragging = Some((output_key, output_region)); - return event::Status::Captured; + shell.capture_event(); } } } @@ -239,7 +239,8 @@ impl Widget for Arrangement<'_ } } - return event::Status::Captured; + shell.capture_event(); + return; } if let Some(ref on_placement) = self.on_placement { @@ -253,14 +254,12 @@ impl Widget for Arrangement<'_ )); } - return event::Status::Captured; + shell.capture_event(); } } _ => (), } - - event::Status::Ignored } fn mouse_interaction( @@ -333,6 +332,7 @@ impl Widget for Arrangement<'_ width: 3.0, }, shadow: Default::default(), + snap: true, }, core::Background::Color(background.into()), ); @@ -352,6 +352,7 @@ impl Widget for Arrangement<'_ ..Default::default() }, shadow: Default::default(), + snap: true, }, core::Background::Color(cosmic_theme.palette.neutral_1.into()), ); @@ -364,8 +365,8 @@ impl Widget for Arrangement<'_ line_height: core::text::LineHeight::Relative(1.2), font: cosmic::font::bold(), bounds: id_bounds.size(), - horizontal_alignment: alignment::Horizontal::Center, - vertical_alignment: alignment::Vertical::Center, + align_x: text::Alignment::Center, + align_y: alignment::Vertical::Center, shaping: text::Shaping::Basic, wrapping: text::Wrapping::Word, ellipsize: text::Ellipsize::None, diff --git a/cosmic-settings/src/pages/display/mod.rs b/cosmic-settings/src/pages/display/mod.rs index bd1745c..2d280dd 100644 --- a/cosmic-settings/src/pages/display/mod.rs +++ b/cosmic-settings/src/pages/display/mod.rs @@ -287,7 +287,7 @@ impl page::Page for Page { // Forward messages from another thread to prevent the monitoring thread from blocking. let (randr_task, randr_handle) = Task::stream(cosmic::iced_futures::stream::channel( 1, - |mut emitter| async move { + |mut emitter: futures::channel::mpsc::Sender<_>| async move { while let Some(message) = rx.recv().await { if let cosmic_randr::Message::ManagerDone = message && !refreshing_page.swap(true, Ordering::SeqCst) @@ -359,7 +359,7 @@ impl page::Page for Page { // Forward messages from the DRM hotplug thread. let (hotplug_task, hotplug_handle) = Task::stream(cosmic::iced_futures::stream::channel( 1, - |mut emitter| async move { + |mut emitter: futures::channel::mpsc::Sender| async move { while let Some(message) = rx.recv().await { _ = emitter.send(message).await; } @@ -609,8 +609,8 @@ impl Page { return cosmic::iced::widget::scrollable::snap_to( self.display_arrangement_scrollable.clone(), RelativeOffset { - x: self.last_pan, - y: 0.0, + x: Some(self.last_pan), + y: None, }, ); } @@ -662,7 +662,10 @@ impl Page { self.last_pan = 0.5; cosmic::iced::widget::scrollable::snap_to( self.display_arrangement_scrollable.clone(), - RelativeOffset { x: 0.5, y: 0.5 }, + RelativeOffset { + x: Some(0.5), + y: Some(0.5), + }, ) } diff --git a/cosmic-settings/src/pages/input/keyboard/mod.rs b/cosmic-settings/src/pages/input/keyboard/mod.rs index c2df4c7..d56af7a 100644 --- a/cosmic-settings/src/pages/input/keyboard/mod.rs +++ b/cosmic-settings/src/pages/input/keyboard/mod.rs @@ -801,46 +801,52 @@ fn keyboard_typing_assist() -> Section { settings::section() .title(§ion.title) - .add(settings::flex_item(&descriptions[repeat_delay], { - // Delay - let delay_slider = cosmic::widget::slider( - KB_REPEAT_DELAY_MIN..=KB_REPEAT_DELAY_MAX, - page.xkb.repeat_delay, - Message::SetRepeatKeysDelay, - ) - .width(Length::Fill) - .breakpoints(&[KB_REPEAT_DELAY_DEFAULT]) - .step(50_u32) - .apply(widget::container) - .max_width(250); + .add( + settings::flex_item(&descriptions[repeat_delay], { + // Delay + let delay_slider = cosmic::widget::slider( + KB_REPEAT_DELAY_MIN..=KB_REPEAT_DELAY_MAX, + page.xkb.repeat_delay, + Message::SetRepeatKeysDelay, + ) + .width(Length::Fill) + .breakpoints(&[KB_REPEAT_DELAY_DEFAULT]) + .step(50_u32) + .apply(widget::container) + .max_width(250); - row::with_capacity(3) - .align_y(Alignment::Center) - .spacing(theme::spacing().space_s) - .push(widget::text::body(&descriptions[short])) - .push(delay_slider) - .push(widget::text::body(&descriptions[long])) - })) - .add(settings::flex_item(&descriptions[repeat_rate], { - // Repeat rate - let rate_slider = cosmic::widget::slider( - KB_REPEAT_RATE_MIN..=KB_REPEAT_RATE_MAX, - page.xkb.repeat_rate, - Message::SetRepeatKeysRate, - ) - .width(Length::Fill) - .breakpoints(&[KB_REPEAT_RATE_DEFAULT]) - .step(5_u32) - .apply(widget::container) - .max_width(250); + row::with_capacity(3) + .align_y(Alignment::Center) + .spacing(theme::spacing().space_s) + .push(widget::text::body(&descriptions[short])) + .push(delay_slider) + .push(widget::text::body(&descriptions[long])) + }) + .align_items(Alignment::Center), + ) + .add( + settings::flex_item(&descriptions[repeat_rate], { + // Repeat rate + let rate_slider = cosmic::widget::slider( + KB_REPEAT_RATE_MIN..=KB_REPEAT_RATE_MAX, + page.xkb.repeat_rate, + Message::SetRepeatKeysRate, + ) + .width(Length::Fill) + .breakpoints(&[KB_REPEAT_RATE_DEFAULT]) + .step(5_u32) + .apply(widget::container) + .max_width(250); - row::with_capacity(3) - .align_y(Alignment::Center) - .spacing(theme::spacing().space_s) - .push(widget::text::body(&descriptions[slow])) - .push(rate_slider) - .push(widget::text::body(&descriptions[fast])) - })) + row::with_capacity(3) + .align_y(Alignment::Center) + .spacing(theme::spacing().space_s) + .push(widget::text::body(&descriptions[slow])) + .push(rate_slider) + .push(widget::text::body(&descriptions[fast])) + }) + .align_items(Alignment::Center), + ) .apply(cosmic::Element::from) .map(crate::pages::Message::Keyboard) }) diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs index f5458ff..197bc16 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/common.rs @@ -882,6 +882,7 @@ fn shortcut_item(custom: bool, id: usize, data: &ShortcutModel) -> Element<'_, S settings::item::builder(&data.description) .flex_control(control) + .align_items(Alignment::Center) .spacing(16) .apply(widget::container) .class(theme::Container::List) diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs index 3cd9119..fd7c7f2 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/mod.rs @@ -437,7 +437,7 @@ fn shortcuts() -> Section { let descriptions = §ion.descriptions; let search = widget::search_input("", &page.search.input) - .width(314) + .width(314.) .on_clear(Message::Search(String::new())) .on_input(Message::Search) .apply(widget::container) @@ -516,6 +516,7 @@ fn category_item(category: Category, name: &str, modified: u16) -> Element<'_, M .class(theme::Container::List) .apply(widget::button::custom) .class(theme::Button::Transparent) + .width(Length::Fill) .on_press(Message::Category(category)) .into() } diff --git a/cosmic-settings/src/pages/input/mouse.rs b/cosmic-settings/src/pages/input/mouse.rs index 8b606cc..2d40af0 100644 --- a/cosmic-settings/src/pages/input/mouse.rs +++ b/cosmic-settings/src/pages/input/mouse.rs @@ -62,12 +62,15 @@ fn mouse() -> Section { settings::section() .title(§ion.title) - .add(settings::flex_item( - &descriptions[primary_button], - cosmic::widget::segmented_control::horizontal(&input.primary_button) - .minimum_button_width(0) - .on_activate(|x| Message::PrimaryButtonSelected(x, false)), - )) + .add( + settings::flex_item( + &descriptions[primary_button], + cosmic::widget::segmented_control::horizontal(&input.primary_button) + .minimum_button_width(0) + .on_activate(|x| Message::PrimaryButtonSelected(x, false)), + ) + .align_items(Alignment::Center), + ) .add( settings::item::builder(&descriptions[mouse_speed]).flex_control({ let value = (input @@ -130,35 +133,38 @@ fn scrolling() -> Section { settings::section() .title(§ion.title) - .add(settings::flex_item(&descriptions[scroll_speed], { - let value = input - .input_default - .scroll_config - .as_ref() - .and_then(|x| x.scroll_factor) - .unwrap_or(1.) - .log(2.) - * 10.0 - + 50.0; + .add( + settings::flex_item(&descriptions[scroll_speed], { + let value = input + .input_default + .scroll_config + .as_ref() + .and_then(|x| x.scroll_factor) + .unwrap_or(1.) + .log(2.) + * 10.0 + + 50.0; - let slider = widget::slider(1.0..=100.0, value, |value| { - Message::SetScrollFactor(2f64.powf((value - 50.0) / 10.0), false) + let slider = widget::slider(1.0..=100.0, value, |value| { + Message::SetScrollFactor(2f64.powf((value - 50.0) / 10.0), false) + }) + .width(Length::Fill) + .breakpoints(&[50.0]) + .apply(widget::container) + .max_width(250); + + row::with_capacity(2) + .align_y(Alignment::Center) + .spacing(8) + .push( + text::body(format!("{:.0}", value.round())) + .width(Length::Fixed(22.0)) + .align_x(Alignment::Center), + ) + .push(slider) }) - .width(Length::Fill) - .breakpoints(&[50.0]) - .apply(widget::container) - .max_width(250); - - row::with_capacity(2) - .align_y(Alignment::Center) - .spacing(8) - .push( - text::body(format!("{:.0}", value.round())) - .width(Length::Fixed(22.0)) - .align_x(Alignment::Center), - ) - .push(slider) - })) + .align_items(Alignment::Center), + ) .add( settings::item::builder(&descriptions[natural]) .description(&descriptions[natural_desc]) diff --git a/cosmic-settings/src/pages/networking/vpn/mod.rs b/cosmic-settings/src/pages/networking/vpn/mod.rs index 6c08c64..0f921de 100644 --- a/cosmic-settings/src/pages/networking/vpn/mod.rs +++ b/cosmic-settings/src/pages/networking/vpn/mod.rs @@ -9,12 +9,11 @@ use std::sync::{Arc, LazyLock}; use anyhow::Context; use cosmic::dialog::file_chooser::FileFilter; use cosmic::task; -use cosmic::widget::text_input::focus; use cosmic::{ Apply, Element, Task, iced::{Alignment, Length}, iced_core::text::Wrapping, - widget::{self, icon}, + widget::{self, icon, space::horizontal as horizontal_space, text_input::focus}, }; use cosmic_settings_network_manager_subscription::nm_secret_agent::{self, PasswordFlag}; use cosmic_settings_network_manager_subscription::{ @@ -1086,7 +1085,7 @@ fn devices_view() -> Section { let widget = widget::settings::item_row(vec![ identifier.into(), - widget::horizontal_space().into(), + horizontal_space().into(), controls.into(), ]); diff --git a/cosmic-settings/src/pages/networking/wifi.rs b/cosmic-settings/src/pages/networking/wifi.rs index accec6a..4834dc0 100644 --- a/cosmic-settings/src/pages/networking/wifi.rs +++ b/cosmic-settings/src/pages/networking/wifi.rs @@ -10,11 +10,10 @@ use anyhow::Context; use cosmic::{ Apply, Element, Task, app::ContextDrawer, - iced::{Alignment, Length}, + iced::{Alignment, Length, widget::operation::focus_next}, iced_core::text::Wrapping, - iced_widget::focus_next, task, - widget::{self, column, icon, text_input::focus}, + widget::{self, column, icon, space::horizontal as horizontal_space, text_input::focus}, }; use cosmic_settings_network_manager_subscription::{ self as network_manager, NetworkManagerState, @@ -1020,7 +1019,7 @@ fn devices_view() -> Section { let item = widget::settings::item_row(vec![ identifier.into(), - widget::horizontal_space().into(), + horizontal_space().into(), controls.into(), ]); @@ -1125,7 +1124,7 @@ fn devices_view() -> Section { let item = widget::settings::item_row(vec![ identifier.into(), - widget::horizontal_space().into(), + horizontal_space().into(), controls.into(), ]); @@ -1235,7 +1234,7 @@ fn devices_view() -> Section { let item = widget::settings::item_row(vec![ identifier.into(), - widget::horizontal_space().into(), + horizontal_space().into(), connect, ]); diff --git a/cosmic-settings/src/pages/networking/wired.rs b/cosmic-settings/src/pages/networking/wired.rs index 643a692..2fb4103 100644 --- a/cosmic-settings/src/pages/networking/wired.rs +++ b/cosmic-settings/src/pages/networking/wired.rs @@ -8,7 +8,7 @@ use cosmic::{ Apply, Element, Task, iced::{Alignment, Length}, iced_core::text::Wrapping, - widget::{self, icon}, + widget::{self, icon, space::horizontal as horizontal_space}, }; use cosmic_dbus_networkmanager::interface::enums::DeviceState; use cosmic_settings_network_manager_subscription::{ @@ -549,7 +549,7 @@ impl Page { let widget = widget::settings::item_row(vec![ identifier.into(), - widget::horizontal_space().into(), + horizontal_space().into(), controls.into(), ]); diff --git a/cosmic-settings/src/pages/power/mod.rs b/cosmic-settings/src/pages/power/mod.rs index 10a9719..3dcd581 100644 --- a/cosmic-settings/src/pages/power/mod.rs +++ b/cosmic-settings/src/pages/power/mod.rs @@ -5,7 +5,7 @@ use backend::{Battery, ConnectedDevice, PowerProfile}; use cosmic::iced::{self, Alignment, Length}; use cosmic::iced_widget::{column, row}; -use cosmic::widget::{self, radio, settings, text}; +use cosmic::widget::{self, radio, settings, space::horizontal as horizontal_space, text}; use cosmic::{Apply, surface}; use cosmic::{Task, iced_futures}; use cosmic_config::{Config, CosmicConfigEntry}; @@ -15,6 +15,7 @@ use futures::{SinkExt, StreamExt}; use itertools::Itertools; use slab::Slab; use slotmap::SlotMap; +use std::hash::Hash; use std::iter; use std::time::Duration; use upower_dbus::DeviceProxy; @@ -153,24 +154,50 @@ impl page::Page for Page { }); // Subscriptions for all connected device batteries. - let device_batteries = self - .connected_devices - .iter() - .filter_map(|device| { - device - .proxy - .clone() - .map(|p| (device.device_path.clone(), p)) - }) - .map(|(path, proxy)| { - iced::Subscription::run_with_id( - path.clone(), - iced_futures::stream::channel(1, |sender| async move { - receive_battery_changes(proxy, path, sender, Message::UpdateDeviceBattery) - .await - }), - ) - }); + let device_batteries = + self.connected_devices + .iter() + .filter_map(|device| { + device + .proxy + .clone() + .map(|p| (device.device_path.clone(), p)) + }) + .map(|(path, proxy)| { + #[derive(Clone)] + struct DeviceBatterySubscriptionData { + proxy: DeviceProxy<'static>, + path: String, + } + + impl Hash for DeviceBatterySubscriptionData { + fn hash(&self, state: &mut H) { + self.path.hash(state); + } + } + + iced::Subscription::run_with( + DeviceBatterySubscriptionData { proxy, path }, + |DeviceBatterySubscriptionData { proxy, path }| { + let path = path.clone(); + let proxy = proxy.clone(); + iced_futures::stream::channel( + 1, + move |sender: futures::channel::mpsc::Sender< + crate::pages::Message, + >| async move { + receive_battery_changes( + proxy, + path, + sender, + Message::UpdateDeviceBattery, + ) + .await + }, + ) + }, + ) + }); iced::Subscription::batch(std::iter::once(system_battery).chain(device_batteries)) } @@ -199,47 +226,56 @@ impl page::Page for Page { } }), cosmic::Task::run( - iced_futures::stream::channel(1, |mut emitter| async move { - let span = tracing::span!(tracing::Level::INFO, "power::device_stream task"); - let _span_handle = span.enter(); + iced_futures::stream::channel( + 1, + |mut emitter: futures::channel::mpsc::Sender| async move { + let span = + tracing::span!(tracing::Level::INFO, "power::device_stream task"); + let _span_handle = span.enter(); - let Ok(connection) = zbus::Connection::system().await else { - tracing::error!("could not established zbus connection to system"); - return; - }; + let Ok(connection) = zbus::Connection::system().await else { + tracing::error!("could not established zbus connection to system"); + return; + }; - let added_stream = ConnectedDevice::device_added_stream(&connection).await; - let removed_stream = ConnectedDevice::device_removed_stream(&connection).await; + let added_stream = ConnectedDevice::device_added_stream(&connection).await; + let removed_stream = + ConnectedDevice::device_removed_stream(&connection).await; - let mut sender = emitter.clone(); - let added_future = std::pin::pin!(async { - match added_stream { - Ok(stream) => { - let mut stream = std::pin::pin!(stream); - while let Some(device) = stream.next().await { - tracing::debug!(device = device.model, "device added"); - _ = sender.send(Message::DeviceConnect(device)).await; + let mut sender = emitter.clone(); + let added_future = std::pin::pin!(async { + match added_stream { + Ok(stream) => { + let mut stream = std::pin::pin!(stream); + while let Some(device) = stream.next().await { + tracing::debug!(device = device.model, "device added"); + _ = sender.send(Message::DeviceConnect(device)).await; + } + } + Err(err) => tracing::error!(?err, "cannot establish added stream"), + } + }); + + let removed_future = std::pin::pin!(async { + match removed_stream { + Ok(stream) => { + let mut stream = std::pin::pin!(stream); + while let Some(device_path) = stream.next().await { + tracing::debug!(device_path, "device removed"); + _ = emitter + .send(Message::DeviceDisconnect(device_path)) + .await; + } + } + Err(err) => { + tracing::error!(?err, "cannot establish removed stream") } } - Err(err) => tracing::error!(?err, "cannot establish added stream"), - } - }); + }); - let removed_future = std::pin::pin!(async { - match removed_stream { - Ok(stream) => { - let mut stream = std::pin::pin!(stream); - while let Some(device_path) = stream.next().await { - tracing::debug!(device_path, "device removed"); - _ = emitter.send(Message::DeviceDisconnect(device_path)).await; - } - } - Err(err) => tracing::error!(?err, "cannot establish removed stream"), - } - }); - - futures::future::select(added_future, removed_future).await; - }), + futures::future::select(added_future, removed_future).await; + }, + ), |msg| msg, ), ]; @@ -449,7 +485,7 @@ fn connected_devices() -> Section { .width(Length::Fill) .height(Length::Fill), ) - .height(64) + .height(64.) .class(cosmic::theme::Container::List) .into() }) @@ -469,14 +505,10 @@ fn connected_devices() -> Section { cosmic::Element::from( row!( device_row.next().unwrap_or( - widget::horizontal_space() - .width(Length::Fill) - .into() + horizontal_space().width(Length::Fill).into() ), device_row.next().unwrap_or( - widget::horizontal_space() - .width(Length::Fill) - .into() + horizontal_space().width(Length::Fill).into() ), ) .spacing(8), diff --git a/cosmic-settings/src/pages/sound/mod.rs b/cosmic-settings/src/pages/sound/mod.rs index 04a3bff..2ad1974 100644 --- a/cosmic-settings/src/pages/sound/mod.rs +++ b/cosmic-settings/src/pages/sound/mod.rs @@ -7,7 +7,7 @@ use cosmic::{ Apply, Element, Task, iced::{Alignment, Length, window}, surface, - widget::{self, settings}, + widget::{self, settings, space::horizontal as horizontal_space}, }; use cosmic_config::{Config, ConfigGet, ConfigSet}; use cosmic_settings_page::{self as page, Section, section}; @@ -275,7 +275,10 @@ fn input() -> Section { widget::slider(0..=100, page.model.source_volume, |change| { Message::SetSourceVolume(change).into() }) - }; + } + .width(Length::Fill) + .apply(widget::container) + .max_width(250.); let volume_control = widget::row::with_capacity(4) .align_y(Alignment::Center) @@ -292,7 +295,7 @@ fn input() -> Section { .width(Length::Fixed(22.0)) .align_x(Alignment::Center), ) - .push(widget::horizontal_space().width(8)) + .push(horizontal_space().width(8.)) .push(slider); let devices = widget::dropdown::popup_dropdown( page.model.sources(), @@ -307,10 +310,11 @@ fn input() -> Section { let mut controls = settings::section() .title(§ion.title) - .add(settings::flex_item( - &*section.descriptions[volume], - volume_control, - )) + .add( + settings::item::builder(&*section.descriptions[volume]) + .flex_control(volume_control) + .align_items(Alignment::Center), + ) .add(settings::item(&*section.descriptions[device], devices)); controls = controls.add( @@ -351,7 +355,10 @@ fn output() -> Section { widget::slider(0..=100, page.model.sink_volume, |change| { Message::SetSinkVolume(change).into() }) - }; + } + .width(Length::Fill) + .apply(widget::container) + .max_width(250.); let volume_control = widget::row::with_capacity(4) .align_y(Alignment::Center) @@ -368,7 +375,7 @@ fn output() -> Section { .width(Length::Fixed(22.0)) .align_x(Alignment::Center), ) - .push(widget::horizontal_space().width(8)) + .push(horizontal_space().width(8.)) .push(slider); let devices = widget::dropdown::popup_dropdown( @@ -384,10 +391,11 @@ fn output() -> Section { let mut controls = settings::section() .title(§ion.title) - .add(settings::flex_item( - &*section.descriptions[volume], - volume_control, - )) + .add( + settings::item::builder(&*section.descriptions[volume]) + .flex_control(volume_control) + .align_items(Alignment::Center), + ) .add(settings::item(&*section.descriptions[device], devices)) .add(settings::item( &*section.descriptions[balance], @@ -398,7 +406,7 @@ fn output() -> Section { .width(Length::Fixed(22.0)) .align_x(Alignment::Center), ) - .push(widget::horizontal_space().width(8)) + .push(horizontal_space().width(8.)) .push( widget::slider( 0..=200, @@ -408,7 +416,7 @@ fn output() -> Section { ) .breakpoints(&[100]), ) - .push(widget::horizontal_space().width(8)) + .push(horizontal_space().width(8.)) .push( widget::text::body(&*section.descriptions[right]) .width(Length::Fixed(22.0)) @@ -440,7 +448,7 @@ fn device_profiles() -> Section { .view::(move |_binder, page, section| { let descriptions = §ion.descriptions; let button = widget::row::with_children(vec![ - widget::horizontal_space().into(), + horizontal_space().into(), widget::icon::from_name("go-next-symbolic").size(16).into(), ]); @@ -448,10 +456,13 @@ fn device_profiles() -> Section { .control(button) .spacing(16) .apply(widget::container) + .width(Length::Fill) .class(cosmic::theme::Container::List) .apply(widget::button::custom) + .width(Length::Fill) .class(cosmic::theme::Button::Transparent) - .on_press(crate::pages::Message::Page(page.device_profiles)); + .on_press(crate::pages::Message::Page(page.device_profiles)) + .width(Length::Fill); settings::section().add(device_profiles).into() }) diff --git a/cosmic-settings/src/pages/system/about.rs b/cosmic-settings/src/pages/system/about.rs index 1a094d8..0ee99d0 100644 --- a/cosmic-settings/src/pages/system/about.rs +++ b/cosmic-settings/src/pages/system/about.rs @@ -1,6 +1,7 @@ // Copyright 2023 System76 // SPDX-License-Identifier: GPL-3.0-only +use cosmic::iced::Alignment; use cosmic_settings_page::{self as page, Section, section}; use super::info::Info; @@ -177,7 +178,7 @@ fn device() -> Section { page.editing_device_name, Message::HostnameEdit, ) - .width(250) + .width(250.) .on_input(Message::HostnameInput) .on_unfocus(Message::HostnameSubmit) .on_submit(|_| Message::HostnameSubmit); @@ -210,31 +211,34 @@ fn hardware() -> Section { let mut section_builder = settings::section() .title(§ion.title) - .add(settings::flex_item( - &*desc[model], - text::body(&page.info.hardware_model), - )) - .add(settings::flex_item( - &*desc[memory], - text::body(&page.info.memory), - )) - .add(settings::flex_item( - &*desc[processor], - text::body(&page.info.processor), - )); + .add( + settings::flex_item(&*desc[model], text::body(&page.info.hardware_model)) + .align_items(Alignment::Center), + ) + .add( + settings::flex_item(&*desc[memory], text::body(&page.info.memory)) + .align_items(Alignment::Center), + ) + .add( + settings::flex_item(&*desc[processor], text::body(&page.info.processor)) + .align_items(Alignment::Center), + ); for card in &page.info.graphics { - section_builder = section_builder.add(settings::flex_item( - &*desc[graphics], - text::body(card.as_str()), - )); + section_builder = section_builder.add( + settings::flex_item(&*desc[graphics], text::body(card.as_str())) + .align_items(Alignment::Center), + ); } section_builder - .add(settings::flex_item( - &*desc[disk_capacity], - text::body(&page.info.disk_capacity), - )) + .add( + settings::flex_item( + &*desc[disk_capacity], + text::body(&page.info.disk_capacity), + ) + .align_items(Alignment::Center), + ) .into() }) } @@ -255,26 +259,32 @@ fn os() -> Section { let desc = §ion.descriptions; settings::section() .title(§ion.title) - .add(settings::flex_item( - &*desc[os], - text::body(&page.info.operating_system), - )) - .add(settings::flex_item( - &*desc[os_arch], - text::body(&page.info.os_architecture), - )) - .add(settings::flex_item( - &*desc[kernel], - text::body(&page.info.kernel_version), - )) - .add(settings::flex_item( - &*desc[desktop], - text::body(&page.info.desktop_environment), - )) - .add(settings::flex_item( - &*desc[windowing_system], - text::body(&page.info.windowing_system), - )) + .add( + settings::flex_item(&*desc[os], text::body(&page.info.operating_system)) + .align_items(Alignment::Center), + ) + .add( + settings::flex_item(&*desc[os_arch], text::body(&page.info.os_architecture)) + .align_items(Alignment::Center), + ) + .add( + settings::flex_item(&*desc[kernel], text::body(&page.info.kernel_version)) + .align_items(Alignment::Center), + ) + .add( + settings::flex_item( + &*desc[desktop], + text::body(&page.info.desktop_environment), + ) + .align_items(Alignment::Center), + ) + .add( + settings::flex_item( + &*desc[windowing_system], + text::body(&page.info.windowing_system), + ) + .align_items(Alignment::Center), + ) .into() }) } diff --git a/cosmic-settings/src/pages/system/users/mod.rs b/cosmic-settings/src/pages/system/users/mod.rs index 522cd89..079c39c 100644 --- a/cosmic-settings/src/pages/system/users/mod.rs +++ b/cosmic-settings/src/pages/system/users/mod.rs @@ -8,7 +8,7 @@ use cosmic::{ Apply, Element, dialog::file_chooser, iced::{Alignment, Length}, - widget::{self, Space, column, icon, row, settings, text}, + widget::{self, column, icon, row, settings, space::horizontal as horizontal_space, text}, }; use cosmic_settings_page::{self as page, Section, section}; use image::GenericImageView; @@ -322,7 +322,7 @@ impl page::Page for Page { ))) .width(Length::Fill), ) - .push(Space::new(5, 0)) + .push(horizontal_space().width(5.)) .push(admin_toggler) .align_y(Alignment::Center), ), @@ -843,7 +843,7 @@ fn user_list() -> Section { .push(text::caption(crate::fl!("administrator", "desc"))) .width(Length::Fill) .into(), - Space::new(5, 0).into(), + horizontal_space().width(5.).into(), widget::toggler(user.is_admin) .on_toggle(|enabled| { Message::SelectedUserSetAdmin(user.id, enabled) @@ -853,7 +853,7 @@ fn user_list() -> Section { if page.users.len() > 1 { details_list = details_list.add(settings::item_row(vec![ - widget::horizontal_space().width(Length::Fill).into(), + horizontal_space().width(Length::Fill).into(), widget::button::destructive(crate::fl!("remove-user")) .on_press(Message::SelectedUserDelete(user.id)) .into(), @@ -885,7 +885,7 @@ fn user_list() -> Section { .align_y(Alignment::Center) .spacing(space_xxs) .into(), - widget::horizontal_space().width(Length::Fill).into(), + horizontal_space().width(Length::Fill).into(), icon::from_name(if expanded { "go-up-symbolic" } else { @@ -901,6 +901,7 @@ fn user_list() -> Section { .padding([space_xxs, space_m]) .on_press(Message::SelectUser(idx)) .class(cosmic::theme::Button::ListItem) + .width(Length::Fill) .selected(expanded) .apply(Element::from), ); diff --git a/cosmic-settings/src/pages/time/date.rs b/cosmic-settings/src/pages/time/date.rs index a3d2ab3..9267de7 100644 --- a/cosmic-settings/src/pages/time/date.rs +++ b/cosmic-settings/src/pages/time/date.rs @@ -7,7 +7,7 @@ use cosmic::{ cosmic_config::{self, ConfigGet, ConfigSet}, iced_core::text::Wrapping, surface, - widget::{self, dropdown, settings}, + widget::{self, dropdown, settings, space::horizontal as horizontal_space}, }; use cosmic_settings_page::{self as page, Section, section}; use icu::{ @@ -366,7 +366,7 @@ impl Page { .class(cosmic::theme::Svg::Custom(svg_accent.clone())) .into() } else { - widget::horizontal_space().width(16).into() + horizontal_space().width(16.).into() }, ]) .apply(widget::container) diff --git a/cosmic-settings/src/pages/time/region.rs b/cosmic-settings/src/pages/time/region.rs index 3487682..76a42b7 100644 --- a/cosmic-settings/src/pages/time/region.rs +++ b/cosmic-settings/src/pages/time/region.rs @@ -8,7 +8,7 @@ use std::sync::Arc; use cosmic::app::{ContextDrawer, context_drawer}; use cosmic::iced::{Alignment, Length}; use cosmic::iced_core::text::Wrapping; -use cosmic::widget::{self, button}; +use cosmic::widget::{self, button, space::horizontal as horizontal_space}; use cosmic::{Apply, Element}; use cosmic_config::{ConfigGet, ConfigSet}; use cosmic_settings_page::Section; @@ -398,7 +398,7 @@ impl Page { .class(cosmic::theme::Svg::Custom(svg_accent.clone())) .into() } else { - widget::horizontal_space().width(16).into() + horizontal_space().width(16.).into() }, ]) .apply(widget::container) @@ -526,7 +526,7 @@ impl Page { .class(cosmic::theme::Svg::Custom(svg_accent.clone())) .into() } else { - widget::horizontal_space().width(16).into() + horizontal_space().width(16.).into() }, ]) .apply(widget::container) diff --git a/cosmic-settings/src/subscription/daytime.rs b/cosmic-settings/src/subscription/daytime.rs index e4189c8..00b8159 100644 --- a/cosmic-settings/src/subscription/daytime.rs +++ b/cosmic-settings/src/subscription/daytime.rs @@ -12,15 +12,14 @@ use tokio::select; pub fn daytime() -> cosmic::iced::Subscription { struct Sunset; - Subscription::run_with_id( - TypeId::of::(), - stream::channel(2, |tx| async { + Subscription::run_with(TypeId::of::(), |_| { + stream::channel(2, |tx: Sender| async { if let Err(err) = inner(tx).await { tracing::error!("Sunset subscription error: {:?}", err); } future::pending().await - }), - ) + }) + }) } enum Event { diff --git a/cosmic-settings/src/subscription/desktop_files.rs b/cosmic-settings/src/subscription/desktop_files.rs index b9bd5a2..fde1244 100644 --- a/cosmic-settings/src/subscription/desktop_files.rs +++ b/cosmic-settings/src/subscription/desktop_files.rs @@ -15,45 +15,49 @@ pub enum Event { pub fn desktop_files( id: I, ) -> cosmic::iced::Subscription { - Subscription::run_with_id( - id, - stream::channel(1, move |mut output| async move { - let handle = tokio::runtime::Handle::current(); - let (tx, mut rx) = mpsc::channel(4); - let mut last_update = std::time::Instant::now(); + Subscription::run_with(id, |_| { + stream::channel( + 1, + move |mut output: futures::channel::mpsc::Sender| async move { + let handle = tokio::runtime::Handle::current(); + let (tx, mut rx) = mpsc::channel(4); + let mut last_update = std::time::Instant::now(); - // Automatically select the best implementation for your platform. - // You can also access each implementation directly e.g. INotifyWatcher. - let watcher = RecommendedWatcher::new( - move |res: Result| { - if let Ok(event) = res { - match event.kind { - EventKind::Create(_) | EventKind::Modify(_) | EventKind::Remove(_) => { - let now = std::time::Instant::now(); - if now.duration_since(last_update).as_secs() > 3 { - _ = handle.block_on(tx.send(())); - last_update = now; + // Automatically select the best implementation for your platform. + // You can also access each implementation directly e.g. INotifyWatcher. + let watcher = RecommendedWatcher::new( + move |res: Result| { + if let Ok(event) = res { + match event.kind { + EventKind::Create(_) + | EventKind::Modify(_) + | EventKind::Remove(_) => { + let now = std::time::Instant::now(); + if now.duration_since(last_update).as_secs() > 3 { + _ = handle.block_on(tx.send(())); + last_update = now; + } } + + _ => (), } - - _ => (), } + }, + Config::default(), + ); + + if let Ok(mut watcher) = watcher { + for path in cosmic::desktop::fde::default_paths() { + let _ = watcher.watch(path.as_ref(), RecursiveMode::Recursive); } - }, - Config::default(), - ); - if let Ok(mut watcher) = watcher { - for path in cosmic::desktop::fde::default_paths() { - let _ = watcher.watch(path.as_ref(), RecursiveMode::Recursive); + while rx.recv().await.is_some() { + _ = output.send(Event::Changed).await; + } } - while rx.recv().await.is_some() { - _ = output.send(Event::Changed).await; - } - } - - futures::future::pending().await - }), - ) + futures::future::pending().await + }, + ) + }) } diff --git a/cosmic-settings/src/subscription/wallpapers.rs b/cosmic-settings/src/subscription/wallpapers.rs index d709356..5e062b1 100644 --- a/cosmic-settings/src/subscription/wallpapers.rs +++ b/cosmic-settings/src/subscription/wallpapers.rs @@ -25,15 +25,16 @@ pub enum WallpaperEvent { } pub fn wallpapers(current_dir: PathBuf) -> cosmic::iced::Subscription { - Subscription::run_with_id( - current_dir.clone(), - stream::channel(2, |tx| async { + Subscription::run_with(current_dir, |current_dir: &PathBuf| { + let current_dir = current_dir.clone(); + stream::channel(2, move |tx: Sender| async move { + let current_dir = current_dir.clone(); if let Err(err) = inner(tx, current_dir).await { tracing::error!("Wallpapers subscription error: {:?}", err); } future::pending().await - }), - ) + }) + }) } async fn inner(tx: Sender, current_dir: PathBuf) -> anyhow::Result<()> { diff --git a/cosmic-settings/src/theme.rs b/cosmic-settings/src/theme.rs index ce465c0..241a376 100644 --- a/cosmic-settings/src/theme.rs +++ b/cosmic-settings/src/theme.rs @@ -17,6 +17,7 @@ pub fn display_container_frame() -> cosmic::theme::Container<'static> { width: 3.0, }, shadow: Default::default(), + snap: true, } }) } @@ -35,6 +36,7 @@ pub fn display_container_screen() -> cosmic::theme::Container<'static> { width: 0.0, }, shadow: Default::default(), + snap: true, } }) } diff --git a/cosmic-settings/src/widget/mod.rs b/cosmic-settings/src/widget/mod.rs index a9362e4..023add6 100644 --- a/cosmic-settings/src/widget/mod.rs +++ b/cosmic-settings/src/widget/mod.rs @@ -8,8 +8,9 @@ use cosmic::iced::{Alignment, Length}; use cosmic::iced_core::text::Wrapping; use cosmic::widget::color_picker::ColorPickerUpdate; use cosmic::widget::{ - self, ColorPickerModel, button, column, container, divider, horizontal_space, icon, row, - settings, text, vertical_space, + self, ColorPickerModel, button, column, container, divider, icon, row, settings, + space::{horizontal as horizontal_space, vertical as vertical_space}, + text, }; use cosmic::{Apply, Element, theme}; use cosmic_settings_page as page; @@ -150,10 +151,12 @@ pub fn page_list_item<'a, Message: 'static + Clone>( .padding([space_s, space_m]) .align_x(Alignment::Center) .class(theme::Container::List) + .width(Length::Fill) .apply(button::custom) .padding(0) .class(theme::Button::Transparent) .on_press(message) + .width(Length::Fill) .into() } @@ -190,9 +193,12 @@ pub fn go_next_item( horizontal_space().into(), icon::from_name("go-next-symbolic").size(16).icon().into(), ]) + .width(Length::Fill) .apply(widget::container) .class(cosmic::theme::Container::List) + .width(Length::Fill) .apply(button::custom) + .width(Length::Fill) .padding(0) .class(theme::Button::Transparent) .on_press_maybe(msg_opt.into()) @@ -214,10 +220,13 @@ pub fn go_next_with_item<'a, Msg: Clone + 'static>( .spacing(cosmic::theme::spacing().space_s) .into(), ]) + .width(Length::Fill) .apply(widget::container) .class(cosmic::theme::Container::List) + .width(Length::Fill) .apply(button::custom) .padding(0) + .width(Length::Fill) .class(theme::Button::Transparent) .on_press_maybe(msg_opt.into()) .into() diff --git a/subscriptions/accessibility/src/lib.rs b/subscriptions/accessibility/src/lib.rs index e9a4627..d4d6933 100644 --- a/subscriptions/accessibility/src/lib.rs +++ b/subscriptions/accessibility/src/lib.rs @@ -34,16 +34,18 @@ pub struct State { pub fn subscription() -> Subscription { struct MyId; - Subscription::run_with_id( - std::any::TypeId::of::(), - stream::channel(1, move |mut output| async move { - if let Some(state) = State::new(&mut output).await { - state.listen(&mut output).await; - } + Subscription::run_with(std::any::TypeId::of::(), |_| { + stream::channel( + 1, + move |mut output: futures::channel::mpsc::Sender| async move { + if let Some(state) = State::new(&mut output).await { + state.listen(&mut output).await; + } - futures::future::pending::<()>().await; - }), - ) + futures::future::pending::<()>().await; + }, + ) + }) } impl State { diff --git a/subscriptions/airplane-mode/src/lib.rs b/subscriptions/airplane-mode/src/lib.rs index 8a18ee1..1e326e7 100644 --- a/subscriptions/airplane-mode/src/lib.rs +++ b/subscriptions/airplane-mode/src/lib.rs @@ -6,8 +6,9 @@ use iced_futures::Subscription; use std::collections::HashMap; pub fn subscription() -> iced_futures::Subscription { - Subscription::run_with_id( - "airplane-mode", + struct MyId; + + Subscription::run_with(std::any::TypeId::of::(), |_| { async { match rfkill::rfkill_updates() { Ok(updates) => updates.filter_map(|state| async { @@ -25,8 +26,8 @@ pub fn subscription() -> iced_futures::Subscription { } } } - .flatten_stream(), - ) + .flatten_stream() + }) } // Test that: diff --git a/subscriptions/network-manager/src/active_conns.rs b/subscriptions/network-manager/src/active_conns.rs index 291dca5..e902b2a 100644 --- a/subscriptions/network-manager/src/active_conns.rs +++ b/subscriptions/network-manager/src/active_conns.rs @@ -1,6 +1,8 @@ // Copyright 2024 System76 // SPDX-License-Identifier: MPL-2.0 +use crate::Wrapper; + use super::Event; use cosmic_dbus_networkmanager::nm::NetworkManager; use futures::{SinkExt, StreamExt}; @@ -18,13 +20,13 @@ pub fn active_conns_subscription id: I, conn: Connection, ) -> iced_futures::Subscription { - Subscription::run_with_id( - id, + Subscription::run_with(Wrapper { id, conn: conn }, |Wrapper { id: _id, conn }| { + let conn = conn.clone(); stream::channel(50, move |output| async move { watch(conn, output).await; futures::future::pending().await - }), - ) + }) + }) } pub async fn watch(conn: zbus::Connection, mut output: futures::channel::mpsc::Sender) { diff --git a/subscriptions/network-manager/src/devices.rs b/subscriptions/network-manager/src/devices.rs index d111f2d..235b0b5 100644 --- a/subscriptions/network-manager/src/devices.rs +++ b/subscriptions/network-manager/src/devices.rs @@ -6,6 +6,7 @@ pub use cosmic_dbus_networkmanager::interface::enums::{ ActiveConnectionState, DeviceState, DeviceType, }; +use core::hash; use cosmic_dbus_networkmanager::nm::NetworkManager; use futures::{SinkExt, StreamExt}; use iced_futures::{self, Subscription, stream}; @@ -166,12 +167,35 @@ pub fn subscription( has_popup: bool, conn: Connection, ) -> iced_futures::Subscription { - Subscription::run_with_id( - (id, has_popup), - stream::channel(50, move |output| async move { - watch(conn, has_popup, output).await; - futures::future::pending().await - }), + struct Wrapper { + id: I, + has_popup: bool, + conn: Connection, + } + impl Hash for Wrapper { + fn hash(&self, state: &mut H) { + self.id.hash(state); + self.has_popup.hash(state); + } + } + Subscription::run_with( + Wrapper { + id, + has_popup, + conn, + }, + |Wrapper { + id, + has_popup, + conn, + }| { + let conn = conn.clone(); + let has_popup = *has_popup; + stream::channel(50, move |output| async move { + watch(conn, has_popup, output).await; + futures::future::pending().await + }) + }, ) } diff --git a/subscriptions/network-manager/src/lib.rs b/subscriptions/network-manager/src/lib.rs index e1b6ca4..631eda9 100644 --- a/subscriptions/network-manager/src/lib.rs +++ b/subscriptions/network-manager/src/lib.rs @@ -9,7 +9,7 @@ pub mod hw_address; pub mod nm_secret_agent; pub mod wireless_enabled; -use std::{collections::HashMap, fmt::Debug, sync::Arc, time::Duration}; +use std::{collections::HashMap, fmt::Debug, hash::Hash, sync::Arc, time::Duration}; use available_wifi::NetworkType; pub use cosmic_dbus_networkmanager as dbus; @@ -41,6 +41,17 @@ use self::{ pub type SSID = Arc; pub type UUID = Arc; +pub(crate) struct Wrapper { + id: I, + conn: zbus::Connection, +} + +impl Hash for Wrapper { + fn hash(&self, state: &mut H) { + self.id.hash(state); + } +} + #[derive(thiserror::Error, Debug)] pub enum Error { #[error("failed to list bluetooth devices with rfkill")] @@ -121,13 +132,25 @@ pub fn subscription( id: I, conn: zbus::Connection, ) -> iced_futures::Subscription { - Subscription::run_with_id( - id, - stream::channel(50, |output| async move { - watch(conn, output).await; - futures::future::pending().await - }), - ) + struct Wrapper { + id: I, + conn: zbus::Connection, + } + impl Hash for Wrapper { + fn hash(&self, state: &mut H) { + self.id.hash(state); + } + } + Subscription::run_with(Wrapper { id, conn }, |Wrapper { id, conn }| { + let conn = conn.clone(); + stream::channel( + 50, + |output: futures::channel::mpsc::Sender| async move { + watch(conn, output).await; + futures::future::pending().await + }, + ) + }) } pub async fn watch(conn: zbus::Connection, mut output: futures::channel::mpsc::Sender) { diff --git a/subscriptions/network-manager/src/nm_secret_agent.rs b/subscriptions/network-manager/src/nm_secret_agent.rs index d79cb16..fa697c9 100644 --- a/subscriptions/network-manager/src/nm_secret_agent.rs +++ b/subscriptions/network-manager/src/nm_secret_agent.rs @@ -135,11 +135,15 @@ pub fn secret_agent_stream( identifier: impl AsRef, rx: tokio::sync::mpsc::Receiver, ) -> impl Stream { - iced_futures::stream::channel(4, move |mut msg_tx| async move { - if let Err(e) = secret_agent_stream_impl(identifier.as_ref(), msg_tx.clone(), rx).await { - let _ = msg_tx.send(Event::Failed(e)).await; - } - }) + iced_futures::stream::channel( + 4, + move |mut msg_tx: futures::channel::mpsc::Sender| async move { + if let Err(e) = secret_agent_stream_impl(identifier.as_ref(), msg_tx.clone(), rx).await + { + let _ = msg_tx.send(Event::Failed(e)).await; + } + }, + ) } async fn secret_agent_stream_impl( diff --git a/subscriptions/network-manager/src/wireless_enabled.rs b/subscriptions/network-manager/src/wireless_enabled.rs index d028093..5ad940d 100644 --- a/subscriptions/network-manager/src/wireless_enabled.rs +++ b/subscriptions/network-manager/src/wireless_enabled.rs @@ -1,6 +1,8 @@ // Copyright 2024 System76 // SPDX-License-Identifier: MPL-2.0 +use crate::Wrapper; + use super::Event; use cosmic_dbus_networkmanager::nm::NetworkManager; use futures::{SinkExt, StreamExt}; @@ -18,13 +20,13 @@ pub fn wireless_enabled_subscription iced_futures::Subscription { - Subscription::run_with_id( - id, + Subscription::run_with(Wrapper { id, conn: conn }, |Wrapper { id: _id, conn }| { + let conn = conn.clone(); stream::channel(50, move |output| async move { watch(conn, output).await; futures::future::pending().await - }), - ) + }) + }) } pub async fn watch(conn: zbus::Connection, mut output: futures::channel::mpsc::Sender) { diff --git a/subscriptions/pulse/Cargo.toml b/subscriptions/pulse/Cargo.toml new file mode 100644 index 0000000..cc4760b --- /dev/null +++ b/subscriptions/pulse/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "cosmic-settings-pulse-subscription" +version = "0.1.0" +edition = "2024" +rust-version.workspace = true + +[dependencies] +libpulse-binding = { version = "2.30.1" } +rustix = { version = "1.1.3", features = ["pipe"] } +iced_futures = { git = "https://github.com/pop-os/libcosmic" } +futures = "0.3.32" +log = "0.4.27" diff --git a/subscriptions/pulse/src/lib.rs b/subscriptions/pulse/src/lib.rs new file mode 100644 index 0000000..4220765 --- /dev/null +++ b/subscriptions/pulse/src/lib.rs @@ -0,0 +1,751 @@ +// Copyright 2024 System76 +// SPDX-License-Identifier: MPL-2.0 + +// Make sure not to fail if pulse not found, and reconnect? +// change to device shouldn't send osd? + +use futures::{SinkExt, executor::block_on}; +use iced_futures::{Subscription, stream}; +use libpulse_binding::{ + callbacks::ListResult, + channelmap::Map, + context::{ + Context, FlagSet, State, + introspect::{CardInfo, CardProfileInfo, Introspector, ServerInfo, SinkInfo, SourceInfo}, + subscribe::{Facility, InterestMaskSet, Operation}, + }, + def::{PortAvailable, Retval}, + mainloop::{ + api::MainloopApi, + events::io::IoEventInternal, + standard::{IterateResult, Mainloop}, + }, + volume::{ChannelVolumes, Volume}, +}; +use std::{ + borrow::Cow, + cell::{Cell, RefCell}, + convert::Infallible, + io::{Read, Write}, + os::{ + fd::{FromRawFd, IntoRawFd, RawFd}, + raw::c_void, + }, + rc::Rc, + str::FromStr, + sync::mpsc, +}; + +pub fn subscription() -> iced_futures::Subscription { + Subscription::run_with("pulse", |_| { + stream::channel(20, |sender| async { + std::thread::spawn(move || thread(sender)); + futures::future::pending().await + }) + }) +} + +pub fn thread(sender: futures::channel::mpsc::Sender) { + let Some(mut main_loop) = Mainloop::new() else { + log::error!("Failed to create PA main loop"); + return; + }; + + let Some(mut context) = Context::new(&main_loop, "cosmic-osd") else { + log::error!("Failed to create PA context"); + return; + }; + + let data = Rc::new(Data { + main_loop: RefCell::new(Mainloop { + _inner: Rc::clone(&main_loop._inner), + }), + introspector: context.introspect(), + sink_volume: Cell::new(None), + sink_mute: Cell::new(None), + source_volume: Cell::new(None), + source_mute: Cell::new(None), + default_sink_name: RefCell::new(None), + default_source_name: RefCell::new(None), + sender: RefCell::new(sender.clone()), + }); + + let data_clone = data.clone(); + context.set_subscribe_callback(Some(Box::new(move |facility, operation, index| { + data_clone.subscribe_cb(facility.unwrap(), operation, index); + }))); + + let _ = context.connect(None, FlagSet::NOFAIL, None); + + loop { + if sender.is_closed() { + return; + } + + match main_loop.iterate(false) { + IterateResult::Success(_) => {} + IterateResult::Err(_e) => { + return; + } + IterateResult::Quit(_e) => { + return; + } + } + + if context.get_state() == State::Ready { + break; + } + } + + // Inspect all available cards on startup + data.introspector.get_card_info_list({ + let data_weak = Rc::downgrade(&data); + move |card_info_res| { + if let Some(data) = data_weak.upgrade() { + data.card_info_cb(card_info_res) + } + } + }); + + data.get_server_info(); + context.subscribe( + InterestMaskSet::SERVER | InterestMaskSet::SINK | InterestMaskSet::SOURCE, + |_| {}, + ); + + if let Err((err, retval)) = main_loop.run() { + log::error!("PA main loop returned {:?}, error {}", retval, err); + } +} + +#[derive(Clone, Debug)] +pub enum Event { + Balance(Option), + CardInfo(Card), + DefaultSink(String), + DefaultSource(String), + SinkVolume(u32), + Channels(PulseChannels), + SinkMute(bool), + SourceVolume(u32), + SourceMute(bool), +} + +enum Request { + Volume(u32, f32), + Balance(u32, f32), + Quit, +} + +#[derive(Debug)] +pub struct PulseChannels { + tx: mpsc::Sender, + pipe_tx: std::fs::File, + index: u32, +} + +impl Clone for PulseChannels { + fn clone(&self) -> Self { + Self { + tx: self.tx.clone(), + pipe_tx: self + .pipe_tx + .try_clone() + .expect("failed to clone PulseChannels pipe writer"), + index: self.index, + } + } +} + +/// Data used by the [`handle_balance_io_new`] callback. +struct HandleBalanceData( + Context, + ChannelVolumes, + Map, + std::sync::mpsc::Receiver, +); + +/// Callback for creating an IO event source [`MainloopApi::io_new`]. +extern "C" fn handle_balance_io_new( + api: *const MainloopApi, + event: *mut IoEventInternal, + reader_fd: RawFd, + _flags: libpulse_binding::mainloop::events::io::FlagSet, + data: *mut c_void, +) { + // Take ownership of the data and borrow its contents. + let mut data = unsafe { Box::::from_raw(data as _) }; + let HandleBalanceData(ctx, volumes, map, rx) = data.as_mut(); + + // Return early if the context is not ready, and give the data back. + if ctx.get_state() != State::Ready { + let _ = Box::leak(data); + return; + } + + // If the first byte cannot be read, destroy this event source with its reader and data. + let mut buf = [0u8; 1]; + let mut reader = unsafe { std::fs::File::from_raw_fd(reader_fd) }; + if reader.read_exact(&mut buf).is_err() { + (unsafe { &*api }) + .io_free + .as_ref() + .expect("io_free function is missing")(event); + return; + } + + // Give ownership of the reader back. + _ = reader.into_raw_fd(); + + while let Ok(req) = rx.try_recv() { + match req { + Request::Volume(index, volume_scale) => { + let mut intro = ctx.introspect(); + + let new_scale = Volume((volume_scale * Volume::NORMAL.0 as f32).round() as u32); + + if let Some(v) = volumes.scale(new_scale) { + _ = intro.set_sink_volume_by_index( + index, + v, + Some(Box::new(|success| { + if !success { + log::error!("Failed to set sink balance"); + } + })), + ); + } + } + Request::Balance(index, new_balance) => { + if map.can_balance() { + if let Some(v) = volumes.set_balance(&map, new_balance) { + let mut intro = ctx.introspect(); + + _ = intro.set_sink_volume_by_index( + index, + v, + Some(Box::new(|success| { + if !success { + log::error!("Failed to set sink balance"); + } + })), + ); + } + } + } + Request::Quit => unsafe { &*api } + .quit + .as_ref() + .expect("quit function missing")(api, 0), + } + } + + let _ = Box::leak(data); +} + +impl PulseChannels { + fn new( + volumes: ChannelVolumes, + map: Map, + api: &MainloopApi, + index: u32, + ctx: Context, + ) -> PulseChannels { + let (reader, writer) = rustix::pipe::pipe_with(rustix::pipe::PipeFlags::CLOEXEC) + .expect("failed to crate pipe"); + + let (tx, rx) = mpsc::channel::(); + + // Create IO event source object for handling speaker balance. + let event_source = api.io_new.as_ref().unwrap()( + api as *const _, + reader.into_raw_fd(), + libpulse_binding::mainloop::events::io::FlagSet::INPUT, + Some(handle_balance_io_new), + Box::into_raw(Box::new(HandleBalanceData(ctx, volumes, map, rx))) as *mut c_void, + ); + + if let Some(enable) = api.io_enable.as_ref() { + enable( + event_source, + libpulse_binding::mainloop::events::io::FlagSet::INPUT, + ); + } + + Self { + tx, + pipe_tx: std::fs::File::from(writer), + index, + } + } + + /// Change the active index. + #[inline] + pub fn set_index(&mut self, index: u32) { + self.index = index; + } + + /// Set the speaker balance of the active sink. + pub fn set_balance(&mut self, balance: f32) { + if let Err(err) = self.tx.send(Request::Balance(self.index, balance)) { + log::error!("Failed to send new balance to channel"); + } else { + self.pipe_tx + .write_all(&[1]) + .expect("PulseChannels pipe write failed"); + } + } + + /// Set the volume of the active sink. + pub fn set_volume(&mut self, volume: f32) { + if let Err(err) = self.tx.send(Request::Volume(self.index, volume)) { + log::error!("Failed to send new volume to channel"); + } else { + self.pipe_tx + .write_all(&[1]) + .expect("PulseChannels pipe write failed"); + } + } + + /// Request the pulse thread to quit. + pub fn quit(mut self) { + _ = self.tx.send(Request::Quit); + _ = self.pipe_tx.write_all(&[1]); + } +} + +#[derive(Clone, Debug, Hash, Eq, PartialEq)] +pub struct Card { + pub object_id: u32, + pub name: String, + pub product_name: String, + pub variant: DeviceVariant, + pub ports: Vec, + pub profiles: Vec, + pub active_profile: Option, +} + +#[derive(Clone, Debug, Hash, Eq, PartialEq)] +pub struct CardPort { + pub name: String, + pub description: String, + pub direction: Direction, + pub port_type: PortType, + pub profile_port: u32, + pub priority: u32, + pub profiles: Vec, + pub availability: Availability, +} + +#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] +pub enum Availability { + Unknown, + No, + Yes, +} + +impl From for Availability { + fn from(pa: PortAvailable) -> Self { + match pa { + PortAvailable::Unknown => Availability::Unknown, + PortAvailable::No => Availability::No, + PortAvailable::Yes => Availability::Yes, + } + } +} + +#[derive(Clone, Debug, Hash, Eq, PartialEq)] +pub struct CardProfile { + pub name: String, + pub description: String, + pub available: bool, + pub n_sinks: u32, + pub n_sources: u32, + pub priority: u32, +} + +#[derive(Clone, Debug, Hash, Eq, PartialEq)] +pub enum DeviceVariant { + Alsa { alsa_card: u32 }, + Bluez5 { address: String }, +} + +#[derive(Clone, Debug, Hash, Eq, PartialEq)] +pub enum Direction { + Input, + Output, + Both, +} + +#[derive(Default, Clone, Debug, Hash, Eq, PartialEq)] +pub enum PortType { + Mic, + Speaker, + Headphones, + Headset, + Digital, + #[default] + Unknown, +} + +impl FromStr for PortType { + type Err = Infallible; + + fn from_str(s: &str) -> Result { + match s { + "mic" => Ok(PortType::Mic), + "speaker" => Ok(PortType::Speaker), + "headphones" => Ok(PortType::Headphones), + "headset" => Ok(PortType::Headset), + "digital" => Ok(PortType::Digital), + _ => Ok(PortType::Unknown), + } + } +} + +struct Data { + main_loop: RefCell, + default_sink_name: RefCell>, + default_source_name: RefCell>, + sink_volume: Cell>, + sink_mute: Cell>, + source_volume: Cell>, + source_mute: Cell>, + introspector: Introspector, + sender: RefCell>, +} + +impl Data { + fn card_info_cb(self: &Rc, card_info: ListResult<&CardInfo>) { + if let ListResult::Item(card_info) = card_info { + let Some(object_id) = card_info + .proplist + .get_str("object.id") + .and_then(|v| v.parse::().ok()) + else { + return; + }; + + let variant = if let Some(alsa_card) = card_info + .proplist + .get_str("alsa.card") + .and_then(|v| v.parse::().ok()) + { + DeviceVariant::Alsa { alsa_card } + } else if let Some(address) = card_info.proplist.get_str("api.bluez5.address") { + DeviceVariant::Bluez5 { address } + } else { + return; + }; + + let card = Card { + name: card_info + .name + .as_ref() + .map(Cow::to_string) + .unwrap_or_default(), + product_name: card_info + .proplist + .get_str("device.product.name") + .unwrap_or_default(), + object_id, + variant, + ports: card_info + .ports + .iter() + .map(|port| CardPort { + name: port.name.as_ref().map(Cow::to_string).unwrap_or_default(), + description: port + .description + .as_ref() + .map(Cow::to_string) + .unwrap_or_default(), + direction: match port.direction.bits() { + x if x == libpulse_binding::direction::FlagSet::INPUT.bits() => { + Direction::Input + } + x if x == libpulse_binding::direction::FlagSet::OUTPUT.bits() => { + Direction::Output + } + _ => Direction::Both, + }, + port_type: port + .proplist + .get_str("port.type") + .as_deref() + .map(|s| PortType::from_str(s).unwrap()) + .unwrap_or_default(), + profile_port: port + .proplist + .get_str("card.profile.port") + .and_then(|v| v.parse::().ok()) + .unwrap_or(0), + priority: port.priority, + profiles: collect_profiles(&port.profiles), + availability: port.available.into(), + }) + .collect(), + profiles: collect_profiles(&card_info.profiles), + active_profile: card_info.active_profile.as_deref().map(CardProfile::from), + }; + + if block_on(self.sender.borrow_mut().send(Event::CardInfo(card))).is_err() { + self.main_loop.borrow_mut().quit(Retval(0)); + } + } + } + + fn server_info_cb(self: &Rc, server_info: &ServerInfo) { + let new_default_sink_name = server_info + .default_sink_name + .as_ref() + .map(|x| x.clone().into_owned()); + let mut default_sink_name = self.default_sink_name.borrow_mut(); + if new_default_sink_name != *default_sink_name { + if let Some(name) = &new_default_sink_name { + _ = block_on( + self.sender + .borrow_mut() + .send(Event::DefaultSink(name.clone())), + ); + self.get_sink_info_by_name(name); + } + *default_sink_name = new_default_sink_name; + } + + let new_default_source_name = server_info + .default_source_name + .as_ref() + .map(|x| x.clone().into_owned()); + let mut default_source_name = self.default_source_name.borrow_mut(); + if new_default_source_name != *default_source_name { + if let Some(name) = &new_default_source_name { + _ = block_on( + self.sender + .borrow_mut() + .send(Event::DefaultSource(name.clone())), + ); + self.get_source_info_by_name(name); + } + *default_source_name = new_default_source_name; + } + } + + fn get_server_info(self: &Rc) { + let data = self.clone(); + self.introspector + .get_server_info(move |server_info| data.server_info_cb(server_info)); + } + + fn sink_info_cb(&self, sink_info_res: ListResult<&SinkInfo>) { + if let ListResult::Item(sink_info) = sink_info_res { + if sink_info.name.as_deref() != self.default_sink_name.borrow().as_deref() { + return; + } + let balance = (sink_info.channel_map.can_balance() + && sink_info.base_volume.is_normal()) + .then(|| sink_info.volume.get_balance(&sink_info.channel_map)); + + let volume = sink_info.volume.max().0 / (Volume::NORMAL.0 / 100); + if self.sink_mute.get() != Some(sink_info.mute) { + self.sink_mute.set(Some(sink_info.mute)); + if block_on( + self.sender + .borrow_mut() + .send(Event::SinkMute(sink_info.mute)), + ) + .is_err() + { + self.main_loop.borrow_mut().quit(Retval(0)); + } + } + if self.sink_volume.get() != Some(volume) { + self.sink_volume.set(Some(volume)); + if block_on(self.sender.borrow_mut().send(Event::SinkVolume(volume))).is_err() { + self.main_loop.borrow_mut().quit(Retval(0)); + } + } + if block_on(self.sender.borrow_mut().send(Event::Balance(balance))).is_err() { + self.main_loop.borrow_mut().quit(Retval(0)); + } + let mut main_loop = self.main_loop.borrow_mut(); + let api = main_loop.get_api(); + if let Some(mut ctx) = Context::new(&*main_loop, "balance") { + let _ = ctx.connect(None, FlagSet::NOFAIL, None); + + let channels = PulseChannels::new( + sink_info.volume, + sink_info.channel_map, + api, + sink_info.index, + ctx, + ); + + if block_on(self.sender.borrow_mut().send(Event::Channels(channels))).is_err() { + main_loop.quit(Retval(0)); + } + } + } + } + + fn source_info_cb(&self, source_info_res: ListResult<&SourceInfo>) { + if let ListResult::Item(source_info) = source_info_res { + if source_info.name.as_deref() != self.default_source_name.borrow().as_deref() { + return; + } + let volume = source_info.volume.max().0 / (Volume::NORMAL.0 / 100); + if self.source_mute.get() != Some(source_info.mute) { + self.source_mute.set(Some(source_info.mute)); + if block_on( + self.sender + .borrow_mut() + .send(Event::SourceMute(source_info.mute)), + ) + .is_err() + { + self.main_loop.borrow_mut().quit(Retval(0)); + } + } + if self.source_volume.get() != Some(volume) { + self.source_volume.set(Some(volume)); + if block_on(self.sender.borrow_mut().send(Event::SourceVolume(volume))).is_err() { + self.main_loop.borrow_mut().quit(Retval(0)); + } + } + } + } + + fn get_card_info_by_index(self: &Rc, index: u32) { + let data = self.clone(); + self.introspector + .get_card_info_by_index(index, move |card_info_res| { + data.card_info_cb(card_info_res); + }); + } + + fn get_sink_info_by_index(self: &Rc, index: u32) { + let data = self.clone(); + self.introspector.get_sink_info_by_index( + index, + move |sink_info_res: ListResult<&SinkInfo<'_>>| { + if let ListResult::Item(ref info) = sink_info_res { + if let Some(card_index) = info.card { + let data_clone = data.clone(); + data.introspector.get_card_info_by_index( + card_index, + move |card_info_res| { + data_clone.card_info_cb(card_info_res); + }, + ); + } + } + data.sink_info_cb(sink_info_res); + }, + ); + } + + fn get_sink_info_by_name(self: &Rc, name: &str) { + let data = self.clone(); + self.introspector + .get_sink_info_by_name(name, move |sink_info_res| { + if let ListResult::Item(ref info) = sink_info_res { + if let Some(card_index) = info.card { + let data_clone = data.clone(); + data.introspector.get_card_info_by_index( + card_index, + move |card_info_res| { + data_clone.card_info_cb(card_info_res); + }, + ); + } + } + data.sink_info_cb(sink_info_res); + }); + } + + fn get_source_info_by_index(self: &Rc, index: u32) { + let data = self.clone(); + self.introspector + .get_source_info_by_index(index, move |source_info_res| { + if let ListResult::Item(ref info) = source_info_res { + if let Some(card_index) = info.card { + let data_clone = data.clone(); + data.introspector.get_card_info_by_index( + card_index, + move |card_info_res| { + data_clone.card_info_cb(card_info_res); + }, + ); + } + } + data.source_info_cb(source_info_res); + }); + } + + fn get_source_info_by_name(self: &Rc, name: &str) { + let data = self.clone(); + self.introspector + .get_source_info_by_name(name, move |source_info_res| { + if let ListResult::Item(ref info) = source_info_res { + if let Some(card_index) = info.card { + let data_clone = data.clone(); + data.introspector.get_card_info_by_index( + card_index, + move |card_info_res| { + data_clone.card_info_cb(card_info_res); + }, + ); + } + } + data.source_info_cb(source_info_res); + }); + } + + fn subscribe_cb( + self: &Rc, + facility: Facility, + _operation: Option, + index: u32, + ) { + match facility { + Facility::Server => { + self.get_server_info(); + } + Facility::Sink => { + self.get_sink_info_by_index(index); + } + Facility::Source => { + self.get_source_info_by_index(index); + } + Facility::Card => { + self.get_card_info_by_index(index); + } + _ => {} + } + } +} + +fn collect_profiles(profiles: &[CardProfileInfo]) -> Vec { + profiles.iter().map(CardProfile::from).collect() +} + +impl From<&CardProfileInfo<'_>> for CardProfile { + fn from(profile: &CardProfileInfo) -> Self { + CardProfile { + name: profile + .name + .as_ref() + .map(Cow::to_string) + .unwrap_or_default(), + description: profile + .description + .as_ref() + .map(Cow::to_string) + .unwrap_or_default(), + available: profile.available, + n_sinks: profile.n_sinks, + n_sources: profile.n_sources, + priority: profile.priority, + } + } +} diff --git a/subscriptions/settings-daemon/src/lib.rs b/subscriptions/settings-daemon/src/lib.rs index 5438593..313bfb6 100644 --- a/subscriptions/settings-daemon/src/lib.rs +++ b/subscriptions/settings-daemon/src/lib.rs @@ -3,53 +3,76 @@ // XXX error handling? +use std::hash::Hash; + use futures::{FutureExt, StreamExt}; use iced_futures::Subscription; use tokio::sync::mpsc::{UnboundedSender, unbounded_channel}; use tokio_stream::wrappers::UnboundedReceiverStream; +pub(crate) struct Wrapper { + id: &'static str, + conn: zbus::Connection, +} + +impl Hash for Wrapper { + fn hash(&self, state: &mut H) { + self.id.hash(state); + } +} + pub fn subscription(connection: zbus::Connection) -> iced_futures::Subscription { - Subscription::run_with_id( - "settings-daemon", - async move { - let settings_daemon = match CosmicSettingsDaemonProxy::new(&connection).await { - Ok(value) => value, - Err(err) => { - log::error!("Error connecting to settings daemon: {}", err); - futures::future::pending().await - } - }; - - let (tx, rx) = unbounded_channel(); - - let max_brightness_stream = settings_daemon - .receive_max_display_brightness_changed() - .await; - let brightness_stream = settings_daemon.receive_display_brightness_changed().await; - - let initial = futures::stream::iter([Event::Sender(tx)]); - - initial.chain(futures::stream_select!( - Box::pin(UnboundedReceiverStream::new(rx).filter_map(move |request| { - let settings_daemon = settings_daemon.clone(); - async move { - match request { - Request::SetDisplayBrightness(brightness) => { - let _ = settings_daemon.set_display_brightness(brightness).await; - } - } - None:: + Subscription::run_with( + Wrapper { + id: "settings-daemon", + conn: connection, + }, + |Wrapper { + id: _id, + conn: connection, + }| { + let connection = connection.clone(); + async move { + let settings_daemon = match CosmicSettingsDaemonProxy::new(&connection).await { + Ok(value) => value, + Err(err) => { + log::error!("Error connecting to settings daemon: {}", err); + futures::future::pending().await } - })), - Box::pin(max_brightness_stream.filter_map(|evt| async move { - Some(Event::MaxDisplayBrightness(evt.get().await.ok()?)) - })), - Box::pin(brightness_stream.filter_map(|evt| async move { - Some(Event::DisplayBrightness(evt.get().await.ok()?)) - })) - )) - } - .flatten_stream(), + }; + + let (tx, rx) = unbounded_channel(); + + let max_brightness_stream = settings_daemon + .receive_max_display_brightness_changed() + .await; + let brightness_stream = settings_daemon.receive_display_brightness_changed().await; + + let initial = futures::stream::iter([Event::Sender(tx)]); + + initial.chain(futures::stream_select!( + Box::pin(UnboundedReceiverStream::new(rx).filter_map(move |request| { + let settings_daemon = settings_daemon.clone(); + async move { + match request { + Request::SetDisplayBrightness(brightness) => { + let _ = + settings_daemon.set_display_brightness(brightness).await; + } + } + None:: + } + })), + Box::pin(max_brightness_stream.filter_map(|evt| async move { + Some(Event::MaxDisplayBrightness(evt.get().await.ok()?)) + })), + Box::pin(brightness_stream.filter_map(|evt| async move { + Some(Event::DisplayBrightness(evt.get().await.ok()?)) + })) + )) + } + .flatten_stream() + }, ) } diff --git a/subscriptions/sound/src/lib.rs b/subscriptions/sound/src/lib.rs index 589065a..e1b9e39 100644 --- a/subscriptions/sound/src/lib.rs +++ b/subscriptions/sound/src/lib.rs @@ -19,36 +19,39 @@ pub type ProfileId = i32; pub type RouteId = u32; pub fn watch() -> impl Stream + MaybeSend + 'static { - cosmic::iced_futures::stream::channel(1, |mut emitter| async move { - loop { - let (cancel_tx, cancel_rx) = futures::channel::oneshot::channel::<()>(); - let sender = Arc::new((Mutex::new(Vec::new()), tokio::sync::Notify::const_new())); - let receiver = sender.clone(); + cosmic::iced_futures::stream::channel( + 1, + |mut emitter: futures::channel::mpsc::Sender| async move { + loop { + let (cancel_tx, cancel_rx) = futures::channel::oneshot::channel::<()>(); + let sender = Arc::new((Mutex::new(Vec::new()), tokio::sync::Notify::const_new())); + let receiver = sender.clone(); - _ = emitter - .send(Message::SubHandle(Arc::new(SubscriptionHandle { - cancel_tx, - pipewire: pipewire::run(move |event| { - sender.0.lock().unwrap().push(event); - sender.1.notify_one(); - }), - }))) - .await; + _ = emitter + .send(Message::SubHandle(Arc::new(SubscriptionHandle { + cancel_tx, + pipewire: pipewire::run(move |event| { + sender.0.lock().unwrap().push(event); + sender.1.notify_one(); + }), + }))) + .await; - let forwarder = Box::pin(async { - loop { - _ = receiver.1.notified().await; - let events = std::mem::take(&mut *receiver.0.lock().unwrap()); - if !events.is_empty() { - _ = emitter.send(Message::Server(Arc::from(events))).await; - tokio::time::sleep(Duration::from_millis(64)).await; + let forwarder = Box::pin(async { + loop { + _ = receiver.1.notified().await; + let events = std::mem::take(&mut *receiver.0.lock().unwrap()); + if !events.is_empty() { + _ = emitter.send(Message::Server(Arc::from(events))).await; + tokio::time::sleep(Duration::from_millis(64)).await; + } } - } - }); + }); - futures::future::select(cancel_rx, forwarder).await; - } - }) + futures::future::select(cancel_rx, forwarder).await; + } + }, + ) } #[derive(Default)] diff --git a/subscriptions/upower/src/lib.rs b/subscriptions/upower/src/lib.rs index 5612c44..e594774 100644 --- a/subscriptions/upower/src/lib.rs +++ b/subscriptions/upower/src/lib.rs @@ -10,8 +10,7 @@ pub mod device { pub fn device_subscription( id: I, ) -> iced_futures::Subscription { - Subscription::run_with_id( - id, + Subscription::run_with(id, |_| { async move { match events().await { Ok(stream) => stream, @@ -21,8 +20,8 @@ pub mod device { } } } - .flatten_stream(), - ) + .flatten_stream() + }) } async fn display_device() -> zbus::Result<(UPowerProxy<'static>, DeviceProxy<'static>)> { @@ -106,8 +105,7 @@ pub mod kbdbacklight { pub fn kbd_backlight_subscription( id: I, ) -> iced_futures::Subscription { - Subscription::run_with_id( - id, + Subscription::run_with(id, |_| { async move { match events().await { Ok(stream) => stream, @@ -117,8 +115,8 @@ pub mod kbdbacklight { } } } - .flatten_stream(), - ) + .flatten_stream() + }) } enum Event {