### Godot version

4.1.dev (4d5f10fc3a)

### System information

macOS 13.3.0 - Vulkan (Forward+) - integrated Apple M1 Pro - Apple M1 Pro (8 Threads)

### Issue description

When switching filter without coming back to an empty search those that were not matching the search but are included in the new search and none of their child is included will stay greyed out.

### Steps to reproduce


https://github.com/godotengine/godot/assets/66184050/2901bcfe-7834-4f1a-b71f-3b7ad08c3754



### Minimal reproduction project

N/A
if (!p_parent) {
		p_parent = tree->get_root();
		filter_term_warning.clear();
	}
	if (!p_parent) {
		// Tree is empty, nothing to do here.
		return false;
	}
	bool keep_for_children = false;
	for (TreeItem *child = p_parent->get_first_child(); child; child = child->get_next()) {
		// Always keep if at least one of the children are kept.
		keep_for_children = _update_filter(child, p_scroll_to_selected) || keep_for_children;
	}
	// Now find other reasons to keep this Node, too.
	PackedStringArray terms = filter.to_lower().split_spaces();
	bool keep = _item_matches_all_terms(p_parent, terms);
	p_parent->set_visible(keep_for_children || keep);
	if (keep && !valid_types.is_empty()) {
		keep = false;
		Node *n = get_node(p_parent->get_metadata(0));
		for (const StringName &E : valid_types) {
			if (n->is_class(E) ||
					EditorNode::get_singleton()->is_object_of_custom_type(n, E)) {
				keep = true;
				break;
			}
		}