]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Limit folder panel to home directory if inside home
authorRobert Hoffmann <externer.dl.hoffmann@muenchen.de>
Fri, 1 Sep 2017 08:15:03 +0000 (10:15 +0200)
committerEmmanuel Pescosta <emmanuelpescosta099@gmail.com>
Fri, 1 Sep 2017 08:15:40 +0000 (10:15 +0200)
Summary:
Added the option to limit the displayed folders in the folder panel (F7) to the tree below the user's home directory if the current URL is inside the home directory.
This can be configured in the preferences General/Behaviour tab by checking the corresponding check box.

Reviewers: #dolphin, elvisangelaccio, emmanuelp

Reviewed By: #dolphin, elvisangelaccio, emmanuelp

Subscribers: emmanuelp, elvisangelaccio, #konqueror, #dolphin

Differential Revision: https://phabricator.kde.org/D7477

src/kitemviews/kfileitemmodel.cpp
src/panels/folders/dolphin_folderspanelsettings.kcfg
src/panels/folders/folderspanel.cpp
src/panels/folders/folderspanel.h
src/panels/folders/treeviewcontextmenu.cpp
src/panels/folders/treeviewcontextmenu.h

index f2f44eab4f38666e46e7b9e7af740a34c0e8fc7c..6ca9fce6c19b51bea52785e484ef1271662755d9 100644 (file)
@@ -636,7 +636,11 @@ void KFileItemModel::expandParentDirectories(const QUrl &url)
     // does not care whether the parent-URL has already been
     // expanded.
     QUrl urlToExpand = m_dirLister->url();
-    const QStringList subDirs = url.path().mid(pos).split(QDir::separator());
+
+    // first subdir can be empty, if m_dirLister->url().path() does not end with '/'
+    // this happens if baseUrl is not root but a home directory, see FoldersPanel,
+    // so using QString::SkipEmptyParts
+    const QStringList subDirs = url.path().mid(pos).split(QDir::separator(), QString::SkipEmptyParts);
     for (int i = 0; i < subDirs.count() - 1; ++i) {
         urlToExpand.setPath(urlToExpand.path() + '/' + subDirs.at(i));
         m_urlsToExpand.insert(urlToExpand);
index 8b8ca66f82c26cb1d7372a9b13580a302cd73cf7..d7d479fa16478179e8f4bcd9e6e8ce607d340612 100644 (file)
             <label>Hidden files shown</label>
             <default>false</default>
         </entry>
+        <entry name="LimitFoldersPanelToHome" type="Bool">
+            <label>Limit folders panel to home directory if inside home</label>
+            <default>true</default>
+        </entry>
         <entry name="AutoScrolling" type="Bool">
             <label>Automatic scrolling</label>
             <default>true</default>
index 8b759d813dac6b4fae4d5b2b27cda5a7ff09a2bb..cb35fd2185aae555cfd77d11fa23c5a3bac6bfdb 100644 (file)
@@ -50,6 +50,7 @@
 #include <views/draganddrophelper.h>
 
 #include "dolphindebug.h"
+#include "global.h"
 
 FoldersPanel::FoldersPanel(QWidget* parent) :
     Panel(parent),
@@ -82,6 +83,17 @@ bool FoldersPanel::showHiddenFiles() const
     return FoldersPanelSettings::hiddenFilesShown();
 }
 
+void FoldersPanel::setLimitFoldersPanelToHome(bool enable)
+{
+    FoldersPanelSettings::setLimitFoldersPanelToHome(enable);
+    reloadTree();
+}
+
+bool FoldersPanel::limitFoldersPanelToHome() const
+{
+    return FoldersPanelSettings::limitFoldersPanelToHome();
+}
+
 void FoldersPanel::setAutoScrolling(bool enable)
 {
     // TODO: Not supported yet in Dolphin 2.0
@@ -122,6 +134,14 @@ bool FoldersPanel::urlChanged()
     return true;
 }
 
