@@ -63,7 +63,7 @@ void TreeSearch::_filter_tree() {
63
63
}
64
64
65
65
void TreeSearch::_filter_tree (TreeItem *p_item, bool p_parent_matching) {
66
- bool visible = number_matches.has (p_item) | p_parent_matching;
66
+ bool visible = ( number_matches.has (p_item) && (number_matches. get (p_item) > 0 )) | | p_parent_matching;
67
67
68
68
p_item->set_visible (visible);
69
69
@@ -237,17 +237,30 @@ void TreeSearch::_update_ordered_tree_items(TreeItem *p_tree_item) {
237
237
}
238
238
239
239
void TreeSearch::_update_number_matches () {
240
+ ERR_FAIL_COND (!tree_reference);
241
+
240
242
number_matches.clear ();
241
243
number_matches.reserve (ordered_tree_items.size ());
242
244
243
- for ( int i = 0 ; i < matching_entries. size (); i++) {
244
- TreeItem *item = matching_entries[i];
245
- while (item) {
246
- int previous_match_cnt = number_matches. has (item) ? number_matches. get ( item) : 0 ;
247
- number_matches[item] = previous_match_cnt + 1 ;
248
- item = item->get_parent ( );
249
- }
245
+ _update_number_matches (tree_reference-> get_root ());
246
+ }
247
+
248
+ void TreeSearch::_update_number_matches (TreeItem * item) {
249
+ for ( int i = 0 ; i < item-> get_child_count (); i++) {
250
+ TreeItem *child = item->get_child (i );
251
+ _update_number_matches (child);
250
252
}
253
+ int count = _vector_has_bsearch (matching_entries, item) ? 1 : 0 ;
254
+
255
+ for (int i = 0 ; i < item->get_child_count (); i++) {
256
+ TreeItem *child = item->get_child (i);
257
+ count += number_matches.has (child) ? number_matches.get (child) : 0 ;
258
+ }
259
+ if (count == 0 ) {
260
+ return ;
261
+ }
262
+
263
+ number_matches[item] = count;
251
264
}
252
265
253
266
String TreeSearch::_get_search_mask () const {
0 commit comments