diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index e8ebeda2f66..66fa741c10b 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -379,7 +379,16 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildSystem *bs) : } connect(m_buildSystem, &BuildSystem::parsingFinished, this, [this] { - m_configModel->setConfiguration(m_buildSystem->configurationFromCMake()); + const CMakeConfig config = m_buildSystem->configurationFromCMake(); + auto qmlDebugAspect = m_buildSystem->buildConfiguration() + ->aspect(); + const TriState qmlDebugSetting = qmlDebugAspect->value(); + bool qmlDebugConfig = CMakeBuildConfiguration::hasQmlDebugging(config); + if ((qmlDebugSetting == TriState::Enabled && !qmlDebugConfig) + || (qmlDebugSetting == TriState::Disabled && qmlDebugConfig)) { + qmlDebugAspect->setValue(TriState::Default); + } + m_configModel->setConfiguration(config); m_configModel->setInitialParametersConfiguration( m_buildSystem->initialCMakeConfiguration()); m_buildSystem->filterConfigArgumentsFromAdditionalCMakeArguments(); @@ -738,7 +747,8 @@ void CMakeBuildSettingsWidget::updateButtonState() } else { m_reconfigureButton->setText(tr("Run CMake")); } - reconfigureButtonFont.setBold(m_configModel->hasChanges(isInitial)); + reconfigureButtonFont.setBold(isInitial ? m_configModel->hasChanges(isInitial) + : !configChanges.isEmpty()); } m_reconfigureButton->setFont(reconfigureButtonFont); @@ -1388,6 +1398,16 @@ bool CMakeBuildConfiguration::isIos(const Kit *k) || deviceType == Ios::Constants::IOS_SIMULATOR_TYPE; } +bool CMakeBuildConfiguration::hasQmlDebugging(const CMakeConfig &config) +{ + // Determine QML debugging flags. This must match what we do in + // CMakeBuildSettingsWidget::getQmlDebugCxxFlags() + // such that in doubt we leave the QML Debugging setting at "Leave at default" + const QString cxxFlagsInit = config.stringValueOf("CMAKE_CXX_FLAGS_INIT"); + const QString cxxFlags = config.stringValueOf("CMAKE_CXX_FLAGS"); + return cxxFlagsInit.contains("-DQT_QML_DEBUG") && cxxFlags.contains("-DQT_QML_DEBUG"); +} + void CMakeBuildConfiguration::buildTarget(const QString &buildTarget) { auto cmBs = qobject_cast(findOrDefault( diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 3121cbcc6fe..bba266ca36a 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -55,6 +55,7 @@ public: shadowBuildDirectory(const Utils::FilePath &projectFilePath, const ProjectExplorer::Kit *k, const QString &bcName, BuildConfiguration::BuildType buildType); static bool isIos(const ProjectExplorer::Kit *k); + static bool hasQmlDebugging(const CMakeConfig &config); // Context menu action: void buildTarget(const QString &buildTarget); diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index e4e9ef90598..ae970887fb7 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -337,13 +337,7 @@ QList CMakeProjectImporter::examineDirectory(const FilePath &importPath, canonicalProjectDirectory.toUserOutput()); } - // Determine QML debugging flags. This must match what we do in - // CMakeBuildSettingsWidget::getQmlDebugCxxFlags() - // such that in doubt we leave the QML Debugging setting at "Leave at default" - const QString cxxFlagsInit = config.stringValueOf("CMAKE_CXX_FLAGS_INIT"); - const QString cxxFlags = config.stringValueOf("CMAKE_CXX_FLAGS"); - data->hasQmlDebugging = cxxFlagsInit.contains("-DQT_QML_DEBUG") - && cxxFlags.contains("-DQT_QML_DEBUG"); + data->hasQmlDebugging = CMakeBuildConfiguration::hasQmlDebugging(config); data->buildDirectory = importPath; data->cmakeBuildType = buildType;