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