From 4e1a3b0029ee3adcb6ef2cc0e9cec58f8bc69b63 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 13 Aug 2018 16:18:33 +0200 Subject: [PATCH] File System View: Fix scroll position and bread crumb in some cases Use a model index from the right model, and update the bread crumb, when updating the scroll position delayed, for the case where the directory for the file was not already loaded in the file system model yet. Broke with introduction of the folder vs alphabetic sorting. Task-number: QTCREATORBUG-20897 Change-Id: Ifc912184b4910ed546c0141044eead3650b98c87 Reviewed-by: David Schulz --- .../projectexplorer/foldernavigationwidget.cpp | 14 +++++++------- .../projectexplorer/foldernavigationwidget.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp index d4c91d32b9d..b0df6203754 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.cpp +++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp @@ -378,10 +378,7 @@ FolderNavigationWidget::FolderNavigationWidget(QWidget *parent) : QWidget(parent connect(m_listView->selectionModel(), &QItemSelectionModel::currentChanged, this, - [this](const QModelIndex ¤t, const QModelIndex &previous) { - setCrumblePath(m_sortProxyModel->mapToSource(current), - m_sortProxyModel->mapToSource(previous)); - }, + &FolderNavigationWidget::setCrumblePath, Qt::QueuedConnection); connect(m_crumbLabel, &Utils::FileCrumbLabel::pathClicked, [this](const Utils::FileName &path) { const QModelIndex rootIndex = m_sortProxyModel->mapToSource(m_listView->rootIndex()); @@ -618,13 +615,15 @@ void FolderNavigationWidget::selectFile(const Utils::FileName &filePath) // Use magic timer for scrolling. m_listView->setCurrentIndex(fileIndex); QTimer::singleShot(200, this, [this, filePath] { - const QModelIndex fileIndex = m_fileSystemModel->index(filePath.toString()); + const QModelIndex fileIndex = m_sortProxyModel->mapFromSource( + m_fileSystemModel->index(filePath.toString())); if (fileIndex == m_listView->rootIndex()) { m_listView->horizontalScrollBar()->setValue(0); m_listView->verticalScrollBar()->setValue(0); } else { m_listView->scrollTo(fileIndex); } + setCrumblePath(fileIndex); }); } } @@ -700,11 +699,12 @@ void FolderNavigationWidget::createNewFolder(const QModelIndex &parent) m_listView->edit(index); } -void FolderNavigationWidget::setCrumblePath(const QModelIndex &index, const QModelIndex &) +void FolderNavigationWidget::setCrumblePath(const QModelIndex &index) { + const QModelIndex sourceIndex = m_sortProxyModel->mapToSource(index); const int width = m_crumbLabel->width(); const int previousHeight = m_crumbLabel->immediateHeightForWidth(width); - m_crumbLabel->setPath(Utils::FileName::fromString(m_fileSystemModel->filePath(index))); + m_crumbLabel->setPath(Utils::FileName::fromString(m_fileSystemModel->filePath(sourceIndex))); const int currentHeight = m_crumbLabel->immediateHeightForWidth(width); const int diff = currentHeight - previousHeight; if (diff != 0 && m_crumbLabel->isVisible()) { diff --git a/src/plugins/projectexplorer/foldernavigationwidget.h b/src/plugins/projectexplorer/foldernavigationwidget.h index 8f428863eba..f10f69d595d 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.h +++ b/src/plugins/projectexplorer/foldernavigationwidget.h @@ -131,7 +131,7 @@ private: QStringList projectsInDirectory(const QModelIndex &index) const; void openProjectsInDirectory(const QModelIndex &index); void createNewFolder(const QModelIndex &parent); - void setCrumblePath(const QModelIndex &index, const QModelIndex &); + void setCrumblePath(const QModelIndex &index); Core::IContext *m_context = nullptr; Utils::NavigationTreeView *m_listView = nullptr;