From a7305a60e02f78b891a801c1a8a139732614c9dd Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 11 Aug 2020 16:36:24 +0200 Subject: CMake: Parse project on initial load When opening a project for the first time, the project has already been added to the session when the BuildSystem object is created, whereas the code expected a different order. Fixes: QTCREATORBUG-24318 Change-Id: I8ccfeab7da4e566670f61bfe677a293033bdfe44 Reviewed-by: hjk --- src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 18 ++++++++---------- src/plugins/cmakeprojectmanager/cmakebuildsystem.h | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 6a55730d50..f681a83d06 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -195,10 +195,7 @@ CMakeBuildSystem::CMakeBuildSystem(CMakeBuildConfiguration *bc) connect(&m_reader, &FileApiReader::errorOccurred, this, &CMakeBuildSystem::handleParsingFailed); connect(&m_reader, &FileApiReader::dirty, this, &CMakeBuildSystem::becameDirty); - connect(SessionManager::instance(), - &SessionManager::projectAdded, - this, - &CMakeBuildSystem::wireUpConnections); + wireUpConnections(); } CMakeBuildSystem::~CMakeBuildSystem() @@ -712,13 +709,8 @@ void CMakeBuildSystem::handleParsingFailed(const QString &msg) combineScanAndParse(); } -void CMakeBuildSystem::wireUpConnections(const Project *p) +void CMakeBuildSystem::wireUpConnections() { - if (p != project()) - return; // That's not us... - - disconnect(SessionManager::instance(), nullptr, this, nullptr); - // At this point the entire project will be fully configured, so let's connect everything and // trigger an initial parser run @@ -740,6 +732,12 @@ void CMakeBuildSystem::wireUpConnections(const Project *p) setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), CMakeBuildSystem::REPARSE_DEFAULT); }); + connect(project(), &Project::activeTargetChanged, this, [this]() { + // Build configuration has changed: + qCDebug(cmakeBuildSystemLog) << "Requesting parse due to active target changed"; + setParametersAndRequestParse(BuildDirParameters(cmakeBuildConfiguration()), + CMakeBuildSystem::REPARSE_DEFAULT); + }); // BuildConfiguration changed: connect(cmakeBuildConfiguration(), &CMakeBuildConfiguration::environmentChanged, this, [this]() { diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index 86d77d7a7d..e4c69a7d3c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -134,7 +134,7 @@ private: void handleParsingSucceeded(); void handleParsingFailed(const QString &msg); - void wireUpConnections(const ProjectExplorer::Project *p); + void wireUpConnections(); Utils::FilePath workDirectory(const BuildDirParameters ¶meters); void stopParsingAndClearState(); -- cgit v1.2.3