diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index c3d04a6a2ce32fce4bc854ce89a8c1ae7e051919..e898895f39a172d2646a06a4572d29e9bc82c37c 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1225,12 +1225,15 @@ void EditorManager::closeDuplicate(Core::IEditor *editor) } } -Core::IEditor *EditorManager::pickUnusedEditor() const +Core::IEditor *EditorManager::pickUnusedEditor(EditorView **foundView) const { foreach (IEditor *editor, openedEditors()) { EditorView *view = viewForEditor(editor); - if (!view || view->currentEditor() != editor) + if (!view || view->currentEditor() != editor) { + if (foundView) + *foundView = view; return editor; + } } return 0; } @@ -1282,8 +1285,12 @@ Core::IEditor *EditorManager::placeEditor(Core::Internal::EditorView *view, Core view->addEditor(editor); view->setCurrentEditor(editor); if (!sourceView->currentEditor()) { - if (IEditor *replacement = pickUnusedEditor()) + EditorView *replacementView = 0; + if (IEditor *replacement = pickUnusedEditor(&replacementView)) { + if (replacementView) + replacementView->removeEditor(replacement); sourceView->addEditor(replacement); + } } return editor; } else if (duplicateSupported) { diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index 556dfc65aa83775d501fb005c98e2d585b973674..f76fc1519364e4f951a423fa0eb3380089c742bd 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -277,7 +277,7 @@ private: void closeView(Internal::EditorView *view); void emptyView(Internal::EditorView *view); static void splitNewWindow(Internal::EditorView *view); - IEditor *pickUnusedEditor() const; + IEditor *pickUnusedEditor(Internal::EditorView **foundView = 0) const; void addDocumentToRecentFiles(IDocument *document); void updateAutoSave(); void setCloseSplitEnabled(Internal::SplitterOrView *splitterOrView, bool enable);