diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-09-30 09:01:44 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-10-02 09:38:17 +0300 |
| commit | 2eabc22b3831265bec4e4a0d5ed5e9c0a00f50ab (patch) | |
| tree | c28ffaa413de153e8b586ad66beb67660edb4ffd /niri-config/src | |
| parent | 2de34e8798d18321cc36bde97960ef1a9958bca0 (diff) | |
| download | niri-2eabc22b3831265bec4e4a0d5ed5e9c0a00f50ab.tar.gz niri-2eabc22b3831265bec4e4a0d5ed5e9c0a00f50ab.tar.bz2 niri-2eabc22b3831265bec4e4a0d5ed5e9c0a00f50ab.zip | |
config: Add merging for Gestures
Diffstat (limited to 'niri-config/src')
| -rw-r--r-- | niri-config/src/gestures.rs | 85 | ||||
| -rw-r--r-- | niri-config/src/lib.rs | 18 |
2 files changed, 71 insertions, 32 deletions
diff --git a/niri-config/src/gestures.rs b/niri-config/src/gestures.rs index 8c4b1363..dcf296ac 100644 --- a/niri-config/src/gestures.rs +++ b/niri-config/src/gestures.rs @@ -1,55 +1,102 @@ +use crate::utils::MergeWith; use crate::FloatOrInt; -#[derive(knuffel::Decode, Debug, Default, Clone, Copy, PartialEq)] +#[derive(Debug, Default, Clone, Copy, PartialEq)] pub struct Gestures { - #[knuffel(child, default)] pub dnd_edge_view_scroll: DndEdgeViewScroll, - #[knuffel(child, default)] pub dnd_edge_workspace_switch: DndEdgeWorkspaceSwitch, - #[knuffel(child, default)] pub hot_corners: HotCorners, } -#[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)] +#[derive(knuffel::Decode, Debug, Default, Clone, Copy, PartialEq)] +pub struct GesturesPart { + #[knuffel(child)] + pub dnd_edge_view_scroll: Option<DndEdgeViewScrollPart>, + #[knuffel(child)] + pub dnd_edge_workspace_switch: Option<DndEdgeWorkspaceSwitchPart>, + #[knuffel(child)] + pub hot_corners: Option<HotCorners>, +} + +impl MergeWith<GesturesPart> for Gestures { + fn merge_with(&mut self, part: &GesturesPart) { + merge!( + (self, part), + dnd_edge_view_scroll, + dnd_edge_workspace_switch, + ); + merge_clone!((self, part), hot_corners); + } +} + +#[derive(Debug, Clone, Copy, PartialEq)] pub struct DndEdgeViewScroll { - #[knuffel(child, unwrap(argument), default = Self::default().trigger_width)] - pub trigger_width: FloatOrInt<0, 65535>, - #[knuffel(child, unwrap(argument), default = Self::default().delay_ms)] + pub trigger_width: f64, pub delay_ms: u16, - #[knuffel(child, unwrap(argument), default = Self::default().max_speed)] - pub max_speed: FloatOrInt<0, 1_000_000>, + pub max_speed: f64, } impl Default for DndEdgeViewScroll { fn default() -> Self { Self { - trigger_width: FloatOrInt(30.), // Taken from GTK 4. + trigger_width: 30., // Taken from GTK 4. delay_ms: 100, - max_speed: FloatOrInt(1500.), + max_speed: 1500., } } } #[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)] +pub struct DndEdgeViewScrollPart { + #[knuffel(child, unwrap(argument))] + pub trigger_width: Option<FloatOrInt<0, 65535>>, + #[knuffel(child, unwrap(argument))] + pub delay_ms: Option<u16>, + #[knuffel(child, unwrap(argument))] + pub max_speed: Option<FloatOrInt<0, 1_000_000>>, +} + +impl MergeWith<DndEdgeViewScrollPart> for DndEdgeViewScroll { + fn merge_with(&mut self, part: &DndEdgeViewScrollPart) { + merge!((self, part), trigger_width, max_speed); + merge_clone!((self, part), delay_ms); + } +} + +#[derive(Debug, Clone, Copy, PartialEq)] pub struct DndEdgeWorkspaceSwitch { - #[knuffel(child, unwrap(argument), default = Self::default().trigger_height)] - pub trigger_height: FloatOrInt<0, 65535>, - #[knuffel(child, unwrap(argument), default = Self::default().delay_ms)] + pub trigger_height: f64, pub delay_ms: u16, - #[knuffel(child, unwrap(argument), default = Self::default().max_speed)] - pub max_speed: FloatOrInt<0, 1_000_000>, + pub max_speed: f64, } impl Default for DndEdgeWorkspaceSwitch { fn default() -> Self { Self { - trigger_height: FloatOrInt(50.), + trigger_height: 50., delay_ms: 100, - max_speed: FloatOrInt(1500.), + max_speed: 1500., } } } +#[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)] +pub struct DndEdgeWorkspaceSwitchPart { + #[knuffel(child, unwrap(argument))] + pub trigger_height: Option<FloatOrInt<0, 65535>>, + #[knuffel(child, unwrap(argument))] + pub delay_ms: Option<u16>, + #[knuffel(child, unwrap(argument))] + pub max_speed: Option<FloatOrInt<0, 1_000_000>>, +} + +impl MergeWith<DndEdgeWorkspaceSwitchPart> for DndEdgeWorkspaceSwitch { + fn merge_with(&mut self, part: &DndEdgeWorkspaceSwitchPart) { + merge!((self, part), trigger_height, max_speed); + merge_clone!((self, part), delay_ms); + } +} + #[derive(knuffel::Decode, Debug, Default, Clone, Copy, PartialEq)] pub struct HotCorners { #[knuffel(child)] diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 7a07b71b..ab63361d 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -192,7 +192,7 @@ where "hotkey-overlay" => m_merge!(hotkey_overlay), "config-notification" => m_merge!(config_notification), "animations" => m_replace!(animations), - "gestures" => m_replace!(gestures), + "gestures" => m_merge!(gestures), "overview" => m_merge!(overview), "xwayland-satellite" => m_merge!(xwayland_satellite), "switch-events" => m_merge!(switch_events), @@ -1433,22 +1433,14 @@ mod tests { }, gestures: Gestures { dnd_edge_view_scroll: DndEdgeViewScroll { - trigger_width: FloatOrInt( - 10.0, - ), + trigger_width: 10.0, delay_ms: 100, - max_speed: FloatOrInt( - 50.0, - ), + max_speed: 50.0, }, dnd_edge_workspace_switch: DndEdgeWorkspaceSwitch { - trigger_height: FloatOrInt( - 50.0, - ), + trigger_height: 50.0, delay_ms: 100, - max_speed: FloatOrInt( - 1500.0, - ), + max_speed: 1500.0, }, hot_corners: HotCorners { off: false, |
