diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 92cd634827385b2a6a124f58881842a80a8939ba..bbde9d6414f0efb45dd671f8f237bfc1e8269051 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -644,7 +644,7 @@ void EditorManager::closeView(Core::Internal::EditorView *view) SplitterOrView *splitterOrView = view->parentSplitterOrView(); Q_ASSERT(splitterOrView); Q_ASSERT(splitterOrView->view() == view); - SplitterOrView *splitter = d->m_splitter->findSplitter(splitterOrView); + SplitterOrView *splitter = splitterOrView->findParentSplitter(); Q_ASSERT(splitterOrView->hasEditors() == false); splitterOrView->hide(); delete splitterOrView; diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index 04f3fd91c85e0e37638c98e3770f5acc4b88821e..bbaff3a5ab96b6bce65eae882c8d0871c77b6226 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -514,17 +514,15 @@ EditorView *SplitterOrView::findFirstView() return m_view; } -SplitterOrView *SplitterOrView::findSplitter(SplitterOrView *child) +SplitterOrView *SplitterOrView::findParentSplitter() const { - if (m_splitter) { - for (int i = 0; i < m_splitter->count(); ++i) { - if (SplitterOrView *splitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(i))) { - if (splitterOrView == child) - return this; - if (SplitterOrView *result = splitterOrView->findSplitter(child)) - return result; - } + QWidget *w = parentWidget(); + while (w) { + if (SplitterOrView *splitter = qobject_cast<SplitterOrView *>(w)) { + QTC_CHECK(splitter->splitter()); + return splitter; } + w = w->parentWidget(); } return 0; } diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index 74009d04f051fe4cf08e905a7d79458f2afd28bb..cb90be3482a78f71cfad242982a6a5719fc8691c 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -182,7 +182,7 @@ public: void restoreState(const QByteArray &); EditorView *findFirstView(); - SplitterOrView *findSplitter(SplitterOrView *child); + SplitterOrView *findParentSplitter() const; EditorView *findNextView(EditorView *view);