summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/editormanager/editormanager.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2014-02-05 11:44:56 +0100
committerEike Ziller <eike.ziller@digia.com>2014-02-05 16:15:44 +0100
commit783d6ebbd2f62d63d1824f8727e3ae9729443ef8 (patch)
tree9f94573678369a9e1ab0bdc55aaa50e052651baa /src/plugins/coreplugin/editormanager/editormanager.cpp
parent58af02f0746befaf84f77e70aff7f9521f68b15f (diff)
downloadqt-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.cpp62
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