From 83edceafe48f9a2102c7d6ea977aa890210aa661 Mon Sep 17 00:00:00 2001
From: kh1 <qt-info@nokia.com>
Date: Mon, 21 Jun 2010 13:25:34 +0200
Subject: [PATCH] Fix missing update notification if a device config get's
 added/removed.

Task-number: QTCREATORBUG-1686
Reviewed-by: ck
---
 .../qt-maemo/maemorunconfiguration.cpp        |  2 +-
 .../qt-maemo/maemorunconfiguration.h          |  2 +-
 .../qt-maemo/maemorunconfigurationwidget.cpp  |  2 +-
 .../qt-maemo/qemuruntimemanager.cpp           | 61 +++++++++----------
 .../qt-maemo/qemuruntimemanager.h             |  5 +-
 5 files changed, 37 insertions(+), 35 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index 2fb1d87bfca..b408f038ab1 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -321,7 +321,7 @@ void MaemoRunConfiguration::updateDeviceConfigurations()
     } else {
         m_devConfig = configManager.find(m_devConfig.internalId);
     }
-    emit deviceConfigurationsUpdated();
+    emit deviceConfigurationsUpdated(target());
 }
 
     } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index e76a8593382..26abb766496 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -93,7 +93,7 @@ public:
     virtual QVariantMap toMap() const;
 
 signals:
-    void deviceConfigurationsUpdated();
+    void deviceConfigurationsUpdated(ProjectExplorer::Target *target);
     void deviceConfigurationChanged(ProjectExplorer::Target *target);
     void targetInformationChanged() const;
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
index 2e89fb31788..e5b7fdf5d2c 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
@@ -89,7 +89,7 @@ MaemoRunConfigurationWidget::MaemoRunConfigurationWidget(
     mainLayout->addRow(tr("Arguments:"), m_argsLineEdit);
 
     resetDeviceConfigurations();
-    connect(m_runConfiguration, SIGNAL(deviceConfigurationsUpdated()),
+    connect(m_runConfiguration, SIGNAL(deviceConfigurationsUpdated(ProjectExplorer::Target *)),
             this, SLOT(resetDeviceConfigurations()));
 
     connect(m_configNameLineEdit, SIGNAL(textEdited(QString)), this,
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.cpp
index 8e23a27a146..b08172cac64 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.cpp
@@ -199,7 +199,7 @@ void QemuRuntimeManager::projectRemoved(ProjectExplorer::Project *project)
 void QemuRuntimeManager::projectChanged(ProjectExplorer::Project *project)
 {
     if (project)
-        toogleStarterButton(project->activeTarget());
+        toggleStarterButton(project->activeTarget());
 }
 
 bool targetIsMaemo(const QString &id)
@@ -231,13 +231,8 @@ void QemuRuntimeManager::targetAdded(ProjectExplorer::Target *target)
     // handle the qt version changes the build configuration uses
     connect(target, SIGNAL(environmentChanged()), this, SLOT(environmentChanged()));
 
-    foreach (RunConfiguration *runConfig, target->runConfigurations()) {
-        MaemoRunConfiguration *mrc = qobject_cast<MaemoRunConfiguration *> (runConfig);
-        if (mrc) {  // handle device configuration change too
-            connect(mrc, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)),
-                this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
-        }
-    }
+    foreach (RunConfiguration *rc, target->runConfigurations())
+        toggleDeviceConnections(qobject_cast<MaemoRunConfiguration*> (rc), true);
     m_qemuAction->setVisible(!m_runtimes.isEmpty() && sessionHasMaemoTarget());
 }
 
@@ -262,44 +257,29 @@ void QemuRuntimeManager::targetRemoved(ProjectExplorer::Target *target)
 
     disconnect(target, SIGNAL(environmentChanged()), this, SLOT(environmentChanged()));
 
-    foreach (RunConfiguration *runConfig, target->runConfigurations()) {
-        MaemoRunConfiguration *mrc = qobject_cast<MaemoRunConfiguration *> (runConfig);
-        if (mrc) {
-            disconnect(mrc, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)),
-                this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
-        }
-    }
+    foreach (RunConfiguration *rc, target->runConfigurations())
+        toggleDeviceConnections(qobject_cast<MaemoRunConfiguration*> (rc), false);
     m_qemuAction->setVisible(!m_runtimes.isEmpty() && sessionHasMaemoTarget());
 }
 
 void QemuRuntimeManager::targetChanged(ProjectExplorer::Target *target)
 {
     if (target)
-        toogleStarterButton(target);
+        toggleStarterButton(target);
 }
 
 void QemuRuntimeManager::runConfigurationAdded(ProjectExplorer::RunConfiguration *rc)
 {
     if (!rc || !targetIsMaemo(rc->target()->id()))
         return;
-
-    MaemoRunConfiguration *mrc = qobject_cast<MaemoRunConfiguration *> (rc);
-    if (mrc) {  // handle device configuration change too
-        connect(mrc, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)),
-            this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
-    }
+    toggleDeviceConnections(qobject_cast<MaemoRunConfiguration*> (rc), true);
 }
 
 void QemuRuntimeManager::runConfigurationRemoved(ProjectExplorer::RunConfiguration *rc)
 {
     if (!rc || rc->target()->id() != QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
         return;
-
-    MaemoRunConfiguration *mrc = qobject_cast<MaemoRunConfiguration *> (rc);
-    if (mrc) {
-        disconnect(mrc, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)),
-            this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
-    }
+    toggleDeviceConnections(qobject_cast<MaemoRunConfiguration*> (rc), false);
 }
 
 void QemuRuntimeManager::runConfigurationChanged(ProjectExplorer::RunConfiguration *rc)
