From e10b968eb085a4db1493c349e5411421d59f88af Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Mon, 31 Mar 2025 14:21:33 +0300 Subject: layout: Reset unfullscreen view offset when starting interactive resize --- src/layout/scrolling.rs | 13 +++++++++++-- src/layout/tests.rs | 22 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) (limited to 'src/layout') diff --git a/src/layout/scrolling.rs b/src/layout/scrolling.rs index 9bb190a4..0fbf4037 100644 --- a/src/layout/scrolling.rs +++ b/src/layout/scrolling.rs @@ -3284,10 +3284,11 @@ impl ScrollingSpace { return false; } - let col = self + let (col_idx, col) = self .columns .iter_mut() - .find(|col| col.contains(&window)) + .enumerate() + .find(|(_, col)| col.contains(&window)) .unwrap(); if col.is_fullscreen { @@ -3311,6 +3312,14 @@ impl ScrollingSpace { self.view_offset.stop_anim_and_gesture(); + // If this is the active column, clear the stored unfullscreen view offset in case one of + // the tiles in the column is still pending unfullscreen. Normally it is cleared and + // applied in update_window(), but we skip that during interactive resize because the view + // is frozen. + if col_idx == self.active_column_idx { + self.view_offset_before_fullscreen = None; + } + true } diff --git a/src/layout/tests.rs b/src/layout/tests.rs index 89fbb96b..5d45ee98 100644 --- a/src/layout/tests.rs +++ b/src/layout/tests.rs @@ -3313,6 +3313,28 @@ fn move_unfocused_pending_unfullscreen_window_out_of_active_column() { check_ops(&ops); } +#[test] +fn interactive_resize_on_pending_unfullscreen_column() { + let ops = [ + Op::AddWindow { + params: TestWindowParams::new(2), + }, + Op::FullscreenWindow(2), + Op::Communicate(2), + Op::SetFullscreenWindow { + window: 2, + is_fullscreen: false, + }, + Op::InteractiveResizeBegin { + window: 2, + edges: ResizeEdge::RIGHT, + }, + Op::Communicate(2), + ]; + + check_ops(&ops); +} + fn parent_id_causes_loop(layout: &Layout, id: usize, mut parent_id: usize) -> bool { if parent_id == id { return true; -- cgit