[nautilus] nautilus-file-operations: Prevent change permission on container directory



commit 9bae6e92fed82ca58f9df756fba8f5c6927a5068
Author: Carlo Lobrano <c lobrano gmail com>
Date:   Fri Mar 22 13:38:53 2019 +0100

    nautilus-file-operations: Prevent change permission on container directory
    
    Changing permission for *Enclosed Files* also changes current folder
    (container) directory permissions.
    
    This change skips the container directory and changes only the permissions
    of the contents to match the UI text.
    
    Closes #810

 src/nautilus-file-operations.c | 72 +++++++++++++++++++++++++-----------------
 1 file changed, 43 insertions(+), 29 deletions(-)
---
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c
index 7579cd083..e288a9afe 100644
--- a/src/nautilus-file-operations.c
+++ b/src/nautilus-file-operations.c
@@ -6821,19 +6821,57 @@ set_permissions_task_done (GObject      *source_object,
     finalize_common ((CommonJob *) job);
 }
 
+static void
+set_permissions_file (SetPermissionsJob *job,
+                      GFile             *file,
+                      GFileInfo         *info);
+
+static void
+set_permissions_contained_files (SetPermissionsJob *job,
+                                 GFile             *file)
+{
+    CommonJob *common;
+    GFileEnumerator *enumerator;
+
+    common = (CommonJob *) job;
+
+    enumerator = g_file_enumerate_children (file,
+                                            G_FILE_ATTRIBUTE_STANDARD_NAME ","
+                                            G_FILE_ATTRIBUTE_STANDARD_TYPE ","
+                                            G_FILE_ATTRIBUTE_UNIX_MODE,
+                                            G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+                                            common->cancellable,
+                                            NULL);
+    if (enumerator)
+    {
+        GFileInfo *child_info;
+
+        while (!job_aborted (common) &&
+               (child_info = g_file_enumerator_next_file (enumerator, common->cancellable, NULL)) != NULL)
+        {
+            GFile *child;
+
+            child = g_file_get_child (file,
+                                      g_file_info_get_name (child_info));
+            set_permissions_file (job, child, child_info);
+            g_object_unref (child);
+            g_object_unref (child_info);
+        }
+        g_file_enumerator_close (enumerator, common->cancellable, NULL);
+        g_object_unref (enumerator);
+    }
+}
+
 static void
 set_permissions_file (SetPermissionsJob *job,
                       GFile             *file,
                       GFileInfo         *info)
 {
     CommonJob *common;
-    GFileInfo *child_info;
     gboolean free_info;
     guint32 current;
     guint32 value;
     guint32 mask;
-    GFileEnumerator *enumerator;
-    GFile *child;
 
     common = (CommonJob *) job;
 
@@ -6889,27 +6927,7 @@ set_permissions_file (SetPermissionsJob *job,
     if (!job_aborted (common) &&
         g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
     {
-        enumerator = g_file_enumerate_children (file,
-                                                G_FILE_ATTRIBUTE_STANDARD_NAME ","
-                                                G_FILE_ATTRIBUTE_STANDARD_TYPE ","
-                                                G_FILE_ATTRIBUTE_UNIX_MODE,
-                                                G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
-                                                common->cancellable,
-                                                NULL);
-        if (enumerator)
-        {
-            while (!job_aborted (common) &&
-                   (child_info = g_file_enumerator_next_file (enumerator, common->cancellable, NULL)) != 
NULL)
-            {
-                child = g_file_get_child (file,
-                                          g_file_info_get_name (child_info));
-                set_permissions_file (job, child, child_info);
-                g_object_unref (child);
-                g_object_unref (child_info);
-            }
-            g_file_enumerator_close (enumerator, common->cancellable, NULL);
-            g_object_unref (enumerator);
-        }
+        set_permissions_contained_files (job, file);
     }
     if (free_info)
     {
@@ -6917,7 +6935,6 @@ set_permissions_file (SetPermissionsJob *job,
     }
 }
 
-
 static void
 set_permissions_thread_func (GTask        *task,
                              gpointer      source_object,
@@ -6933,12 +6950,9 @@ set_permissions_thread_func (GTask        *task,
                                        _("Setting permissions"));
 
     nautilus_progress_info_start (job->common.progress);
-
-    set_permissions_file (job, job->file, NULL);
+    set_permissions_contained_files (job, job->file);
 }
 
-
-
 void
 nautilus_file_set_permissions_recursive (const char         *directory,
                                          guint32             file_permissions,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]