@@ -327,7 +307,7 @@ void QemuRuntimeManager::buildConfigurationRemoved(ProjectExplorer::BuildConfigu
 void QemuRuntimeManager::buildConfigurationChanged(ProjectExplorer::BuildConfiguration *bc)
 {
     if (bc)
-        toogleStarterButton(bc->target());
+        toggleStarterButton(bc->target());
 }
 
 void QemuRuntimeManager::environmentChanged()
@@ -335,7 +315,7 @@ void QemuRuntimeManager::environmentChanged()
     // likely to happen when the qt version changes the build config is using
     if (ProjectExplorerPlugin *explorer = ProjectExplorerPlugin::instance()) {
         if (Project *project = explorer->session()->startupProject())
-            toogleStarterButton(project->activeTarget());
+            toggleStarterButton(project->activeTarget());
     }
 }
 
@@ -492,7 +472,7 @@ void QemuRuntimeManager::updateStarterIcon(bool running)
         state));
 }
 
-void QemuRuntimeManager::toogleStarterButton(Target *target)
+void QemuRuntimeManager::toggleStarterButton(Target *target)
 {
     if (m_needsSetup)
         setupRuntimes();
@@ -619,3 +599,22 @@ QString QemuRuntimeManager::runtimeForQtVersion(const QString &qmakeCommand) con
     }
     return QString();
 }
+
+void QemuRuntimeManager::toggleDeviceConnections(MaemoRunConfiguration *mrc,
+    bool _connect)
+{
+    if (!mrc)
+        return;
+
+    if (_connect) { // handle device configuration changes
+        connect(mrc, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)),
+            this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
+        connect(mrc, SIGNAL(deviceConfigurationsUpdated(ProjectExplorer::Target*)),
+            this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
+    } else {
+        disconnect(mrc, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)),
+            this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
+        disconnect(mrc, SIGNAL(deviceConfigurationsUpdated(ProjectExplorer::Target*)),
+            this, SLOT(deviceConfigurationChanged(ProjectExplorer::Target*)));
+    }
+}
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.h b/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.h
index 0054596b2e9..3af6d60e255 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/qemuruntimemanager.h
@@ -51,6 +51,7 @@ namespace ProjectExplorer {
 namespace Qt4ProjectManager {
     class QtVersion;
     namespace Internal {
+    class MaemoRunConfiguration;
 
 struct Runtime
 {
@@ -115,7 +116,7 @@ private:
     bool sessionHasMaemoTarget() const;
 
     void updateStarterIcon(bool running);
-    void toogleStarterButton(ProjectExplorer::Target *target);
+    void toggleStarterButton(ProjectExplorer::Target *target);
     bool targetUsesRuntimeConfig(ProjectExplorer::Target *target);
 
     QString maddeRoot(const QString &qmake) const;
@@ -124,6 +125,8 @@ private:
     bool fillRuntimeInformation(Runtime *runtime) const;
     QString runtimeForQtVersion(const QString &qmakeCommand) const;
 
+    void toggleDeviceConnections(MaemoRunConfiguration *mrc, bool connect);
+
 private:
     QAction *m_qemuAction;
     QProcess *m_qemuProcess;
-- 
GitLab