diff --git a/cosmic-settings/Cargo.toml b/cosmic-settings/Cargo.toml index 2eb547c..ce3ea3e 100644 --- a/cosmic-settings/Cargo.toml +++ b/cosmic-settings/Cargo.toml @@ -76,7 +76,7 @@ xkb-data = "0.2.1" zbus = { version = "4.4.0", default-features = false, features = [ "tokio", ], optional = true } -zbus_polkit = { version = "4.0.0" } +zbus_polkit = { version = "4.0.0", optional = true } fontdb = "0.16.2" fixed_decimal = "0.5.6" mime = "0.3.17" @@ -117,6 +117,7 @@ linux = [ "page-bluetooth", "page-date", "page-default-apps", + "page-display", "page-input", "page-networking", "page-power", @@ -130,15 +131,25 @@ linux = [ ] # Pages -page-accessibility = ["dep:cosmic-protocols", "dep:sctk"] -page-about = ["dep:cosmic-settings-system", "dep:hostname1-zbus", "dep:zbus"] +page-accessibility = [ + "dep:cosmic-comp-config", + "dep:cosmic-protocols", + "dep:cosmic-settings-config", + "dep:sctk", +] +page-about = [ + "dep:cosmic-settings-system", + "dep:hostname1-zbus", + "dep:zbus", +] page-bluetooth = [ "dep:bluez-zbus", "dep:zbus", "dep:cosmic-settings-subscriptions", ] page-date = ["dep:timedate-zbus", "dep:zbus"] -page-default-apps = ["dep:mime-apps"] +page-default-apps = ["dep:cosmic-settings-config", "dep:mime-apps"] +page-display = ["dep:udev"] page-input = [ "gettext", "dep:cosmic-comp-config", @@ -152,9 +163,19 @@ page-networking = [ "dep:zbus", ] page-power = ["dep:upower_dbus", "dep:zbus"] -page-region = ["dep:lichen-system", "dep:locale1"] +page-region = [ + "gettext", + "dep:lichen-system", + "dep:locale1", + "dep:zbus", +] page-sound = ["dep:cosmic-settings-subscriptions"] -page-users = ["dep:accounts-zbus"] +page-users = [ + "xdg-portal", + "dep:accounts-zbus", + "dep:zbus", + "dep:zbus_polkit", +] page-window-management = ["dep:cosmic-settings-config"] page-workspaces = ["dep:cosmic-comp-config"] @@ -164,6 +185,10 @@ ashpd = ["dep:ashpd"] 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/app.rs b/cosmic-settings/src/app.rs index 11f736b..4f1fd0c 100644 --- a/cosmic-settings/src/app.rs +++ b/cosmic-settings/src/app.rs @@ -7,6 +7,8 @@ use crate::pages::accessibility; #[cfg(feature = "page-bluetooth")] use crate::pages::bluetooth; use crate::pages::desktop::{self, appearance}; +#[cfg(feature = "page-display")] +use crate::pages::display; #[cfg(feature = "page-input")] use crate::pages::input; #[cfg(feature = "page-networking")] @@ -15,7 +17,7 @@ use crate::pages::networking; use crate::pages::power; #[cfg(feature = "page-sound")] use crate::pages::sound; -use crate::pages::{self, display, system, time}; +use crate::pages::{self, system, time}; use crate::subscription::desktop_files; use crate::widget::{page_title, search_header}; use crate::PageCommands; @@ -91,6 +93,7 @@ impl SettingsApp { #[cfg(feature = "page-default-apps")] PageCommands::DefaultApps => self.pages.page_id::(), PageCommands::Desktop => self.pages.page_id::(), + #[cfg(feature = "page-display")] PageCommands::Displays => self.pages.page_id::(), #[cfg(feature = "wayland")] PageCommands::Dock => self.pages.page_id::(), @@ -204,6 +207,7 @@ impl cosmic::Application for SettingsApp { #[cfg(feature = "page-accessibility")] app.insert_page::(); let desktop_id = app.insert_page::().id(); + #[cfg(feature = "page-display")] app.insert_page::(); #[cfg(feature = "page-sound")] app.insert_page::(); @@ -421,6 +425,7 @@ impl cosmic::Application for SettingsApp { page::update!(self.pages, message, desktop::workspaces::Page); } + #[cfg(feature = "page-display")] crate::pages::Message::Displays(message) => { if let Some(page) = self.pages.page_mut::() { return page.update(message).map(Into::into); @@ -806,14 +811,16 @@ impl cosmic::Application for SettingsApp { _keys: &[&'static str], new_theme: &cosmic::cosmic_theme::Theme, ) -> Task { + #[cfg(feature = "page-accessibility")] if let Some(page) = self.pages.page_mut::() { - page.update(accessibility::Message::SystemTheme(Box::new( - new_theme.clone(), - ))) - .map(Into::into) - } else { - Task::none() + return page + .update(accessibility::Message::SystemTheme(Box::new( + new_theme.clone(), + ))) + .map(Into::into); } + + Task::none() } } diff --git a/cosmic-settings/src/main.rs b/cosmic-settings/src/main.rs index d871a9c..1ee570a 100644 --- a/cosmic-settings/src/main.rs +++ b/cosmic-settings/src/main.rs @@ -61,6 +61,7 @@ pub enum PageCommands { /// Desktop settings page Desktop, /// Displays settings page + #[cfg(feature = "page-display")] Displays, /// Dock settings page #[cfg(feature = "wayland")] @@ -86,6 +87,7 @@ pub enum PageCommands { #[cfg(feature = "page-power")] Power, /// Region & Language settings page + #[cfg(feature = "page-region")] RegionLanguage, /// Sound settings page #[cfg(feature = "page-sound")] diff --git a/cosmic-settings/src/pages/desktop/appearance/mod.rs b/cosmic-settings/src/pages/desktop/appearance/mod.rs index a107038..29c3b3d 100644 --- a/cosmic-settings/src/pages/desktop/appearance/mod.rs +++ b/cosmic-settings/src/pages/desktop/appearance/mod.rs @@ -15,6 +15,7 @@ use cosmic::cosmic_theme::{ CornerRadii, Density, Spacing, Theme, ThemeBuilder, ThemeMode, DARK_THEME_BUILDER_ID, LIGHT_THEME_BUILDER_ID, }; +#[cfg(feature = "xdg-portal")] use cosmic::dialog::file_chooser::{self, FileFilter}; use cosmic::iced_core::{Alignment, Color, Length}; use cosmic::iced_widget::scrollable::{Direction, Scrollbar}; @@ -322,18 +323,22 @@ impl } } +#[cfg(feature = "xdg-portal")] #[derive(Clone)] pub struct SaveResponse(pub Arc); +#[cfg(feature = "xdg-portal")] impl std::fmt::Debug for SaveResponse { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_str("SaveResponse") } } +#[cfg(feature = "xdg-portal")] #[derive(Clone)] pub struct OpenResponse(pub Arc); +#[cfg(feature = "xdg-portal")] impl std::fmt::Debug for OpenResponse { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_str("OpenResponse") diff --git a/cosmic-settings/src/pages/mod.rs b/cosmic-settings/src/pages/mod.rs index 8b9adf7..a797463 100644 --- a/cosmic-settings/src/pages/mod.rs +++ b/cosmic-settings/src/pages/mod.rs @@ -8,6 +8,7 @@ pub mod accessibility; #[cfg(feature = "page-bluetooth")] pub mod bluetooth; pub mod desktop; +#[cfg(feature = "page-display")] pub mod display; #[cfg(feature = "page-input")] pub mod input; @@ -41,6 +42,7 @@ pub enum Message { DesktopWallpaper(desktop::wallpaper::Message), #[cfg(feature = "page-workspaces")] DesktopWorkspaces(desktop::workspaces::Message), + #[cfg(feature = "page-display")] Displays(display::Message), #[cfg(feature = "wayland")] Dock(desktop::dock::Message), diff --git a/cosmic-settings/src/pages/time/mod.rs b/cosmic-settings/src/pages/time/mod.rs index 426cc9b..76a3aee 100644 --- a/cosmic-settings/src/pages/time/mod.rs +++ b/cosmic-settings/src/pages/time/mod.rs @@ -5,6 +5,7 @@ use cosmic_settings_page as page; #[cfg(feature = "page-date")] pub mod date; +#[cfg(feature = "page-region")] pub mod region; #[derive(Default)] diff --git a/justfile b/justfile index c3b40cc..8b8a54a 100644 --- a/justfile +++ b/justfile @@ -159,6 +159,30 @@ heaptrack *args: zstd -dc < heaptrack.cosmic-settings.*.raw.zst + /usr/lib/heaptrack/libexec/heaptrack_env | zstd -c > heaptrack_env.cosmic-settings.zst heaptrack_gui heaptrack.cosmic-settings.zst +check-features: + #!/usr/bin/env bash + set -ex + cargo check --no-default-features + cargo check + for feature in \ + "page-accessibility" \ + "page-about" \ + "page-bluetooth" \ + "page-date" \ + "page-default-apps" \ + "page-display" \ + "page-input" \ + "page-networking" \ + "page-power" \ + "page-region" \ + "page-sound" \ + "page-users" \ + "page-window-management" \ + "page-workspaces" + do + cargo check --no-default-features --features "${feature}" + done + # Dependencies cmd-depends := " cargo