From 594852caf1353ba48ba40c19bc05977635b5b9e8 Mon Sep 17 00:00:00 2001 From: Rindbee Date: Tue, 30 May 2023 13:02:52 +0800 Subject: [PATCH] Make sure that `data.last_minimum_size` is consistent with `get_combined_minimum_size()` at the same time Move the code for switching `data.minimum_size_valid` in `Control::update_minimum_size()` to `Control::_update_minimum_size()`, make sure to switch `data.minimum_size_valid` to `false` only before updating `data.last_minimum_size` , so that it will remain consistent with `get_combined_minimum_size()`. --- scene/gui/control.cpp | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 3beaf83f6f3..c28cfeea1d3 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -1582,22 +1582,6 @@ void Control::_update_minimum_size() { return; } - Size2 minsize = get_combined_minimum_size(); - data.updating_last_minimum_size = false; - - if (minsize != data.last_minimum_size) { - data.last_minimum_size = minsize; - _size_changed(); - emit_signal(SceneStringNames::get_singleton()->minimum_size_changed); - } -} - -void Control::update_minimum_size() { - ERR_MAIN_THREAD_GUARD; - if (!is_inside_tree() || data.block_minimum_size_adjust) { - return; - } - Control *invalidate = this; // Invalidate cache upwards. @@ -1620,6 +1604,21 @@ void Control::update_minimum_size() { return; } + Size2 minsize = get_combined_minimum_size(); + data.updating_last_minimum_size = false; + if (minsize != data.last_minimum_size) { + data.last_minimum_size = minsize; + _size_changed(); + emit_signal(SceneStringNames::get_singleton()->minimum_size_changed); + } +} + +void Control::update_minimum_size() { + ERR_MAIN_THREAD_GUARD; + if (!is_inside_tree() || data.block_minimum_size_adjust) { + return; + } + if (data.updating_last_minimum_size) { return; } @@ -3140,7 +3139,6 @@ void Control::_notification(int p_notification) { } break; case NOTIFICATION_POST_ENTER_TREE: { - data.minimum_size_valid = false; data.is_rtl_dirty = true; _size_changed(); } break; @@ -3269,9 +3267,7 @@ void Control::_notification(int p_notification) { get_viewport()->_gui_hide_control(this); } } else { - data.minimum_size_valid = false; _update_minimum_size(); - _size_changed(); } } break;