diff --git a/src/panels/folders/folderspanel.cpp b/src/panels/folders/folderspanel.cpp index eef27ce472..add7f692b9 100644 --- a/src/panels/folders/folderspanel.cpp +++ b/src/panels/folders/folderspanel.cpp @@ -137,7 +137,7 @@ bool FoldersPanel::urlChanged() void FoldersPanel::reloadTree() { if (m_controller) { - loadTree(url()); + loadTree(url(), true); } } @@ -316,34 +316,42 @@ void FoldersPanel::startFadeInAnimation() anim->setDuration(200); } -void FoldersPanel::loadTree(const QUrl& url) +void FoldersPanel::loadTree(const QUrl& url, bool allowJumpHome) { Q_ASSERT(m_controller); m_updateCurrentItem = false; + bool jumpHome = false; QUrl baseUrl; - if (url.isLocalFile()) { - const bool isInHomeFolder = Dolphin::homeUrl().isParentOf(url) || (Dolphin::homeUrl() == url); - if (FoldersPanelSettings::limitFoldersPanelToHome() && isInHomeFolder) { + if (!url.isLocalFile()) { + // Clear the path for non-local URLs and use it as base + baseUrl = url; + baseUrl.setPath(QString('/')); + } else if (Dolphin::homeUrl().isParentOf(url) || (Dolphin::homeUrl() == url)) { + if (FoldersPanelSettings::limitFoldersPanelToHome() ) { baseUrl = Dolphin::homeUrl(); } else { // Use the root directory as base for local URLs (#150941) baseUrl = QUrl::fromLocalFile(QDir::rootPath()); } + } else if (FoldersPanelSettings::limitFoldersPanelToHome() && allowJumpHome) { + baseUrl = Dolphin::homeUrl(); + jumpHome = true; } else { - // Clear the path for non-local URLs and use it as base - baseUrl = url; - baseUrl.setPath(QString('/')); + // Use the root directory as base for local URLs (#150941) + baseUrl = QUrl::fromLocalFile(QDir::rootPath()); } - if (m_model->directory() != baseUrl) { + if (m_model->directory() != baseUrl && !jumpHome) { m_updateCurrentItem = true; m_model->refreshDirectory(baseUrl); } const int index = m_model->index(url); - if (index >= 0) { + if (jumpHome == true) { + emit folderActivated(baseUrl); + } else if (index >= 0) { updateCurrentItem(index); } else if (url == baseUrl) { // clear the selection when visiting the base url diff --git a/src/panels/folders/folderspanel.h b/src/panels/folders/folderspanel.h index ab6c41b345..a653b45840 100644 --- a/src/panels/folders/folderspanel.h +++ b/src/panels/folders/folderspanel.h @@ -89,8 +89,9 @@ private: * Initializes the base URL of the tree and expands all * directories until \a url. * @param url URL of the leaf directory that should get expanded. + * @param allowJumpHome indicate context menu got checked. */ - void loadTree(const QUrl& url); + void loadTree(const QUrl& url, bool allowJumpHome = false); void reloadTree(); diff --git a/src/panels/folders/treeviewcontextmenu.cpp b/src/panels/folders/treeviewcontextmenu.cpp index 6381a88ff1..132637f15a 100644 --- a/src/panels/folders/treeviewcontextmenu.cpp +++ b/src/panels/folders/treeviewcontextmenu.cpp @@ -127,14 +127,13 @@ void TreeViewContextMenu::open() // insert 'Limit to Home Directory' const QUrl url = m_fileItem.url(); - const bool showLimitToHomeDirectory = url.isLocalFile() && (Dolphin::homeUrl().isParentOf(url) || (Dolphin::homeUrl() == url)); - if (showLimitToHomeDirectory) { - QAction* limitFoldersPanelToHomeAction = new QAction(i18nc("@action:inmenu", "Limit to Home Directory"), this); - limitFoldersPanelToHomeAction->setCheckable(true); - limitFoldersPanelToHomeAction->setChecked(m_parent->limitFoldersPanelToHome()); - popup->addAction(limitFoldersPanelToHomeAction); - connect(limitFoldersPanelToHomeAction, &QAction::toggled, this, &TreeViewContextMenu::setLimitFoldersPanelToHome); - } + const bool enableLimitToHomeDirectory = url.isLocalFile(); + QAction* limitFoldersPanelToHomeAction = new QAction(i18nc("@action:inmenu", "Limit to Home Directory"), this); + limitFoldersPanelToHomeAction->setCheckable(true); + limitFoldersPanelToHomeAction->setEnabled(enableLimitToHomeDirectory); + limitFoldersPanelToHomeAction->setChecked(m_parent->limitFoldersPanelToHome()); + popup->addAction(limitFoldersPanelToHomeAction); + connect(limitFoldersPanelToHomeAction, &QAction::toggled, this, &TreeViewContextMenu::setLimitFoldersPanelToHome); // insert 'Automatic Scrolling' QAction* autoScrollingAction = new QAction(i18nc("@action:inmenu", "Automatic Scrolling"), this);