diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-10-05 09:28:07 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-10-15 09:04:16 +0300 |
| commit | 80c22b805eedffcf8b4bcabb2cfab739af446797 (patch) | |
| tree | 0c90f652ab5b581100af7daacb3587d403a88b8e | |
| parent | ad3847fad9c8b5ea2c4a3f9def66cd02ffdfd0e2 (diff) | |
| download | niri-80c22b805eedffcf8b4bcabb2cfab739af446797.tar.gz niri-80c22b805eedffcf8b4bcabb2cfab739af446797.tar.bz2 niri-80c22b805eedffcf8b4bcabb2cfab739af446797.zip | |
layout: Fix anim jump when releasing interactive move in the overview
Probably the tile window loc wasn't zoomed when it should. But also the
interactive move grab case doesn't consider the window loc at all, which
seems to work ok, so let's do that until a problem is found with it.
| -rw-r--r-- | src/layout/mod.rs | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 134c9643..525b9eda 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -4129,7 +4129,7 @@ impl<W: LayoutElement> Layout<W> { }; let win_id = move_.tile.window().id().clone(); - let window_render_loc = move_.tile_render_location(zoom) + move_.tile.window_loc(); + let tile_render_loc = move_.tile_render_location(zoom); let ws_idx = match insert_ws { InsertWorkspace::Existing(ws_id) => mon @@ -4226,18 +4226,17 @@ impl<W: LayoutElement> Layout<W> { } // needed because empty_workspace_above_first could have modified the idx - let (tile, tile_render_loc, ws_geo) = mon + let (tile, tile_offset, ws_geo) = mon .workspaces_with_render_geo_mut(false) .find_map(|(ws, geo)| { ws.tiles_with_render_positions_mut(false) .find(|(tile, _)| tile.window().id() == &win_id) - .map(|(tile, tile_render_loc)| (tile, tile_render_loc, geo)) + .map(|(tile, tile_offset)| (tile, tile_offset, geo)) }) .unwrap(); - let new_window_render_loc = - ws_geo.loc + (tile_render_loc + tile.window_loc()).upscale(zoom); + let new_tile_render_loc = ws_geo.loc + tile_offset.upscale(zoom); - tile.animate_move_from((window_render_loc - new_window_render_loc).downscale(zoom)); + tile.animate_move_from((tile_render_loc - new_tile_render_loc).downscale(zoom)); } MonitorSet::NoOutputs { workspaces, .. } => { if workspaces.is_empty() { |
