1
0
Fork 0
forked from wry/wry

config: split option handling

This commit is contained in:
kossLAN 2026-05-29 19:20:24 -04:00
parent ec9ce08c77
commit 32ad879a65
No known key found for this signature in database
2 changed files with 132 additions and 117 deletions

View file

@ -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<DrmDevice>, 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<DrmDevice>,
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,

View file

@ -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<DrmDevice>,
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<DrmDevice>,
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);
}
}