From 7cd54f126566de3fe0724652854f2182856256a5 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Tue, 23 Feb 2010 14:33:18 +0100
Subject: [PATCH] Fix possible crash when deleting targets

---
 .../projectexplorer/targetsettingspanel.cpp   | 20 ++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index 98522e228ca..55d12c58692 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -187,7 +187,7 @@ void TargetSettingsPanelWidget::setupUi()
 
 void TargetSettingsPanelWidget::currentTargetIndexChanged(int targetIndex, int subIndex)
 {
-    if (targetIndex < -1 || targetIndex >= m_project->targets().count())
+    if (targetIndex < -1 || targetIndex >= m_targets.count())
         return;
     if (subIndex < -1 || subIndex >= 2)
         return;
@@ -198,16 +198,16 @@ void TargetSettingsPanelWidget::currentTargetIndexChanged(int targetIndex, int s
 
     // Target was not actually changed:
     if (m_currentIndex == targetIndex) {
-        m_centralWidget->setCurrentWidget(m_panelWidgets[subIndex]);
+        if (m_panelWidgets[subIndex])
+            m_centralWidget->setCurrentWidget(m_panelWidgets[subIndex]);
+        else
+            m_centralWidget->setCurrentWidget(m_noTargetLabel);
         return;
     }
 
-    // Target has changed:
-    delete m_panelWidgets[0];
-    m_panelWidgets[0] = 0;
-    delete m_panelWidgets[1];
-    m_panelWidgets[1] = 0;
+    m_currentIndex = targetIndex;
 
+    // Target has changed:
     if (targetIndex == -1) { // no more targets!
         m_centralWidget->setCurrentWidget(m_noTargetLabel);
         return;
@@ -231,10 +231,12 @@ void TargetSettingsPanelWidget::currentTargetIndexChanged(int targetIndex, int s
     m_centralWidget->addWidget(buildPanel);
     m_centralWidget->addWidget(runPanel);
 
+    m_centralWidget->setCurrentWidget(subIndex == 0 ? buildPanel : runPanel);
+
+    delete m_panelWidgets[0];
     m_panelWidgets[0] = buildPanel;
+    delete m_panelWidgets[1];
     m_panelWidgets[1] = runPanel;
-
-    m_centralWidget->setCurrentWidget(m_panelWidgets[subIndex]);
 }
 
 void TargetSettingsPanelWidget::addTarget()
-- 
GitLab