From 334dc840723768b35612cc49cb3869f929e083cb Mon Sep 17 00:00:00 2001
From: Daniel Teske <daniel.teske@nokia.com>
Date: Fri, 13 Jan 2012 16:29:38 +0100
Subject: [PATCH] Fix warnings about connects on adding makestep to deploysteps

By actually fixing the underling problem

Change-Id: I3ee41ba9238f63f8a645c5d29e6627c6d4f4f7f9
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
---
 src/plugins/qt4projectmanager/makestep.cpp | 54 +++++++++++++++++++---
 src/plugins/qt4projectmanager/makestep.h   |  2 +
 2 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp
index 36dc0afaa4e..c79b13d67de 100644
--- a/src/plugins/qt4projectmanager/makestep.cpp
+++ b/src/plugins/qt4projectmanager/makestep.cpp
@@ -305,7 +305,7 @@ void MakeStep::setUserArguments(const QString &arguments)
 }
 
 MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep)
-    : BuildStepConfigWidget(), m_ui(new Internal::Ui::MakeStep), m_makeStep(makeStep), m_ignoreChange(false)
+    : BuildStepConfigWidget(), m_ui(new Internal::Ui::MakeStep), m_makeStep(makeStep), m_bc(0), m_ignoreChange(false)
 {
     m_ui->setupUi(this);
 
@@ -327,13 +327,26 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep)
 
     connect(makeStep, SIGNAL(userArgumentsChanged()),
             this, SLOT(userArgumentsChanged()));
-    connect(makeStep->buildConfiguration(), SIGNAL(buildDirectoryChanged()),
-            this, SLOT(updateDetails()));
-    connect(makeStep->buildConfiguration(), SIGNAL(toolChainChanged()),
-            this, SLOT(updateDetails()));
 
-    connect(makeStep->qt4BuildConfiguration(), SIGNAL(qtVersionChanged()),
-            this, SLOT(qtVersionChanged()));
+    ProjectExplorer::BuildConfiguration *bc = makeStep->buildConfiguration();
+    if (!bc) {
+        // That means the step is in the deploylist, so we listen to the active build config
+        // changed signal and update various things in return
+        bc = makeStep->target()->activeBuildConfiguration();
+        m_bc = bc;
+        connect (makeStep->target(), SIGNAL(activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*)),
+                 this, SLOT(activeBuildConfigurationChanged()));
+    }
+
+    if (bc) {
+        connect(bc, SIGNAL(buildDirectoryChanged()),
+                this, SLOT(updateDetails()));
+        connect(bc, SIGNAL(toolChainChanged()),
+                this, SLOT(updateDetails()));
+
+        connect(bc, SIGNAL(qtVersionChanged()),
+                this, SLOT(qtVersionChanged()));
+    }
 
     connect(ProjectExplorer::ProjectExplorerPlugin::instance(), SIGNAL(settingsChanged()),
             this, SLOT(updateMakeOverrideLabel()));
@@ -341,6 +354,33 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep)
             this, SLOT(updateDetails()));
 }
 
+void MakeStepConfigWidget::activeBuildConfigurationChanged()
+{
+    if (m_bc) {
+        disconnect(m_bc, SIGNAL(buildDirectoryChanged()),
+                this, SLOT(updateDetails()));
+        disconnect(m_bc, SIGNAL(toolChainChanged()),
+                this, SLOT(updateDetails()));
+
+        disconnect(m_bc, SIGNAL(qtVersionChanged()),
+                this, SLOT(qtVersionChanged()));
+    }
+
+    m_bc = m_makeStep->target()->activeBuildConfiguration();
+    updateMakeOverrideLabel();
+    updateDetails();
+
+    if (m_bc) {
+        connect(m_bc, SIGNAL(buildDirectoryChanged()),
+                this, SLOT(updateDetails()));
+        connect(m_bc, SIGNAL(toolChainChanged()),
+                this, SLOT(updateDetails()));
+
+        connect(m_bc, SIGNAL(qtVersionChanged()),
+                this, SLOT(qtVersionChanged()));
+    }
+}
+
 MakeStepConfigWidget::~MakeStepConfigWidget()
 {
     delete m_ui;
diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h
index 0507d24b6da..6c010a7d2e0 100644
--- a/src/plugins/qt4projectmanager/makestep.h
+++ b/src/plugins/qt4projectmanager/makestep.h
@@ -138,10 +138,12 @@ private slots:
     void updateDetails();
     void userArgumentsChanged();
     void qtVersionChanged();
+    void activeBuildConfigurationChanged();
 private:
     Internal::Ui::MakeStep *m_ui;
     MakeStep *m_makeStep;
     QString m_summaryText;
+    ProjectExplorer::BuildConfiguration *m_bc;
     bool m_ignoreChange;
 };
 
-- 
GitLab