From 2383a6b45228b787be5f3eefae3a87e1adc1c61a Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 2 Mar 2016 10:20:43 +0200 Subject: [PATCH] QbsPM: Do not delay initial parsing When a project is opened, delayParsing() is called several times: * activeTargetChanged -> buildConfigurationChanged * environmentChanged * startupProjectChanged -> ... -> buildDirectoryChanged delayParsing starts a 1s timer for aggregating all the relevant changes before starting the actual parse. This makes sense also when the user makes changes (like switching build configurations fast, or editing the build directory). When the project is opened initially, there's no reason to wait before parsing. Change-Id: I4eb0c7d3419465bc01e8f9febc9ee808684adb6e Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/project.cpp | 4 ++++ src/plugins/projectexplorer/project.h | 2 ++ src/plugins/projectexplorer/projectexplorer.cpp | 1 + src/plugins/qbsprojectmanager/qbsproject.cpp | 5 +++++ src/plugins/qbsprojectmanager/qbsproject.h | 1 + 5 files changed, 13 insertions(+) diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index b9ea25deab1..930060f47cc 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -637,6 +637,10 @@ void Project::setProjectLanguage(Core::Id id, bool enabled) removeProjectLanguage(id); } +void Project::projectLoaded() +{ +} + Core::Context Project::projectContext() const { return d->m_projectContext; diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 663306137b8..aa28e8ed146 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -58,6 +58,7 @@ class ProjectPrivate; class PROJECTEXPLORER_EXPORT Project : public QObject { friend class SessionManager; // for setActiveTarget + friend class ProjectExplorerPlugin; // for projectLoaded Q_OBJECT public: @@ -177,6 +178,7 @@ protected: void addProjectLanguage(Core::Id id); void removeProjectLanguage(Core::Id id); void setProjectLanguage(Core::Id id, bool enabled); + virtual void projectLoaded(); // Called when the project is fully loaded. private: void changeEnvironment(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index e8b5b43c969..57e51735fa6 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1637,6 +1637,7 @@ ProjectExplorerPlugin::OpenProjectResult ProjectExplorerPlugin::openProject(cons return result; dd->addToRecentProjects(fileName, project->displayName()); SessionManager::setStartupProject(project); + project->projectLoaded(); return result; } diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index cedb8bb9e76..db6efaa2e16 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -152,6 +152,11 @@ QbsRootProjectNode *QbsProject::rootProjectNode() const return static_cast(Project::rootProjectNode()); } +void QbsProject::projectLoaded() +{ + m_parsingDelay.start(0); +} + static void collectFilesForProject(const qbs::ProjectData &project, QSet &result) { result.insert(project.location().filePath()); diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index f050a49b385..51a7bca4552 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -135,6 +135,7 @@ private: void updateApplicationTargets(); void updateDeploymentInfo(); void updateBuildTargetData(); + void projectLoaded() override; static bool ensureWriteableQbsFile(const QString &file);