diff options
author | David Schulz <david.schulz@theqtcompany.com> | 2015-01-06 09:35:38 +0100 |
---|---|---|
committer | David Schulz <david.schulz@theqtcompany.com> | 2015-01-30 10:21:10 +0000 |
commit | 828ea4916c8223e2634445e09b34ef3b2d38fe33 (patch) | |
tree | 09b3be6f7c4b09c4d9a409ebcf8b165676e422a1 /src/plugins | |
parent | 8e16697c665a2cffa3a65ab14882a299d6486da9 (diff) | |
download | qt-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')
-rw-r--r-- | src/plugins/coreplugin/editormanager/editormanager.cpp | 29 |
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); |