From 6c52077d922dce3a9b57c6785647b6befb700ac9 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sat, 28 Dec 2024 11:40:16 +0300 Subject: Add move-floating-window action --- niri-config/src/lib.rs | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'niri-config') diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 38391ed4..cfc1853c 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -12,7 +12,10 @@ use knuffel::errors::DecodeError; use knuffel::Decode as _; use layer_rule::LayerRule; use miette::{miette, Context, IntoDiagnostic, NarratableReportHandler}; -use niri_ipc::{ConfiguredMode, LayoutSwitchTarget, SizeChange, Transform, WorkspaceReferenceArg}; +use niri_ipc::{ + ConfiguredMode, LayoutSwitchTarget, PositionChange, SizeChange, Transform, + WorkspaceReferenceArg, +}; use smithay::backend::renderer::Color32F; use smithay::input::keyboard::keysyms::KEY_NoSymbol; use smithay::input::keyboard::xkb::{keysym_from_name, KEYSYM_CASE_INSENSITIVE}; @@ -1280,6 +1283,12 @@ pub enum Action { FocusFloating, FocusTiling, SwitchFocusBetweenFloatingAndTiling, + #[knuffel(skip)] + MoveFloatingWindowById { + id: Option, + x: PositionChange, + y: PositionChange, + }, } impl From for Action { @@ -1434,6 +1443,9 @@ impl From for Action { niri_ipc::Action::SwitchFocusBetweenFloatingAndTiling {} => { Self::SwitchFocusBetweenFloatingAndTiling } + niri_ipc::Action::MoveFloatingWindow { id, x, y } => { + Self::MoveFloatingWindowById { id, x, y } + } } } } @@ -2989,6 +3001,7 @@ pub fn set_miette_hook() -> Result<(), miette::InstallError> { #[cfg(test)] mod tests { use insta::{assert_debug_snapshot, assert_snapshot}; + use niri_ipc::PositionChange; use pretty_assertions::assert_eq; use super::*; @@ -3682,6 +3695,28 @@ mod tests { assert!("10% ".parse::().is_err()); } + #[test] + fn parse_position_change() { + assert_eq!( + "10".parse::().unwrap(), + PositionChange::SetFixed(10.), + ); + assert_eq!( + "+10".parse::().unwrap(), + PositionChange::AdjustFixed(10.), + ); + assert_eq!( + "-10".parse::().unwrap(), + PositionChange::AdjustFixed(-10.), + ); + + assert!("10%".parse::().is_err()); + assert!("+10%".parse::().is_err()); + assert!("-10%".parse::().is_err()); + assert!("-".parse::().is_err()); + assert!("10% ".parse::().is_err()); + } + #[test] fn parse_gradient_interpolation() { assert_eq!( -- cgit