diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp index a13265415228aca0fd25afd357758d81c6f70776..404c91c2acb8d4684d283342d30238853d9132c2 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.cpp +++ b/src/plugins/cppeditor/cpptypehierarchy.cpp @@ -168,6 +168,19 @@ CppTypeHierarchyWidget::~CppTypeHierarchyWidget() delete m_delegate; } +bool CppTypeHierarchyWidget::handleReplacement(Core::IEditor *editor) +{ + if (CPPEditorEditable *cppEditable = qobject_cast<CPPEditorEditable *>(editor)) { + if (m_cppEditor) { + m_cppEditor = static_cast<CPPEditor *>(cppEditable->widget()); + return true; + } + } else if (!m_cppEditor) { + return true; + } + return false; +} + void CppTypeHierarchyWidget::perform() { if (!m_cppEditor) @@ -228,11 +241,13 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget() void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor) { - CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor); - removeWidget(m_typeHiearchyWidgetInstance); - m_typeHiearchyWidgetInstance->deleteLater(); - m_typeHiearchyWidgetInstance = replacement; - addWidget(m_typeHiearchyWidgetInstance); + if (!m_typeHiearchyWidgetInstance->handleReplacement(editor)) { + CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor); + removeWidget(m_typeHiearchyWidgetInstance); + m_typeHiearchyWidgetInstance->deleteLater(); + m_typeHiearchyWidgetInstance = replacement; + addWidget(m_typeHiearchyWidgetInstance); + } } // CppTypeHierarchyFactory diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h index 8bc2c192a519d87e04feff7071969cd2fa273aa9..d3c07b9bee9a88e5d2190851a9eca2a832cfe0a4 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.h +++ b/src/plugins/cppeditor/cpptypehierarchy.h @@ -92,6 +92,8 @@ public: CppTypeHierarchyWidget(Core::IEditor *editor); virtual ~CppTypeHierarchyWidget(); + bool handleReplacement(Core::IEditor *editor); + public slots: void perform();