diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1220,6 +1220,8 @@ this, &DolphinMainWindow::openNewTab); connect(foldersPanel, &FoldersPanel::errorMessage, this, &DolphinMainWindow::showErrorMessage); + connect(this, &DolphinMainWindow::settingsChanged, + foldersPanel, &FoldersPanel::refreshFoldersPanel); // Setup "Terminal" #ifndef Q_OS_WIN diff --git a/src/panels/folders/folderspanel.h b/src/panels/folders/folderspanel.h --- a/src/panels/folders/folderspanel.h +++ b/src/panels/folders/folderspanel.h @@ -81,6 +81,9 @@ */ void startFadeInAnimation(); +public slots: + void refreshFoldersPanel(); + private: /** * Initializes the base URL of the tree and expands all diff --git a/src/panels/folders/folderspanel.cpp b/src/panels/folders/folderspanel.cpp --- a/src/panels/folders/folderspanel.cpp +++ b/src/panels/folders/folderspanel.cpp @@ -122,6 +122,14 @@ return true; } +void FoldersPanel::refreshFoldersPanel() +{ + if (m_controller) { + loadTree(url()); + } +} + + void FoldersPanel::showEvent(QShowEvent* event) { if (event->spontaneous()) { @@ -172,7 +180,7 @@ layout->addWidget(container); } - loadTree(url()); + if (url().isValid()) loadTree(url()); Panel::showEvent(event); } @@ -304,8 +312,13 @@ QUrl baseUrl; if (url.isLocalFile()) { - // Use the root directory as base for local URLs (#150941) - baseUrl = QUrl::fromLocalFile(QDir::rootPath()); + const QUrl homeUrl(QUrl::fromLocalFile(GeneralSettings::homeUrl())); + if (GeneralSettings::limitFolderPanelToHome() && (homeUrl.isParentOf(url) || homeUrl == url)) { + baseUrl = homeUrl; + } else { + // Use the root directory as base for local URLs (#150941) + baseUrl = QUrl::fromLocalFile(QDir::rootPath()); + } } else { // Clear the path for non-local URLs and use it as base baseUrl = url; @@ -331,8 +344,8 @@ void FoldersPanel::updateCurrentItem(int index) { KItemListSelectionManager* selectionManager = m_controller->selectionManager(); - selectionManager->setCurrentItem(index); selectionManager->clearSelection(); + selectionManager->setCurrentItem(index); selectionManager->setSelected(index); m_controller->view()->scrollToItem(index); diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg --- a/src/settings/dolphin_generalsettings.kcfg +++ b/src/settings/dolphin_generalsettings.kcfg @@ -62,6 +62,10 @@ true + + + false + true diff --git a/src/settings/general/behaviorsettingspage.h b/src/settings/general/behaviorsettingspage.h --- a/src/settings/general/behaviorsettingspage.h +++ b/src/settings/general/behaviorsettingspage.h @@ -66,6 +66,7 @@ QCheckBox* m_renameInline; QCheckBox* m_useTabForSplitViewSwitch; + QCheckBox* m_limitFolderPanelToHome; }; #endif diff --git a/src/settings/general/behaviorsettingspage.cpp b/src/settings/general/behaviorsettingspage.cpp --- a/src/settings/general/behaviorsettingspage.cpp +++ b/src/settings/general/behaviorsettingspage.cpp @@ -42,7 +42,8 @@ m_caseSensitiveSorting(0), m_caseInsensitiveSorting(0), m_renameInline(0), - m_useTabForSplitViewSwitch(0) + m_useTabForSplitViewSwitch(0), + m_limitFolderPanelToHome(0) { QVBoxLayout* topLayout = new QVBoxLayout(this); @@ -82,12 +83,16 @@ // 'Use tab for switching between right and left split' m_useTabForSplitViewSwitch = new QCheckBox(i18nc("option:check", "Use tab for switching between right and left split view"), this); + // 'Limit folder panel to home directory if inside home' + m_limitFolderPanelToHome = new QCheckBox(i18nc("option:check", "Limit folder panel to home directory if inside home"), this); + topLayout->addWidget(viewPropsBox); topLayout->addWidget(sortingPropsBox); topLayout->addWidget(m_showToolTips); topLayout->addWidget(m_showSelectionToggle); topLayout->addWidget(m_renameInline); topLayout->addWidget(m_useTabForSplitViewSwitch); + topLayout->addWidget(m_limitFolderPanelToHome); topLayout->addStretch(); loadSettings(); @@ -101,6 +106,7 @@ connect(m_caseSensitiveSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed); connect(m_renameInline, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); connect(m_useTabForSplitViewSwitch, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); + connect(m_limitFolderPanelToHome, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed); } BehaviorSettingsPage::~BehaviorSettingsPage() @@ -119,6 +125,7 @@ setSortingChoiceValue(settings); settings->setRenameInline(m_renameInline->isChecked()); settings->setUseTabForSwitchingSplitView(m_useTabForSplitViewSwitch->isChecked()); + settings->setLimitFolderPanelToHome(m_limitFolderPanelToHome->isChecked()); settings->save(); if (useGlobalViewProps) { @@ -149,6 +156,7 @@ m_showSelectionToggle->setChecked(GeneralSettings::showSelectionToggle()); m_renameInline->setChecked(GeneralSettings::renameInline()); m_useTabForSplitViewSwitch->setChecked(GeneralSettings::useTabForSwitchingSplitView()); + m_limitFolderPanelToHome->setChecked(GeneralSettings::limitFolderPanelToHome()); loadSortingChoiceSettings(); }