diff options
author | Peter Eisenmann <p3732@getgoogleoff.me> | 2021-11-16 23:42:33 +0100 |
---|---|---|
committer | António Fernandes <antoniof@gnome.org> | 2022-01-02 19:22:17 +0000 |
commit | 3761ca6f79c78820901d0c9b9cf60fc6dbd3ee4b (patch) | |
tree | 0cc4f92f0ddfd8c41edaab623580fadcdae20874 | |
parent | 30a516433340083f1c77266f1ab34e3ecbb3a344 (diff) | |
download | nautilus-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.c | 236 |
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); |