From b289a3f87a5286b9e2e4fc0c3a1da0852bdac2c5 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 14 Nov 2017 14:19:52 +0100 Subject: [PATCH] QbsProjectManager: Run updateAfterParse() also on add/remove file Adding and removing files via the project tree is essentially the same thing as doing it by editing a project file, except that no reparsing is necessary. Task-number: QTCREATORBUG-19292 Change-Id: Idb1bcf0e183f34d4de513f69f974e45ac91afeeb Reviewed-by: Nikolai Kosjar Reviewed-by: Christian Kandeler --- src/plugins/qbsprojectmanager/qbsproject.cpp | 10 +++++++--- src/plugins/qbsprojectmanager/qbsproject.h | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index eb3191e60e3..f82715addea 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -275,7 +275,7 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths, } if (notAdded->count() != filePaths.count()) { m_projectData = m_qbsProject.projectData(); - rebuildProjectTree(); + delayedUpdateAfterParse(); } return notAdded->isEmpty(); } @@ -302,8 +302,7 @@ bool QbsProject::removeFilesFromProduct(const QStringList &filePaths, } if (notRemoved->count() != filePaths.count()) { m_projectData = m_qbsProject.projectData(); - rebuildProjectTree(); - emit fileListChanged(); + delayedUpdateAfterParse(); } return notRemoved->isEmpty(); } @@ -472,6 +471,11 @@ void QbsProject::updateAfterParse() emit fileListChanged(); } +void QbsProject::delayedUpdateAfterParse() +{ + QTimer::singleShot(0, this, &QbsProject::updateAfterParse); +} + void QbsProject::updateProjectNodes() { OpTimer opTimer("updateProjectNodes"); diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index fa12083716a..055618e6e12 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -136,6 +136,7 @@ private: void handleRuleExecutionDone(); bool checkCancelStatus(); void updateAfterParse(); + void delayedUpdateAfterParse(); void updateProjectNodes(); void projectLoaded() override;