diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index ff05db54aff..6ed02e0eddc 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -332,6 +332,10 @@ CMakeConfig BuildDirManager::parsedConfiguration() const return m_cmakeCache; if (m_cmakeCache.isEmpty()) m_cmakeCache = m_reader->takeParsedConfiguration(); + + for (auto &ci : m_cmakeCache) + ci.inCMakeCache = true; + return m_cmakeCache; } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 658bab3c011..f637376d655 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -273,6 +273,7 @@ QList CMakeBuildConfiguration::completeCMakeConfiguration j.value = QString::fromUtf8(i.value); j.description = QString::fromUtf8(i.documentation); j.values = i.values; + j.inCMakeCache = i.inCMakeCache; j.isAdvanced = i.isAdvanced || i.type == CMakeConfigItem::INTERNAL; switch (i.type) { @@ -308,6 +309,7 @@ void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QList ConfigModel::configurationChanges() const { - QList result; const QList tmp - = Utils::filtered(m_configuration, [](const InternalDataItem &i) { return i.isUserChanged || i.isUserNew; }); - foreach (const InternalDataItem &item, tmp) { + = Utils::filtered(m_configuration, [](const InternalDataItem &i) { + return i.isUserChanged || i.isUserNew || !i.inCMakeCache; + }); + return Utils::transform(tmp, [](const InternalDataItem &item) { DataItem newItem(item); if (item.isUserChanged) newItem.value = item.newValue; - result << newItem; - } - return result; + return newItem; + }); } ConfigModel::InternalDataItem &ConfigModel::itemAtRow(int row) diff --git a/src/plugins/cmakeprojectmanager/configmodel.h b/src/plugins/cmakeprojectmanager/configmodel.h index 5a1f97ef3e5..3730ac380e5 100644 --- a/src/plugins/cmakeprojectmanager/configmodel.h +++ b/src/plugins/cmakeprojectmanager/configmodel.h @@ -46,6 +46,7 @@ public: QString key; Type type = STRING; bool isAdvanced = false; + bool inCMakeCache = false; QString value; QString description; QStringList values;