use crate::utils::MergeWith; use crate::FloatOrInt; #[derive(Debug, Default, Clone, Copy, PartialEq)] pub struct Gestures { pub dnd_edge_view_scroll: DndEdgeViewScroll, pub dnd_edge_workspace_switch: DndEdgeWorkspaceSwitch, pub hot_corners: HotCorners, } #[derive(knuffel::Decode, Debug, Default, Clone, Copy, PartialEq)] pub struct GesturesPart { #[knuffel(child)] pub dnd_edge_view_scroll: Option, #[knuffel(child)] pub dnd_edge_workspace_switch: Option, #[knuffel(child)] pub hot_corners: Option, } impl MergeWith 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 { pub trigger_width: f64, pub delay_ms: u16, pub max_speed: f64, } impl Default for DndEdgeViewScroll { fn default() -> Self { Self { trigger_width: 30., // Taken from GTK 4. delay_ms: 100, max_speed: 1500., } } } #[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)] pub struct DndEdgeViewScrollPart { #[knuffel(child, unwrap(argument))] pub trigger_width: Option>, #[knuffel(child, unwrap(argument))] pub delay_ms: Option, #[knuffel(child, unwrap(argument))] pub max_speed: Option>, } impl MergeWith 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 { pub trigger_height: f64, pub delay_ms: u16, pub max_speed: f64, } impl Default for DndEdgeWorkspaceSwitch { fn default() -> Self { Self { trigger_height: 50., delay_ms: 100, max_speed: 1500., } } } #[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)] pub struct DndEdgeWorkspaceSwitchPart { #[knuffel(child, unwrap(argument))] pub trigger_height: Option>, #[knuffel(child, unwrap(argument))] pub delay_ms: Option, #[knuffel(child, unwrap(argument))] pub max_speed: Option>, } impl MergeWith 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)] pub off: bool, #[knuffel(child)] pub top_left: bool, #[knuffel(child)] pub top_right: bool, #[knuffel(child)] pub bottom_left: bool, #[knuffel(child)] pub bottom_right: bool, }