summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisenmann <p3732@getgoogleoff.me>2021-11-16 23:42:33 +0100
committerAntónio Fernandes <antoniof@gnome.org>2022-01-02 19:22:17 +0000
commit3761ca6f79c78820901d0c9b9cf60fc6dbd3ee4b (patch)
tree0cc4f92f0ddfd8c41edaab623580fadcdae20874
parent30a516433340083f1c77266f1ab34e3ecbb3a344 (diff)
downloadnautilus-3761ca6f79c78820901d0c9b9cf60fc6dbd3ee4b.tar.gz
properties-window: use FilterType instead of gboolean
The gboolean "is-folder" stored as GObject data, indicates whether a permission combo box or a checkbox refers to folders or files. For enhanced readability and performance this is replaced with the FilterType enum. This allows to combine checking the property window target_files for files or folders and clarifies passed parameters to helper functions.
-rw-r--r--src/nautilus-properties-window.c236
1 files changed, 118 insertions, 118 deletions
diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c
index 218d52ca5..60f6d49f4 100644
--- a/src/nautilus-properties-window.c
+++ b/src/nautilus-properties-window.c
@@ -222,6 +222,14 @@ struct _NautilusPropertiesWindow
guint64 volume_used;
};
+typedef enum
+{
+ NO_FILES_OR_FOLDERS = (0),
+ FILES_ONLY = (1 << 0),
+ FOLDERS_ONLY = (1 << 1),
+ FILES_AND_FOLDERS = FILES_ONLY | FOLDERS_ONLY,
+} FilterType;
+
enum
{
COLUMN_NAME,
@@ -2485,22 +2493,55 @@ setup_basic_page (NautilusPropertiesWindow *self)
}
}
-static gboolean
-files_has_directory (NautilusPropertiesWindow *self)
+static FilterType
+files_get_filter_type (NautilusPropertiesWindow *self)
{
- GList *l;
+ FilterType filter_type = NO_FILES_OR_FOLDERS;
- for (l = self->target_files; l != NULL; l = l->next)
+ for (GList *l = self->target_files; l != NULL && filter_type != FILES_AND_FOLDERS; l = l->next)
{
- NautilusFile *file;
- file = NAUTILUS_FILE (l->data);
+ NautilusFile *file = NAUTILUS_FILE (l->data);
if (nautilus_file_is_directory (file))
{
- return TRUE;
+ filter_type |= FOLDERS_ONLY;
+ }
+ else
+ {
+ filter_type |= FILES_ONLY;
}
}
- return FALSE;
+ return filter_type;
+}
+
+static gboolean
+file_matches_filter_type (NautilusFile *file,
+ FilterType filter_type)
+{
+ gboolean is_directory = nautilus_file_is_directory (file);
+
+ switch (filter_type)
+ {
+ case FILES_AND_FOLDERS:
+ {
+ return TRUE;
+ }
+
+ case FILES_ONLY:
+ {
+ return !is_directory;
+ }
+
+ case FOLDERS_ONLY:
+ {
+ return is_directory;
+ }
+
+ default:
+ {
+ return FALSE;
+ }
+ }
}
static gboolean
@@ -2529,24 +2570,6 @@ files_has_changable_permissions_directory (NautilusPropertiesWindow *self)
return changable;
}
-static gboolean
-files_has_file (NautilusPropertiesWindow *self)
-{
- GList *l;
-
- for (l = self->target_files; l != NULL; l = l->next)
- {
- NautilusFile *file;
- file = NAUTILUS_FILE (l->data);
- if (!nautilus_file_is_directory (file))
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
static void
start_long_operation (NautilusPropertiesWindow *self)
{
@@ -2589,27 +2612,20 @@ static void
update_permissions (NautilusPropertiesWindow *self,
guint32 vfs_new_perm,
guint32 vfs_mask,
- gboolean is_folder,
- gboolean apply_to_both_folder_and_dir,
+ FilterType filter_type,
gboolean use_original)
{
- GList *l;
-
- for (l = self->target_files; l != NULL; l = l->next)
+ for (GList *l = self->target_files; l != NULL; l = l->next)
{
- NautilusFile *file;
+ NautilusFile *file = NAUTILUS_FILE (l->data);
guint32 permissions;
- file = NAUTILUS_FILE (l->data);
-
if (!nautilus_file_can_get_permissions (file))
{
continue;
}
- if (!apply_to_both_folder_and_dir &&
- ((nautilus_file_is_directory (file) && !is_folder) ||
- (!nautilus_file_is_directory (file) && is_folder)))
+ if (!nautilus_file_can_get_permissions (file) || !file_matches_filter_type (file, filter_type))
{
continue;
}
@@ -2641,25 +2657,17 @@ update_permissions (NautilusPropertiesWindow *self,
static gboolean
initial_permission_state_consistent (NautilusPropertiesWindow *self,
guint32 mask,
- gboolean is_folder,
- gboolean both_folder_and_dir)
+ FilterType filter_type)
{
- GList *l;
- gboolean first;
- guint32 first_permissions;
+ gboolean first = TRUE;
+ guint32 first_permissions = 0;
- first = TRUE;
- first_permissions = 0;
- for (l = self->target_files; l != NULL; l = l->next)
+ for (GList *l = self->target_files; l != NULL; l = l->next)
{
- NautilusFile *file;
+ NautilusFile *file = l->data;
guint32 permissions;
- file = l->data;
-
- if (!both_folder_and_dir &&
- ((nautilus_file_is_directory (file) && !is_folder) ||
- (!nautilus_file_is_directory (file) && is_folder)))
+ if (!file_matches_filter_type (file, filter_type))
{
continue;
}
@@ -2692,15 +2700,15 @@ static void
permission_button_toggled (GtkCheckButton *button,
NautilusPropertiesWindow *self)
{
- gboolean is_folder;
+ FilterType filter_type;
guint32 permission_mask;
gboolean inconsistent;
gboolean on;
permission_mask = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
"permission"));
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "is-folder"));
+ filter_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "filter-type"));
if (gtk_check_button_get_active (button)
&& !gtk_check_button_get_inconsistent (button))
@@ -2710,7 +2718,7 @@ permission_button_toggled (GtkCheckButton *button,
inconsistent = TRUE;
on = TRUE;
- if (initial_permission_state_consistent (self, permission_mask, is_folder, FALSE))
+ if (initial_permission_state_consistent (self, permission_mask, filter_type))
{
inconsistent = FALSE;
on = TRUE;
@@ -2742,8 +2750,7 @@ permission_button_toggled (GtkCheckButton *button,
update_permissions (self,
on ? permission_mask : 0,
permission_mask,
- is_folder,
- FALSE,
+ filter_type,
inconsistent);
}
@@ -2755,15 +2762,15 @@ permission_button_update (GtkCheckButton *button,
gboolean all_set;
gboolean all_unset;
gboolean all_cannot_set;
- gboolean is_folder;
+ FilterType filter_type;
gboolean no_match;
gboolean sensitive;
guint32 button_permission;
button_permission = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
"permission"));
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "is-folder"));
+ filter_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "filter-type"));
all_set = TRUE;
all_unset = TRUE;
all_cannot_set = TRUE;
@@ -2774,8 +2781,7 @@ permission_button_update (GtkCheckButton *button,
guint32 file_permissions;
if (!nautilus_file_can_get_permissions (file) ||
- (nautilus_file_is_directory (file) && !is_folder) ||
- (!nautilus_file_is_directory (file) && is_folder))
+ !file_matches_filter_type (file, filter_type))
{
continue;
}
@@ -2815,7 +2821,7 @@ permission_button_update (GtkCheckButton *button,
* if no files are selected. (useful for recursive apply) */
gtk_check_button_set_inconsistent (button,
(!all_unset && !all_set) ||
- (!is_folder && no_match));
+ ((filter_type == FILES_ONLY) && no_match));
gtk_widget_set_sensitive (GTK_WIDGET (button), sensitive);
g_signal_handlers_unblock_by_func (G_OBJECT (button),
@@ -2839,8 +2845,8 @@ setup_execute_checkbox_with_label (NautilusPropertiesWindow *self,
/* Load up the check_button with data we'll need when updating its state. */
g_object_set_data (G_OBJECT (self->execute_checkbox), "permission",
GINT_TO_POINTER (permission_to_check));
- g_object_set_data (G_OBJECT (self->execute_checkbox), "is-folder",
- GINT_TO_POINTER (FALSE));
+ g_object_set_data (G_OBJECT (self->execute_checkbox), "filter-type",
+ GINT_TO_POINTER (FILES_ONLY));
self->permission_buttons =
g_list_prepend (self->permission_buttons,
@@ -2965,21 +2971,19 @@ permission_combo_changed (GtkWidget *combo,
{
GtkTreeIter iter;
GtkTreeModel *model;
- gboolean is_folder, use_original;
+ FilterType filter_type;
+ gboolean use_original;
PermissionType type;
int new_perm, mask;
guint32 vfs_new_perm, vfs_mask;
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
+ filter_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "filter-type"));
type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
- if (is_folder)
+ mask = PERMISSION_READ | PERMISSION_WRITE;
+ if (filter_type == FOLDERS_ONLY)
{
- mask = PERMISSION_READ | PERMISSION_WRITE | PERMISSION_EXEC;
- }
- else
- {
- mask = PERMISSION_READ | PERMISSION_WRITE;
+ mask |= PERMISSION_EXEC;
}
vfs_mask = permission_to_vfs (type, mask);
@@ -2995,7 +2999,7 @@ permission_combo_changed (GtkWidget *combo,
vfs_new_perm = permission_to_vfs (type, new_perm);
update_permissions (self, vfs_new_perm, vfs_mask,
- is_folder, FALSE, use_original);
+ filter_type, use_original);
}
static void
@@ -3051,7 +3055,7 @@ permission_combo_update (GtkComboBox *combo,
model = gtk_combo_box_get_model (combo);
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
+ is_folder = (FOLDERS_ONLY == GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "filter-type")));
type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
is_multi = FALSE;
@@ -3246,7 +3250,7 @@ permission_combo_update (GtkComboBox *combo,
static void
setup_permissions_combo_box (GtkComboBox *combo,
PermissionType type,
- gboolean is_folder)
+ FilterType filter_type)
{
g_autoptr (GtkListStore) store = NULL;
GtkCellRenderer *cell;
@@ -3256,10 +3260,10 @@ setup_permissions_combo_box (GtkComboBox *combo,
gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
gtk_combo_box_set_id_column (GTK_COMBO_BOX (combo), COLUMN_ID);
- g_object_set_data (G_OBJECT (combo), "is-folder", GINT_TO_POINTER (is_folder));
+ g_object_set_data (G_OBJECT (combo), "filter-type", GINT_TO_POINTER (filter_type));
g_object_set_data (G_OBJECT (combo), "permission-type", GINT_TO_POINTER (type));
- if (is_folder)
+ if (filter_type == FOLDERS_ONLY)
{
if (type != PERMISSION_USER)
{
@@ -3389,15 +3393,13 @@ get_initial_permissions (GList *file_list)
static void
create_simple_permissions (NautilusPropertiesWindow *self)
{
- gboolean has_directory;
- gboolean has_file;
GtkWidget *owner_combo_box;
GtkWidget *owner_value_label;
GtkWidget *group_combo_box;
GtkWidget *group_value_label;
+ FilterType filter_type = files_get_filter_type (self);
- has_directory = files_has_directory (self);
- has_file = files_has_file (self);
+ g_assert (filter_type != NO_FILES_OR_FOLDERS);
if (!is_multi_file_window (self) && nautilus_file_can_set_owner (get_target_file (self)))
{
@@ -3419,12 +3421,12 @@ create_simple_permissions (NautilusPropertiesWindow *self)
self->value_fields = g_list_prepend (self->value_fields,
owner_value_label);
}
- if (has_directory && has_file)
+ if (filter_type == FILES_AND_FOLDERS)
{
gtk_widget_show (self->owner_folder_access_label);
gtk_widget_show (self->owner_folder_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->owner_folder_access_combo),
- PERMISSION_USER, TRUE);
+ PERMISSION_USER, FOLDERS_ONLY);
self->permission_combos = g_list_prepend (self->permission_combos,
self->owner_folder_access_combo);
g_signal_connect (self->owner_folder_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
@@ -3432,7 +3434,7 @@ create_simple_permissions (NautilusPropertiesWindow *self)
gtk_widget_show (self->owner_file_access_label);
gtk_widget_show (self->owner_file_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->owner_file_access_combo),
- PERMISSION_USER, FALSE);
+ PERMISSION_USER, FILES_ONLY);
self->permission_combos = g_list_prepend (self->permission_combos,
self->owner_file_access_combo);
g_signal_connect (self->owner_file_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
@@ -3442,7 +3444,7 @@ create_simple_permissions (NautilusPropertiesWindow *self)
gtk_widget_show (self->owner_access_label);
gtk_widget_show (self->owner_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->owner_access_combo),
- PERMISSION_USER, has_directory);
+ PERMISSION_USER, filter_type);
self->permission_combos = g_list_prepend (self->permission_combos,
self->owner_access_combo);
g_signal_connect (self->owner_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
@@ -3468,12 +3470,12 @@ create_simple_permissions (NautilusPropertiesWindow *self)
group_value_label);
}
- if (has_directory && has_file)
+ if (filter_type == FILES_AND_FOLDERS)
{
gtk_widget_show (self->group_folder_access_label);
gtk_widget_show (self->group_folder_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->group_folder_access_combo),
- PERMISSION_GROUP, TRUE);
+ PERMISSION_GROUP, FOLDERS_ONLY);
self->permission_combos = g_list_prepend (self->permission_combos,
self->group_folder_access_combo);
g_signal_connect (self->group_folder_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
@@ -3481,7 +3483,7 @@ create_simple_permissions (NautilusPropertiesWindow *self)
gtk_widget_show (self->group_file_access_label);
gtk_widget_show (self->group_file_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->group_file_access_combo),
- PERMISSION_GROUP, FALSE);
+ PERMISSION_GROUP, FILES_ONLY);
self->permission_combos = g_list_prepend (self->permission_combos,
self->group_file_access_combo);
g_signal_connect (self->group_file_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
@@ -3491,19 +3493,19 @@ create_simple_permissions (NautilusPropertiesWindow *self)
gtk_widget_show (self->group_access_label);
gtk_widget_show (self->group_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->group_access_combo),
- PERMISSION_GROUP, has_directory);
+ PERMISSION_GROUP, filter_type);
self->permission_combos = g_list_prepend (self->permission_combos,
self->group_access_combo);
g_signal_connect (self->group_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
}
/* Others Row */
- if (has_directory && has_file)
+ if (filter_type == FILES_AND_FOLDERS)
{
gtk_widget_show (self->others_folder_access_label);
gtk_widget_show (self->others_folder_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->others_folder_access_combo),
- PERMISSION_OTHER, TRUE);
+ PERMISSION_OTHER, FOLDERS_ONLY);
self->permission_combos = g_list_prepend (self->permission_combos,
self->others_folder_access_combo);
g_signal_connect (self->others_folder_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
@@ -3511,7 +3513,7 @@ create_simple_permissions (NautilusPropertiesWindow *self)
gtk_widget_show (self->others_file_access_label);
gtk_widget_show (self->others_file_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->others_file_access_combo),
- PERMISSION_OTHER, FALSE);
+ PERMISSION_OTHER, FILES_ONLY);
self->permission_combos = g_list_prepend (self->permission_combos,
self->others_file_access_combo);
g_signal_connect (self->others_file_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
@@ -3521,13 +3523,13 @@ create_simple_permissions (NautilusPropertiesWindow *self)
gtk_widget_show (self->others_access_label);
gtk_widget_show (self->others_access_combo);
setup_permissions_combo_box (GTK_COMBO_BOX (self->others_access_combo),
- PERMISSION_OTHER, has_directory);
+ PERMISSION_OTHER, filter_type);
self->permission_combos = g_list_prepend (self->permission_combos,
self->others_access_combo);
g_signal_connect (self->others_access_combo, "changed", G_CALLBACK (permission_combo_changed), self);
}
- if (!has_directory)
+ if (filter_type == FILES_ONLY)
{
setup_execute_checkbox_with_label (self,
UNIX_PERM_USER_EXEC | UNIX_PERM_GROUP_EXEC | UNIX_PERM_OTHER_EXEC);
@@ -3551,7 +3553,8 @@ on_change_permissions_response (GtkDialog *dialog,
guint32 dir_permission, dir_permission_mask;
guint32 vfs_mask, vfs_new_perm;
GtkWidget *combo;
- gboolean is_folder, use_original;
+ gboolean use_original;
+ FilterType filter_type;
GList *l;
GtkTreeModel *model;
GtkTreeIter iter;
@@ -3581,7 +3584,7 @@ on_change_permissions_response (GtkDialog *dialog,
}
type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
+ filter_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "filter-type"));
model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
gtk_tree_model_get (model, &iter,
@@ -3593,17 +3596,14 @@ on_change_permissions_response (GtkDialog *dialog,
}
vfs_new_perm = permission_to_vfs (type, new_perm);
- if (is_folder)
- {
- mask = PERMISSION_READ | PERMISSION_WRITE | PERMISSION_EXEC;
- }
- else
+ mask = PERMISSION_READ | PERMISSION_WRITE;
+ if (filter_type == FOLDERS_ONLY)
{
- mask = PERMISSION_READ | PERMISSION_WRITE;
+ mask |= PERMISSION_EXEC;
}
vfs_mask = permission_to_vfs (type, mask);
- if (is_folder)
+ if (filter_type == FOLDERS_ONLY)
{
dir_permission_mask |= vfs_mask;
dir_permission |= vfs_new_perm;
@@ -3645,14 +3645,14 @@ on_change_permissions_response (GtkDialog *dialog,
static void
set_active_from_umask (GtkComboBox *combo,
PermissionType type,
- gboolean is_folder)
+ FilterType filter_type)
{
mode_t initial;
mode_t mask;
mode_t p;
const char *id;
- if (is_folder)
+ if (filter_type == FOLDERS_ONLY)
{
initial = (S_IRWXU | S_IRWXG | S_IRWXO);
}
@@ -3756,42 +3756,42 @@ on_change_permissions_clicked (GtkWidget *button,
/* Owner Permissions */
combo = GTK_COMBO_BOX (gtk_builder_get_object (change_permissions_builder, "file_owner_combo"));
- setup_permissions_combo_box (combo, PERMISSION_USER, FALSE);
+ setup_permissions_combo_box (combo, PERMISSION_USER, FILES_ONLY);
self->change_permission_combos = g_list_prepend (self->change_permission_combos,
combo);
- set_active_from_umask (combo, PERMISSION_USER, FALSE);
+ set_active_from_umask (combo, PERMISSION_USER, FILES_ONLY);
combo = GTK_COMBO_BOX (gtk_builder_get_object (change_permissions_builder, "folder_owner_combo"));
- setup_permissions_combo_box (combo, PERMISSION_USER, TRUE);
+ setup_permissions_combo_box (combo, PERMISSION_USER, FOLDERS_ONLY);
self->change_permission_combos = g_list_prepend (self->change_permission_combos,
combo);
- set_active_from_umask (combo, PERMISSION_USER, TRUE);
+ set_active_from_umask (combo, PERMISSION_USER, FOLDERS_ONLY);
/* Group Permissions */
combo = GTK_COMBO_BOX (gtk_builder_get_object (change_permissions_builder, "file_group_combo"));
- setup_permissions_combo_box (combo, PERMISSION_GROUP, FALSE);
+ setup_permissions_combo_box (combo, PERMISSION_GROUP, FILES_ONLY);
self->change_permission_combos = g_list_prepend (self->change_permission_combos,
combo);
- set_active_from_umask (combo, PERMISSION_GROUP, FALSE);
+ set_active_from_umask (combo, PERMISSION_GROUP, FILES_ONLY);
combo = GTK_COMBO_BOX (gtk_builder_get_object (change_permissions_builder, "folder_group_combo"));
- setup_permissions_combo_box (combo, PERMISSION_GROUP, TRUE);
+ setup_permissions_combo_box (combo, PERMISSION_GROUP, FOLDERS_ONLY);
self->change_permission_combos = g_list_prepend (self->change_permission_combos,
combo);
- set_active_from_umask (combo, PERMISSION_GROUP, TRUE);
+ set_active_from_umask (combo, PERMISSION_GROUP, FOLDERS_ONLY);
/* Others Permissions */
combo = GTK_COMBO_BOX (gtk_builder_get_object (change_permissions_builder, "file_other_combo"));
- setup_permissions_combo_box (combo, PERMISSION_OTHER, FALSE);
+ setup_permissions_combo_box (combo, PERMISSION_OTHER, FILES_ONLY);
self->change_permission_combos = g_list_prepend (self->change_permission_combos,
combo);
- set_active_from_umask (combo, PERMISSION_OTHER, FALSE);
+ set_active_from_umask (combo, PERMISSION_OTHER, FILES_ONLY);
combo = GTK_COMBO_BOX (gtk_builder_get_object (change_permissions_builder, "folder_other_combo"));
- setup_permissions_combo_box (combo, PERMISSION_OTHER, TRUE);
+ setup_permissions_combo_box (combo, PERMISSION_OTHER, FOLDERS_ONLY);
self->change_permission_combos = g_list_prepend (self->change_permission_combos,
combo);
- set_active_from_umask (combo, PERMISSION_OTHER, TRUE);
+ set_active_from_umask (combo, PERMISSION_OTHER, FOLDERS_ONLY);
g_signal_connect (dialog, "response", G_CALLBACK (on_change_permissions_response), self);
gtk_widget_show (dialog);