From 2f380de73b0c4c6dddcd14ff71260c0882213077 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Wed, 25 Dec 2024 17:26:05 +0300 Subject: floating: Take into account non-fixed min/max size window rule --- src/layout/floating.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src/layout/floating.rs') diff --git a/src/layout/floating.rs b/src/layout/floating.rs index dfeb18c1..39adf7aa 100644 --- a/src/layout/floating.rs +++ b/src/layout/floating.rs @@ -20,7 +20,7 @@ use crate::render_helpers::RenderTarget; use crate::utils::transaction::TransactionBlocker; use crate::utils::{ center_preferring_top_left_in_area, clamp_preferring_top_left_in_area, ensure_min_max_size, - ResizeEdge, + ensure_min_max_size_maybe_zero, ResizeEdge, }; use crate::window::ResolvedWindowRules; @@ -386,15 +386,14 @@ impl FloatingSpace { // fullscreen until now), fall back to (0, 0). floating_size.unwrap_or_else(|| win.expected_size().unwrap_or_default()) }; - // Make sure fixed-size through window rules keeps working. + + // Apply min/max size window rules. If requesting a concrete size, apply completely; if + // requesting (0, 0), apply only when min/max results in a fixed size. 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; - } + size.w = ensure_min_max_size_maybe_zero(size.w, min_size.w, max_size.w); + size.h = ensure_min_max_size_maybe_zero(size.h, min_size.h, max_size.h); + win.request_size_once(size, true); if activate || self.tiles.is_empty() { -- cgit