From bbfc1013f04b59b01a964528f23b98ffdc1d8bf8 Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Mon, 9 Mar 2009 17:19:35 +0100
Subject: [PATCH] Fixes:    "Return to editor" functionality suboptimal in
 debug mode

---
 src/plugins/coreplugin/mainwindow.cpp | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 216dd21c433..2aa251b4da4 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -803,10 +803,7 @@ void MainWindow::openFiles(const QStringList &fileNames)
 void MainWindow::setFocusToEditor()
 {
     QWidget *focusWidget = qApp->focusWidget();
-    // ### Duplicated code from EditMode::makeSureEditorManagerVisible
-    IMode *currentMode = m_coreImpl->modeManager()->currentMode();
-    if (currentMode && currentMode->uniqueModeName() != QLatin1String(Constants::MODE_EDIT) &&
-        currentMode->uniqueModeName() != QLatin1String("GdbDebugger.Mode.Debug"))
+    if (!EditorManager::instance()->isVisible())
     {
         m_coreImpl->modeManager()->activateMode(QLatin1String(Constants::MODE_EDIT));
     }
@@ -814,11 +811,23 @@ void MainWindow::setFocusToEditor()
     if (IEditor *editor = m_editorManager->currentEditor())
             editor->widget()->setFocus();
 
-    if (focusWidget && focusWidget == qApp->focusWidget()) {
-        if (FindToolBarPlaceHolder::getCurrent())
-            FindToolBarPlaceHolder::getCurrent()->hide();
-        OutputPaneManager::instance()->slotHide();
-        RightPaneWidget::instance()->setShown(false);
+    bool focusWasAlreadyInEditor = (focusWidget && focusWidget == qApp->focusWidget());
+    if (focusWasAlreadyInEditor) {
+        bool stuffVisible =
+                (FindToolBarPlaceHolder::getCurrent() &&
+                 FindToolBarPlaceHolder::getCurrent()->isVisible())
+             || (OutputPanePlaceHolder::getCurrent() &&
+                 OutputPanePlaceHolder::getCurrent()->isVisible())
+             || (RightPanePlaceHolder::current() &&
+                 RightPanePlaceHolder::current()->isVisible());
+        if (stuffVisible) {
+            if (FindToolBarPlaceHolder::getCurrent())
+                FindToolBarPlaceHolder::getCurrent()->hide();
+            OutputPaneManager::instance()->slotHide();
+            RightPaneWidget::instance()->setShown(false);
+        } else {
+            m_coreImpl->modeManager()->activateMode(QLatin1String(Constants::MODE_EDIT));
+        }
     }
 }
 
-- 
GitLab