Editor: Keep the focus when closing editors.

Task-number: QTCREATORBUG-13637
Change-Id: I7b57760ac3bcbede1c39d8f9f5d3728d2877153e
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
This commit is contained in:
David Schulz
2015-01-06 09:35:38 +01:00
parent 8e16697c66
commit 828ea4916c

View File

@@ -2092,6 +2092,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
return false; return false;
QList<EditorView*> closedViews; QList<EditorView*> closedViews;
EditorView *focusView = 0;
// remove the editors // remove the editors
foreach (IEditor *editor, acceptedEditors) { foreach (IEditor *editor, acceptedEditors) {
@@ -2105,6 +2106,8 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
EditorManagerPrivate::removeEditor(editor); EditorManagerPrivate::removeEditor(editor);
if (EditorView *view = EditorManagerPrivate::viewForEditor(editor)) { if (EditorView *view = EditorManagerPrivate::viewForEditor(editor)) {
if (qApp->focusWidget() && qApp->focusWidget() == editor->widget()->focusWidget())
focusView = view;
if (editor == view->currentEditor()) if (editor == view->currentEditor())
closedViews += view; closedViews += view;
if (d->m_currentEditor == editor) { if (d->m_currentEditor == editor) {
@@ -2126,29 +2129,23 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
else else
forceViewToShowEditor = closedViews.first(); forceViewToShowEditor = closedViews.first();
} }
bool currentViewHandled = false;
foreach (EditorView *view, closedViews) { foreach (EditorView *view, closedViews) {
OpenEditorFlags flags;
if (view == currentView)
currentViewHandled = true;
else
flags = OpenEditorFlags(DoNotChangeCurrentEditor);
IEditor *newCurrent = view->currentEditor(); IEditor *newCurrent = view->currentEditor();
if (!newCurrent && forceViewToShowEditor == view) if (!newCurrent && forceViewToShowEditor == view)
newCurrent = EditorManagerPrivate::pickUnusedEditor(); newCurrent = EditorManagerPrivate::pickUnusedEditor();
if (newCurrent) { if (newCurrent) {
EditorManagerPrivate::activateEditor(view, newCurrent, flags); EditorManagerPrivate::activateEditor(view, newCurrent, DoNotChangeCurrentEditor);
} else if (forceViewToShowEditor == view) { } else if (forceViewToShowEditor == view) {
DocumentModel::Entry *entry = DocumentModel::firstRestoredEntry(); DocumentModel::Entry *entry = DocumentModel::firstRestoredEntry();
if (entry) { if (entry) {
EditorManagerPrivate::activateEditorForEntry(view, entry, flags); EditorManagerPrivate::activateEditorForEntry(view, entry, DoNotChangeCurrentEditor);
} else { } else { // no "restored" ones, so any entry left should have a document
// no "restored" ones, so any entry left should have a document
const QList<DocumentModel::Entry *> documents = DocumentModel::entries(); const QList<DocumentModel::Entry *> documents = DocumentModel::entries();
if (!documents.isEmpty()) { if (!documents.isEmpty()) {
IDocument *document = documents.last()->document; if (IDocument *document = documents.last()->document) {
if (document) EditorManagerPrivate::activateEditorForDocument(
EditorManagerPrivate::activateEditorForDocument(view, document, flags); view, document, DoNotChangeCurrentEditor);
}
} }
} }
} }
@@ -2159,8 +2156,10 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
foreach (IEditor *editor, acceptedEditors) foreach (IEditor *editor, acceptedEditors)
delete editor; delete editor;
if (currentView && !currentViewHandled) if (focusView)
EditorManagerPrivate::activateView(currentView); EditorManagerPrivate::activateView(focusView);
else
EditorManagerPrivate::setCurrentEditor(currentView->currentEditor());
if (!currentEditor()) { if (!currentEditor()) {
emit m_instance->currentEditorChanged(0); emit m_instance->currentEditorChanged(0);