forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user