diff --git a/.gitignore b/.gitignore index 3978425d..5c0031bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Cargo -.cargo. +.cargo target/ build/ _build/ diff --git a/Cargo.lock b/Cargo.lock index 92a6dba5..bfae154b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -115,9 +115,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.80" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] name = "apply" @@ -583,9 +583,9 @@ checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" [[package]] name = "bytemuck" -version = "1.14.3" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" +checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" dependencies = [ "bytemuck_derive", ] @@ -854,7 +854,7 @@ dependencies = [ "futures-util", "i18n-embed 0.13.9", "i18n-embed-fl 0.6.7", - "itertools 0.10.5", + "itertools 0.12.1", "libcosmic", "log", "nix 0.26.4", @@ -937,6 +937,7 @@ dependencies = [ "rust-embed 6.8.1", "slotmap", "tokio", + "tracing", "tracing-log", "tracing-subscriber", ] @@ -981,6 +982,7 @@ dependencies = [ "rust-embed-utils 7.8.1", "slotmap", "tokio", + "tracing", "tracing-log", "tracing-subscriber", "zbus", @@ -1027,6 +1029,9 @@ dependencies = [ "rust-embed 6.8.1", "rust-embed-utils 7.8.1", "tokio", + "tracing", + "tracing-log", + "tracing-subscriber", "zbus", ] @@ -1038,6 +1043,9 @@ dependencies = [ "libcosmic", "serde", "tokio", + "tracing", + "tracing-log", + "tracing-subscriber", "zbus", ] @@ -1057,6 +1065,8 @@ dependencies = [ "rust-embed 8.3.0", "tokio", "tracing", + "tracing-log", + "tracing-subscriber", ] [[package]] @@ -1073,6 +1083,8 @@ dependencies = [ "rust-embed 6.8.1", "tokio", "tracing", + "tracing-log", + "tracing-subscriber", ] [[package]] @@ -1096,6 +1108,28 @@ dependencies = [ "xdg", ] +[[package]] +name = "cosmic-applets" +version = "0.1.1" +dependencies = [ + "cosmic-app-list", + "cosmic-applet-audio", + "cosmic-applet-battery", + "cosmic-applet-bluetooth", + "cosmic-applet-minimize", + "cosmic-applet-network", + "cosmic-applet-notifications", + "cosmic-applet-power", + "cosmic-applet-status-area", + "cosmic-applet-tiling", + "cosmic-applet-time", + "cosmic-applet-workspaces", + "libcosmic", + "tracing", + "tracing-log", + "tracing-subscriber", +] + [[package]] name = "cosmic-client-toolkit" version = "0.1.0" @@ -1119,7 +1153,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1139,7 +1173,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "quote", "syn 1.0.109", @@ -1192,7 +1226,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#07fcaee64f80d9aa498be53d40077bc0a510437b" +source = "git+https://github.com/pop-os/cosmic-panel#f3fd857536bf8947a2ac765b01ed7078f452a767" dependencies = [ "anyhow", "cosmic-config", @@ -1250,7 +1284,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "almost", "cosmic-config", @@ -2782,7 +2816,7 @@ dependencies = [ [[package]] name = "iced" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "iced_accessibility", "iced_core", @@ -2797,7 +2831,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "accesskit", "accesskit_unix", @@ -2806,7 +2840,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "bitflags 1.3.2", "iced_accessibility", @@ -2825,7 +2859,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "futures", "iced_core", @@ -2838,7 +2872,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "bitflags 1.3.2", "bytemuck", @@ -2862,7 +2896,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2874,7 +2908,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "iced_accessibility", "iced_core", @@ -2886,7 +2920,7 @@ dependencies = [ [[package]] name = "iced_sctk" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "enum-repr", "float-cmp", @@ -2911,7 +2945,7 @@ dependencies = [ [[package]] name = "iced_style" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "iced_core", "once_cell", @@ -2921,7 +2955,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "bytemuck", "cosmic-text", @@ -2938,7 +2972,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "bitflags 1.3.2", "bytemuck", @@ -2957,7 +2991,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "iced_renderer", "iced_runtime", @@ -3242,7 +3276,7 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic#64ecb0ea48f262e13b1036757211b70432fd42e5" +source = "git+https://github.com/pop-os/libcosmic#bf331cad7ff2512b01e31ea593f885932166b0e7" dependencies = [ "apply", "ashpd 0.7.0", @@ -4234,9 +4268,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] @@ -4379,9 +4413,9 @@ checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" [[package]] name = "read-fonts" -version = "0.15.6" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea23eedb4d938031b6d4343222444608727a6aa68ec355e13588d9947ffe92" +checksum = "81c524658d3b77930a391f559756d91dbe829ab6cf4687083f615d395df99722" dependencies = [ "font-types", ] @@ -5042,9 +5076,9 @@ dependencies = [ [[package]] name = "swash" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06ff4664af8923625604261c645f5c4cc610cc83c84bec74b50d76237089de7" +checksum = "9af636fb90d39858650cae1088a37e2862dab4e874a0bb49d6dfb5b2dacf0e24" dependencies = [ "read-fonts", "yazi", @@ -5104,9 +5138,9 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.2.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +checksum = "e8e9199467bcbc77c6a13cc6e32a6af21721ab8c96aa0261856c4fda5a4433f0" dependencies = [ "cfg-expr", "heck", @@ -5161,18 +5195,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 41a6b3bf..479e888b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,8 @@ [workspace] - +default-members = ["cosmic-applets", "cosmic-panel-button"] members = [ "cosmic-app-list", + "cosmic-applets", "cosmic-applet-audio", "cosmic-applet-battery", "cosmic-applet-bluetooth", diff --git a/cosmic-app-list/src/lib.rs b/cosmic-app-list/src/lib.rs new file mode 100644 index 00000000..3bd675f5 --- /dev/null +++ b/cosmic-app-list/src/lib.rs @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MPL-2.0-only +mod app; +mod config; +mod localize; +mod wayland_handler; +mod wayland_subscription; + +use localize::localize; + +pub fn run() -> cosmic::iced::Result { + localize(); + + app::run() +} diff --git a/cosmic-app-list/src/main.rs b/cosmic-app-list/src/main.rs index 0d17a245..f6e881f5 100644 --- a/cosmic-app-list/src/main.rs +++ b/cosmic-app-list/src/main.rs @@ -1,23 +1,10 @@ -// SPDX-License-Identifier: MPL-2.0-only -mod app; -mod config; -mod localize; -mod wayland_handler; -mod wayland_subscription; - -use log::info; - -use localize::localize; - -pub const VERSION: &str = env!("CARGO_PKG_VERSION"); +const VERSION: &str = env!("CARGO_PKG_VERSION"); fn main() -> cosmic::iced::Result { - // Initialize logger tracing_subscriber::fmt::init(); let _ = tracing_log::LogTracer::init(); - info!("Iced Workspaces Applet ({VERSION})"); - // Prepare i18n - localize(); - app::run() + tracing::info!("Starting cosmic-app-list with version {VERSION}"); + + cosmic_app_list::run() } diff --git a/cosmic-applet-audio/Cargo.toml b/cosmic-applet-audio/Cargo.toml index de66a2fc..9ab62adc 100644 --- a/cosmic-applet-audio/Cargo.toml +++ b/cosmic-applet-audio/Cargo.toml @@ -11,7 +11,7 @@ libpulse-glib-binding = "2.28.1" tokio = { version = "1.20.1", features=["full"] } libcosmic.workspace = true cosmic-time.workspace = true -tracing = "0.1.40" +tracing.workspace = true tracing-subscriber.workspace = true tracing-log.workspace = true # Application i18n diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs new file mode 100644 index 00000000..472155a8 --- /dev/null +++ b/cosmic-applet-audio/src/lib.rs @@ -0,0 +1,859 @@ +mod localize; + +use crate::localize::localize; +use crate::pulse::DeviceInfo; +use config::AudioAppletConfig; +use cosmic::app::Command; +use cosmic::applet::cosmic_panel_config::PanelAnchor; +use cosmic::applet::menu_button; +use cosmic::applet::menu_control_padding; +use cosmic::applet::padded_control; +use cosmic::applet::token::subscription::{ + activation_token_subscription, TokenRequest, TokenUpdate, +}; +use cosmic::cctk::sctk::reexports::calloop; +use cosmic::cosmic_config::CosmicConfigEntry; +use cosmic::iced::widget; +use cosmic::iced::Limits; +use cosmic::iced::{ + self, + widget::{column, row, slider, text}, + window, Alignment, Length, Subscription, +}; +use cosmic::iced_runtime::core::alignment::Horizontal; +use cosmic::iced_style::application; +use cosmic::widget::button; +use cosmic::widget::horizontal_space; +use cosmic::widget::Column; +use cosmic::widget::Row; +use cosmic::widget::{divider, icon}; +use cosmic::Renderer; +use cosmic::{Element, Theme}; +use cosmic_time::{anim, chain, id, once_cell::sync::Lazy, Instant, Timeline}; +use iced::wayland::popup::{destroy_popup, get_popup}; +use iced::widget::container; +use libpulse_binding::volume::VolumeLinear; +use mpris2_zbus::player::PlaybackStatus; +use mpris_subscription::MprisRequest; +use mpris_subscription::MprisUpdate; + +mod config; +mod mpris_subscription; +mod pipewire; +mod pulse; + +static SHOW_MEDIA_CONTROLS: Lazy = Lazy::new(id::Toggler::unique); + +const GO_BACK: &str = "media-skip-backward-symbolic"; +const GO_NEXT: &str = "media-skip-forward-symbolic"; +const PAUSE: &str = "media-playback-pause-symbolic"; +const PLAY: &str = "media-playback-start-symbolic"; + +pub fn run() -> cosmic::iced::Result { + localize(); + cosmic::applet::run::