diff --git a/cosmic-settings/src/pages/accessibility/magnifier.rs b/cosmic-settings/src/pages/accessibility/magnifier.rs index d609dbaa..12d62502 100644 --- a/cosmic-settings/src/pages/accessibility/magnifier.rs +++ b/cosmic-settings/src/pages/accessibility/magnifier.rs @@ -8,6 +8,7 @@ use cosmic::{ }; use cosmic_comp_config::{ZoomConfig, ZoomMovement}; use cosmic_config::{ConfigGet, ConfigSet}; +use cosmic_settings_config::{shortcuts, Action, Binding}; use cosmic_settings_page::{ self as page, section::{self, Section}, @@ -27,6 +28,8 @@ pub struct Page { zoom_config: ZoomConfig, increment_values: Vec, increment_idx: Option, + zoom_in_shortcuts: Vec, + zoom_out_shortcuts: Vec, wayland_thread: Option, magnifier_state: bool, @@ -57,7 +60,7 @@ impl Default for Page { let mut values = HashSet::::from_iter([25, 50, 100, 150, 200, zoom_config.increment]) .into_iter() .collect::>(); - values.sort(); + values.sort_unstable(); let increment_values = values .into_iter() .map(|val| { @@ -73,9 +76,11 @@ impl Default for Page { }) .collect::>(); let increment_idx = increment_values.iter().position(|s| { - s.split("%").next().and_then(|val| str::parse(val).ok()) == Some(zoom_config.increment) + s.split('%').next().and_then(|val| str::parse(val).ok()) == Some(zoom_config.increment) }); + let (zoom_in_shortcuts, zoom_out_shortcuts) = zoom_shortcuts(); + Page { entity: Entity::default(), @@ -83,6 +88,8 @@ impl Default for Page { zoom_config, increment_values, increment_idx, + zoom_in_shortcuts, + zoom_out_shortcuts, wayland_thread: None, magnifier_state: false, @@ -108,7 +115,7 @@ impl page::Page for Page { sections: &mut SlotMap>, ) -> Option { Some(vec![ - sections.insert(magnifier()), + sections.insert(magnifier(&self.zoom_in_shortcuts, &self.zoom_out_shortcuts)), sections.insert(tip()), sections.insert(view_movement()), ]) @@ -161,10 +168,36 @@ impl page::Page for Page { impl page::AutoBind for Page {} -pub fn magnifier() -> section::Section { +pub fn magnifier( + zoom_in: &[Binding], + zoom_out: &[Binding], +) -> section::Section { + let zoom_in = if zoom_in.is_empty() { + String::from("zero") + } else { + zoom_in.iter().fold(String::new(), |mut str, b| { + if !str.is_empty() { + str += ", "; + } + b.to_string_in_place(&mut str); + str + }) + }; + let zoom_out = if zoom_out.is_empty() { + String::from("zero") + } else { + zoom_out.iter().fold(String::new(), |mut str, b| { + if !str.is_empty() { + str += ", "; + } + b.to_string_in_place(&mut str); + str + }) + }; + crate::slab!(descriptions { magnifier = fl!("magnifier"); - controls = fl!("magnifier", "controls"); + controls = fl!("magnifier", "controls", zoom_in = zoom_in, zoom_out = zoom_out); increment = fl!("magnifier", "increment"); signin = fl!("magnifier", "signin"); }); @@ -337,3 +370,23 @@ impl Page { cosmic::iced::Task::none() } } + +fn zoom_shortcuts() -> (Vec, Vec) { + let Some(config) = shortcuts::context().ok() else { + return (Vec::new(), Vec::new()); + }; + let shortcuts = dbg!(shortcuts::shortcuts(&config)); + + let zoom_in = shortcuts + .iter() + .filter(|&(_binding, action)| *action == Action::ZoomIn) + .map(|(binding, _action)| binding.clone()) + .collect(); + let zoom_out = shortcuts + .iter() + .filter(|&(_binding, action)| *action == Action::ZoomOut) + .map(|(binding, _action)| binding.clone()) + .collect(); + + (zoom_in, zoom_out) +} diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/move_window.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/move_window.rs index 2efa75db..cce81231 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/move_window.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/move_window.rs @@ -95,8 +95,6 @@ pub const fn actions() -> &'static [Action] { Action::MoveToWorkspace(7), Action::MoveToWorkspace(8), Action::MoveToWorkspace(9), - Action::MoveToPreviousOutput, - Action::MoveToNextOutput, Action::MoveToOutput(Direction::Down), Action::MoveToOutput(Direction::Left), Action::MoveToOutput(Direction::Right), diff --git a/cosmic-settings/src/pages/input/keyboard/shortcuts/nav.rs b/cosmic-settings/src/pages/input/keyboard/shortcuts/nav.rs index 5acdf6dd..65d3c3d9 100644 --- a/cosmic-settings/src/pages/input/keyboard/shortcuts/nav.rs +++ b/cosmic-settings/src/pages/input/keyboard/shortcuts/nav.rs @@ -88,8 +88,6 @@ pub const fn actions() -> &'static [Action] { Action::PreviousWorkspace, Action::NextWorkspace, Action::LastWorkspace, - Action::PreviousOutput, - Action::NextOutput, Action::SwitchOutput(Direction::Left), Action::SwitchOutput(Direction::Right), Action::SwitchOutput(Direction::Up), diff --git a/i18n/en/cosmic_settings.ftl b/i18n/en/cosmic_settings.ftl index 458b66fa..5c939789 100644 --- a/i18n/en/cosmic_settings.ftl +++ b/i18n/en/cosmic_settings.ftl @@ -135,10 +135,15 @@ accessibility = Accessibility .off = Off .unavailable = Unavailable magnifier = Magnifier - .controls = - Or use keyboard shortcuts: - Super + = to zoom in, - Super + - to zoom out, + .controls = Or use these shortcuts: { $zoom_in -> + [zero] {""} + *[other] {""} + {$zoom_in} to zoom in, + }{ $zoom_out -> + [zero] {""} + *[other] {""} + {$zoom_out} to zoom out, + } Super + scroll with your mouse .increment = Zoom increment .signin = Start magnifier on sign in