forked from qt-creator/qt-creator
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 <david.schulz@qt.io>
This commit is contained in:
@@ -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()) {
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user