diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index 98224d9f82d..31d72247d6e 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -329,9 +329,11 @@ EditorView::~EditorView() void EditorView::addEditor(IEditor *editor) { - if (m_container->indexOf(editor->widget()) != -1) + if (m_editors.contains(editor)) return; + m_editors.append(editor); + m_container->addWidget(editor->widget()); m_widgetEditorMap.insert(editor->widget(), editor); @@ -348,7 +350,7 @@ void EditorView::addEditor(IEditor *editor) bool EditorView::hasEditor(IEditor *editor) const { - return (m_container->indexOf(editor->widget()) != -1); + return m_editors.contains(editor); } void EditorView::closeView() @@ -360,26 +362,30 @@ void EditorView::closeView() void EditorView::removeEditor(IEditor *editor) { QTC_ASSERT(editor, return); + if (!m_editors.contains(editor)) + return; + const int index = m_container->indexOf(editor->widget()); + QTC_ASSERT((index != -1), return); bool wasCurrent = (index == m_container->currentIndex()); - if (index != -1) { - m_container->removeWidget(editor->widget()); - m_widgetEditorMap.remove(editor->widget()); - editor->widget()->setParent(0); - disconnect(editor, SIGNAL(changed()), this, SLOT(updateEditorStatus())); - QToolBar *toolBar = editor->toolBar(); - if (toolBar != 0) { - if (m_activeToolBar == toolBar) { - m_activeToolBar = m_defaultToolBar; - m_activeToolBar->setVisible(true); - } - m_toolBar->layout()->removeWidget(toolBar); - toolBar->setVisible(false); - toolBar->setParent(0); + m_editors.removeAll(editor); + + m_container->removeWidget(editor->widget()); + m_widgetEditorMap.remove(editor->widget()); + editor->widget()->setParent(0); + disconnect(editor, SIGNAL(changed()), this, SLOT(updateEditorStatus())); + QToolBar *toolBar = editor->toolBar(); + if (toolBar != 0) { + if (m_activeToolBar == toolBar) { + m_activeToolBar = m_defaultToolBar; + m_activeToolBar->setVisible(true); } + m_toolBar->layout()->removeWidget(toolBar); + toolBar->setVisible(false); + toolBar->setParent(0); } - if (wasCurrent) - setCurrentEditor(currentEditor()); + if (wasCurrent && m_editors.count()) + setCurrentEditor(m_editors.last()); } IEditor *EditorView::currentEditor() const @@ -394,6 +400,8 @@ void EditorView::setCurrentEditor(IEditor *editor) if (!editor || m_container->count() <= 0 || m_container->indexOf(editor->widget()) == -1) return; + m_editors.removeAll(editor); + m_editors.append(editor); const int idx = m_container->indexOf(editor->widget()); QTC_ASSERT(idx >= 0, return); diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index 7387d1c85f9..589592ab279 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -144,6 +144,7 @@ private: QToolButton *m_infoWidgetButton; IEditor *m_editorForInfoWidget; QSortFilterProxyModel m_proxyModel; + QListm_editors; QMap m_widgetEditorMap; };