changeset 27960:6a37ebaeeb28

fix handling of broken symlinks in file browser (bug #57588) * files-dock-widget.cc (files_dock_widget): already set the filter for the file system model here and add QDir::System for system files including broken symlinks; (contextmenu_delete): also consider QDir::Hidden and QDir::System entries for checking if a directory is empty or not; (notice_settings): add or remove QDir::Hidden flag to/from the current filters
author Torsten Lilge <ttl-octave@mailbox.org>
date Fri, 17 Jan 2020 22:40:15 +0100
parents c20b7290c778
children 27a5cc0614f1
files libgui/src/files-dock-widget.cc
diffstat 1 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/files-dock-widget.cc	Fri Jan 17 13:27:27 2020 -0600
+++ b/libgui/src/files-dock-widget.cc	Fri Jan 17 22:40:15 2020 +0100
@@ -216,6 +216,9 @@
       }
 
     m_file_system_model = new QFileSystemModel (this);
+    m_file_system_model->setResolveSymlinks (false);
+    m_file_system_model->setFilter (
+        QDir::System | QDir::NoDotAndDotDot | QDir::AllEntries);
     QModelIndex rootPathIndex
       = m_file_system_model->setRootPath (startup_dir.absolutePath ());
 
@@ -733,8 +736,9 @@
               {
                 // see if directory is empty
                 QDir path (info.absoluteFilePath ());
-                QList<QFileInfo> fileLst = path.entryInfoList (QDir::AllEntries |
-                                                               QDir::NoDotAndDotDot);
+                QList<QFileInfo> fileLst = path.entryInfoList (
+                                          QDir::Hidden | QDir::AllEntries |
+                                          QDir::NoDotAndDotDot | QDir::System);
 
                 if (fileLst.count () != 0)
                   QMessageBox::warning (this, tr ("Delete file/directory"),
@@ -883,11 +887,11 @@
       m_file_tree_view->setColumnHidden (i + 1,
                                          ! settings->value (m_columns_shown_keys.at (i),false).toBool ());
 
+    QDir::Filters current_filter = m_file_system_model->filter ();
     if (settings->value (m_columns_shown_keys.at (3),false).toBool ())
-      m_file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries
-                                      | QDir::Hidden);
+      m_file_system_model->setFilter (current_filter | QDir::Hidden);
     else
-      m_file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries);
+      m_file_system_model->setFilter (current_filter & (~QDir::Hidden));
 
     m_file_tree_view->setAlternatingRowColors
       (settings->value (m_columns_shown_keys.at (4),true).toBool ());