From 89e66d7042c4f1ad25bc9a2487b82d97e6e32d9e Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Wed, 6 Oct 2010 11:15:01 +0200
Subject: [PATCH] Fix annoying behavior that target selector always switched
 back to "build"

Reviewed-by: Tobias Hunger
Task-number: QTCREATORBUG-1877
---
 src/plugins/projectexplorer/projectwindow.cpp       | 13 +++++++++++--
 src/plugins/projectexplorer/projectwindow.h         |  1 +
 src/plugins/projectexplorer/targetsettingspanel.cpp | 10 ++++++++++
 src/plugins/projectexplorer/targetsettingspanel.h   |  3 +++
 4 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index d4fbada62e8..7cffc0f2683 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -229,7 +229,8 @@ void PanelsWidget::addPanelWidget(IPropertiesPanel *panel, int row)
 
 ProjectWindow::ProjectWindow(QWidget *parent)
     : QWidget(parent),
-    m_currentWidget(0)
+      m_currentWidget(0),
+      m_previousTargetSubIndex(-1)
 {
     ProjectExplorer::SessionManager *session = ProjectExplorerPlugin::instance()->session();
 
@@ -375,11 +376,19 @@ void ProjectWindow::showProperties(int index, int subIndex)
     // Set up custom panels again:
     int pos = 0;
     IPanelFactory *fac = 0;
+    // remember previous sub index state of target settings page
+    if (TargetSettingsPanelWidget *previousPanelWidget
+            = qobject_cast<TargetSettingsPanelWidget*>(m_currentWidget)) {
+        m_previousTargetSubIndex = previousPanelWidget->currentSubIndex();
+    }
     if (project->supportedTargetIds().count() > 1) {
         if (subIndex == 0) {
             // Targets page
             removeCurrentWidget();
-            m_currentWidget = new TargetSettingsPanelWidget(project);
+            TargetSettingsPanelWidget *panelWidget = new TargetSettingsPanelWidget(project);
+            if (m_previousTargetSubIndex >= 0)
+                panelWidget->setCurrentSubIndex(m_previousTargetSubIndex);
+            m_currentWidget = panelWidget;
             m_centralWidget->addWidget(m_currentWidget);
             m_centralWidget->setCurrentWidget(m_currentWidget);
         }
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index b4bf4fc948b..512e7cafe6d 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -94,6 +94,7 @@ private:
     QStackedWidget *m_centralWidget;
     QWidget *m_currentWidget;
     QList<ProjectExplorer::Project *> m_tabIndexToProject;
+    int m_previousTargetSubIndex;
 };
 
 } // namespace Internal
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index b40c86f2c23..6de64ac2730 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -285,3 +285,13 @@ void TargetSettingsPanelWidget::updateTargetAddAndRemoveButtons()
     m_selector->setAddButtonEnabled(!m_addMenu->actions().isEmpty());
     m_selector->setRemoveButtonEnabled(m_project->targets().count() > 1);
 }
+
+int TargetSettingsPanelWidget::currentSubIndex() const
+{
+    return m_selector->currentSubIndex();
+}
+
+void TargetSettingsPanelWidget::setCurrentSubIndex(int subIndex)
+{
+    m_selector->setCurrentSubIndex(subIndex);
+}
diff --git a/src/plugins/projectexplorer/targetsettingspanel.h b/src/plugins/projectexplorer/targetsettingspanel.h
index 874263b936d..8e01f5c99e2 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.h
+++ b/src/plugins/projectexplorer/targetsettingspanel.h
@@ -57,6 +57,9 @@ public:
 
     void setupUi();
 
+    int currentSubIndex() const;
+    void setCurrentSubIndex(int subIndex);
+
 private slots:
     void currentTargetChanged(int targetIndex, int subIndex);
     void removeTarget();
-- 
GitLab