[nautilus] nautilus-file-operations: Prevent change permission on container directory
- From: António Fernandes <antoniof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] nautilus-file-operations: Prevent change permission on container directory
- Date: Mon, 26 Aug 2019 13:37:23 +0000 (UTC)
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]