@@ -520,6 +520,26 @@ void EditorDockManager::_move_dock(EditorDock *p_dock, Control *p_target, int p_
520520 }
521521}
522522
523+ void EditorDockManager::_queue_update_tab_style (EditorDock *p_dock) {
524+ if (dirty_docks.is_empty ()) {
525+ callable_mp (this , &EditorDockManager::_update_dirty_dock_tabs).call_deferred ();
526+ }
527+ dirty_docks.insert (p_dock);
528+ }
529+
530+ void EditorDockManager::_update_dirty_dock_tabs () {
531+ bool update_menu = false ;
532+ for (EditorDock *dock : dirty_docks) {
533+ update_menu = update_menu || dock->global ;
534+ _update_tab_style (dock);
535+ }
536+ dirty_docks.clear ();
537+
538+ if (update_menu) {
539+ update_docks_menu ();
540+ }
541+ }
542+
523543void EditorDockManager::_update_tab_style (EditorDock *p_dock) {
524544 if (!p_dock->enabled || !p_dock->is_open ) {
525545 return ; // Disabled by feature profile or manually closed by user.
@@ -534,10 +554,6 @@ void EditorDockManager::_update_tab_style(EditorDock *p_dock) {
534554 int index = tab_container->get_tab_idx_from_control (p_dock);
535555 ERR_FAIL_COND (index == -1 );
536556
537- if (p_dock->global ) {
538- update_docks_menu ();
539- }
540-
541557 tab_container->get_tab_bar ()->set_font_color_override_all (index, p_dock->title_color );
542558
543559 const TabStyle style = (tab_container == EditorNode::get_bottom_panel ())
@@ -902,8 +918,8 @@ void EditorDockManager::add_dock(EditorDock *p_dock) {
902918
903919 p_dock->dock_slot_index = p_dock->default_slot ;
904920 all_docks.push_back (p_dock);
905- p_dock->connect (" _tab_style_changed" , callable_mp (this , &EditorDockManager::_update_tab_style ).bind (p_dock));
906- p_dock->connect (" renamed" , callable_mp (this , &EditorDockManager::_update_tab_style ).bind (p_dock));
921+ p_dock->connect (" _tab_style_changed" , callable_mp (this , &EditorDockManager::_queue_update_tab_style ).bind (p_dock));
922+ p_dock->connect (" renamed" , callable_mp (this , &EditorDockManager::_queue_update_tab_style ).bind (p_dock));
907923
908924 if (p_dock->default_slot != DockConstants::DOCK_SLOT_NONE ) {
909925 open_dock (p_dock, false );
@@ -921,8 +937,8 @@ void EditorDockManager::remove_dock(EditorDock *p_dock) {
921937 _move_dock (p_dock, nullptr );
922938
923939 all_docks.erase (p_dock);
924- p_dock->disconnect (" _tab_style_changed" , callable_mp (this , &EditorDockManager::_update_tab_style ));
925- p_dock->disconnect (" renamed" , callable_mp (this , &EditorDockManager::_update_tab_style ));
940+ p_dock->disconnect (" _tab_style_changed" , callable_mp (this , &EditorDockManager::_queue_update_tab_style ));
941+ p_dock->disconnect (" renamed" , callable_mp (this , &EditorDockManager::_queue_update_tab_style ));
926942 _update_layout ();
927943}
928944
0 commit comments