diff --git a/libs/wxutil/dataview/ResourceTreeView.cpp b/libs/wxutil/dataview/ResourceTreeView.cpp index 0765baadf2..26c2b6bd45 100644 --- a/libs/wxutil/dataview/ResourceTreeView.cpp +++ b/libs/wxutil/dataview/ResourceTreeView.cpp @@ -207,7 +207,8 @@ void ResourceTreeView::SetFilterText(const wxString& filterText) wxDataViewItem item = GetSelection(); - Rebuild(); + // Update the top level tree items which rebuilds the view + UpdateTreeVisibility(); // Keep the previous selection if not filtered out and is meaningful if (item.IsOk() && _treeModelFilter->ItemIsVisible(item)) @@ -231,6 +232,15 @@ void ResourceTreeView::SetFilterText(const wxString& filterText) } } +void ResourceTreeView::UpdateTreeVisibility() +{ + if (_treeModelFilter) + { + // Notify the attached views that it should reload + _treeModelFilter->Cleared(); + } +} + void ResourceTreeView::JumpToFirstFilterMatch() { if (_filterText.empty()) return; diff --git a/libs/wxutil/dataview/ResourceTreeView.h b/libs/wxutil/dataview/ResourceTreeView.h index 75f04189ee..923941dd1f 100644 --- a/libs/wxutil/dataview/ResourceTreeView.h +++ b/libs/wxutil/dataview/ResourceTreeView.h @@ -153,6 +153,8 @@ class ResourceTreeView : virtual bool IsTreeModelRowVisible(TreeModel::Row& row); + virtual void UpdateTreeVisibility(); + private: // Returns true if the given row is visible according // to the current view mode (show favourites vs. show all)