diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-08 19:25:45 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-04-08 19:25:45 +0400 |
| commit | 4856522a7a96f29179b5e723537d797f779c148d (patch) | |
| tree | 892e10c3ce859d1aab5c67711b097f38a391fd7f /src/layout/mod.rs | |
| parent | c1432bfa96e40c12f2d10174f8cd23ec9c2a68b0 (diff) | |
| download | niri-4856522a7a96f29179b5e723537d797f779c148d.tar.gz niri-4856522a7a96f29179b5e723537d797f779c148d.tar.bz2 niri-4856522a7a96f29179b5e723537d797f779c148d.zip | |
Implement window open shift in terms of window-movement
This removes the quite unobvious visual size, and fixes jerking when
opening multiple windows in quick succession.
Diffstat (limited to 'src/layout/mod.rs')
| -rw-r--r-- | src/layout/mod.rs | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 611f138f..9db7b140 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -1700,10 +1700,22 @@ impl<W: LayoutElement> Layout<W> { MonitorSet::Normal { monitors, .. } => { for mon in monitors { for ws in &mut mon.workspaces { - for col in &mut ws.columns { + for (col_idx, col) in ws.columns.iter_mut().enumerate() { for tile in &mut col.tiles { if tile.window().id() == window { tile.start_open_animation(); + + let offset = ws.column_x(col_idx + 1) - ws.column_x(col_idx); + if ws.active_column_idx <= col_idx { + for col in &mut ws.columns[col_idx + 1..] { + col.animate_move_from(-offset); + } + } else { + for col in &mut ws.columns[..col_idx] { + col.animate_move_from(offset); + } + } + return; } } @@ -1713,10 +1725,22 @@ impl<W: LayoutElement> Layout<W> { } MonitorSet::NoOutputs { workspaces, .. } => { for ws in workspaces { - for col in &mut ws.columns { + for (col_idx, col) in ws.columns.iter_mut().enumerate() { for tile in &mut col.tiles { if tile.window().id() == window { tile.start_open_animation(); + + let offset = ws.column_x(col_idx + 1) - ws.column_x(col_idx); + if ws.active_column_idx <= col_idx { + for col in &mut ws.columns[col_idx + 1..] { + col.animate_move_from(-offset); + } + } else { + for col in &mut ws.columns[..col_idx] { + col.animate_move_from(offset); + } + } + return; } } |
