From 9749d38fde4a115be36bd6f8c14597103ecc5bcc Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Wed, 14 Apr 2010 13:45:35 +0200
Subject: [PATCH] Enable the build project action if the project has buildable
 dependencies

Task-Nr: QTCREATORBUG-1016
---
 src/plugins/projectexplorer/projectexplorer.cpp | 17 ++++++++++++++---
 src/plugins/projectexplorer/projectexplorer.h   |  1 +
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index d25c1377df0..bff30deccd0 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -260,6 +260,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
             this, SLOT(updatePreferredWizardKinds()));
     connect(d->m_session, SIGNAL(projectRemoved(ProjectExplorer::Project*)),
             this, SLOT(updatePreferredWizardKinds()));
+    connect(d->m_session, SIGNAL(dependencyChanged(ProjectExplorer::Project*,ProjectExplorer::Project*)),
+            this, SLOT(updateActions()));
 
     d->m_proWindow = new ProjectWindow;
 
@@ -1358,11 +1360,11 @@ void ProjectExplorerPlugin::updateActions()
     Project *startupProject = session()->startupProject();
     bool enableBuildActions = startupProject
                               && ! (d->m_buildManager->isBuilding(startupProject))
-                              && startupProject->hasActiveBuildSettings();
+                              && hasBuildSettings(startupProject);
 
     bool enableBuildActionsContextMenu = d->m_currentProject
                               && ! (d->m_buildManager->isBuilding(d->m_currentProject))
-                              && d->m_currentProject->hasActiveBuildSettings();
+                              && hasBuildSettings(d->m_currentProject);
 
 
     bool hasProjects = !d->m_session->projects().isEmpty();
@@ -1632,12 +1634,21 @@ void ProjectExplorerPlugin::runProjectContextMenu()
     runProjectImpl(d->m_currentProject, ProjectExplorer::Constants::RUNMODE);
 }
 
+bool ProjectExplorerPlugin::hasBuildSettings(Project *pro)
+{
+    const QList<Project *> & projects = d->m_session->projectOrder(pro);
+    foreach(Project *pro, projects)
+        if (pro->activeTarget()->activeBuildConfiguration())
+            return true;
+    return false;
+}
+
 void ProjectExplorerPlugin::runProjectImpl(Project *pro, QString mode)
 {
     if (!pro)
         return;
 
-    if (d->m_projectExplorerSettings.buildBeforeRun && pro->hasActiveBuildSettings()) {
+    if (d->m_projectExplorerSettings.buildBeforeRun && hasBuildSettings(pro)) {
         if (!pro->activeTarget()->activeRunConfiguration()->isEnabled()) {
             if (!showBuildConfigDialog())
                 return;
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index 467f124e7e2..ea0bc2624b9 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -207,6 +207,7 @@ private:
     bool parseArguments(const QStringList &arguments, QString *error);
     void runProjectImpl(Project *pro, QString mode);
     void executeRunConfiguration(RunConfiguration *, const QString &mode);
+    bool hasBuildSettings(Project *pro);
     bool showBuildConfigDialog();
 
     void setCurrent(Project *project, QString filePath, Node *node);
-- 
GitLab