From 5f44d8f5354ff5b192f8cdf88a85a81a218f733c Mon Sep 17 00:00:00 2001
From: Eike Ziller <eike.ziller@nokia.com>
Date: Thu, 1 Dec 2011 13:03:08 +0100
Subject: [PATCH] More Esc fixes.

Move focus back to editor's focus widget if there's one.
(E.g. pressing escape in an output pane while the
commit editor is open.)

Change-Id: I4211a84cfa3d7ee9b61f39ae054fc4bd32e214c1
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
---
 src/plugins/coreplugin/mainwindow.cpp        | 7 +++++--
 src/plugins/coreplugin/outputpanemanager.cpp | 8 ++++++--
 src/plugins/find/currentdocumentfind.cpp     | 5 ++++-
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index d1c6334ecf1..02322980833 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -897,8 +897,11 @@ void MainWindow::setFocusToEditor()
     // give focus to the editor if we have one
     if (IEditor *editor = m_editorManager->currentEditor()) {
         if (qApp->focusWidget() != editor->widget()->focusWidget()) {
-            editor->widget()->setFocus();
-            focusWasMovedToEditor = editor->widget()->hasFocus();
+            QWidget *w = editor->widget()->focusWidget();
+            if (!w)
+                w = editor->widget();
+            w->setFocus();
+            focusWasMovedToEditor = w->hasFocus();
         }
     }
 
diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp
index f4d7c5a9c4d..29e15e718d9 100644
--- a/src/plugins/coreplugin/outputpanemanager.cpp
+++ b/src/plugins/coreplugin/outputpanemanager.cpp
@@ -386,8 +386,12 @@ void OutputPaneManager::slotHide()
             m_buttons.value(idx)->setChecked(false);
         if (m_pageMap.value(idx))
             m_pageMap.value(idx)->visibilityChanged(false);
-        if (IEditor *editor = Core::EditorManager::instance()->currentEditor())
-            editor->widget()->setFocus();
+        if (IEditor *editor = Core::EditorManager::instance()->currentEditor()) {
+            QWidget *w = editor->widget()->focusWidget();
+            if (!w)
+                w = editor->widget();
+            w->setFocus();
+        }
     }
 }
 
diff --git a/src/plugins/find/currentdocumentfind.cpp b/src/plugins/find/currentdocumentfind.cpp
index acbed55a96b..6f4175416c2 100644
--- a/src/plugins/find/currentdocumentfind.cpp
+++ b/src/plugins/find/currentdocumentfind.cpp
@@ -221,7 +221,10 @@ void CurrentDocumentFind::clearFindSupport()
 bool CurrentDocumentFind::setFocusToCurrentFindSupport()
 {
     if (m_currentFind && m_currentWidget) {
-        m_currentWidget->setFocus();
+        QWidget *w = m_currentWidget->focusWidget();
+        if (!w)
+            w = m_currentWidget;
+        w->setFocus();
         return true;
     }
     return false;
-- 
GitLab