aboutsummaryrefslogtreecommitdiff
path: root/src/layout/workspace.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout/workspace.rs')
-rw-r--r--src/layout/workspace.rs26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs
index 186b3d22..c659e2df 100644
--- a/src/layout/workspace.rs
+++ b/src/layout/workspace.rs
@@ -840,7 +840,7 @@ impl<W: LayoutElement> Workspace<W> {
}
column.active_tile_idx = min(column.active_tile_idx, column.tiles.len() - 1);
- column.update_tile_sizes(false);
+ column.update_tile_sizes(true);
window
}
@@ -1022,14 +1022,22 @@ impl<W: LayoutElement> Workspace<W> {
return;
};
- let col_idx = self
+ let (col_idx, tile_idx) = self
.columns
.iter()
- .position(|col| col.contains(window))
+ .enumerate()
+ .find_map(|(col_idx, col)| {
+ col.tiles
+ .iter()
+ .position(|tile| tile.window().id() == window)
+ .map(|tile_idx| (col_idx, tile_idx))
+ })
.unwrap();
- let removing_last = self.columns[col_idx].tiles.len() == 1;
+ let col = &self.columns[col_idx];
+ let removing_last = col.tiles.len() == 1;
let offset = self.column_x(col_idx + 1) - self.column_x(col_idx);
+ let offset_y = col.tile_y(tile_idx + 1) - col.tile_y(tile_idx);
let mut center = Point::from((0, 0));
center.x += tile.tile_size().w / 2;
@@ -1090,6 +1098,16 @@ impl<W: LayoutElement> Workspace<W> {
}
}
}
+
+ // Also move other windows in a column.
+ let col = &mut self.columns[col_idx];
+ for tile in &mut col.tiles[tile_idx + 1..] {
+ tile.animate_move_from_with_config(
+ Point::from((0, offset_y)),
+ self.options.animations.window_resize,
+ niri_config::Animation::default_window_resize(),
+ );
+ }
}
pub fn prepare_for_resize_animation(&mut self, window: &W::Id) {