+void FoldersPanel::reloadTree()
+{
+    if (m_controller) {
+        loadTree(url());
+    }
+}
+
+
 void FoldersPanel::showEvent(QShowEvent* event)
 {
     if (event->spontaneous()) {
@@ -304,8 +324,13 @@ void FoldersPanel::loadTree(const QUrl& url)
 
     QUrl baseUrl;
     if (url.isLocalFile()) {
-        // Use the root directory as base for local URLs (#150941)
-        baseUrl = QUrl::fromLocalFile(QDir::rootPath());
+        const bool isInHomeFolder = Dolphin::homeUrl().isParentOf(url) || (Dolphin::homeUrl() == url);
+        if (FoldersPanelSettings::limitFoldersPanelToHome() && isInHomeFolder) {
+            baseUrl = Dolphin::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;
@@ -320,9 +345,13 @@ void FoldersPanel::loadTree(const QUrl& url)
     const int index = m_model->index(url);
     if (index >= 0) {
         updateCurrentItem(index);
+    } else if (url == baseUrl) {
+        // clear the selection when visiting the base url
+        updateCurrentItem(-1);
     } else {
         m_updateCurrentItem = true;
         m_model->expandParentDirectories(url);
+
         // slotLoadingCompleted() will be invoked after the model has
         // expanded the url
     }
index 7c591cc20c78aac23e6aff971d2754aab408f5a6..5f0b9a37881a8abd56cc7bb14cb5e437cb9a3c92 100644 (file)
@@ -43,7 +43,9 @@ public:
     virtual ~FoldersPanel();
 
     void setShowHiddenFiles(bool show);
+    void setLimitFoldersPanelToHome(bool enable);
     bool showHiddenFiles() const;
+    bool limitFoldersPanelToHome() const;
 
     void setAutoScrolling(bool enable);
     bool autoScrolling() const;
@@ -81,6 +83,7 @@ private slots:
      */
     void startFadeInAnimation();
 
+
 private:
     /**
      * Initializes the base URL of the tree and expands all
@@ -89,6 +92,8 @@ private:
      */
     void loadTree(const QUrl& url);
 
+    void reloadTree();
+
     /**
      * Sets the item with the index \a index as current item, selects
      * the item and assures that the item will be visible.
index 51fc229c1906f7c5a7f64ee599c2047a75a0425f..6381a88ff13993cfc8e254a00f55e24b15c32405 100644 (file)
@@ -43,6 +43,7 @@
 #include <QClipboard>
 #include <QMimeData>
 #include <QPointer>
+#include "global.h"
 
 TreeViewContextMenu::TreeViewContextMenu(FoldersPanel* parent,
                                          const KFileItem& fileInfo) :
@@ -124,6 +125,17 @@ void TreeViewContextMenu::open()
     popup->addAction(showHiddenFilesAction);
     connect(showHiddenFilesAction, &QAction::toggled, this, &TreeViewContextMenu::setShowHiddenFiles);
 
+    // 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);
+    }
+
     // insert 'Automatic Scrolling'
     QAction* autoScrollingAction = new QAction(i18nc("@action:inmenu", "Automatic Scrolling"), this);
     autoScrollingAction->setCheckable(true);
@@ -229,6 +241,11 @@ void TreeViewContextMenu::setShowHiddenFiles(bool show)
     m_parent->setShowHiddenFiles(show);
 }
 
+void TreeViewContextMenu::setLimitFoldersPanelToHome(bool enable)
+{
+    m_parent->setLimitFoldersPanelToHome(enable);
+}
+
 void TreeViewContextMenu::setAutoScrolling(bool enable)
 {
     m_parent->setAutoScrolling(enable);
index 598ffaed6a5b537f593f1302bc5f9ec2133ef438..93ddd7aef9cfd95379d174576c9b0c717aa9040f 100644 (file)
@@ -78,6 +78,12 @@ private slots:
      */
     void setShowHiddenFiles(bool show);
 
+    /**
+     * Sets the 'Limit folders panel to home' setting for the
+     * folders panel to \a enable.
+     */
+    void setLimitFoldersPanelToHome(bool enable);
+
     /**
      * Sets the 'Automatic Scrolling' setting for the
      * folders panel to \a enable.