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);