aboutsummaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-09-16 08:25:59 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-09-16 08:35:03 +0300
commitc30e5c91851d77d48ff2120f0e710501b19d61b4 (patch)
treecc7f2439fd0d0bccef5ecb28ce1e8182feb6a184 /src/layout
parentb2d2a766e48fb4331370c619bd013c50ba75686a (diff)
downloadniri-c30e5c91851d77d48ff2120f0e710501b19d61b4.tar.gz
niri-c30e5c91851d77d48ff2120f0e710501b19d61b4.tar.bz2
niri-c30e5c91851d77d48ff2120f0e710501b19d61b4.zip
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.
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/mod.rs5
-rw-r--r--src/layout/tests.rs29
2 files changed, 34 insertions, 0 deletions
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<W: LayoutElement> Layout<W> {
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
@@ -2971,6 +2971,35 @@ fn add_window_next_to_only_interactively_moved_without_outputs() {
}
#[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 = [
Op::AddOutput(3),