From 96e493d8b1bcfdd62f608256f2fe1b90904d5798 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Mon, 23 Dec 2024 18:29:58 +0300 Subject: Restore floating size during interactive move --- src/layout/mod.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/layout/mod.rs') diff --git a/src/layout/mod.rs b/src/layout/mod.rs index be5eadc1..74afa501 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -2717,6 +2717,23 @@ impl Layout { if let Some(InteractiveMoveState::Moving(move_)) = &mut self.interactive_move { if window.is_none() || window == Some(move_.tile.window().id()) { move_.is_floating = !move_.is_floating; + + // When going to floating, restore the floating window size. + if move_.is_floating { + let floating_size = move_.tile.floating_window_size(); + let win = move_.tile.window_mut(); + let mut size = floating_size.unwrap_or_else(|| win.expected_size()); + // Make sure fixed-size through window rules keeps working. + let min_size = win.min_size(); + let max_size = win.max_size(); + if min_size.w != 0 && min_size.w == max_size.w { + size.w = min_size.w; + } + if min_size.h != 0 && min_size.h == max_size.h { + size.h = min_size.h; + } + win.request_size_once(size, true); + } return; } } -- cgit