@@ -234,7 +234,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
234234 item->add_button (0 , get_theme_icon (SNAME (" Script" ), SNAME (" EditorIcons" )), BUTTON_SCRIPT );
235235 } else {
236236 // has no script (or script is a custom type)
237- item-> set_custom_color ( 0 , get_theme_color (SNAME (" disabled_font_color" ), SNAME (" Editor" )));
237+ _set_item_custom_color (item , get_theme_color (SNAME (" disabled_font_color" ), SNAME (" Editor" )));
238238 item->set_selectable (0 , false );
239239
240240 if (!scr.is_null ()) { // make sure to mark the script if a custom type
@@ -251,11 +251,11 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
251251 node_name += " " + TTR (" (Connecting From)" );
252252 }
253253 item->set_text (0 , node_name);
254- item-> set_custom_color ( 0 , accent);
254+ _set_item_custom_color (item , accent);
255255 }
256256 } else if (part_of_subscene) {
257257 if (valid_types.size () == 0 ) {
258- item-> set_custom_color ( 0 , get_theme_color (SNAME (" warning_color" ), SNAME (" Editor" )));
258+ _set_item_custom_color (item , get_theme_color (SNAME (" warning_color" ), SNAME (" Editor" )));
259259 }
260260 } else if (marked.has (p_node)) {
261261 String node_name = p_node->get_name ();
@@ -264,15 +264,15 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
264264 }
265265 item->set_text (0 , node_name);
266266 item->set_selectable (0 , marked_selectable);
267- item-> set_custom_color ( 0 , get_theme_color (SNAME (" accent_color" ), SNAME (" Editor" )));
267+ _set_item_custom_color (item , get_theme_color (SNAME (" accent_color" ), SNAME (" Editor" )));
268268 } else if (!p_node->can_process ()) {
269- item-> set_custom_color ( 0 , get_theme_color (SNAME (" disabled_font_color" ), SNAME (" Editor" )));
269+ _set_item_custom_color (item , get_theme_color (SNAME (" disabled_font_color" ), SNAME (" Editor" )));
270270 } else if (!marked_selectable && !marked_children_selectable) {
271271 Node *node = p_node;
272272 while (node) {
273273 if (marked.has (node)) {
274274 item->set_selectable (0 , false );
275- item-> set_custom_color ( 0 , get_theme_color (SNAME (" error_color" ), SNAME (" Editor" )));
275+ _set_item_custom_color (item , get_theme_color (SNAME (" error_color" ), SNAME (" Editor" )));
276276 break ;
277277 }
278278 node = node->get_parent ();
@@ -500,7 +500,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
500500 }
501501
502502 if (!valid) {
503- item-> set_custom_color ( 0 , get_theme_color (SNAME (" disabled_font_color" ), SNAME (" Editor" )));
503+ _set_item_custom_color (item , get_theme_color (SNAME (" disabled_font_color" ), SNAME (" Editor" )));
504504 item->set_selectable (0 , false );
505505 }
506506 }
@@ -550,6 +550,11 @@ void SceneTreeEditor::_update_visibility_color(Node *p_node, TreeItem *p_item) {
550550 }
551551}
552552
553+ void SceneTreeEditor::_set_item_custom_color (TreeItem *p_item, Color p_color) {
554+ p_item->set_custom_color (0 , p_color);
555+ p_item->set_meta (SNAME (" custom_color" ), p_color);
556+ }
557+
553558void SceneTreeEditor::_node_script_changed (Node *p_node) {
554559 if (tree_dirty) {
555560 return ;
@@ -661,7 +666,12 @@ bool SceneTreeEditor::_update_filter(TreeItem *p_parent, bool p_scroll_to_select
661666 }
662667
663668 if (selectable) {
664- p_parent->clear_custom_color (0 );
669+ Color custom_color = p_parent->get_meta (SNAME (" custom_color" ), Color (0 , 0 , 0 , 0 ));
670+ if (custom_color == Color (0 , 0 , 0 , 0 )) {
671+ p_parent->clear_custom_color (0 );
672+ } else {
673+ p_parent->set_custom_color (0 , custom_color);
674+ }
665675 p_parent->set_selectable (0 , true );
666676 } else if (keep_for_children) {
667677 p_parent->set_custom_color (0 , get_theme_color (SNAME (" disabled_font_color" ), SNAME (" Editor" )));
0 commit comments