Implement --focus for MoveColumnToWorkspace/Up/Down

This commit is contained in:
Aberter Yan
2025-05-01 20:36:33 +03:00
committed by Ivan Molodetskikh
parent 02baad91ac
commit eb590c5346
7 changed files with 184 additions and 80 deletions
+14 -7
View File
@@ -1734,9 +1734,12 @@ pub enum Action {
reference: WorkspaceReference, reference: WorkspaceReference,
focus: bool, focus: bool,
}, },
MoveColumnToWorkspaceDown, MoveColumnToWorkspaceDown(#[knuffel(property(name = "focus"), default = true)] bool),
MoveColumnToWorkspaceUp, MoveColumnToWorkspaceUp(#[knuffel(property(name = "focus"), default = true)] bool),
MoveColumnToWorkspace(#[knuffel(argument)] WorkspaceReference), MoveColumnToWorkspace(
#[knuffel(argument)] WorkspaceReference,
#[knuffel(property(name = "focus"), default = true)] bool,
),
MoveWorkspaceDown, MoveWorkspaceDown,
MoveWorkspaceUp, MoveWorkspaceUp,
MoveWorkspaceToIndex(#[knuffel(argument)] usize), MoveWorkspaceToIndex(#[knuffel(argument)] usize),
@@ -1970,10 +1973,14 @@ impl From<niri_ipc::Action> for Action {
reference: WorkspaceReference::from(reference), reference: WorkspaceReference::from(reference),
focus, focus,
}, },
niri_ipc::Action::MoveColumnToWorkspaceDown {} => Self::MoveColumnToWorkspaceDown, niri_ipc::Action::MoveColumnToWorkspaceDown { focus } => {
niri_ipc::Action::MoveColumnToWorkspaceUp {} => Self::MoveColumnToWorkspaceUp, Self::MoveColumnToWorkspaceDown(focus)
niri_ipc::Action::MoveColumnToWorkspace { reference } => { }
Self::MoveColumnToWorkspace(WorkspaceReference::from(reference)) niri_ipc::Action::MoveColumnToWorkspaceUp { focus } => {
Self::MoveColumnToWorkspaceUp(focus)
}
niri_ipc::Action::MoveColumnToWorkspace { reference, focus } => {
Self::MoveColumnToWorkspace(WorkspaceReference::from(reference), focus)
} }
niri_ipc::Action::MoveWorkspaceDown {} => Self::MoveWorkspaceDown, niri_ipc::Action::MoveWorkspaceDown {} => Self::MoveWorkspaceDown,
niri_ipc::Action::MoveWorkspaceUp {} => Self::MoveWorkspaceUp, niri_ipc::Action::MoveWorkspaceUp {} => Self::MoveWorkspaceUp,
+23 -2
View File
@@ -438,14 +438,35 @@ pub enum Action {
focus: bool, focus: bool,
}, },
/// Move the focused column to the workspace below. /// Move the focused column to the workspace below.
MoveColumnToWorkspaceDown {}, MoveColumnToWorkspaceDown {
/// Whether the focus should follow the target workspace.
///
/// If `true` (the default), the focus will follow the column to the new workspace. If
/// `false`, the focus will remain on the original workspace.
#[cfg_attr(feature = "clap", arg(long, action = clap::ArgAction::Set, default_value_t = true))]
focus: bool,
},
/// Move the focused column to the workspace above. /// Move the focused column to the workspace above.
MoveColumnToWorkspaceUp {}, MoveColumnToWorkspaceUp {
/// Whether the focus should follow the target workspace.
///
/// If `true` (the default), the focus will follow the column to the new workspace. If
/// `false`, the focus will remain on the original workspace.
#[cfg_attr(feature = "clap", arg(long, action = clap::ArgAction::Set, default_value_t = true))]
focus: bool,
},
/// Move the focused column to a workspace by reference (index or name). /// Move the focused column to a workspace by reference (index or name).
MoveColumnToWorkspace { MoveColumnToWorkspace {
/// Reference (index or name) of the workspace to move the column to. /// Reference (index or name) of the workspace to move the column to.
#[cfg_attr(feature = "clap", arg())] #[cfg_attr(feature = "clap", arg())]
reference: WorkspaceReferenceArg, reference: WorkspaceReferenceArg,
/// Whether the focus should follow the target workspace.
///
/// If `true` (the default), the focus will follow the column to the new workspace. If
/// `false`, the focus will remain on the original workspace.
#[cfg_attr(feature = "clap", arg(long, action = clap::ArgAction::Set, default_value_t = true))]
focus: bool,
}, },
/// Move the focused workspace down. /// Move the focused workspace down.
MoveWorkspaceDown {}, MoveWorkspaceDown {},
+17 -15
View File
@@ -1230,19 +1230,19 @@ impl State {
} }
} }
} }
Action::MoveColumnToWorkspaceDown => { Action::MoveColumnToWorkspaceDown(focus) => {
self.niri.layout.move_column_to_workspace_down(); self.niri.layout.move_column_to_workspace_down(focus);
self.maybe_warp_cursor_to_focus(); self.maybe_warp_cursor_to_focus();
// FIXME: granular // FIXME: granular
self.niri.queue_redraw_all(); self.niri.queue_redraw_all();
} }
Action::MoveColumnToWorkspaceUp => { Action::MoveColumnToWorkspaceUp(focus) => {
self.niri.layout.move_column_to_workspace_up(); self.niri.layout.move_column_to_workspace_up(focus);
self.maybe_warp_cursor_to_focus(); self.maybe_warp_cursor_to_focus();
// FIXME: granular // FIXME: granular
self.niri.queue_redraw_all(); self.niri.queue_redraw_all();
} }
Action::MoveColumnToWorkspace(reference) => { Action::MoveColumnToWorkspace(reference, focus) => {
if let Some((mut output, index)) = if let Some((mut output, index)) =
self.niri.find_output_and_workspace_index(reference) self.niri.find_output_and_workspace_index(reference)
{ {
@@ -1255,14 +1255,16 @@ impl State {
if let Some(output) = output { if let Some(output) = output {
self.niri self.niri
.layout .layout
.move_column_to_workspace_on_output(&output, index); .move_column_to_output(&output, Some(index), focus);
if !self.maybe_warp_cursor_to_focus_centered() { if focus && !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
} }
} else { } else {
self.niri.layout.move_column_to_workspace(index); self.niri.layout.move_column_to_workspace(index, focus);
if focus {
self.maybe_warp_cursor_to_focus(); self.maybe_warp_cursor_to_focus();
} }
}
// FIXME: granular // FIXME: granular
self.niri.queue_redraw_all(); self.niri.queue_redraw_all();
@@ -1639,7 +1641,7 @@ impl State {
} }
Action::MoveColumnToMonitorLeft => { Action::MoveColumnToMonitorLeft => {
if let Some(output) = self.niri.output_left() { if let Some(output) = self.niri.output_left() {
self.niri.layout.move_column_to_output(&output); self.niri.layout.move_column_to_output(&output, None, true);
self.niri.layout.focus_output(&output); self.niri.layout.focus_output(&output);
if !self.maybe_warp_cursor_to_focus_centered() { if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
@@ -1648,7 +1650,7 @@ impl State {
} }
Action::MoveColumnToMonitorRight => { Action::MoveColumnToMonitorRight => {
if let Some(output) = self.niri.output_right() { if let Some(output) = self.niri.output_right() {
self.niri.layout.move_column_to_output(&output); self.niri.layout.move_column_to_output(&output, None, true);
self.niri.layout.focus_output(&output); self.niri.layout.focus_output(&output);
if !self.maybe_warp_cursor_to_focus_centered() { if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
@@ -1657,7 +1659,7 @@ impl State {
} }
Action::MoveColumnToMonitorDown => { Action::MoveColumnToMonitorDown => {
if let Some(output) = self.niri.output_down() { if let Some(output) = self.niri.output_down() {
self.niri.layout.move_column_to_output(&output); self.niri.layout.move_column_to_output(&output, None, true);
self.niri.layout.focus_output(&output); self.niri.layout.focus_output(&output);
if !self.maybe_warp_cursor_to_focus_centered() { if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
@@ -1666,7 +1668,7 @@ impl State {
} }
Action::MoveColumnToMonitorUp => { Action::MoveColumnToMonitorUp => {
if let Some(output) = self.niri.output_up() { if let Some(output) = self.niri.output_up() {
self.niri.layout.move_column_to_output(&output); self.niri.layout.move_column_to_output(&output, None, true);
self.niri.layout.focus_output(&output); self.niri.layout.focus_output(&output);
if !self.maybe_warp_cursor_to_focus_centered() { if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
@@ -1675,7 +1677,7 @@ impl State {
} }
Action::MoveColumnToMonitorPrevious => { Action::MoveColumnToMonitorPrevious => {
if let Some(output) = self.niri.output_previous() { if let Some(output) = self.niri.output_previous() {
self.niri.layout.move_column_to_output(&output); self.niri.layout.move_column_to_output(&output, None, true);
self.niri.layout.focus_output(&output); self.niri.layout.focus_output(&output);
if !self.maybe_warp_cursor_to_focus_centered() { if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
@@ -1684,7 +1686,7 @@ impl State {
} }
Action::MoveColumnToMonitorNext => { Action::MoveColumnToMonitorNext => {
if let Some(output) = self.niri.output_next() { if let Some(output) = self.niri.output_next() {
self.niri.layout.move_column_to_output(&output); self.niri.layout.move_column_to_output(&output, None, true);
self.niri.layout.focus_output(&output); self.niri.layout.focus_output(&output);
if !self.maybe_warp_cursor_to_focus_centered() { if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
@@ -1693,7 +1695,7 @@ impl State {
} }
Action::MoveColumnToMonitor(output) => { Action::MoveColumnToMonitor(output) => {
if let Some(output) = self.niri.output_by_name_match(&output).cloned() { if let Some(output) = self.niri.output_by_name_match(&output).cloned() {
self.niri.layout.move_column_to_output(&output); self.niri.layout.move_column_to_output(&output, None, true);
self.niri.layout.focus_output(&output); self.niri.layout.focus_output(&output);
if !self.maybe_warp_cursor_to_focus_centered() { if !self.maybe_warp_cursor_to_focus_centered() {
self.move_cursor_to_output(&output); self.move_cursor_to_output(&output);
+18 -17
View File
@@ -1888,7 +1888,7 @@ impl<W: LayoutElement> Layout<W> {
} }
} }
self.move_column_to_output(output); self.move_column_to_output(output, None, true);
true true
} }
@@ -1899,7 +1899,7 @@ impl<W: LayoutElement> Layout<W> {
} }
} }
self.move_column_to_output(output); self.move_column_to_output(output, None, true);
true true
} }
@@ -2213,31 +2213,25 @@ impl<W: LayoutElement> Layout<W> {
monitor.move_to_workspace(window, idx, activate); monitor.move_to_workspace(window, idx, activate);
} }
pub fn move_column_to_workspace_up(&mut self) { pub fn move_column_to_workspace_up(&mut self, activate: bool) {
let Some(monitor) = self.active_monitor() else { let Some(monitor) = self.active_monitor() else {
return; return;
}; };
monitor.move_column_to_workspace_up(); monitor.move_column_to_workspace_up(activate);
} }
pub fn move_column_to_workspace_down(&mut self) { pub fn move_column_to_workspace_down(&mut self, activate: bool) {
let Some(monitor) = self.active_monitor() else { let Some(monitor) = self.active_monitor() else {
return; return;
}; };
monitor.move_column_to_workspace_down(); monitor.move_column_to_workspace_down(activate);
} }
pub fn move_column_to_workspace(&mut self, idx: usize) { pub fn move_column_to_workspace(&mut self, idx: usize, activate: bool) {
let Some(monitor) = self.active_monitor() else { let Some(monitor) = self.active_monitor() else {
return; return;
}; };
monitor.move_column_to_workspace(idx); monitor.move_column_to_workspace(idx, activate);
}
pub fn move_column_to_workspace_on_output(&mut self, output: &Output, idx: usize) {
self.move_column_to_output(output);
self.focus_output(output);
self.move_column_to_workspace(idx);
} }
pub fn switch_workspace_up(&mut self) { pub fn switch_workspace_up(&mut self) {
@@ -3559,7 +3553,12 @@ impl<W: LayoutElement> Layout<W> {
} }
} }
pub fn move_column_to_output(&mut self, output: &Output) { pub fn move_column_to_output(
&mut self,
output: &Output,
target_ws_idx: Option<usize>,
activate: bool,
) {
if let MonitorSet::Normal { if let MonitorSet::Normal {
monitors, monitors,
active_monitor_idx, active_monitor_idx,
@@ -3583,8 +3582,10 @@ impl<W: LayoutElement> Layout<W> {
return; return;
}; };
let workspace_idx = monitors[new_idx].active_workspace_idx; let workspace_idx = target_ws_idx
self.add_column_by_idx(new_idx, workspace_idx, column, true); .unwrap_or(monitors[new_idx].active_workspace_idx)
.min(monitors[new_idx].workspaces.len() - 1);
self.add_column_by_idx(new_idx, workspace_idx, column, activate);
} }
} }
+6 -6
View File
@@ -738,7 +738,7 @@ impl<W: LayoutElement> Monitor<W> {
} }
} }
pub fn move_column_to_workspace_up(&mut self) { pub fn move_column_to_workspace_up(&mut self, activate: bool) {
let source_workspace_idx = self.active_workspace_idx; let source_workspace_idx = self.active_workspace_idx;
let new_idx = source_workspace_idx.saturating_sub(1); let new_idx = source_workspace_idx.saturating_sub(1);
@@ -756,10 +756,10 @@ impl<W: LayoutElement> Monitor<W> {
return; return;
}; };
self.add_column(new_idx, column, true); self.add_column(new_idx, column, activate);
} }
pub fn move_column_to_workspace_down(&mut self) { pub fn move_column_to_workspace_down(&mut self, activate: bool) {
let source_workspace_idx = self.active_workspace_idx; let source_workspace_idx = self.active_workspace_idx;
let new_idx = min(source_workspace_idx + 1, self.workspaces.len() - 1); let new_idx = min(source_workspace_idx + 1, self.workspaces.len() - 1);
@@ -777,10 +777,10 @@ impl<W: LayoutElement> Monitor<W> {
return; return;
}; };
self.add_column(new_idx, column, true); self.add_column(new_idx, column, activate);
} }
pub fn move_column_to_workspace(&mut self, idx: usize) { pub fn move_column_to_workspace(&mut self, idx: usize, activate: bool) {
let source_workspace_idx = self.active_workspace_idx; let source_workspace_idx = self.active_workspace_idx;
let new_idx = min(idx, self.workspaces.len() - 1); let new_idx = min(idx, self.workspaces.len() - 1);
@@ -798,7 +798,7 @@ impl<W: LayoutElement> Monitor<W> {
return; return;
}; };
self.add_column(new_idx, column, true); self.add_column(new_idx, column, activate);
} }
pub fn switch_workspace_up(&mut self) { pub fn switch_workspace_up(&mut self) {
+93 -20
View File
@@ -473,9 +473,9 @@ enum Op {
#[proptest(strategy = "0..=4usize")] #[proptest(strategy = "0..=4usize")]
workspace_idx: usize, workspace_idx: usize,
}, },
MoveColumnToWorkspaceDown, MoveColumnToWorkspaceDown(bool),
MoveColumnToWorkspaceUp, MoveColumnToWorkspaceUp(bool),
MoveColumnToWorkspace(#[proptest(strategy = "0..=4usize")] usize), MoveColumnToWorkspace(#[proptest(strategy = "0..=4usize")] usize, bool),
MoveWorkspaceDown, MoveWorkspaceDown,
MoveWorkspaceUp, MoveWorkspaceUp,
MoveWorkspaceToIndex { MoveWorkspaceToIndex {
@@ -508,7 +508,13 @@ enum Op {
#[proptest(strategy = "proptest::option::of(0..=4usize)")] #[proptest(strategy = "proptest::option::of(0..=4usize)")]
target_ws_idx: Option<usize>, target_ws_idx: Option<usize>,
}, },
MoveColumnToOutput(#[proptest(strategy = "1..=5usize")] usize), MoveColumnToOutput {
#[proptest(strategy = "1..=5usize")]
output_id: usize,
#[proptest(strategy = "proptest::option::of(0..=4usize)")]
target_ws_idx: Option<usize>,
activate: bool,
},
SwitchPresetColumnWidth, SwitchPresetColumnWidth,
SwitchPresetWindowWidth { SwitchPresetWindowWidth {
#[proptest(strategy = "proptest::option::of(1..=5usize)")] #[proptest(strategy = "proptest::option::of(1..=5usize)")]
@@ -1074,9 +1080,9 @@ impl Op {
let window_id = window_id.filter(|id| layout.has_window(id)); let window_id = window_id.filter(|id| layout.has_window(id));
layout.move_to_workspace(window_id.as_ref(), workspace_idx, ActivateWindow::Smart); layout.move_to_workspace(window_id.as_ref(), workspace_idx, ActivateWindow::Smart);
} }
Op::MoveColumnToWorkspaceDown => layout.move_column_to_workspace_down(), Op::MoveColumnToWorkspaceDown(focus) => layout.move_column_to_workspace_down(focus),
Op::MoveColumnToWorkspaceUp => layout.move_column_to_workspace_up(), Op::MoveColumnToWorkspaceUp(focus) => layout.move_column_to_workspace_up(focus),
Op::MoveColumnToWorkspace(idx) => layout.move_column_to_workspace(idx), Op::MoveColumnToWorkspace(idx, focus) => layout.move_column_to_workspace(idx, focus),
Op::MoveWindowToOutput { Op::MoveWindowToOutput {
window_id, window_id,
output_id: id, output_id: id,
@@ -1097,13 +1103,17 @@ impl Op {
ActivateWindow::Smart, ActivateWindow::Smart,
); );
} }
Op::MoveColumnToOutput(id) => { Op::MoveColumnToOutput {
output_id: id,
target_ws_idx,
activate,
} => {
let name = format!("output{id}"); let name = format!("output{id}");
let Some(output) = layout.outputs().find(|o| o.name() == name).cloned() else { let Some(output) = layout.outputs().find(|o| o.name() == name).cloned() else {
return; return;
}; };
layout.move_column_to_output(&output); layout.move_column_to_output(&output, target_ws_idx, activate);
} }
Op::MoveWorkspaceDown => layout.move_workspace_down(), Op::MoveWorkspaceDown => layout.move_workspace_down(),
Op::MoveWorkspaceUp => layout.move_workspace_up(), Op::MoveWorkspaceUp => layout.move_workspace_up(),
@@ -1560,10 +1570,10 @@ fn operations_dont_panic() {
window_id: None, window_id: None,
workspace_idx: 2, workspace_idx: 2,
}, },
Op::MoveColumnToWorkspaceDown, Op::MoveColumnToWorkspaceDown(true),
Op::MoveColumnToWorkspaceUp, Op::MoveColumnToWorkspaceUp(true),
Op::MoveColumnToWorkspace(1), Op::MoveColumnToWorkspace(1, true),
Op::MoveColumnToWorkspace(2), Op::MoveColumnToWorkspace(2, true),
Op::MoveWindowDown, Op::MoveWindowDown,
Op::MoveWindowDownOrToWorkspaceDown, Op::MoveWindowDownOrToWorkspaceDown,
Op::MoveWindowUp, Op::MoveWindowUp,
@@ -1735,11 +1745,11 @@ fn operations_from_starting_state_dont_panic() {
window_id: None, window_id: None,
workspace_idx: 3, workspace_idx: 3,
}, },
Op::MoveColumnToWorkspaceDown, Op::MoveColumnToWorkspaceDown(true),
Op::MoveColumnToWorkspaceUp, Op::MoveColumnToWorkspaceUp(true),
Op::MoveColumnToWorkspace(1), Op::MoveColumnToWorkspace(1, true),
Op::MoveColumnToWorkspace(2), Op::MoveColumnToWorkspace(2, true),
Op::MoveColumnToWorkspace(3), Op::MoveColumnToWorkspace(3, true),
Op::MoveWindowDown, Op::MoveWindowDown,
Op::MoveWindowDownOrToWorkspaceDown, Op::MoveWindowDownOrToWorkspaceDown,
Op::MoveWindowUp, Op::MoveWindowUp,
@@ -2058,8 +2068,8 @@ fn workspace_transfer_during_switch_gets_cleaned_up() {
}, },
Op::RemoveOutput(1), Op::RemoveOutput(1),
Op::AddOutput(2), Op::AddOutput(2),
Op::MoveColumnToWorkspaceDown, Op::MoveColumnToWorkspaceDown(true),
Op::MoveColumnToWorkspaceDown, Op::MoveColumnToWorkspaceDown(true),
Op::AddOutput(1), Op::AddOutput(1),
]; ];
@@ -3354,6 +3364,69 @@ fn interactive_resize_on_pending_unfullscreen_column() {
check_ops(&ops); check_ops(&ops);
} }
#[test]
fn move_column_to_workspace_unfocused_with_multiple_monitors() {
let ops = [
Op::AddOutput(1),
Op::SetWorkspaceName {
new_ws_name: 101,
ws_name: None,
},
Op::AddWindow {
params: TestWindowParams::new(1),
},
Op::FocusWorkspaceDown,
Op::SetWorkspaceName {
new_ws_name: 102,
ws_name: None,
},
Op::AddWindow {
params: TestWindowParams::new(2),
},
Op::AddOutput(2),
Op::FocusOutput(2),
Op::SetWorkspaceName {
new_ws_name: 201,
ws_name: None,
},
Op::AddWindow {
params: TestWindowParams::new(3),
},
Op::AddWindow {
params: TestWindowParams::new(4),
},
Op::MoveColumnToOutput {
output_id: 1,
target_ws_idx: Some(0),
activate: false,
},
Op::FocusOutput(1),
];
let layout = check_ops(&ops);
assert_eq!(layout.active_workspace().unwrap().name().unwrap(), "ws102");
for (mon, win) in layout.windows() {
let mon = mon.unwrap();
let ws = mon
.workspaces
.iter()
.find(|w| w.has_window(win.id()))
.unwrap();
assert_eq!(
ws.name().unwrap(),
match win.id() {
1 | 4 => "ws101",
2 => "ws102",
3 => "ws201",
_ => unreachable!(),
}
);
}
}
#[test] #[test]
fn interactive_move_unfullscreen_to_floating_stops_dnd_scroll() { fn interactive_move_unfullscreen_to_floating_stops_dnd_scroll() {
let ops = [ let ops = [
+12 -12
View File
@@ -211,33 +211,33 @@ fn render(
]); ]);
// Prefer move-column-to-workspace-down, but fall back to move-window-to-workspace-down. // Prefer move-column-to-workspace-down, but fall back to move-window-to-workspace-down.
if binds if let Some(bind) = binds
.iter() .iter()
.any(|bind| bind.action == Action::MoveColumnToWorkspaceDown) .find(|bind| matches!(bind.action, Action::MoveColumnToWorkspaceDown(_)))
{ {
actions.push(&Action::MoveColumnToWorkspaceDown); actions.push(&bind.action);
} else if binds } else if binds
.iter() .iter()
.any(|bind| bind.action == Action::MoveWindowToWorkspaceDown) .any(|bind| matches!(bind.action, Action::MoveWindowToWorkspaceDown))
{ {
actions.push(&Action::MoveWindowToWorkspaceDown); actions.push(&Action::MoveWindowToWorkspaceDown);
} else { } else {
actions.push(&Action::MoveColumnToWorkspaceDown); actions.push(&Action::MoveColumnToWorkspaceDown(true));
} }
// Same for -up. // Same for -up.
if binds if let Some(bind) = binds
.iter() .iter()
.any(|bind| bind.action == Action::MoveColumnToWorkspaceUp) .find(|bind| matches!(bind.action, Action::MoveColumnToWorkspaceUp(_)))
{ {
actions.push(&Action::MoveColumnToWorkspaceUp); actions.push(&bind.action);
} else if binds } else if binds
.iter() .iter()
.any(|bind| bind.action == Action::MoveWindowToWorkspaceUp) .any(|bind| matches!(bind.action, Action::MoveWindowToWorkspaceUp))
{ {
actions.push(&Action::MoveWindowToWorkspaceUp); actions.push(&Action::MoveWindowToWorkspaceUp);
} else { } else {
actions.push(&Action::MoveColumnToWorkspaceUp); actions.push(&Action::MoveColumnToWorkspaceUp(true));
} }
actions.extend(&[ actions.extend(&[
@@ -424,8 +424,8 @@ fn action_name(action: &Action) -> String {
Action::MoveColumnRight => String::from("Move Column Right"), Action::MoveColumnRight => String::from("Move Column Right"),
Action::FocusWorkspaceDown => String::from("Switch Workspace Down"), Action::FocusWorkspaceDown => String::from("Switch Workspace Down"),
Action::FocusWorkspaceUp => String::from("Switch Workspace Up"), Action::FocusWorkspaceUp => String::from("Switch Workspace Up"),
Action::MoveColumnToWorkspaceDown => String::from("Move Column to Workspace Down"), Action::MoveColumnToWorkspaceDown(_) => String::from("Move Column to Workspace Down"),
Action::MoveColumnToWorkspaceUp => String::from("Move Column to Workspace Up"), Action::MoveColumnToWorkspaceUp(_) => String::from("Move Column to Workspace Up"),
Action::MoveWindowToWorkspaceDown => String::from("Move Window to Workspace Down"), Action::MoveWindowToWorkspaceDown => String::from("Move Window to Workspace Down"),
Action::MoveWindowToWorkspaceUp => String::from("Move Window to Workspace Up"), Action::MoveWindowToWorkspaceUp => String::from("Move Window to Workspace Up"),
Action::SwitchPresetColumnWidth => String::from("Switch Preset Column Widths"), Action::SwitchPresetColumnWidth => String::from("Switch Preset Column Widths"),