aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-02-06 08:42:09 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-02-10 07:29:33 -0800
commit90f24da6317dea022fff89d538c9ba21a580e97b (patch)
treeca678004687d8e323e89abc9aea09025c6631669
parentdf70140b3631bc1ffdaa2e27be621a35ef491a44 (diff)
downloadniri-90f24da6317dea022fff89d538c9ba21a580e97b.tar.gz
niri-90f24da6317dea022fff89d538c9ba21a580e97b.tar.bz2
niri-90f24da6317dea022fff89d538c9ba21a580e97b.zip
Move ColumnDisplay to niri-ipc
-rw-r--r--niri-config/src/lib.rs16
-rw-r--r--niri-ipc/src/lib.rs22
-rw-r--r--src/layout/mod.rs6
-rw-r--r--src/layout/scrolling.rs4
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<PresetSize> for SizeChange {
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct DefaultPresetSize(pub Option<PresetSize>);
-/// 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<Self, Self::Err> {
+ 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};