diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 822001a4e67..10cda59ea7e 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -119,6 +119,7 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) : connect(this, &Project::activeTargetChanged, this, &QbsProject::changeActiveTarget); connect(this, &Project::addedTarget, this, &QbsProject::targetWasAdded); + connect(this, &Project::removedTarget, this, &QbsProject::targetWasRemoved); connect(this, &Project::environmentChanged, this, &QbsProject::delayParsing); connect(&m_parsingDelay, &QTimer::timeout, this, &QbsProject::startParsing); @@ -469,6 +470,7 @@ void QbsProject::handleQbsParsingDone(bool success) generateErrors(m_qbsProjectParser->error()); m_qbsProject = m_qbsProjectParser->qbsProject(); + m_qbsProjects.insert(activeTarget(), m_qbsProject); bool dataChanged = false; if (success) { QTC_ASSERT(m_qbsProject.isValid(), return); @@ -529,15 +531,26 @@ void QbsProject::handleRuleExecutionDone() void QbsProject::targetWasAdded(Target *t) { + m_qbsProjects.insert(t, qbs::Project()); connect(t, &Target::activeBuildConfigurationChanged, this, &QbsProject::delayParsing); connect(t, &Target::buildDirectoryChanged, this, &QbsProject::delayParsing); } +void QbsProject::targetWasRemoved(Target *t) +{ + m_qbsProjects.remove(t); +} + void QbsProject::changeActiveTarget(Target *t) { BuildConfiguration *bc = 0; - if (t && t->kit()) - bc = t->activeBuildConfiguration(); + if (t) { + m_qbsProject = m_qbsProjects.value(t); + if (m_qbsProject.isValid()) + m_projectData = m_qbsProject.projectData(); + if (t->kit()) + bc = t->activeBuildConfiguration(); + } buildConfigurationChanged(bc); } diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index 7edbd73cbb6..a7b6dc77bd0 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -41,6 +41,7 @@ #include #include +#include #include namespace Core { class IDocument; } @@ -118,6 +119,7 @@ private: void handleQbsParsingDone(bool success); void targetWasAdded(ProjectExplorer::Target *t); + void targetWasRemoved(ProjectExplorer::Target *t); void changeActiveTarget(ProjectExplorer::Target *t); void buildConfigurationChanged(ProjectExplorer::BuildConfiguration *bc); void startParsing(); @@ -145,6 +147,7 @@ private: const qbs::GroupData &oldGroup); const QString m_projectName; + QHash m_qbsProjects; qbs::Project m_qbsProject; qbs::ProjectData m_projectData; QSet m_qbsDocuments;