From 0a09ba7319d56d0d77175bf35399fbb776c20d1b Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 1 Mar 2017 12:52:24 +0100 Subject: [PATCH] CMake: Make sure BuildConfiguration enabled state is accurate Make sure the buildconfiguration is disabled while parsing and that it becomes enabled again after an error in CMake is fixed. Change-Id: Iec919e3c74c465a14ebb87adb9af142537823f00 Reviewed-by: Tim Jenssen --- .../cmakebuildconfiguration.cpp | 21 +++++++++++++++---- .../cmakebuildconfiguration.h | 1 + 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 062decf2d81..beb1c4ed581 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -77,7 +77,7 @@ CMakeBuildConfiguration::~CMakeBuildConfiguration() bool CMakeBuildConfiguration::isEnabled() const { - return m_error.isEmpty(); + return m_error.isEmpty() && !isParsing(); } QString CMakeBuildConfiguration::disabledReason() const @@ -145,6 +145,7 @@ void CMakeBuildConfiguration::ctor() connect(m_buildDirManager.get(), &BuildDirManager::dataAvailable, this, [this, project]() { project->updateProjectData(this); + emit enabledChanged(); emit dataAvailable(); }); connect(m_buildDirManager.get(), &BuildDirManager::errorOccured, @@ -155,6 +156,7 @@ void CMakeBuildConfiguration::ctor() connect(m_buildDirManager.get(), &BuildDirManager::configurationStarted, this, [this, project]() { project->handleParsingStarted(); + emit enabledChanged(); emit parsingStarted(); }); @@ -166,6 +168,7 @@ void CMakeBuildConfiguration::ctor() void CMakeBuildConfiguration::maybeForceReparse() { + clearError(); m_buildDirManager->maybeForceReparse(); } @@ -194,6 +197,7 @@ void CMakeBuildConfiguration::runCMake() if (!m_buildDirManager || m_buildDirManager->isParsing()) return; + clearError(); m_buildDirManager->forceReparse(); } @@ -339,6 +343,14 @@ void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QListforceReparse(); } +void CMakeBuildConfiguration::clearError() +{ + if (!m_error.isEmpty()) { + m_error.clear(); + emit enabledChanged(); + } +} + void CMakeBuildConfiguration::emitBuildTypeChanged() { emit buildTypeChanged(); @@ -388,10 +400,11 @@ CMakeConfig CMakeBuildConfiguration::cmakeConfiguration() const void CMakeBuildConfiguration::setError(const QString &message) { - if (m_error != message) { - emit enabledChanged(); + QString oldMessage = m_error; + if (m_error != message) m_error = message; - } + if (oldMessage.isEmpty() && !message.isEmpty()) + emit enabledChanged(); emit errorOccured(m_error); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 1afd9c33d7b..e6e8713f2db 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -112,6 +112,7 @@ private: QList completeCMakeConfiguration() const; void setCurrentCMakeConfiguration(const QList &items); + void clearError(); void setError(const QString &message); void setWarning(const QString &message);