diff --git a/src/plugins/qmljseditor/qmljsoutline.cpp b/src/plugins/qmljseditor/qmljsoutline.cpp
index 8618c22093e8d97a33b1d4ffee1c470c2a2647f2..e559e52b96a15a3af77271e27f5bdee8d2435e37 100644
--- a/src/plugins/qmljseditor/qmljsoutline.cpp
+++ b/src/plugins/qmljseditor/qmljsoutline.cpp
@@ -145,8 +145,16 @@ void QmlJSOutlineWidget::updateSelectionInTree(const QModelIndex &index)
         return;
 
     m_blockCursorSync = true;
-    m_treeView->selectionModel()->select(m_filterModel->mapFromSource(index), QItemSelectionModel::ClearAndSelect);
-    m_treeView->scrollTo(m_filterModel->mapFromSource(index));
+
+    QModelIndex baseIndex = index;
+    QModelIndex filterIndex = m_filterModel->mapFromSource(baseIndex);
+    while (baseIndex.isValid() && !filterIndex.isValid()) { // Search for ancestor index actually shown
+        baseIndex = baseIndex.parent();
+        filterIndex = m_filterModel->mapFromSource(baseIndex);
+    }
+
+    m_treeView->selectionModel()->select(filterIndex, QItemSelectionModel::ClearAndSelect);
+    m_treeView->scrollTo(filterIndex);
     m_blockCursorSync = false;
 }