From 32ad879a658810d8fa09a9487746413e37309537 Mon Sep 17 00:00:00 2001 From: kossLAN Date: Fri, 29 May 2026 19:20:24 -0400 Subject: [PATCH] config: split option handling --- src/config/handler.rs | 118 +----------------------------- src/config/handler/options.rs | 131 ++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 117 deletions(-) create mode 100644 src/config/handler/options.rs diff --git a/src/config/handler.rs b/src/config/handler.rs index e3474293..5ae44880 100644 --- a/src/config/handler.rs +++ b/src/config/handler.rs @@ -90,6 +90,7 @@ use { mod dispatch; mod input_devices; mod matchers; +mod options; mod outputs; mod resources; mod seats; @@ -399,123 +400,6 @@ impl ConfigProxyHandler { } } - fn handle_set_ei_socket_enabled(&self, enabled: bool) { - self.state.set_ei_socket_enabled(enabled); - } - - fn handle_set_gfx_api(&self, device: Option, api: GfxApi) -> Result<(), CphError> { - let Ok(api) = api.try_into() else { - return Err(CphError::UnknownGfxApi(api)); - }; - match device { - Some(dev) => self.get_drm_device(dev)?.dev.set_gfx_api(api), - _ => self.state.default_gfx_api.set(api), - } - Ok(()) - } - - fn handle_set_flip_margin(&self, device: DrmDevice, margin: Duration) -> Result<(), CphError> { - self.get_drm_device(device)?.set_flip_margin( - &self.state, - margin.as_nanos().try_into().unwrap_or(u64::MAX), - ); - Ok(()) - } - - fn handle_set_x_scaling_mode(&self, mode: XScalingMode) -> Result<(), CphError> { - let use_wire_scale = match mode { - XScalingMode::DEFAULT => false, - XScalingMode::DOWNSCALED => true, - _ => return Err(CphError::UnknownXScalingMode(mode)), - }; - self.state.set_xwayland_use_wire_scale(use_wire_scale); - Ok(()) - } - - fn handle_set_x_wayland_enabled(&self, enabled: bool) -> Result<(), CphError> { - self.state.set_xwayland_enabled(enabled); - Ok(()) - } - - fn handle_set_ui_drag_enabled(&self, enabled: bool) { - self.state.set_ui_drag_enabled(enabled); - } - - fn handle_set_ui_drag_threshold(&self, threshold: i32) { - self.state.set_ui_drag_threshold(threshold.max(1)); - } - - fn handle_set_animations_enabled(&self, enabled: bool) { - self.state.set_animations_enabled(enabled); - } - - fn handle_set_animation_duration_ms(&self, duration_ms: u32) { - self.state - .set_animation_duration_ms(duration_ms.min(10_000)); - } - - fn handle_set_animation_curve(&self, curve: u32) { - self.state.set_animation_curve(curve); - } - - fn handle_set_animation_style(&self, style: u32) { - if !self.state.set_animation_style(style) { - log::warn!("Ignoring invalid animation style"); - } - } - - fn handle_set_animation_cubic_bezier(&self, x1: f32, y1: f32, x2: f32, y2: f32) { - if !self.state.set_animation_cubic_bezier(x1, y1, x2, y2) { - log::warn!("Ignoring invalid animation cubic-bezier curve"); - } - } - - fn handle_set_direct_scanout_enabled( - &self, - device: Option, - enabled: bool, - ) -> Result<(), CphError> { - match device { - Some(dev) => self - .get_drm_device(dev)? - .set_direct_scanout_enabled(&self.state, enabled), - _ => self.state.direct_scanout_enabled.set(enabled), - } - Ok(()) - } - - fn handle_set_double_click_interval_usec(&self, usec: u64) { - self.state.double_click_interval_usec.set(usec); - } - - fn handle_set_double_click_distance(&self, dist: i32) { - self.state.double_click_distance.set(dist); - } - - fn handle_set_idle(&self, timeout: Duration) { - self.state.idle.set_timeout(&self.state, timeout); - } - - fn handle_set_key_press_enables_dpms(&self, enabled: bool) { - self.state.idle.key_press_enables_dpms.set(enabled); - } - - fn handle_set_mouse_move_enables_dpms(&self, enabled: bool) { - self.state.idle.mouse_move_enables_dpms.set(enabled); - } - - fn handle_set_idle_grace_period(&self, period: Duration) { - self.state.idle.set_grace_period(&self.state, period); - } - - fn handle_set_explicit_sync_enabled(&self, enabled: bool) { - self.state.set_explicit_sync_enabled(enabled); - } - - fn handle_set_color_management_enabled(&self, enabled: bool) { - self.state.set_color_management_enabled(enabled); - } - fn handle_run( &self, prog: &str, diff --git a/src/config/handler/options.rs b/src/config/handler/options.rs new file mode 100644 index 00000000..065c8571 --- /dev/null +++ b/src/config/handler/options.rs @@ -0,0 +1,131 @@ +use super::*; + +impl ConfigProxyHandler { + pub(super) fn handle_set_ei_socket_enabled(&self, enabled: bool) { + self.state.set_ei_socket_enabled(enabled); + } + + pub(super) fn handle_set_gfx_api( + &self, + device: Option, + api: GfxApi, + ) -> Result<(), CphError> { + let Ok(api) = api.try_into() else { + return Err(CphError::UnknownGfxApi(api)); + }; + match device { + Some(dev) => self.get_drm_device(dev)?.dev.set_gfx_api(api), + _ => self.state.default_gfx_api.set(api), + } + Ok(()) + } + + pub(super) fn handle_set_flip_margin( + &self, + device: DrmDevice, + margin: Duration, + ) -> Result<(), CphError> { + self.get_drm_device(device)?.set_flip_margin( + &self.state, + margin.as_nanos().try_into().unwrap_or(u64::MAX), + ); + Ok(()) + } + + pub(super) fn handle_set_x_scaling_mode( + &self, + mode: XScalingMode, + ) -> Result<(), CphError> { + let use_wire_scale = match mode { + XScalingMode::DEFAULT => false, + XScalingMode::DOWNSCALED => true, + _ => return Err(CphError::UnknownXScalingMode(mode)), + }; + self.state.set_xwayland_use_wire_scale(use_wire_scale); + Ok(()) + } + + pub(super) fn handle_set_x_wayland_enabled(&self, enabled: bool) -> Result<(), CphError> { + self.state.set_xwayland_enabled(enabled); + Ok(()) + } + + pub(super) fn handle_set_ui_drag_enabled(&self, enabled: bool) { + self.state.set_ui_drag_enabled(enabled); + } + + pub(super) fn handle_set_ui_drag_threshold(&self, threshold: i32) { + self.state.set_ui_drag_threshold(threshold.max(1)); + } + + pub(super) fn handle_set_animations_enabled(&self, enabled: bool) { + self.state.set_animations_enabled(enabled); + } + + pub(super) fn handle_set_animation_duration_ms(&self, duration_ms: u32) { + self.state + .set_animation_duration_ms(duration_ms.min(10_000)); + } + + pub(super) fn handle_set_animation_curve(&self, curve: u32) { + self.state.set_animation_curve(curve); + } + + pub(super) fn handle_set_animation_style(&self, style: u32) { + if !self.state.set_animation_style(style) { + log::warn!("Ignoring invalid animation style"); + } + } + + pub(super) fn handle_set_animation_cubic_bezier(&self, x1: f32, y1: f32, x2: f32, y2: f32) { + if !self.state.set_animation_cubic_bezier(x1, y1, x2, y2) { + log::warn!("Ignoring invalid animation cubic-bezier curve"); + } + } + + pub(super) fn handle_set_direct_scanout_enabled( + &self, + device: Option, + enabled: bool, + ) -> Result<(), CphError> { + match device { + Some(dev) => self + .get_drm_device(dev)? + .set_direct_scanout_enabled(&self.state, enabled), + _ => self.state.direct_scanout_enabled.set(enabled), + } + Ok(()) + } + + pub(super) fn handle_set_double_click_interval_usec(&self, usec: u64) { + self.state.double_click_interval_usec.set(usec); + } + + pub(super) fn handle_set_double_click_distance(&self, dist: i32) { + self.state.double_click_distance.set(dist); + } + + pub(super) fn handle_set_idle(&self, timeout: Duration) { + self.state.idle.set_timeout(&self.state, timeout); + } + + pub(super) fn handle_set_key_press_enables_dpms(&self, enabled: bool) { + self.state.idle.key_press_enables_dpms.set(enabled); + } + + pub(super) fn handle_set_mouse_move_enables_dpms(&self, enabled: bool) { + self.state.idle.mouse_move_enables_dpms.set(enabled); + } + + pub(super) fn handle_set_idle_grace_period(&self, period: Duration) { + self.state.idle.set_grace_period(&self.state, period); + } + + pub(super) fn handle_set_explicit_sync_enabled(&self, enabled: bool) { + self.state.set_explicit_sync_enabled(enabled); + } + + pub(super) fn handle_set_color_management_enabled(&self, enabled: bool) { + self.state.set_color_management_enabled(enabled); + } +}