From c30e5c91851d77d48ff2120f0e710501b19d61b4 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Tue, 16 Sep 2025 08:25:59 +0300 Subject: layout: End DnD gesture when toggling interactive move to floating Effective behavior mostly unchanged (it would end on refresh()), but this was failing the invariant checks. --- src/layout/mod.rs | 5 +++++ src/layout/tests.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) (limited to 'src') diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 38af83d3..c58fc284 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -3358,6 +3358,11 @@ impl Layout { 1., self.options.animations.window_movement.0, ); + + // Unlock the view on the workspaces. + for ws in self.workspaces_mut() { + ws.dnd_scroll_gesture_end(); + } } else { // Animate the tile back to semitransparent. move_.tile.animate_alpha( diff --git a/src/layout/tests.rs b/src/layout/tests.rs index beb4b6ee..83cb47c2 100644 --- a/src/layout/tests.rs +++ b/src/layout/tests.rs @@ -2970,6 +2970,35 @@ fn add_window_next_to_only_interactively_moved_without_outputs() { check_ops(&ops); } +#[test] +fn interactive_move_toggle_floating_ends_dnd_gesture() { + let ops = [ + Op::AddOutput(1), + Op::AddWindow { + params: TestWindowParams::new(2), + }, + Op::InteractiveMoveBegin { + window: 2, + output_idx: 1, + px: 0.0, + py: 0.0, + }, + Op::InteractiveMoveUpdate { + window: 2, + dx: 0.0, + dy: 3586.692842955048, + output_idx: 1, + px: 0.0, + py: 0.0, + }, + Op::Refresh { is_active: false }, + Op::ToggleWindowFloating { id: None }, + Op::InteractiveMoveEnd { window: 2 }, + ]; + + check_ops(&ops); +} + #[test] fn set_width_fixed_negative() { let ops = [ -- cgit