diff --git a/cosmic-settings/src/pages/accessibility/mod.rs b/cosmic-settings/src/pages/accessibility/mod.rs index 919b5e5..7af5a7f 100644 --- a/cosmic-settings/src/pages/accessibility/mod.rs +++ b/cosmic-settings/src/pages/accessibility/mod.rs @@ -4,6 +4,7 @@ use cosmic::iced::stream; use cosmic::theme::CosmicTheme; use cosmic::widget::{dropdown, settings, text}; use cosmic::{Apply, Element, Task, surface}; +use cosmic_comp_config::CosmicCompConfig; pub use cosmic_comp_config::ZoomMovement; use cosmic_config::CosmicConfigEntry; use cosmic_settings_a11y_manager_subscription as cosmic_a11y_manager; @@ -36,11 +37,21 @@ pub struct Page { daemon_helper: cosmic_config::Config, dbus_sender: Option>, reader_enabled: bool, + comp_config: CosmicCompConfig, + comp_helper: cosmic_config::Config, } impl Default for Page { fn default() -> Self { let daemon_helper = CosmicSettingsDaemonConfig::config().unwrap(); + let comp_helper = cosmic_config::Config::new("com.system76.CosmicComp", 1).unwrap(); + let comp_config = + CosmicCompConfig::get_entry(&comp_helper).unwrap_or_else(|(errs, config)| { + for err in errs { + tracing::warn!(?err, "error while reading cosmic-comp config"); + } + config + }); Page { dbus_sender: None, entity: page::Entity::default(), @@ -65,6 +76,8 @@ impl Default for Page { .unwrap_or_default(), daemon_helper, reader_enabled: false, + comp_config, + comp_helper, } } } @@ -77,6 +90,7 @@ pub enum Message { ProtocolUnavailable, Return, ScreenReaderEnabled(bool), + SetCursorShakeToFind(bool), SetScreenFilterActive(bool), SetScreenFilterSelection(ColorFilter), SetScreenInverted(bool), @@ -187,6 +201,8 @@ pub fn vision() -> section::Section { invert_colors = fl!("accessibility", "invert-colors"); color_filters = fl!("accessibility", "color-filters"); color_filter_type = fl!("color-filter"); + shake_cursor = fl!("accessibility", "shake-cursor"); + shake_cursor_desc = fl!("accessibility", "shake-cursor-desc"); }); Section::default() @@ -276,6 +292,13 @@ pub fn vision() -> section::Section { settings::item::builder(&descriptions[color_filter_type]).control(dropdown) }) + .add( + settings::item::builder(&descriptions[shake_cursor]) + .description(&descriptions[shake_cursor_desc]) + .toggler(page.comp_config.cursor_shake_to_find, |enabled| { + Message::SetCursorShakeToFind(enabled).into() + }), + ) .into() }) } @@ -416,6 +439,14 @@ impl Page { Message::Surface(a) => { return cosmic::task::message(crate::app::Message::Surface(a)); } + Message::SetCursorShakeToFind(enabled) => { + if let Err(err) = self + .comp_config + .set_cursor_shake_to_find(&self.comp_helper, enabled) + { + tracing::error!(?err, "failed to set cursor_shake_to_find"); + } + } Message::SetSoundMono(active) => { if let Err(err) = self .daemon_config diff --git a/i18n/en/cosmic_settings.ftl b/i18n/en/cosmic_settings.ftl index a721520..860d19d 100644 --- a/i18n/en/cosmic_settings.ftl +++ b/i18n/en/cosmic_settings.ftl @@ -275,6 +275,8 @@ accessibility = Accessibility .high-contrast = High contrast mode .invert-colors = Invert colors .color-filters = Color filters + .shake-cursor = Shake pointer to find it + .shake-cursor-desc = Quickly shake the mouse to temporarily enlarge the pointer hearing = Hearing .mono = Play stereo audio as mono