config: split option handling
This commit is contained in:
parent
ec9ce08c77
commit
32ad879a65
2 changed files with 132 additions and 117 deletions
|
|
@ -90,6 +90,7 @@ use {
|
||||||
mod dispatch;
|
mod dispatch;
|
||||||
mod input_devices;
|
mod input_devices;
|
||||||
mod matchers;
|
mod matchers;
|
||||||
|
mod options;
|
||||||
mod outputs;
|
mod outputs;
|
||||||
mod resources;
|
mod resources;
|
||||||
mod seats;
|
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(
|
fn handle_run(
|
||||||
&self,
|
&self,
|
||||||
prog: &str,
|
prog: &str,
|
||||||
|
|
|
||||||
131
src/config/handler/options.rs
Normal file
131
src/config/handler/options.rs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue