From b62e47ef8d82dab10d1da35eb2a9c427d6cc50f7 Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Tue, 25 Mar 2025 14:38:35 +0100 Subject: [PATCH] a11y/zoom: Allow hiding the overlay --- cosmic-comp-config/src/lib.rs | 2 ++ src/shell/focus/order.rs | 2 +- src/shell/mod.rs | 3 +++ src/shell/zoom.rs | 27 +++++++++++++-------------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/cosmic-comp-config/src/lib.rs b/cosmic-comp-config/src/lib.rs index a6b772a9..e54f44a8 100644 --- a/cosmic-comp-config/src/lib.rs +++ b/cosmic-comp-config/src/lib.rs @@ -130,6 +130,7 @@ fn default_repeat_delay() -> u32 { #[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)] pub struct ZoomConfig { pub start_on_login: bool, + pub show_overlay: bool, pub increment: u32, pub view_moves: ZoomMovement, } @@ -138,6 +139,7 @@ impl Default for ZoomConfig { fn default() -> Self { ZoomConfig { start_on_login: false, + show_overlay: true, increment: 50, view_moves: ZoomMovement::Continuously, } diff --git a/src/shell/focus/order.rs b/src/shell/focus/order.rs index 6cc71488..f88bb1ca 100644 --- a/src/shell/focus/order.rs +++ b/src/shell/focus/order.rs @@ -73,7 +73,7 @@ fn render_input_order_internal( if shell .zoom_state .as_ref() - .is_some_and(|state| state.current_level() != 1.0) + .is_some_and(|state| state.show_overlay && state.current_level() != 1.0) { callback(Stage::ZoomUI)?; } diff --git a/src/shell/mod.rs b/src/shell/mod.rs index ddaac71e..79141b7f 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -1249,6 +1249,7 @@ impl Common { if let Some(zoom_state) = shell_ref.zoom_state.as_mut() { zoom_state.increment = self.config.cosmic_conf.accessibility_zoom.increment; zoom_state.movement = self.config.cosmic_conf.accessibility_zoom.view_moves; + zoom_state.show_overlay = self.config.cosmic_conf.accessibility_zoom.show_overlay; for output in shell_ref.workspaces.sets.keys() { let output_state = output.user_data().get::>().unwrap(); @@ -2051,6 +2052,7 @@ impl Shell { self.theme.clone(), ); } + 1. }; @@ -2064,6 +2066,7 @@ impl Shell { self.zoom_state = Some(ZoomState { seat: seat.clone(), + show_overlay: zoom_config.show_overlay, level, increment: zoom_config.increment, movement: zoom_config.view_moves, diff --git a/src/shell/zoom.rs b/src/shell/zoom.rs index 5dfaf7ad..cfb74498 100644 --- a/src/shell/zoom.rs +++ b/src/shell/zoom.rs @@ -51,6 +51,7 @@ use super::{ #[derive(Debug, Clone)] pub struct ZoomState { pub(super) seat: Seat, + pub(super) show_overlay: bool, pub(super) level: f64, pub(super) increment: u32, pub(super) movement: ZoomMovement, @@ -780,21 +781,19 @@ impl Program for ZoomProgram { } ZoomMessage::Close => { let _ = loop_handle.insert_idle(|state| { - let seat = state + state .common - .shell - .read() - .unwrap() - .seats - .last_active() - .clone(); - state.common.shell.write().unwrap().trigger_zoom( - &seat, - 1.0, - &state.common.config.cosmic_conf.accessibility_zoom, - true, - &state.common.event_loop_handle, - ); + .config + .cosmic_conf + .accessibility_zoom + .show_overlay = false; + if let Err(err) = state.common.config.cosmic_helper.set( + "accessibility_zoom", + state.common.config.cosmic_conf.accessibility_zoom, + ) { + error!(?err, "Failed to update zoom config"); + } + state.common.update_config(); }); } ZoomMessage::Update {