Browse Source

Merge pull request #106815 from timothyqiu/menu-bar-min-size

Fix MenuBar min size not updating after child rename
Thaddeus Crews 2 months ago
parent
commit
04af103d0b
1 changed files with 7 additions and 1 deletions
  1. 7 1
      scene/gui/menu_bar.cpp

+ 7 - 1
scene/gui/menu_bar.cpp

@@ -519,13 +519,14 @@ void MenuBar::_refresh_menu_names() {
 	bool is_global = !global_menu_tag.is_empty();
 	bool is_global = !global_menu_tag.is_empty();
 	RID main_menu = is_global ? nmenu->get_system_menu(NativeMenu::MAIN_MENU_ID) : RID();
 	RID main_menu = is_global ? nmenu->get_system_menu(NativeMenu::MAIN_MENU_ID) : RID();
 
 
+	bool dirty = false;
 	Vector<PopupMenu *> popups = _get_popups();
 	Vector<PopupMenu *> popups = _get_popups();
 	for (int i = 0; i < popups.size(); i++) {
 	for (int i = 0; i < popups.size(); i++) {
 		String menu_name = popups[i]->get_title().is_empty() ? String(popups[i]->get_name()) : popups[i]->get_title();
 		String menu_name = popups[i]->get_title().is_empty() ? String(popups[i]->get_name()) : popups[i]->get_title();
 		if (!popups[i]->has_meta("_menu_name") && menu_name != get_menu_title(i)) {
 		if (!popups[i]->has_meta("_menu_name") && menu_name != get_menu_title(i)) {
 			menu_cache.write[i].name = menu_name;
 			menu_cache.write[i].name = menu_name;
 			shape(menu_cache.write[i]);
 			shape(menu_cache.write[i]);
-			queue_redraw();
+			dirty = true;
 			if (is_global && menu_cache[i].submenu_rid.is_valid()) {
 			if (is_global && menu_cache[i].submenu_rid.is_valid()) {
 				int item_idx = nmenu->find_item_index_with_submenu(main_menu, menu_cache[i].submenu_rid);
 				int item_idx = nmenu->find_item_index_with_submenu(main_menu, menu_cache[i].submenu_rid);
 				if (item_idx >= 0) {
 				if (item_idx >= 0) {
@@ -534,6 +535,11 @@ void MenuBar::_refresh_menu_names() {
 			}
 			}
 		}
 		}
 	}
 	}
+
+	if (dirty && !is_global) {
+		queue_redraw();
+		update_minimum_size();
+	}
 }
 }
 
 
 Vector<PopupMenu *> MenuBar::_get_popups() const {
 Vector<PopupMenu *> MenuBar::_get_popups() const {