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