use niri_ipc::ColumnDisplay; use crate::appearance::{BlockOutFrom, BorderRule, CornerRadius, ShadowRule, TabIndicatorRule}; use crate::layout::DefaultPresetSize; use crate::utils::RegexEq; use crate::FloatOrInt; #[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)] pub struct WindowRule { #[knuffel(children(name = "match"))] pub matches: Vec, #[knuffel(children(name = "exclude"))] pub excludes: Vec, // Rules applied at initial configure. #[knuffel(child)] pub default_column_width: Option, #[knuffel(child)] pub default_window_height: Option, #[knuffel(child, unwrap(argument))] pub open_on_output: Option, #[knuffel(child, unwrap(argument))] pub open_on_workspace: Option, #[knuffel(child, unwrap(argument))] pub open_maximized: Option, #[knuffel(child, unwrap(argument))] pub open_maximized_to_edges: Option, #[knuffel(child, unwrap(argument))] pub open_fullscreen: Option, #[knuffel(child, unwrap(argument))] pub open_floating: Option, #[knuffel(child, unwrap(argument))] pub open_focused: Option, // Rules applied dynamically. #[knuffel(child, unwrap(argument))] pub min_width: Option, #[knuffel(child, unwrap(argument))] pub min_height: Option, #[knuffel(child, unwrap(argument))] pub max_width: Option, #[knuffel(child, unwrap(argument))] pub max_height: Option, #[knuffel(child, default)] pub focus_ring: BorderRule, #[knuffel(child, default)] pub border: BorderRule, #[knuffel(child, default)] pub shadow: ShadowRule, #[knuffel(child, default)] pub tab_indicator: TabIndicatorRule, #[knuffel(child, unwrap(argument))] pub draw_border_with_background: Option, #[knuffel(child, unwrap(argument))] pub opacity: Option, #[knuffel(child)] pub geometry_corner_radius: Option, #[knuffel(child, unwrap(argument))] pub clip_to_geometry: Option, #[knuffel(child, unwrap(argument))] pub baba_is_float: Option, #[knuffel(child, unwrap(argument))] pub block_out_from: Option, #[knuffel(child, unwrap(argument))] pub variable_refresh_rate: Option, #[knuffel(child, unwrap(argument, str))] pub default_column_display: Option, #[knuffel(child)] pub default_floating_position: Option, #[knuffel(child, unwrap(argument))] pub scroll_factor: Option>, #[knuffel(child, unwrap(argument))] pub tiled_state: Option, } #[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)] pub struct Match { #[knuffel(property, str)] pub app_id: Option, #[knuffel(property, str)] pub title: Option, #[knuffel(property)] pub is_active: Option, #[knuffel(property)] pub is_focused: Option, #[knuffel(property)] pub is_active_in_column: Option, #[knuffel(property)] pub is_floating: Option, #[knuffel(property)] pub is_window_cast_target: Option, #[knuffel(property)] pub is_urgent: Option, #[knuffel(property)] pub at_startup: Option, } #[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)] pub struct FloatingPosition { #[knuffel(property)] pub x: FloatOrInt<-65535, 65535>, #[knuffel(property)] pub y: FloatOrInt<-65535, 65535>, #[knuffel(property, default)] pub relative_to: RelativeTo, } #[derive(knuffel::DecodeScalar, Debug, Default, Clone, Copy, PartialEq, Eq)] pub enum RelativeTo { #[default] TopLeft, TopRight, BottomLeft, BottomRight, Top, Bottom, Left, Right, }