summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenning Gruendl <henning.gruendl@qt.io>2023-03-16 10:55:47 +0100
committerTim Jenssen <tim.jenssen@qt.io>2023-03-16 11:01:50 +0000
commit9f725de2837916bd87d26fb914eaa9a74b6ef616 (patch)
tree68439c2ddf3af94de32fa57e07d0869080231e82
parentee72b1099b0e6534994962da88d3639857d7bd24 (diff)
downloadqt-creator-9f725de2837916bd87d26fb914eaa9a74b6ef616.tar.gz
QmlDesigner: Fix invalid path hang up
Fix issue where an invalid path results in QDir being set to "." which in some cases results in iterating a huge amount of files ultimately causing QtDS to stall. Task-number: QDS-9437 Change-Id: I0f868f1a94341fbd4d18e98de012ecd5d2a6423a Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> (cherry picked from commit 9b4decf9afa7002cd28086caec2510290a89f339)
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp45
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h2
2 files changed, 21 insertions, 26 deletions
diff --git a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
index f751c7c419..9452125eae 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
@@ -51,7 +51,7 @@ void FileResourcesModel::setModelNodeBackend(const QVariant &modelNodeBackend)
QmlDesigner::DocumentManager::currentProjectDirPath().toFileInfo().absoluteFilePath());
}
- setupModel();
+ refreshModel();
emit modelNodeBackendChanged();
}
@@ -78,7 +78,7 @@ void FileResourcesModel::setFileName(const QUrl &fileName)
void FileResourcesModel::setPath(const QUrl &url)
{
m_path = url;
- setupModel();
+ refreshModel();
emit pathChanged(url);
}
@@ -99,7 +99,7 @@ void FileResourcesModel::setFilter(const QString &filter)
return;
m_filter = filter;
- setupModel();
+ refreshModel();
emit filterChanged(filter);
}
@@ -201,33 +201,30 @@ bool filterMetaIcons(const QString &fileName)
return true;
}
-void FileResourcesModel::setupModel()
-{
- m_dirPath = QDir(m_path.toLocalFile());
- refreshModel();
-}
-
void FileResourcesModel::refreshModel()
{
m_model.clear();
- QStringList filterList = m_filter.split(QLatin1Char(' '));
-
- QDirIterator it(m_dirPath.absolutePath(), filterList, QDir::Files, QDirIterator::Subdirectories);
- while (it.hasNext()) {
- QString absolutePath = it.next();
- if (filterMetaIcons(absolutePath)) {
- QString relativeFilePath = m_docPath.relativeFilePath(absolutePath);
- m_model.append(
- FileResourcesItem(absolutePath,
- relativeFilePath,
- relativeFilePath.mid(relativeFilePath.lastIndexOf('/') + 1)));
+ if (m_path.isValid()) {
+ const QDir dirPath = QDir(m_path.toLocalFile());
+ const QStringList filterList = m_filter.split(QLatin1Char(' '));
+
+ QDirIterator it(dirPath.absolutePath(), filterList, QDir::Files, QDirIterator::Subdirectories);
+ while (it.hasNext()) {
+ const QString absolutePath = it.next();
+ if (filterMetaIcons(absolutePath)) {
+ const QString relativeFilePath = m_docPath.relativeFilePath(absolutePath);
+ m_model.append(
+ FileResourcesItem(absolutePath,
+ relativeFilePath,
+ relativeFilePath.mid(relativeFilePath.lastIndexOf('/') + 1)));
+ }
}
- }
- Utils::sort(m_model, [](const FileResourcesItem &i1, const FileResourcesItem &i2) {
- return i1.fileName().toLower() < i2.fileName().toLower();
- });
+ Utils::sort(m_model, [](const FileResourcesItem &i1, const FileResourcesItem &i2) {
+ return i1.fileName().toLower() < i2.fileName().toLower();
+ });
+ }
emit modelChanged();
}
diff --git a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h
index f2dd49af2a..4fd76ed131 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.h
@@ -67,7 +67,6 @@ public:
QString filter() const;
QList<FileResourcesItem> model() const;
- void setupModel();
void refreshModel();
Q_INVOKABLE void openFileDialog();
@@ -89,7 +88,6 @@ private:
private:
QUrl m_fileName;
QUrl m_path;
- QDir m_dirPath;
QDir m_docPath;
QString m_filter;
QString m_currentPath;