summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/editormanager
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@theqtcompany.com>2015-01-06 09:35:38 +0100
committerDavid Schulz <david.schulz@theqtcompany.com>2015-01-30 10:21:10 +0000
commit828ea4916c8223e2634445e09b34ef3b2d38fe33 (patch)
tree09b3be6f7c4b09c4d9a409ebcf8b165676e422a1 /src/plugins/coreplugin/editormanager
parent8e16697c665a2cffa3a65ab14882a299d6486da9 (diff)
downloadqt-creator-828ea4916c8223e2634445e09b34ef3b2d38fe33.tar.gz
Editor: Keep the focus when closing editors.
Task-number: QTCREATORBUG-13637 Change-Id: I7b57760ac3bcbede1c39d8f9f5d3728d2877153e Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Diffstat (limited to 'src/plugins/coreplugin/editormanager')
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 5454e02031..fdd491b305 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -2092,6 +2092,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
return false;
QList<EditorView*> closedViews;
+ EditorView *focusView = 0;
// remove the editors
foreach (IEditor *editor, acceptedEditors) {
@@ -2105,6 +2106,8 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
EditorManagerPrivate::removeEditor(editor);
if (EditorView *view = EditorManagerPrivate::viewForEditor(editor)) {
+ if (qApp->focusWidget() && qApp->focusWidget() == editor->widget()->focusWidget())
+ focusView = view;
if (editor == view->currentEditor())
closedViews += view;
if (d->m_currentEditor == editor) {
@@ -2126,29 +2129,23 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
else
forceViewToShowEditor = closedViews.first();
}
- bool currentViewHandled = false;
foreach (EditorView *view, closedViews) {
- OpenEditorFlags flags;
- if (view == currentView)
- currentViewHandled = true;
- else
- flags = OpenEditorFlags(DoNotChangeCurrentEditor);
IEditor *newCurrent = view->currentEditor();
if (!newCurrent && forceViewToShowEditor == view)
newCurrent = EditorManagerPrivate::pickUnusedEditor();
if (newCurrent) {
- EditorManagerPrivate::activateEditor(view, newCurrent, flags);
+ EditorManagerPrivate::activateEditor(view, newCurrent, DoNotChangeCurrentEditor);
} else if (forceViewToShowEditor == view) {
DocumentModel::Entry *entry = DocumentModel::firstRestoredEntry();
if (entry) {
- EditorManagerPrivate::activateEditorForEntry(view, entry, flags);
- } else {
- // no "restored" ones, so any entry left should have a document
+ EditorManagerPrivate::activateEditorForEntry(view, entry, DoNotChangeCurrentEditor);
+ } else { // no "restored" ones, so any entry left should have a document
const QList<DocumentModel::Entry *> documents = DocumentModel::entries();
if (!documents.isEmpty()) {
- IDocument *document = documents.last()->document;
- if (document)
- EditorManagerPrivate::activateEditorForDocument(view, document, flags);
+ if (IDocument *document = documents.last()->document) {
+ EditorManagerPrivate::activateEditorForDocument(
+ view, document, DoNotChangeCurrentEditor);
+ }
}
}
}
@@ -2159,8 +2156,10 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
foreach (IEditor *editor, acceptedEditors)
delete editor;
- if (currentView && !currentViewHandled)
- EditorManagerPrivate::activateView(currentView);
+ if (focusView)
+ EditorManagerPrivate::activateView(focusView);
+ else
+ EditorManagerPrivate::setCurrentEditor(currentView->currentEditor());
if (!currentEditor()) {
emit m_instance->currentEditorChanged(0);