feat(a11y): mono sound toggle
This commit is contained in:
parent
cc789d6120
commit
cc25cdd08e
4 changed files with 59 additions and 2 deletions
11
Cargo.lock
generated
11
Cargo.lock
generated
|
|
@ -1676,6 +1676,7 @@ dependencies = [
|
||||||
"cosmic-randr",
|
"cosmic-randr",
|
||||||
"cosmic-randr-shell",
|
"cosmic-randr-shell",
|
||||||
"cosmic-settings-config",
|
"cosmic-settings-config",
|
||||||
|
"cosmic-settings-daemon-config",
|
||||||
"cosmic-settings-page",
|
"cosmic-settings-page",
|
||||||
"cosmic-settings-subscriptions",
|
"cosmic-settings-subscriptions",
|
||||||
"cosmic-settings-system",
|
"cosmic-settings-system",
|
||||||
|
|
@ -1753,6 +1754,16 @@ dependencies = [
|
||||||
"zbus 4.4.0",
|
"zbus 4.4.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cosmic-settings-daemon-config"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "git+https://github.com/pop-os/cosmic-settings-daemon?branch=sound-mono#d9056a0fd2ff2b404e54c455ec9c00fc4028aba9"
|
||||||
|
dependencies = [
|
||||||
|
"cosmic-config",
|
||||||
|
"ron 0.8.1",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cosmic-settings-page"
|
name = "cosmic-settings-page"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daem
|
||||||
cosmic-settings-page = { path = "../page" }
|
cosmic-settings-page = { path = "../page" }
|
||||||
cosmic-settings-system = { path = "../pages/system", optional = true }
|
cosmic-settings-system = { path = "../pages/system", optional = true }
|
||||||
cosmic-settings-wallpaper = { path = "../pages/wallpapers" }
|
cosmic-settings-wallpaper = { path = "../pages/wallpapers" }
|
||||||
|
cosmic-settings-daemon-config = { git = "https://github.com/pop-os/cosmic-settings-daemon", optional = true, branch = "sound-mono" }
|
||||||
derivative = "2.2.0"
|
derivative = "2.2.0"
|
||||||
derive_setters = "0.1.6"
|
derive_setters = "0.1.6"
|
||||||
dirs = "5.0.1"
|
dirs = "5.0.1"
|
||||||
|
|
@ -137,6 +138,7 @@ page-accessibility = [
|
||||||
"dep:cosmic-comp-config",
|
"dep:cosmic-comp-config",
|
||||||
"dep:cosmic-protocols",
|
"dep:cosmic-protocols",
|
||||||
"dep:cosmic-settings-config",
|
"dep:cosmic-settings-config",
|
||||||
|
"dep:cosmic-settings-daemon-config",
|
||||||
"dep:sctk",
|
"dep:sctk",
|
||||||
]
|
]
|
||||||
page-about = ["dep:cosmic-settings-system", "dep:hostname1-zbus", "dep:zbus"]
|
page-about = ["dep:cosmic-settings-system", "dep:hostname1-zbus", "dep:zbus"]
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ use cosmic::{
|
||||||
};
|
};
|
||||||
pub use cosmic_comp_config::ZoomMovement;
|
pub use cosmic_comp_config::ZoomMovement;
|
||||||
use cosmic_config::CosmicConfigEntry;
|
use cosmic_config::CosmicConfigEntry;
|
||||||
|
use cosmic_settings_daemon_config::CosmicSettingsDaemonConfig;
|
||||||
use cosmic_settings_page::{
|
use cosmic_settings_page::{
|
||||||
self as page, Insert,
|
self as page, Insert,
|
||||||
section::{self, Section},
|
section::{self, Section},
|
||||||
|
|
@ -32,10 +33,13 @@ pub struct Page {
|
||||||
wayland_thread: Option<wayland::Sender>,
|
wayland_thread: Option<wayland::Sender>,
|
||||||
theme: Box<cosmic::cosmic_theme::Theme>,
|
theme: Box<cosmic::cosmic_theme::Theme>,
|
||||||
high_contrast: Option<bool>,
|
high_contrast: Option<bool>,
|
||||||
|
daemon_config: CosmicSettingsDaemonConfig,
|
||||||
|
daemon_helper: cosmic_config::Config,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Page {
|
impl Default for Page {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
|
let daemon_helper = CosmicSettingsDaemonConfig::config().unwrap();
|
||||||
Page {
|
Page {
|
||||||
entity: page::Entity::default(),
|
entity: page::Entity::default(),
|
||||||
magnifier_state: false,
|
magnifier_state: false,
|
||||||
|
|
@ -55,6 +59,9 @@ impl Default for Page {
|
||||||
wayland_thread: None,
|
wayland_thread: None,
|
||||||
theme: Box::default(),
|
theme: Box::default(),
|
||||||
high_contrast: None,
|
high_contrast: None,
|
||||||
|
daemon_config: CosmicSettingsDaemonConfig::get_entry(&daemon_helper)
|
||||||
|
.unwrap_or_default(),
|
||||||
|
daemon_helper,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -70,6 +77,7 @@ pub enum Message {
|
||||||
SetScreenFilterActive(bool),
|
SetScreenFilterActive(bool),
|
||||||
SetScreenFilterSelection(ColorFilter),
|
SetScreenFilterSelection(ColorFilter),
|
||||||
Surface(surface::Action),
|
Surface(surface::Action),
|
||||||
|
SetSoundMono(bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl page::Page<crate::pages::Message> for Page {
|
impl page::Page<crate::pages::Message> for Page {
|
||||||
|
|
@ -89,7 +97,7 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
&self,
|
&self,
|
||||||
sections: &mut SlotMap<section::Entity, page::Section<crate::pages::Message>>,
|
sections: &mut SlotMap<section::Entity, page::Section<crate::pages::Message>>,
|
||||||
) -> Option<page::Content> {
|
) -> Option<page::Content> {
|
||||||
Some(vec![sections.insert(vision())])
|
Some(vec![sections.insert(vision()), sections.insert(hearing())])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_enter(&mut self) -> cosmic::Task<crate::pages::Message> {
|
fn on_enter(&mut self) -> cosmic::Task<crate::pages::Message> {
|
||||||
|
|
@ -250,6 +258,31 @@ pub fn vision() -> section::Section<crate::pages::Message> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn hearing() -> section::Section<crate::pages::Message> {
|
||||||
|
crate::slab!(descriptions {
|
||||||
|
hearing = fl!("hearing");
|
||||||
|
mono = fl!("hearing", "mono");
|
||||||
|
});
|
||||||
|
|
||||||
|
Section::default()
|
||||||
|
.title(&descriptions[hearing])
|
||||||
|
.descriptions(descriptions)
|
||||||
|
.view::<Page>(move |_, page, section| {
|
||||||
|
let descriptions = §ion.descriptions;
|
||||||
|
|
||||||
|
settings::section()
|
||||||
|
.title(§ion.title)
|
||||||
|
.add(
|
||||||
|
cosmic::Element::from(
|
||||||
|
settings::item::builder(&descriptions[mono])
|
||||||
|
.toggler(page.daemon_config.mono_sound, Message::SetSoundMono),
|
||||||
|
)
|
||||||
|
.map(crate::pages::Message::Accessibility),
|
||||||
|
)
|
||||||
|
.into()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
impl Page {
|
impl Page {
|
||||||
pub fn update(&mut self, message: Message) -> cosmic::iced::Task<crate::app::Message> {
|
pub fn update(&mut self, message: Message) -> cosmic::iced::Task<crate::app::Message> {
|
||||||
match message {
|
match message {
|
||||||
|
|
@ -363,8 +396,15 @@ impl Page {
|
||||||
Message::Surface(a) => {
|
Message::Surface(a) => {
|
||||||
return cosmic::task::message(crate::app::Message::Surface(a));
|
return cosmic::task::message(crate::app::Message::Surface(a));
|
||||||
}
|
}
|
||||||
|
Message::SetSoundMono(active) => {
|
||||||
|
if let Err(err) = self
|
||||||
|
.daemon_config
|
||||||
|
.set_mono_sound(&self.daemon_helper, active)
|
||||||
|
{
|
||||||
|
tracing::error!("{err:?}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cosmic::iced::Task::none()
|
cosmic::iced::Task::none()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,10 @@ accessibility = Accessibility
|
||||||
.high-contrast = High contrast mode
|
.high-contrast = High contrast mode
|
||||||
.invert-colors = Invert Colors
|
.invert-colors = Invert Colors
|
||||||
.color-filters = Color filters
|
.color-filters = Color filters
|
||||||
|
|
||||||
|
hearing = Hearing
|
||||||
|
.mono = Play stereo audio as mono
|
||||||
|
|
||||||
default = Default
|
default = Default
|
||||||
magnifier = Magnifier
|
magnifier = Magnifier
|
||||||
.controls = Or use these shortcuts: { $zoom_in ->
|
.controls = Or use these shortcuts: { $zoom_in ->
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue