From 7eb29b650553548c75218fafb9990d1d034aba32 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 21 May 2019 14:43:19 +0200 Subject: [PATCH] QmlDesigner: Fix regression This regression was caused by an optimization. I added updatePath() to avoid similar issues in the future. Task-number: QDS-690 Change-Id: I0c1c67a3d35a6944da494651db34c746561a1e26 Reviewed-by: Tim Jenssen --- .../itemlibrary/customfilesystemmodel.cpp | 71 ++++++++++--------- .../itemlibrary/customfilesystemmodel.h | 1 + 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp index 62f7f315ced..51dc03d94fe 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp @@ -79,7 +79,7 @@ CustomFileSystemModel::CustomFileSystemModel(QObject *parent) : QAbstractListMod m_fileSystemModel->setIconProvider(new ItemLibraryFileIconProvider()); connect(m_fileSystemWatcher, &Utils::FileSystemWatcher::directoryChanged, [this] { - setRootPath(m_fileSystemModel->rootPath()); + updatePath(m_fileSystemModel->rootPath()); }); } @@ -120,38 +120,7 @@ QModelIndex CustomFileSystemModel::setRootPath(const QString &newPath) if (m_fileSystemModel->rootPath() == newPath) return QAbstractListModel::index(0, 0); - beginResetModel(); - m_fileSystemModel->setRootPath(newPath); - - m_fileSystemWatcher->removeDirectories(m_fileSystemWatcher->directories()); - - m_fileSystemWatcher->addDirectory(newPath, Utils::FileSystemWatcher::WatchAllChanges); - - QStringList nameFilterList; - - const QString searchFilter = m_searchFilter; - - if (searchFilter.contains(QLatin1Char('.'))) { - nameFilterList.append(QString(QStringLiteral("*%1*")).arg(searchFilter)); - } else { - foreach (const QByteArray &extension, QImageReader::supportedImageFormats()) { - nameFilterList.append(QString(QStringLiteral("*%1*.%2")).arg(searchFilter, QString::fromUtf8(extension))); - } - } - - m_files.clear(); - - QDirIterator fileIterator(newPath, nameFilterList, QDir::Files, QDirIterator::Subdirectories); - - while (fileIterator.hasNext()) - m_files.append(filterMetaIcons(fileIterator.next())); - - QDirIterator dirIterator(newPath, {}, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); - while (dirIterator.hasNext()) - m_fileSystemWatcher->addDirectory(dirIterator.next(), Utils::FileSystemWatcher::WatchAllChanges); - - endResetModel(); - return QAbstractListModel::index(0, 0); + return updatePath(newPath); } QVariant CustomFileSystemModel::data(const QModelIndex &index, int role) const @@ -210,6 +179,42 @@ void CustomFileSystemModel::setSearchFilter(const QString &nameFilterList) setRootPath(m_fileSystemModel->rootPath()); } +QModelIndex CustomFileSystemModel::updatePath(const QString &newPath) +{ + beginResetModel(); + m_fileSystemModel->setRootPath(newPath); + + m_fileSystemWatcher->removeDirectories(m_fileSystemWatcher->directories()); + + m_fileSystemWatcher->addDirectory(newPath, Utils::FileSystemWatcher::WatchAllChanges); + + QStringList nameFilterList; + + const QString searchFilter = m_searchFilter; + + if (searchFilter.contains(QLatin1Char('.'))) { + nameFilterList.append(QString(QStringLiteral("*%1*")).arg(searchFilter)); + } else { + foreach (const QByteArray &extension, QImageReader::supportedImageFormats()) { + nameFilterList.append(QString(QStringLiteral("*%1*.%2")).arg(searchFilter, QString::fromUtf8(extension))); + } + } + + m_files.clear(); + + QDirIterator fileIterator(newPath, nameFilterList, QDir::Files, QDirIterator::Subdirectories); + + while (fileIterator.hasNext()) + m_files.append(filterMetaIcons(fileIterator.next())); + + QDirIterator dirIterator(newPath, {}, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); + while (dirIterator.hasNext()) + m_fileSystemWatcher->addDirectory(dirIterator.next(), Utils::FileSystemWatcher::WatchAllChanges); + + endResetModel(); + return QAbstractListModel::index(0, 0); +} + QModelIndex CustomFileSystemModel::fileSystemModelIndex(const QModelIndex &index) const { const int row = index.row(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h index 7ad76ace1c2..69a0e4b1317 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h @@ -61,6 +61,7 @@ public: void setSearchFilter(const QString &nameFilterList); private: + QModelIndex updatePath(const QString &newPath); QModelIndex fileSystemModelIndex(const QModelIndex &index) const; QFileSystemModel *m_fileSystemModel;