From 1236f8b8f85f3e9b589afa7712e07908c022fd4d Mon Sep 17 00:00:00 2001 From: Enzo Novoselic <41305715+StarryWorm@users.noreply.github.com> Date: Wed, 3 Jun 2026 14:23:45 -0400 Subject: [PATCH] Prevent stale updates to parent maximum size cache (cherry picked from commit 9c626406eeb7b054180cb12e9ae0f8bb3e8fae20) --- scene/gui/control.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 51048bf29f..156091eb1a 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -1738,10 +1738,14 @@ void Control::update_maximum_size() { data.maximum_size_valid = false; Size2 parent_max = data.propagate_maximum_size ? get_inner_combined_maximum_size().min(get_combined_maximum_size()) : Size2(-1, -1); + parent_max = parent_max.maxf(-1.0f); for (Node *child : iterate_children()) { Control *child_control = Object::cast_to(child); if (child_control && !child_control->is_set_as_top_level() && child_control->data.maximum_size_valid) { + if (child_control->data.parent_maximum_size_cache == parent_max) { + continue; + } child_control->data.parent_maximum_size_cache = parent_max; child_control->update_maximum_size(); } @@ -1862,10 +1866,11 @@ Size2 Control::get_inner_combined_maximum_size() const { } void Control::set_parent_maximum_size_cache(const Size2 &p_parent_max) { - if (data.parent_maximum_size_cache == p_parent_max) { + const Size2 normalized = p_parent_max.maxf(-1.0f); + if (data.parent_maximum_size_cache == normalized) { return; } - data.parent_maximum_size_cache = p_parent_max; + data.parent_maximum_size_cache = normalized; update_maximum_size(); }