diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-07-09 09:50:46 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-07-09 09:50:46 +0400 |
| commit | 2e67152941f9aded7ec81f91f726820cd44e42ea (patch) | |
| tree | 77030f70df9a4c1afacd9c4a6fedcdb75c0e02e6 | |
| parent | 22bfec7259282c4e7f629b502e171dbf7580b5a1 (diff) | |
| download | niri-2e67152941f9aded7ec81f91f726820cd44e42ea.tar.gz niri-2e67152941f9aded7ec81f91f726820cd44e42ea.tar.bz2 niri-2e67152941f9aded7ec81f91f726820cd44e42ea.zip | |
Fix view offset anim restart on switching focus
| -rw-r--r-- | src/layout/workspace.rs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index 4b873fff..10ae7caa 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -768,13 +768,17 @@ impl<W: LayoutElement> Workspace<W> { config: niri_config::Animation, ) { let new_col_x = self.column_x(idx); - let from_view_offset = current_x - new_col_x; - self.view_offset = from_view_offset; + let old_col_x = current_x - self.view_offset; + let offset_delta = old_col_x - new_col_x; + self.view_offset += offset_delta; let pixel = 1. / self.scale.fractional_scale(); // If we're already animating towards that, don't restart it. if let Some(ViewOffsetAdjustment::Animation(anim)) = &mut self.view_offset_adj { + // Offset the animation for the active column change. + anim.offset(offset_delta); + let to_diff = new_view_offset - anim.to(); if (anim.value() - self.view_offset).abs() < pixel && to_diff.abs() < pixel { // Correct for any inaccuracy. |
