diff options
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; } } |
