From ad9b6e4ea63cbaf59fcdf08de249a091ce0e4cc5 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Mon, 12 Apr 2010 12:43:17 +0200
Subject: [PATCH] Switch away from modes that become deactivated

Make sure any mode that gets disabled is no longer displayed.

Task-number: QTCREATORBUG-1107
Reviewed-by: con
---
 src/plugins/coreplugin/modemanager.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp
index 84fdc98bcd9..ff0ce2c1571 100644
--- a/src/plugins/coreplugin/modemanager.cpp
+++ b/src/plugins/coreplugin/modemanager.cpp
@@ -218,6 +218,18 @@ void ModeManager::enabledStateChanged()
     int index = d->m_modes.indexOf(mode);
     QTC_ASSERT(index >= 0, return);
     d->m_modeStack->setTabEnabled(index, mode->isEnabled());
+
+    // Make sure we leave any disabled mode to prevent possible crashes:
+    if (mode == currentMode() && !mode->isEnabled()) {
+        // This assumes that there is always at least one enabled mode.
+        for (int i = 0; i < d->m_modes.count(); ++i) {
+            if (d->m_modes.at(i) != mode &&
+                d->m_modes.at(i)->isEnabled()) {
+                activateMode(d->m_modes.at(i)->id());
+                break;
+            }
+        }
+    }
 }
 
 void ModeManager::aboutToRemoveObject(QObject *obj)
-- 
GitLab