mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
Add move-column-to-monitor* binds
As opposed to move-window-to-monitor*
This commit is contained in:
@@ -421,6 +421,10 @@ pub enum Action {
|
|||||||
MoveWindowToMonitorRight,
|
MoveWindowToMonitorRight,
|
||||||
MoveWindowToMonitorDown,
|
MoveWindowToMonitorDown,
|
||||||
MoveWindowToMonitorUp,
|
MoveWindowToMonitorUp,
|
||||||
|
MoveColumnToMonitorLeft,
|
||||||
|
MoveColumnToMonitorRight,
|
||||||
|
MoveColumnToMonitorDown,
|
||||||
|
MoveColumnToMonitorUp,
|
||||||
SetWindowHeight(#[knuffel(argument, str)] SizeChange),
|
SetWindowHeight(#[knuffel(argument, str)] SizeChange),
|
||||||
SwitchPresetColumnWidth,
|
SwitchPresetColumnWidth,
|
||||||
MaximizeColumn,
|
MaximizeColumn,
|
||||||
|
|||||||
@@ -569,6 +569,30 @@ impl State {
|
|||||||
self.move_cursor_to_output(&output);
|
self.move_cursor_to_output(&output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Action::MoveColumnToMonitorLeft => {
|
||||||
|
if let Some(output) = self.niri.output_left() {
|
||||||
|
self.niri.layout.move_column_to_output(&output);
|
||||||
|
self.move_cursor_to_output(&output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Action::MoveColumnToMonitorRight => {
|
||||||
|
if let Some(output) = self.niri.output_right() {
|
||||||
|
self.niri.layout.move_column_to_output(&output);
|
||||||
|
self.move_cursor_to_output(&output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Action::MoveColumnToMonitorDown => {
|
||||||
|
if let Some(output) = self.niri.output_down() {
|
||||||
|
self.niri.layout.move_column_to_output(&output);
|
||||||
|
self.move_cursor_to_output(&output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Action::MoveColumnToMonitorUp => {
|
||||||
|
if let Some(output) = self.niri.output_up() {
|
||||||
|
self.niri.layout.move_column_to_output(&output);
|
||||||
|
self.move_cursor_to_output(&output);
|
||||||
|
}
|
||||||
|
}
|
||||||
Action::SetColumnWidth(change) => {
|
Action::SetColumnWidth(change) => {
|
||||||
self.niri.layout.set_column_width(change);
|
self.niri.layout.set_column_width(change);
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-1
@@ -49,7 +49,7 @@ use smithay::wayland::shell::xdg::SurfaceCachedState;
|
|||||||
pub use self::monitor::MonitorRenderElement;
|
pub use self::monitor::MonitorRenderElement;
|
||||||
use self::monitor::{Monitor, WorkspaceSwitch, WorkspaceSwitchGesture};
|
use self::monitor::{Monitor, WorkspaceSwitch, WorkspaceSwitchGesture};
|
||||||
use self::workspace::{
|
use self::workspace::{
|
||||||
compute_working_area, ColumnWidth, OutputId, Workspace, WorkspaceRenderElement,
|
compute_working_area, Column, ColumnWidth, OutputId, Workspace, WorkspaceRenderElement,
|
||||||
};
|
};
|
||||||
use crate::animation::Animation;
|
use crate::animation::Animation;
|
||||||
use crate::utils::output_size;
|
use crate::utils::output_size;
|
||||||
@@ -457,6 +457,29 @@ impl<W: LayoutElement> Layout<W> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn add_column_by_idx(
|
||||||
|
&mut self,
|
||||||
|
monitor_idx: usize,
|
||||||
|
workspace_idx: usize,
|
||||||
|
column: Column<W>,
|
||||||
|
activate: bool,
|
||||||
|
) {
|
||||||
|
let MonitorSet::Normal {
|
||||||
|
monitors,
|
||||||
|
active_monitor_idx,
|
||||||
|
..
|
||||||
|
} = &mut self.monitor_set
|
||||||
|
else {
|
||||||
|
panic!()
|
||||||
|
};
|
||||||
|
|
||||||
|
monitors[monitor_idx].add_column(workspace_idx, column, activate);
|
||||||
|
|
||||||
|
if activate {
|
||||||
|
*active_monitor_idx = monitor_idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Adds a new window to the layout.
|
/// Adds a new window to the layout.
|
||||||
///
|
///
|
||||||
/// Returns an output that the window was added to, if there were any outputs.
|
/// Returns an output that the window was added to, if there were any outputs.
|
||||||
@@ -1205,6 +1228,30 @@ impl<W: LayoutElement> Layout<W> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn move_column_to_output(&mut self, output: &Output) {
|
||||||
|
if let MonitorSet::Normal {
|
||||||
|
monitors,
|
||||||
|
active_monitor_idx,
|
||||||
|
..
|
||||||
|
} = &mut self.monitor_set
|
||||||
|
{
|
||||||
|
let new_idx = monitors
|
||||||
|
.iter()
|
||||||
|
.position(|mon| &mon.output == output)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let current = &mut monitors[*active_monitor_idx];
|
||||||
|
let ws = current.active_workspace();
|
||||||
|
if !ws.has_windows() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let column = ws.remove_column_by_idx(ws.active_column_idx);
|
||||||
|
|
||||||
|
let workspace_idx = monitors[new_idx].active_workspace_idx;
|
||||||
|
self.add_column_by_idx(new_idx, workspace_idx, column, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn move_window_to_output(&mut self, window: W, output: &Output) {
|
pub fn move_window_to_output(&mut self, window: W, output: &Output) {
|
||||||
if !matches!(&self.monitor_set, MonitorSet::Normal { .. }) {
|
if !matches!(&self.monitor_set, MonitorSet::Normal { .. }) {
|
||||||
return;
|
return;
|
||||||
@@ -1635,6 +1682,7 @@ mod tests {
|
|||||||
MoveWorkspaceDown,
|
MoveWorkspaceDown,
|
||||||
MoveWorkspaceUp,
|
MoveWorkspaceUp,
|
||||||
MoveWindowToOutput(#[proptest(strategy = "1..=5u8")] u8),
|
MoveWindowToOutput(#[proptest(strategy = "1..=5u8")] u8),
|
||||||
|
MoveColumnToOutput(#[proptest(strategy = "1..=5u8")] u8),
|
||||||
SwitchPresetColumnWidth,
|
SwitchPresetColumnWidth,
|
||||||
MaximizeColumn,
|
MaximizeColumn,
|
||||||
SetColumnWidth(#[proptest(strategy = "arbitrary_size_change()")] SizeChange),
|
SetColumnWidth(#[proptest(strategy = "arbitrary_size_change()")] SizeChange),
|
||||||
@@ -1764,6 +1812,14 @@ mod tests {
|
|||||||
|
|
||||||
layout.move_to_output(&output);
|
layout.move_to_output(&output);
|
||||||
}
|
}
|
||||||
|
Op::MoveColumnToOutput(id) => {
|
||||||
|
let name = format!("output{id}");
|
||||||
|
let Some(output) = layout.outputs().find(|o| o.name() == name).cloned() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout.move_column_to_output(&output);
|
||||||
|
}
|
||||||
Op::MoveWorkspaceDown => layout.move_workspace_down(),
|
Op::MoveWorkspaceDown => layout.move_workspace_down(),
|
||||||
Op::MoveWorkspaceUp => layout.move_workspace_up(),
|
Op::MoveWorkspaceUp => layout.move_workspace_up(),
|
||||||
Op::SwitchPresetColumnWidth => layout.toggle_width(),
|
Op::SwitchPresetColumnWidth => layout.toggle_width(),
|
||||||
|
|||||||
Reference in New Issue
Block a user