diff options
author | Marco Bubke <marco.bubke@qt.io> | 2025-09-16 18:39:40 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2025-09-16 21:46:55 +0000 |
commit | e103ec4ae0b1309b735b0f40230450d9034fa50c (patch) | |
tree | 672139569223b7c6db73e48fe646b64793f90a4b | |
parent | cd9477a41134b45ba765c566c5594e66a690858b (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>
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()) { |