diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp index 2250dacf80f..f7af499a6f0 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp @@ -213,6 +213,11 @@ void MaterialBrowserModel::setSearchText(const QString &searchText) m_searchText = lowerSearchText; + refreshSearch(); +} + +void MaterialBrowserModel::refreshSearch() +{ bool isEmpty = false; // if selected material goes invisible, select nearest material @@ -256,9 +261,13 @@ void MaterialBrowserModel::setMaterials(const QList &materials, bool emit isEmptyChanged(); } - setHasQuick3DImport(hasQuick3DImport); + if (!m_searchText.isEmpty()) + refreshSearch(); + else + resetModel(); + updateSelectedMaterial(); - resetModel(); + setHasQuick3DImport(hasQuick3DImport); } void MaterialBrowserModel::removeMaterial(const ModelNode &material) diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h index c1286e62e25..71a6407632a 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h @@ -37,6 +37,7 @@ public: QHash roleNames() const override; void setSearchText(const QString &searchText); + void refreshSearch(); bool hasQuick3DImport() const; void setHasQuick3DImport(bool b); diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp index b732b9265e0..a24cd06bfa5 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp @@ -94,6 +94,11 @@ void MaterialBrowserTexturesModel::setSearchText(const QString &searchText) m_searchText = lowerSearchText; + refreshSearch(); +} + +void MaterialBrowserTexturesModel::refreshSearch() +{ bool isEmpty = false; // if selected texture goes invisible, select nearest one diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h index 53b27e68a6c..50a07623fa4 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h @@ -29,6 +29,7 @@ public: QHash roleNames() const override; void setSearchText(const QString &searchText); + void refreshSearch(); QList textures() const; void setTextures(const QList &textures); diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp index 997e7ab563a..99f858744d0 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp @@ -244,7 +244,6 @@ void MaterialBrowserView::refreshModel(bool updateImages) } } - m_widget->clearSearchFilter(); m_widget->materialBrowserModel()->setMaterials(materials, m_hasQuick3DImport); m_widget->materialBrowserTexturesModel()->setTextures(textures); m_widget->materialBrowserModel()->setHasMaterialLibrary(matLib.isValid()); @@ -366,9 +365,11 @@ void MaterialBrowserView::nodeReparented(const ModelNode &node, } int idx = m_widget->materialBrowserModel()->materialIndex(node); m_widget->materialBrowserModel()->selectMaterial(idx); + m_widget->materialBrowserModel()->refreshSearch(); } else { // is texture int idx = m_widget->materialBrowserTexturesModel()->textureIndex(node); m_widget->materialBrowserTexturesModel()->selectTexture(idx); + m_widget->materialBrowserTexturesModel()->refreshSearch(); } } @@ -452,8 +453,10 @@ void MaterialBrowserView::customNotification(const AbstractView *view, m_widget->materialBrowserModel()->selectMaterial(idx); } else if (identifier == "selected_texture_changed") { int idx = m_widget->materialBrowserTexturesModel()->textureIndex(nodeList.first()); - if (idx != -1) + if (idx != -1) { m_widget->materialBrowserTexturesModel()->selectTexture(idx); + m_widget->materialBrowserTexturesModel()->refreshSearch(); + } } else if (identifier == "refresh_material_browser") { QTimer::singleShot(0, model(), [this]() { refreshModel(true);