aboutsummaryrefslogtreecommitdiff
path: root/src/layout/mod.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-04-08 19:25:45 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-04-08 19:25:45 +0400
commit4856522a7a96f29179b5e723537d797f779c148d (patch)
tree892e10c3ce859d1aab5c67711b097f38a391fd7f /src/layout/mod.rs
parentc1432bfa96e40c12f2d10174f8cd23ec9c2a68b0 (diff)
downloadniri-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.rs28
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;
}
}