From 90f24da6317dea022fff89d538c9ba21a580e97b Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Thu, 6 Feb 2025 08:42:09 +0300 Subject: Move ColumnDisplay to niri-ipc --- niri-config/src/lib.rs | 16 +++------------- niri-ipc/src/lib.rs | 22 ++++++++++++++++++++++ src/layout/mod.rs | 6 +++--- src/layout/scrolling.rs | 4 ++-- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index fe43f814..b3d45aff 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -14,7 +14,7 @@ use knuffel::Decode as _; use layer_rule::LayerRule; use miette::{miette, Context, IntoDiagnostic, NarratableReportHandler}; use niri_ipc::{ - ConfiguredMode, LayoutSwitchTarget, PositionChange, SizeChange, Transform, + ColumnDisplay, ConfiguredMode, LayoutSwitchTarget, PositionChange, SizeChange, Transform, WorkspaceReferenceArg, }; use smithay::backend::renderer::Color32F; @@ -458,7 +458,7 @@ pub struct Layout { pub always_center_single_column: bool, #[knuffel(child)] pub empty_workspace_above_first: bool, - #[knuffel(child, unwrap(argument), default)] + #[knuffel(child, unwrap(argument, str), default = Self::default().default_column_display)] pub default_column_display: ColumnDisplay, #[knuffel(child, unwrap(argument), default = Self::default().gaps)] pub gaps: FloatOrInt<0, 65535>, @@ -478,7 +478,7 @@ impl Default for Layout { center_focused_column: Default::default(), always_center_single_column: false, empty_workspace_above_first: false, - default_column_display: Default::default(), + default_column_display: ColumnDisplay::Normal, gaps: FloatOrInt(16.), struts: Default::default(), preset_window_heights: Default::default(), @@ -797,16 +797,6 @@ impl From for SizeChange { #[derive(Debug, Clone, Copy, PartialEq)] pub struct DefaultPresetSize(pub Option); -/// How windows display in a column. -#[derive(knuffel::DecodeScalar, Debug, Default, Clone, Copy, PartialEq, Eq)] -pub enum ColumnDisplay { - /// Windows arranged vertically, spread across the working area height. - #[default] - Normal, - /// Windows are in tabs. - Tabbed, -} - #[derive(knuffel::Decode, Debug, Default, Clone, Copy, PartialEq)] pub struct Struts { #[knuffel(child, unwrap(argument), default)] diff --git a/niri-ipc/src/lib.rs b/niri-ipc/src/lib.rs index c2bd2c3c..f6086250 100644 --- a/niri-ipc/src/lib.rs +++ b/niri-ipc/src/lib.rs @@ -690,6 +690,16 @@ pub enum LayoutSwitchTarget { Index(u8), } +/// How windows display in a column. +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)] +#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))] +pub enum ColumnDisplay { + /// Windows are tiled vertically across the working area height. + Normal, + /// Windows are in tabs. + Tabbed, +} + /// Output actions that niri can perform. // Variants in this enum should match the spelling of the ones in niri-config. Most thigs from // niri-config should be present here. @@ -1202,6 +1212,18 @@ impl FromStr for LayoutSwitchTarget { } } +impl FromStr for ColumnDisplay { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + match s { + "normal" => Ok(Self::Normal), + "tabbed" => Ok(Self::Tabbed), + _ => Err(r#"invalid column display, can be "normal" or "tabbed""#), + } + } +} + impl FromStr for Transform { type Err = &'static str; diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 54485617..d9121c07 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -39,10 +39,10 @@ use std::time::Duration; use monitor::MonitorAddWindowTarget; use niri_config::{ - CenterFocusedColumn, ColumnDisplay, Config, CornerRadius, FloatOrInt, PresetSize, Struts, + CenterFocusedColumn, Config, CornerRadius, FloatOrInt, PresetSize, Struts, Workspace as WorkspaceConfig, WorkspaceReference, }; -use niri_ipc::{PositionChange, SizeChange}; +use niri_ipc::{ColumnDisplay, PositionChange, SizeChange}; use scrolling::{Column, ColumnWidth, InsertHint, InsertPosition}; use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement; use smithay::backend::renderer::element::Id; @@ -341,7 +341,7 @@ impl Default for Options { center_focused_column: Default::default(), always_center_single_column: false, empty_workspace_above_first: false, - default_column_display: Default::default(), + default_column_display: ColumnDisplay::Normal, preset_column_widths: vec![ PresetSize::Proportion(1. / 3.), PresetSize::Proportion(0.5), diff --git a/src/layout/scrolling.rs b/src/layout/scrolling.rs index 9a5e081f..b7e240c2 100644 --- a/src/layout/scrolling.rs +++ b/src/layout/scrolling.rs @@ -3,8 +3,8 @@ use std::iter::{self, zip}; use std::rc::Rc; use std::time::Duration; -use niri_config::{CenterFocusedColumn, ColumnDisplay, CornerRadius, PresetSize, Struts}; -use niri_ipc::SizeChange; +use niri_config::{CenterFocusedColumn, CornerRadius, PresetSize, Struts}; +use niri_ipc::{ColumnDisplay, SizeChange}; use ordered_float::NotNan; use smithay::backend::renderer::gles::GlesRenderer; use smithay::utils::{Logical, Point, Rectangle, Scale, Serial, Size}; -- cgit