diff options
author | Eike Ziller <eike.ziller@digia.com> | 2014-02-05 11:44:56 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-02-05 16:15:44 +0100 |
commit | 783d6ebbd2f62d63d1824f8727e3ae9729443ef8 (patch) | |
tree | 9f94573678369a9e1ab0bdc55aaa50e052651baa /src/plugins/coreplugin/editormanager/editormanager.cpp | |
parent | 58af02f0746befaf84f77e70aff7f9521f68b15f (diff) | |
download | qt-creator-783d6ebbd2f62d63d1824f8727e3ae9729443ef8.tar.gz |
Avoid duplicating editors too often.
It was duplicating editors even if an editor for a document was already
available in the view, if that editor wasn't currently on top.
Task-number: QTCREATORBUG-11395
Change-Id: I89a2d5ef0285d8aa34642567fbf122a98e87e75e
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'src/plugins/coreplugin/editormanager/editormanager.cpp')
-rw-r--r-- | src/plugins/coreplugin/editormanager/editormanager.cpp | 62 |
1 files changed, 33 insertions, 29 deletions
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 4f52d0a3e4..71eb524c45 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1230,34 +1230,35 @@ Core::IEditor *EditorManager::placeEditor(Core::Internal::EditorView *view, Core { Q_ASSERT(view && editor); - if (view->currentEditor() && view->currentEditor()->document() == editor->document()) - editor = view->currentEditor(); - - if (!view->hasEditor(editor)) { - bool duplicateSupported = editor->duplicateSupported(); - if (EditorView *sourceView = viewForEditor(editor)) { - if (editor != sourceView->currentEditor() || !duplicateSupported) { - // pull the IEditor over to the new view - sourceView->removeEditor(editor); - view->addEditor(editor); - view->setCurrentEditor(editor); - if (!sourceView->currentEditor()) { - EditorView *replacementView = 0; - if (IEditor *replacement = pickUnusedEditor(&replacementView)) { - if (replacementView) - replacementView->removeEditor(replacement); - sourceView->addEditor(replacement); - sourceView->setCurrentEditor(replacement); - } + if (view->hasEditor(editor)) + return editor; + if (IEditor *e = view->editorForDocument(editor->document())) + return e; + + // try duplication or pull editor over to new view + bool duplicateSupported = editor->duplicateSupported(); + if (EditorView *sourceView = viewForEditor(editor)) { + if (editor != sourceView->currentEditor() || !duplicateSupported) { + // pull the IEditor over to the new view + sourceView->removeEditor(editor); + view->addEditor(editor); + view->setCurrentEditor(editor); + if (!sourceView->currentEditor()) { + EditorView *replacementView = 0; + if (IEditor *replacement = pickUnusedEditor(&replacementView)) { + if (replacementView) + replacementView->removeEditor(replacement); + sourceView->addEditor(replacement); + sourceView->setCurrentEditor(replacement); } - return editor; - } else if (duplicateSupported) { - editor = duplicateEditor(editor); - Q_ASSERT(editor); } + return editor; + } else if (duplicateSupported) { + editor = duplicateEditor(editor); + Q_ASSERT(editor); } - view->addEditor(editor); } + view->addEditor(editor); return editor; } @@ -1314,11 +1315,14 @@ IEditor *EditorManager::activateEditorForDocument(IDocument *document, OpenEdito Core::IEditor *EditorManager::activateEditorForDocument(Core::Internal::EditorView *view, Core::IDocument *document, OpenEditorFlags flags) { Q_ASSERT(view); - const QList<IEditor*> editors = d->m_documentModel->editorsForDocument(document); - if (editors.isEmpty()) - return 0; - - return activateEditor(view, editors.first(), flags); + IEditor *editor = view->editorForDocument(document); + if (!editor) { + const QList<IEditor*> editors = d->m_documentModel->editorsForDocument(document); + if (editors.isEmpty()) + return 0; + editor = editors.first(); + } + return activateEditor(view, editor, flags); } /* For something that has a 'QStringList mimeTypes' (IEditorFactory |