From 9c8079f0914562723c48cd03fb51a018bc973ff9 Mon Sep 17 00:00:00 2001
From: Daniel Molkentin <daniel.molkentin@nokia.com>
Date: Mon, 12 Apr 2010 18:18:45 +0200
Subject: [PATCH] Keep targets in the minitargetselector sync with the project
 settings

Task-number: QTCREATORBUG-1097
Reviewed-by: dt
---
 .../miniprojecttargetselector.cpp             | 19 +++++++++++++++++++
 .../miniprojecttargetselector.h               |  1 +
 2 files changed, 20 insertions(+)

diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp
index 89028951573..b71e78f07f5 100644
--- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp
+++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp
@@ -461,6 +461,8 @@ void MiniProjectTargetSelector::addProject(ProjectExplorer::Project* project)
             SLOT(addTarget(ProjectExplorer::Target*)));
     connect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)),
             SLOT(removeTarget(ProjectExplorer::Target*)));
+    connect(project, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
+            SLOT(changeActiveTarget(ProjectExplorer::Target*)));
 
     if (project == ProjectExplorerPlugin::instance()->startupProject()) {
         m_projectsBox->setCurrentIndex(pos);
@@ -546,6 +548,23 @@ void MiniProjectTargetSelector::removeTarget(ProjectExplorer::Target *target)
     disconnect(target, SIGNAL(overlayIconChanged()), this, SLOT(updateAction()));
 }
 
+void MiniProjectTargetSelector::changeActiveTarget(ProjectExplorer::Target *target)
+{
+    int index = indexFor(target->project());
+    if (index < 0)
+        return;
+    ProjectListWidget *plw = qobject_cast<ProjectListWidget*>(m_widgetStack->widget(index));
+
+    for (int i = 0; i < plw->count(); ++i) {
+        QListWidgetItem *itm = plw->item(i);
+        MiniTargetWidget *mtw = qobject_cast<MiniTargetWidget*>(plw->itemWidget(itm));
+        if (mtw->target() == target) {
+            plw->setCurrentItem(itm);
+            break;
+        }
+    }
+}
+
 void MiniProjectTargetSelector::updateAction()
 {
     Project *project = ProjectExplorerPlugin::instance()->startupProject();
diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.h b/src/plugins/projectexplorer/miniprojecttargetselector.h
index 5b2cbd588a4..faffe3d8bb8 100644
--- a/src/plugins/projectexplorer/miniprojecttargetselector.h
+++ b/src/plugins/projectexplorer/miniprojecttargetselector.h
@@ -125,6 +125,7 @@ private slots:
     void removeProject(ProjectExplorer::Project *project);
     void addTarget(ProjectExplorer::Target *target, bool isActiveTarget = false);
     void removeTarget(ProjectExplorer::Target *target);
+    void changeActiveTarget(ProjectExplorer::Target *target);
     void emitStartupProjectChanged(int index);
     void changeStartupProject(ProjectExplorer::Project *project);
     void updateAction();
-- 
GitLab