aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2025-09-16 18:39:40 +0200
committerTim Jenssen <tim.jenssen@qt.io>2025-09-16 21:46:55 +0000
commite103ec4ae0b1309b735b0f40230450d9034fa50c (patch)
tree672139569223b7c6db73e48fe646b64793f90a4b
parentcd9477a41134b45ba765c566c5594e66a690858b (diff)
QmlDesigner: Force update on document change if file list is changedqds/dev
Task-number: QDS-15816 Change-Id: I4f0e97d581cf918e0afa791657d107284ffaaeb6 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp28
-rw-r--r--src/plugins/qmldesigner/project/qmldesignerprojectmanager.h3
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp4
3 files changed, 34 insertions, 1 deletions
diff --git a/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp b/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp
index 25d81c946a1..c28a132d8e4 100644
--- a/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp
+++ b/src/plugins/qmldesigner/project/qmldesignerprojectmanager.cpp
@@ -333,6 +333,7 @@ public:
Sqlite::LockingMode::Normal};
ModulesStorage modulesStorage{modulesDatabase, modulesDatabase.isInitialized()};
ViewManager &viewManager;
+ bool filesAreChanged = false;
};
QmlDesignerProjectManager::QmlDesignerProjectManager(ViewManager &viewManager)
@@ -416,6 +417,22 @@ ProjectStorageDependencies QmlDesignerProjectManager::projectStorageDependencies
m_projectData->projectStorageData->pathWatcher};
}
+void QmlDesignerProjectManager::updateIfFilesListInProjectIsChanged(Core::IEditor *editor)
+{
+ NanotraceHR::Tracer tracer{
+ "qml designer project manager update if files list in project is changed", category()};
+
+ if (m_data->filesAreChanged) {
+ m_data->filesAreChanged = false;
+ if (m_projectData) {
+ auto path = editor->document()->filePath().canonicalPath().path();
+ auto sourceId = m_data->pathCache.sourceId(SourcePath{path});
+ m_projectData->projectStorageData->pathWatcher.checkForChangeInDirectory(
+ {sourceId.directoryPathId()});
+ }
+ }
+}
+
void QmlDesignerProjectManager::editorOpened(::Core::IEditor *)
{
NanotraceHR::Tracer tracer{"qml designer project manager editor opened", category()};
@@ -522,10 +539,21 @@ void QmlDesignerProjectManager::projectAdded(const ::ProjectExplorer::Project *p
aboutToRemoveTarget(target);
});
+ QObject::connect(project, &::ProjectExplorer::Project::fileListChanged, [&]() {
+ fileListChanged();
+ });
+
if (auto target = project->activeTarget(); target)
activeTargetChanged(target);
}
+void QmlDesignerProjectManager::fileListChanged()
+{
+ NanotraceHR::Tracer tracer{"qml designer project manager file list changed", category()};
+
+ m_data->filesAreChanged = true;
+}
+
void QmlDesignerProjectManager::aboutToRemoveProject(const ::ProjectExplorer::Project *)
{
NanotraceHR::Tracer tracer{"qml designer project manager about to remove project", category()};
diff --git a/src/plugins/qmldesigner/project/qmldesignerprojectmanager.h b/src/plugins/qmldesigner/project/qmldesignerprojectmanager.h
index 15ea27b366f..53f35a9eec7 100644
--- a/src/plugins/qmldesigner/project/qmldesignerprojectmanager.h
+++ b/src/plugins/qmldesigner/project/qmldesignerprojectmanager.h
@@ -46,11 +46,14 @@ public:
ModulesStorage &modulesStorage();
ProjectStorageDependencies projectStorageDependencies();
+ void updateIfFilesListInProjectIsChanged(Core::IEditor *editor);
+
private:
void editorOpened(::Core::IEditor *editor);
void currentEditorChanged(::Core::IEditor *);
void editorsClosed(const QList<Core::IEditor *> &editor);
void projectAdded(const ::ProjectExplorer::Project *project);
+ void fileListChanged();
void aboutToRemoveProject(const ::ProjectExplorer::Project *project);
void projectRemoved(const ::ProjectExplorer::Project *project);
void generatePreview();
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 0824c955427..8f94e243d50 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -494,8 +494,10 @@ void QmlDesignerPlugin::setupDesigner()
{
NanotraceHR::Tracer tracer{"qml designer plugin setup designer", category()};
+ auto currentEditor = Core::EditorManager::currentEditor();
+ d->projectManager.updateIfFilesListInProjectIsChanged(currentEditor);
d->shortCutManager.disconnectUndoActions(currentDesignDocument());
- d->documentManager.setCurrentDesignDocument(Core::EditorManager::currentEditor());
+ d->documentManager.setCurrentDesignDocument(currentEditor);
d->shortCutManager.connectUndoActions(currentDesignDocument());
if (d->documentManager.hasCurrentDesignDocument()) {