diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-29 13:45:29 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-29 13:56:26 +0300 |
| commit | 1d3820a064f1f3b686eb6e8a1aab155681a96457 (patch) | |
| tree | 1e2d5a51bc3db5aadfed04444ea5a60b8051c5cf /src/layout/mod.rs | |
| parent | 1c749f578c44daa044bce30c2d3f22eb45970e4b (diff) | |
| download | niri-1d3820a064f1f3b686eb6e8a1aab155681a96457.tar.gz niri-1d3820a064f1f3b686eb6e8a1aab155681a96457.tar.bz2 niri-1d3820a064f1f3b686eb6e8a1aab155681a96457.zip | |
layout: Do not update original output for named workspaces upon adding windows
The way named workspaces are generally used makes them more "attached" to their
original output.
For example, you have a two-monitor setup with named workspaces on both. When
you disconnect the monitor to go somewhere and work for a while, then return,
you probably want your named workspaces to return to where they were on your
second monitor.
This is in contrast to unnamed workspaces which are more transient and should
more easily follow you wherever you're working.
Diffstat (limited to 'src/layout/mod.rs')
| -rw-r--r-- | src/layout/mod.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 17c97592..264bb298 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -6074,6 +6074,36 @@ mod tests { } #[test] + fn named_workspaces_dont_update_original_output_on_adding_window() { + let ops = [ + Op::AddOutput(1), + Op::SetWorkspaceName { + new_ws_name: 1, + ws_name: None, + }, + Op::AddOutput(2), + Op::RemoveOutput(1), + Op::FocusWorkspaceUp, + // Adding a window updates the original output for unnamed workspaces. + Op::AddWindow { + params: TestWindowParams::new(1), + }, + // Connecting the previous output should move the named workspace back since its + // original output wasn't updated. + Op::AddOutput(1), + ]; + + let layout = check_ops(&ops); + let (mon, _, ws) = layout + .workspaces() + .find(|(_, _, ws)| ws.name().is_some()) + .unwrap(); + assert!(ws.name().is_some()); // Sanity check. + let mon = mon.unwrap(); + assert_eq!(mon.output_name(), "output1"); + } + + #[test] fn workspaces_update_original_output_on_moving_to_same_output() { let ops = [ Op::AddOutput(1), |
