11438N/A (&directory->details->mime_list_in_progress,
11438N/A- GNOME_VFS_FILE_INFO_GET_MIME_TYPE,
11438N/A+ (GNOME_VFS_FILE_INFO_GET_MIME_TYPE | GNOME_VFS_FILE_INFO_GET_ACL),
11438N/A DIRECTORY_LOAD_ITEMS_PER_CALLBACK,
11438N/A gboolean nautilus_file_can_get_selinux_context (NautilusFile *file);
11438N/A char * nautilus_file_get_selinux_context (NautilusFile *file);
11438N/A+gboolean nautilus_file_can_get_acl (NautilusFile *file);
11438N/A+gboolean nautilus_file_can_set_acl (NautilusFile *file);
11438N/A+GnomeVFSACL * nautilus_file_get_acl (NautilusFile *file);
11438N/A+GnomeVFSResult nautilus_file_set_acl (NautilusFile *file,
11438N/A+ NautilusFileOperationCallback callback,
11438N/A gboolean nautilus_file_can_read (NautilusFile *file);
11438N/A gboolean nautilus_file_can_write (NautilusFile *file);
11438N/A return nautilus_directory_get_corresponding_file (file->details->directory);
11438N/A+to_acl_perm (GnomeVFSFilePermissions p)
11438N/A+ if ((p == GNOME_VFS_PERM_USER_READ) ||
11438N/A+ (p == GNOME_VFS_PERM_GROUP_READ) ||
11438N/A+ (p == GNOME_VFS_PERM_OTHER_READ) ||
11438N/A+ (p == GNOME_VFS_PERM_ACCESS_READABLE))
11438N/A+ if ((p == GNOME_VFS_PERM_USER_WRITE) ||
11438N/A+ (p == GNOME_VFS_PERM_GROUP_WRITE) ||
11438N/A+ (p == GNOME_VFS_PERM_OTHER_WRITE) ||
11438N/A+ (p == GNOME_VFS_PERM_ACCESS_WRITABLE))
11438N/A+ if ((p == GNOME_VFS_PERM_USER_EXEC) ||
11438N/A+ (p == GNOME_VFS_PERM_GROUP_EXEC) ||
11438N/A+ (p == GNOME_VFS_PERM_OTHER_EXEC) ||
11438N/A+ (p == GNOME_VFS_PERM_ACCESS_EXECUTABLE))
11438N/A+ return GNOME_VFS_ACL_PERM_NULL;
11438N/A * nautilus_file_denies_access_permission:
11438N/A nautilus_file_denies_access_permission (NautilusFile *file,
11438N/A GnomeVFSFilePermissions permissions)
11438N/A g_assert (NAUTILUS_IS_FILE (file));
11438N/A g_assert (permissions & (GNOME_VFS_PERM_ACCESS_READABLE |
11438N/A GNOME_VFS_PERM_ACCESS_WRITABLE |
11438N/A- return (file->details->info->permissions & permissions) != permissions;
11438N/A+ if ((file->details->info->permissions & permissions) == permissions)
11438N/A return !nautilus_file_info_missing (file, GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS);
11438N/A+nautilus_file_can_get_acl (NautilusFile *file)
11438N/A+ return !nautilus_file_info_missing (file, GNOME_VFS_FILE_INFO_FIELDS_ACL);
11438N/A+nautilus_file_can_set_acl (NautilusFile *file)
11438N/A+ if (!nautilus_file_can_get_acl (file)) {
11438N/A+ /* Owner is allowed to set group (with restrictions). */
11438N/A+ if (user_id == (uid_t) file->details->info->uid) {
11438N/A+ /* Root is also allowed to set group. */
11438N/A+set_permissions_callback (GnomeVFSAsyncHandle *handle,
11438N/A+ g_assert (handle == op->handle);
11438N/A+ if (result == GNOME_VFS_OK && new_info != NULL) {
11438N/A+ nautilus_file_update_info (op->file, new_info, op->use_slow_mime);
11438N/A+ operation_complete (op, result);
11438N/A+set_acl_callback (GnomeVFSAsyncHandle *handle,
11438N/A+ g_assert (handle == op->handle);
11438N/A+ if (result == GNOME_VFS_OK && new_info != NULL) {
11438N/A+ if (op->file->details->info->acl != NULL)
11438N/A+ g_object_unref (op->file->details->info->acl);
11438N/A+ op->file->details->info->acl = new_info->acl;
11438N/A+ operation_complete (op, result);
11438N/A+nautilus_file_get_acl (NautilusFile *file)
11438N/A+ return nautilus_file_info_missing (file, GNOME_VFS_FILE_INFO_FIELDS_ACL)
11438N/A+ ? NULL : file->details->info->acl;
11438N/A+nautilus_file_set_acl (NautilusFile *file,
11438N/A+ NautilusFileOperationCallback callback,
11438N/A+ GnomeVFSFileInfo *partial_file_info;
11438N/A+ GnomeVFSFileInfoOptions options;
11438N/A+ if (!nautilus_file_can_set_acl (file)) {
11438N/A+ (* callback) (file, GNOME_VFS_ERROR_ACCESS_DENIED, callback_data);
11438N/A+ op = operation_new (file, callback, callback_data);
11438N/A+ op->use_slow_mime = file->details->got_slow_mime_type;
11438N/A+ options = GNOME_VFS_FILE_INFO_GET_ACL
11438N/A+ | GNOME_VFS_FILE_INFO_GET_MIME_TYPE
11438N/A+ | GNOME_VFS_FILE_INFO_FOLLOW_LINKS;
11438N/A+ options |= GNOME_VFS_FILE_INFO_FORCE_SLOW_MIME_TYPE;
11438N/A+ partial_file_info = gnome_vfs_file_info_new ();
11438N/A+ gnome_vfs_file_info_copy (partial_file_info, file->details->info);
11438N/A+ vfs_uri = nautilus_file_get_gnome_vfs_uri (file);
11438N/A+ gnome_vfs_async_set_file_info (&op->handle,
11438N/A+ re = gnome_vfs_set_file_info_uri (vfs_uri, partial_file_info,
11438N/A+ callback (file, re, callback_data);
11438N/A+ gnome_vfs_file_info_unref (partial_file_info);
11438N/A+ gnome_vfs_uri_unref (vfs_uri);
11438N/A * nautilus_file_can_set_permissions:
11438N/A return file->details->info->permissions;
11438N/A-set_permissions_callback (GnomeVFSAsyncHandle *handle,
11438N/A- g_assert (handle == op->handle);
11438N/A- if (result == GNOME_VFS_OK && new_info != NULL) {
11438N/A- nautilus_file_update_info (op->file, new_info, op->use_slow_mime);
11438N/A- operation_complete (op, result);
11438N/A * nautilus_file_set_permissions:
11438N/A /* Change the file-on-disk permissions. */
11438N/A partial_file_info = gnome_vfs_file_info_new ();
11438N/A+ gnome_vfs_file_info_copy(partial_file_info, file->details->info);
11438N/A partial_file_info->permissions = new_permissions;
11438N/A vfs_uri = nautilus_file_get_gnome_vfs_uri (file);
11438N/A gnome_vfs_async_set_file_info (&op->handle,
11438N/A (GNOME_VFS_FILE_INFO_FOLLOW_LINKS | \
11438N/A GNOME_VFS_FILE_INFO_GET_MIME_TYPE | \
11438N/A GNOME_VFS_FILE_INFO_GET_SELINUX_CONTEXT | \
11438N/A- GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS)
11438N/A+ GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS | \
11438N/A /* These are in the typical sort order. Known things come first, then
11438N/A * things where we can't know, finally things where we don't yet know.
11438N/A+ Copyright (C) 2006 Sun Microsystems, Inc.
11438N/A The Gnome Library is free software; you can redistribute it
and/or 11438N/A modify it under the terms of the GNU Library General Public License as
11438N/A Authors: Darin Adler <darin@bentspoon.com>
11438N/A+ Alvaro Lopez Ortega <alvaro@sun.com>
11438N/A+#define DEFAULT_USER_STR _("Default user")
11438N/A+#define DEFAULT_GROUP_STR _("Default group")
11438N/A+#define DEFAULT_OTHERS_STR _("Default others")
11438N/A+#define DEFAULT_MASK_STR _("Default mask")
11438N/A+ NFS4_PERMISSIONS_SELECTED = 0,
11438N/A+ NFS4_PERMISSIONS_INCONSISTENT,
11438N/A+#define ACL_NFS4_APPLY_TO_THIS_FOLDER _("This folder")
11438N/A+#define ACL_NFS4_APPLY_TO_CHILD_FOLDERS _("Child folders")
11438N/A+#define ACL_NFS4_APPLY_TO_CHILD_FILES _("Child files")
11438N/A+#define ACL_NFS4_APPLY_TO_ALL_DESCENDANTS _("All descendants")
11438N/A+#define ACL_NFS4_TYPE_ALLOW _("Allow")
11438N/A+#define ACL_NFS4_TYPE_DENY _("Deny")
11438N/A+#define ACL_NFS4_PERM_ADMIN _("Administration")
11438N/A+#define ACL_NFS4_PERM_CHANGE_PERM _("Change Permissions")
11438N/A+#define ACL_NFS4_PERM_CHANGE_OWNER _("Change Owner")
11438N/A+#define ACL_NFS4_PERM_READ _("Read")
11438N/A+#define ACL_NFS4_PERM_READ_ATTRIBUTES _("Read Attributes")
11438N/A+#define ACL_NFS4_PERM_READ_EXT_ATTRIBUTES _("Read Extended Attributes")
11438N/A+#define ACL_NFS4_PERM_LIST_CONTENTS _("List Folder Contents (Read Data)")
11438N/A+#define ACL_NFS4_PERM_TRAVERSE_FOLDER _("Traverse Folder (Execute File)")
11438N/A+#define ACL_NFS4_PERM_READ_PERMISSIONS _("Read Permissions")
11438N/A+#define ACL_NFS4_PERM_WRITE _("Write")
11438N/A+#define ACL_NFS4_PERM_WRITE_ATTRIBUTES _("Write Attributes")
11438N/A+#define ACL_NFS4_PERM_WRITE_EXT_ATTRIBUTES _("Write Extended Attributes")
11438N/A+#define ACL_NFS4_PERM_CREATE_FILES _("Create Files (Write Data)")
11438N/A+#define ACL_NFS4_PERM_CREATE_FOLDER _("Create Folder (Append Data)")
11438N/A+#define ACL_NFS4_PERM_DELETE _("Delete")
11438N/A+#define ACL_NFS4_PERM_DELETE_SUBFOLDERS _("Delete Subfolders and Files")
11438N/A+#define ACL_NFS4_WHO_OWNER_USER _("Owner user")
11438N/A+#define ACL_NFS4_WHO_OWNER_GROUP _("Owner group")
11438N/A+#define ACL_NFS4_WHO_USER _("User")
11438N/A+#define ACL_NFS4_WHO_GROUP _("Group")
11438N/A+#define ACL_NFS4_WHO_EVERYBODY _("Everybody")
11438N/A static GHashTable *pending_lists;
11438N/A GHashTable *initial_permissions;
11438N/A+ GdkPixbuf *acl_icons[NUM_COL_ICONS];
11438N/A+update_acl_page_add_entry (FMPropertiesWindow *window, GnomeVFSACL *acl)
11438N/A+ ace_list = gnome_vfs_acl_get_ace_list (acl);
11438N/A+ for (i=ace_list; i; i=i->next) {
11438N/A+ if (gnome_vfs_ace_get_kind (ace) == GNOME_VFS_ACL_MASK) {
11438N/A+ if (gnome_vfs_ace_get_inherance (ace)) {
11438N/A+ imr = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ);
11438N/A+ imw = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE);
11438N/A+ imx = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE);
11438N/A+ mr = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ);
11438N/A+ mw = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE);
11438N/A+ mx = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE);
11438N/A+ for (i=ace_list; i; i=i->next) {
11438N/A+ gchar masked_str[4] = {'-','-','-',0};
11438N/A+ id = gnome_vfs_ace_get_id (ace);
11438N/A+ kind = gnome_vfs_ace_get_kind (ace);
11438N/A+ perms = gnome_vfs_ace_get_perms (ace);
11438N/A+ inherit = gnome_vfs_ace_get_inherance (ace);
11438N/A+ r = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ);
11438N/A+ w = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE);
11438N/A+ x = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE);
11438N/A+ if (imr & r) masked_str[0] = 'r';
11438N/A+ if (imw & w) masked_str[1] = 'w';
11438N/A+ if (imx & x) masked_str[2] = 'x';
11438N/A+ if (mr & r) masked_str[0] = 'r';
11438N/A+ if (mw & w) masked_str[1] = 'w';
11438N/A+ if (mx & x) masked_str[2] = 'x';
11438N/A+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_default_view));
11438N/A+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_view));
11438N/A+ icon = window->details->acl_icons[COL_ICON_USER];
11438N/A+ gtk_list_store_append (model , &iter);
11438N/A+ gtk_list_store_set (model, &iter,
11438N/A+ icon = window->details->acl_icons[COL_ICON_GROUP];
11438N/A+ gtk_list_store_append (model , &iter);
11438N/A+ gtk_list_store_set (model, &iter,
11438N/A+ icon = window->details->acl_icons[COL_ICON_OTHER];
11438N/A+ gtk_list_store_append (model , &iter);
11438N/A+ gtk_list_store_set (model, &iter,
11438N/A+ id = (inherit) ? DEFAULT_MASK_STR : MASK_STR;
11438N/A+ icon = window->details->acl_icons[COL_ICON_MASK];
11438N/A+ gtk_list_store_append (model , &iter);
11438N/A+ gtk_list_store_set (model, &iter,
11438N/A+ g_error ("Unhandled ACE: kind=%d\n", kind);
11438N/A+ gnome_vfs_acl_free_ace_list (ace_list);
11438N/A+update_acl_page_classic (FMPropertiesWindow *window)
11438N/A+ file = get_target_file (window);
11438N/A+ can_set_acl = nautilus_file_can_set_acl (file);
11438N/A+ can_get_acl = nautilus_file_can_get_acl (file);
11438N/A+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_view));
11438N/A+ gtk_list_store_clear (GTK_LIST_STORE(model));
11438N/A+ gtk_widget_set_sensitive (window->details->acl_buttons, can_set_acl);
11438N/A+ if (window->details->acl_default_view) {
11438N/A+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_default_view));
11438N/A+ gtk_list_store_clear (GTK_LIST_STORE(model));
11438N/A+ gtk_widget_set_sensitive (window->details->acl_def_buttons, can_set_acl);
11438N/A+ if (window->details->initial_acl != NULL && can_get_acl) {
11438N/A+ g_hash_table_remove (window->details->initial_acl, file);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ g_hash_table_insert (window->details->initial_acl, file, acl);
11438N/A+ update_acl_page_add_entry (window, acl);
11438N/A+ /* Update the sentitivity of the lists
11438N/A+ gtk_widget_set_sensitive (window->details->acl_view, can_set_acl);
11438N/A+ if (window->details->acl_default_view)
11438N/A+ gtk_widget_set_sensitive (window->details->acl_default_view, can_set_acl);
11438N/A+update_acl_nfs4_list_guts (FMPropertiesWindow *window,
11438N/A+ g_assert (GNOME_VFS_IS_ACL(file_acl));
11438N/A+ ace_list = gnome_vfs_acl_get_ace_list (file_acl);
11438N/A+ list_store = gtk_tree_view_get_model (acl);
11438N/A+ for (i=ace_list; i; i=i->next) {
11438N/A+ g_assert (GNOME_VFS_IS_ACE(ace));
11438N/A+ type = gnome_vfs_ace_get_ace_type(ace);
11438N/A+ kind = gnome_vfs_ace_get_kind (ace);
11438N/A+ type_str = (type == GNOME_VFS_ACL_DENY) ? ACL_NFS4_TYPE_DENY : ACL_NFS4_TYPE_ALLOW;
11438N/A+ id = gnome_vfs_ace_get_id (ace);
11438N/A+ if (type == GNOME_VFS_ACL_DENY)
11438N/A+ icon = window->details->acl_icons[COL_ICON_NEG_USER];
11438N/A+ icon = window->details->acl_icons[COL_ICON_USER];
11438N/A+ id = gnome_vfs_ace_get_id (ace);
11438N/A+ if (type == GNOME_VFS_ACL_DENY)
11438N/A+ icon = window->details->acl_icons[COL_ICON_NEG_GROUP];
11438N/A+ icon = window->details->acl_icons[COL_ICON_GROUP];
11438N/A+ if (type == GNOME_VFS_ACL_DENY)
11438N/A+ icon = window->details->acl_icons[COL_ICON_NEG_OTHER];
11438N/A+ icon = window->details->acl_icons[COL_ICON_OTHER];
11438N/A+ icon = window->details->acl_icons[COL_ICON_MASK];
11438N/A+ case GNOME_VFS_ACL_OWNER_USER:
11438N/A+ id = g_strdup(_("Owner user"));
11438N/A+ if (type == GNOME_VFS_ACL_DENY)
11438N/A+ icon = window->details->acl_icons[COL_ICON_NEG_USER];
11438N/A+ icon = window->details->acl_icons[COL_ICON_USER];
11438N/A+ case GNOME_VFS_ACL_OWNER_GROUP:
11438N/A+ id = g_strdup(_("Owner group"));
11438N/A+ if (type == GNOME_VFS_ACL_DENY)
11438N/A+ icon = window->details->acl_icons[COL_ICON_NEG_GROUP];
11438N/A+ icon = window->details->acl_icons[COL_ICON_GROUP];
11438N/A+ gtk_list_store_append (list_store , &iter);
11438N/A+ gtk_list_store_set (list_store, &iter,
11438N/A+ gtk_list_store_set (list_store, &iter,
11438N/A+update_acl_nfs4_list (FMPropertiesWindow *window)
11438N/A+ g_assert (FM_IS_PROPERTIES_WINDOW(window));
11438N/A+ file = get_target_file (window);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ tree_view = g_object_get_data(window, "acl_list_tree_view");
11438N/A+ list_store = gtk_tree_view_get_model(tree_view);
11438N/A+ gtk_list_store_clear (list_store);
11438N/A+ update_acl_nfs4_list_guts (window, tree_view, acl);
11438N/A+update_acl_page_nfs4 (FMPropertiesWindow *window)
11438N/A+ update_acl_nfs4_list (window);
11438N/A+ gtk_widget_set_sensitive (g_object_get_data (window, "ace_props_frame"), FALSE);
11438N/A+ gtk_widget_set_sensitive (g_object_get_data (window, "acl_list_add_button"), FALSE);
11438N/A+update_acl_page (FMPropertiesWindow *window)
11438N/A+ file = get_target_file (window);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ acl_scheme = gnome_vfs_acl_get_scheme(acl);
11438N/A+ window->details->updating_acl_tab = TRUE;
11438N/A+ if (acl_scheme == GNOME_VFS_ACL_SCHEME_CLASSIC)
11438N/A+ update_acl_page_classic (window);
11438N/A+ update_acl_page_nfs4 (window);
11438N/A+ window->details->updating_acl_tab = FALSE;
11438N/A properties_window_update (FMPropertiesWindow *window,
11438N/A update_properties_window_icon (GTK_IMAGE (window->details->icon_image));
11438N/A+ if (should_show_acls (window)) {
11438N/A for (l = window->details->emblem_buttons; l != NULL; l = l->next) {
11438N/A emblem_button_update (window, GTK_TOGGLE_BUTTON (l->data));
11438N/A+file_list_some_directory (GList *file_list)
11438N/A+ for (l = file_list; l != NULL; l = l->next) {
11438N/A+ if (nautilus_file_is_directory (NAUTILUS_FILE (l->data))) {
11438N/A value_field_update_internal (GtkLabel *label,
11438N/A+all_can_get_acl (GList *file_list)
11438N/A+ for (l = file_list; l != NULL; l = l->next) {
11438N/A+ file = NAUTILUS_FILE (l->data);
11438N/A+ if (!nautilus_file_can_get_acl (file)) {
11438N/A all_can_set_permissions (GList *file_list)
11438N/A-create_permissions_page (FMPropertiesWindow *window)
11438N/A+get_initial_acl (GList *file_list)
11438N/A- GtkWidget *vbox, *button, *hbox;
11438N/A- char *file_name, *prompt_text;
11438N/A- vbox = create_page_with_vbox (window->details->notebook,
11438N/A- file_list = window->details->original_files;
11438N/A- window->details->initial_permissions = NULL;
11438N/A- if (all_can_get_permissions (file_list) && all_can_get_permissions (window->details->target_files)) {
11438N/A- window->details->initial_permissions = get_initial_permissions (window->details->target_files);
11438N/A- window->details->has_recursive_apply = files_has_changable_permissions_directory (window);
11438N/A- if (!all_can_set_permissions (file_list)) {
11438N/A- _("You are not the owner, so you can't change these permissions."));
11438N/A- page_table = GTK_TABLE (gtk_table_new (1, COLUMN_COUNT, FALSE));
11438N/A- window->details->permissions_table = page_table;
11438N/A- apply_standard_table_padding (page_table);
11438N/A- gtk_widget_show (GTK_WIDGET (page_table));
11438N/A- gtk_box_pack_start (GTK_BOX (vbox),
11438N/A- if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_SHOW_ADVANCED_PERMISSIONS)) {
11438N/A- window->details->advanced_permissions = TRUE;
11438N/A- create_advanced_permissions (window, page_table);
11438N/A- window->details->advanced_permissions = FALSE;
11438N/A- create_simple_permissions (window, page_table);
11438N/A- gtk_table_set_row_spacing (page_table, page_table->nrows - 1, 18);
11438N/A- (window, page_table, _("SELinux Context:"),
11438N/A- (window, page_table, _("Last changed:"),
11438N/A+ ret = g_hash_table_new (g_direct_hash,
11438N/A- if (window->details->has_recursive_apply) {
11438N/A- last_row = append_row (page_table);
11438N/A- hbox = gtk_hbox_new (FALSE, 0);
11438N/A- gtk_table_attach (page_table, hbox,
11438N/A+ for (l = file_list; l != NULL; l = l->next) {
11438N/A- button = gtk_button_new_with_mnemonic (_("Apply permissions to enclosed files"));
11438N/A- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
11438N/A- g_signal_connect (button, "clicked",
11438N/A- G_CALLBACK (apply_recursive_clicked),
11438N/A- if (!is_multi_file_window (window)) {
11438N/A- file_name = nautilus_file_get_display_name (get_target_file (window));
11438N/A- prompt_text = g_strdup_printf (_("The permissions of \"%s\" could not be determined."), file_name);
11438N/A- prompt_text = g_strdup (_("The permissions of the selected file could not be determined."));
11438N/A+ file = NAUTILUS_FILE (l->data);
11438N/A- add_prompt (GTK_VBOX (vbox), prompt_text, TRUE);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ g_hash_table_insert (ret, file, acl);
11438N/A-append_extension_pages (FMPropertiesWindow *window)
11438N/A+acl_change_callback (NautilusFile *file, GnomeVFSResult result, gpointer callback_data)
11438N/A- providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER);
11438N/A- for (p = providers; p != NULL; p = p->next) {
11438N/A- NautilusPropertyPageProvider *provider;
11438N/A+ g_assert (callback_data != NULL);
11438N/A- provider = NAUTILUS_PROPERTY_PAGE_PROVIDER (p->data);
11438N/A- pages = nautilus_property_page_provider_get_pages
11438N/A- (provider, window->details->original_files);
11438N/A- for (l = pages; l != NULL; l = l->next) {
11438N/A+ window = FM_PROPERTIES_WINDOW (callback_data);
11438N/A+ if (GTK_WIDGET (window)->window != NULL &&
11438N/A+ window->details->long_operation_underway == 1) {
11438N/A+ gdk_window_set_cursor (GTK_WIDGET (window)->window, NULL);
11438N/A+ window->details->long_operation_underway--;
11438N/A+ /* Report the error if it's an error. */
11438N/A+ fm_report_error_setting_permissions (file, result, NULL);
11438N/A+ace_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
11438N/A+ FMPropertiesWindow *window = user_data;
11438N/A+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_default_view));
11438N/A+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_view));
11438N/A+ gtk_tree_model_get_iter_from_string (model, &iter, path);
11438N/A+ gtk_tree_model_get (model, &iter,
11438N/A+ file_list = window->details->original_files;
11438N/A+ for (l = file_list; l != NULL; l = l->next) {
11438N/A+ file = NAUTILUS_FILE (l->data);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ ace_list = gnome_vfs_acl_get_ace_list (acl);
11438N/A+ for (i=ace_list; i; i=i->next) {
11438N/A+ gboolean default_acl_obj = FALSE;
11438N/A+ id = gnome_vfs_ace_get_id (ace);
11438N/A+ kind = gnome_vfs_ace_get_kind (ace);
11438N/A+ perms = gnome_vfs_ace_get_perms (ace);
11438N/A+ inherit = gnome_vfs_ace_get_inherance (ace);
11438N/A+ ((strcmp (row_id, MASK_STR) == 0) ||
11438N/A+ (strcmp (row_id, DEFAULT_MASK_STR) == 0) ||
11438N/A+ (strcmp (row_id, DEFAULT_USER_STR) == 0) ||
11438N/A+ (strcmp (row_id, DEFAULT_GROUP_STR) == 0) ||
11438N/A+ (strcmp (row_id, DEFAULT_OTHERS_STR) == 0)))
11438N/A+ if (id && row_id && (strcmp (id, row_id) != 0))
11438N/A+ gnome_vfs_ace_add_perm (ace, perm);
11438N/A+ gnome_vfs_ace_del_perm (ace, perm);
11438N/A+ nautilus_file_set_acl (file, acl,
11438N/A+ gnome_vfs_acl_free_ace_list (ace_list);
11438N/A+ gtk_list_store_set (model, &iter,
11438N/A+ace_r_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
11438N/A+ ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_READ, FALSE);
11438N/A+ace_w_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
11438N/A+ ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_WRITE, FALSE);
11438N/A+ace_x_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
11438N/A+ ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_EXECUTE, FALSE);
11438N/A+ace_r_perm_def_toggled_cb (GtkCellRendererToggle *cell_renderer,
11438N/A+ ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_READ, TRUE);
11438N/A+ace_w_perm_def_toggled_cb (GtkCellRendererToggle *cell_renderer,
11438N/A+ ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_WRITE, TRUE);
11438N/A+ace_x_perm_def_toggled_cb (GtkCellRendererToggle *cell_renderer,
11438N/A+ ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_EXECUTE, TRUE);
11438N/A+create_acl_page_list (GtkWidget *container,
11438N/A+ GtkListStore *store; // GtkTreeModel
11438N/A+ store = gtk_list_store_new (NUM_COLS,
11438N/A+ G_TYPE_INT, /* Kind: user, group, other */
11438N/A+ GDK_TYPE_PIXBUF, /* Type: user, group, other */
11438N/A+ G_TYPE_STRING); /* Effective */
11438N/A+ gtk_tree_view_set_model (GTK_TREE_VIEW(view), GTK_TREE_MODEL(store));
11438N/A+ col = gtk_tree_view_column_new();
11438N/A+ gtk_tree_view_column_set_title (col, "");
11438N/A+ gtk_tree_view_column_set_reorderable (col, TRUE);
11438N/A+ gtk_tree_view_column_set_resizable (col, TRUE);
11438N/A+ gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
11438N/A+ renderer = gtk_cell_renderer_pixbuf_new();
11438N/A+ gtk_tree_view_column_pack_start(col, renderer, FALSE);
11438N/A+ gtk_tree_view_column_add_attribute(col, renderer, "pixbuf", COL_ICON);
11438N/A+ renderer = gtk_cell_renderer_text_new();
11438N/A+ gtk_tree_view_column_pack_start(col, renderer, TRUE);
11438N/A+ gtk_tree_view_column_add_attribute(col, renderer, "text", COL_USER);
11438N/A+ col = gtk_tree_view_column_new();
11438N/A+ gtk_tree_view_column_set_title (col, _("read"));
11438N/A+ gtk_tree_view_column_set_reorderable (col, FALSE);
11438N/A+ gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
11438N/A+ renderer = gtk_cell_renderer_toggle_new();
11438N/A+ gtk_tree_view_column_pack_start (col, renderer, TRUE);
11438N/A+ gtk_tree_view_column_add_attribute (col, renderer, "active", COL_PERM_READ);
11438N/A+ g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_r_perm_def_toggled_cb), G_OBJECT(window), 0);
11438N/A+ g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_r_perm_toggled_cb), G_OBJECT(window), 0);
11438N/A+ col = gtk_tree_view_column_new();
11438N/A+ gtk_tree_view_column_set_title (col, _("write"));
11438N/A+ gtk_tree_view_column_set_reorderable (col, FALSE);
11438N/A+ gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
11438N/A+ renderer = gtk_cell_renderer_toggle_new();
11438N/A+ gtk_tree_view_column_pack_start (col, renderer, TRUE);
11438N/A+ gtk_tree_view_column_add_attribute (col, renderer, "active", COL_PERM_WRITE);
11438N/A+ g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_w_perm_def_toggled_cb), G_OBJECT(window), 0);
11438N/A+ g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_w_perm_toggled_cb), G_OBJECT(window), 0);
11438N/A+ col = gtk_tree_view_column_new();
11438N/A+ gtk_tree_view_column_set_title (col, _("exec"));
11438N/A+ gtk_tree_view_column_set_reorderable (col, FALSE);
11438N/A+ gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
11438N/A+ renderer = gtk_cell_renderer_toggle_new();
11438N/A+ gtk_tree_view_column_pack_start (col, renderer, TRUE);
11438N/A+ gtk_tree_view_column_add_attribute (col, renderer, "active", COL_PERM_EXECUTE);
11438N/A+ g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_x_perm_def_toggled_cb), G_OBJECT(window), 0);
11438N/A+ g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_x_perm_toggled_cb), G_OBJECT(window), 0);
11438N/A+ col = gtk_tree_view_column_new();
11438N/A+ gtk_tree_view_column_set_title(col, _("Effective"));
11438N/A+ gtk_tree_view_column_set_reorderable(col, FALSE);
11438N/A+ gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
11438N/A+ renderer = gtk_cell_renderer_text_new();
11438N/A+ gtk_tree_view_column_pack_start(col, renderer, TRUE);
11438N/A+ gtk_tree_view_column_add_attribute(col, renderer, "text", COL_EFFECTIVE);
11438N/A+ gtk_container_add (GTK_CONTAINER(container), view);
11438N/A+acl_add_dialog_response_cb (GtkDialog *dialog,
11438N/A+ GnomeVFSACE *ace = GNOME_VFS_ACE(user_data);
11438N/A+ GnomeVFSACLPerm perms[4] = {0, 0, 0, 0};
11438N/A+ GtkWidget *check_r = g_object_get_data (G_OBJECT(dialog), "check_r");
11438N/A+ GtkWidget *check_w = g_object_get_data (G_OBJECT(dialog), "check_w");
11438N/A+ GtkWidget *check_x = g_object_get_data (G_OBJECT(dialog), "check_x");
11438N/A+ GtkWidget *combo = g_object_get_data (G_OBJECT(dialog), "combo");
11438N/A+ GtkWidget *entry = g_object_get_data (G_OBJECT(dialog), "entry");
11438N/A+ if (arg1 == GTK_RESPONSE_CANCEL)
11438N/A+ switch (gtk_combo_box_get_active (GTK_COMBO_BOX(combo))) {
11438N/A+ gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_USER);
11438N/A+/* gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_USER); */
11438N/A+/* gnome_vfs_ace_set_negative (ace, TRUE); */
11438N/A+ gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_GROUP);
11438N/A+/* case COL_NEG_GROUP_ENTRY: */
11438N/A+/* gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_GROUP); */
11438N/A+/* gnome_vfs_ace_set_negative (ace, TRUE); */
11438N/A+ id = gtk_entry_get_text (GTK_ENTRY(entry));
11438N/A+ gnome_vfs_ace_set_id (ace, id);
11438N/A+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check_r))) {
11438N/A+ perms[iperm] = GNOME_VFS_ACL_READ;
11438N/A+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check_w))) {
11438N/A+ perms[iperm] = GNOME_VFS_ACL_WRITE;
11438N/A+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check_x))) {
11438N/A+ perms[iperm] = GNOME_VFS_ACL_EXECUTE;
11438N/A+ gnome_vfs_ace_set_perms (ace, perms);
11438N/A+build_new_add_acl_dialog (FMPropertiesWindow *window, GnomeVFSACE *ace)
11438N/A+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
11438N/A+ table = gtk_table_new (2, 6, FALSE);
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ label = gtk_label_new (_("Name"));
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 3, 4, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 4, 5, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ label = gtk_label_new (_("Effective"));
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 5, 6, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ combo_store = gtk_list_store_new (1, G_TYPE_STRING, NULL);
11438N/A+ gtk_list_store_append (combo_store , &iter);
11438N/A+ gtk_list_store_set (combo_store, &iter, 0, _("User"), -1);
11438N/A+/* gtk_list_store_append (combo_store , &iter); */
11438N/A+/* gtk_list_store_set (combo_store, &iter, 0, _("User negative"), -1); */
11438N/A+ gtk_list_store_append (combo_store , &iter);
11438N/A+ gtk_list_store_set (combo_store, &iter, 0, _("Group"), -1);
11438N/A+/* gtk_list_store_append (combo_store , &iter); */
11438N/A+/* gtk_list_store_set (combo_store, &iter, 0, _("Group negative"), -1); */
11438N/A+ g_object_set_data (G_OBJECT(dialog), "combo", combo);
11438N/A+ renderer = gtk_cell_renderer_text_new ();
11438N/A+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(combo), renderer, TRUE);
11438N/A+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combo), renderer, "text", 0, NULL);
11438N/A+ gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL(combo_store));
11438N/A+ g_object_unref (G_OBJECT (combo_store));
11438N/A+ gtk_combo_box_set_active (combo, 0);
11438N/A+ gtk_table_attach (GTK_TABLE(table), combo, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ g_object_set_data (G_OBJECT(dialog), "entry", entry);
11438N/A+ gtk_entry_set_max_length (GTK_ENTRY(entry), 64);
11438N/A+ gtk_table_attach (GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ check = gtk_check_button_new();
11438N/A+ g_object_set_data (G_OBJECT(dialog), "check_r", check);
11438N/A+ gtk_table_attach (GTK_TABLE(table), check, 2, 3, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ check = gtk_check_button_new();
11438N/A+ g_object_set_data (G_OBJECT(dialog), "check_w", check);
11438N/A+ gtk_table_attach (GTK_TABLE(table), check, 3, 4, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ check = gtk_check_button_new();
11438N/A+ g_object_set_data (G_OBJECT(dialog), "check_x", check);
11438N/A+ gtk_table_attach (GTK_TABLE(table), check, 4, 5, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ label = gtk_label_new (" - - - ");
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 5, 6, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0);
11438N/A+ g_signal_connect_object (dialog, "response",
11438N/A+ G_CALLBACK (acl_add_dialog_response_cb),
11438N/A+add_acl_callback_generic (GtkWidget *button, gpointer user_data, gboolean inherit)
11438N/A+ FMPropertiesWindow *window = user_data;
11438N/A+ ace = gnome_vfs_ace_new (0, NULL, 0, GNOME_VFS_ACL_ALLOW, GNOME_VFS_ACL_SCHEME_CLASSIC);
11438N/A+ dialog = build_new_add_acl_dialog (window, ace);
11438N/A+ result = gtk_dialog_run (dialog);
11438N/A+ if (result == GTK_RESPONSE_CANCEL) {
11438N/A+ gnome_vfs_ace_set_inherance (ace, inherit);
11438N/A+ file = get_target_file (window);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ re = nautilus_file_set_acl (file, acl,
11438N/A+ gnome_vfs_acl_unset (acl, ace);
11438N/A+add_acl_callback (GtkWidget *button, gpointer user_data)
11438N/A+ add_acl_callback_generic (button, user_data, FALSE);
11438N/A+add_acl_default_callback (GtkWidget *button, gpointer user_data)
11438N/A+ add_acl_callback_generic (button, user_data, TRUE);
11438N/A+del_acl_foreach_selected_generic (GtkTreeModel *model,
11438N/A+ FMPropertiesWindow *window = data;
11438N/A+ /* Extract the information from the row
11438N/A+ gtk_tree_model_get (model, iter,
11438N/A+ if (row_kind == GNOME_VFS_ACL_MASK) {
11438N/A+ file_list = window->details->original_files;
11438N/A+ for (l = file_list; l != NULL; l = l->next) {
11438N/A+ file = NAUTILUS_FILE (l->data);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ ace_list = gnome_vfs_acl_get_ace_list (acl);
11438N/A+ for (i=ace_list; i; i=i->next) {
11438N/A+ id = gnome_vfs_ace_get_id (ace);
11438N/A+ kind = gnome_vfs_ace_get_kind (ace);
11438N/A+ perms = gnome_vfs_ace_get_perms (ace);
11438N/A+ inherit = gnome_vfs_ace_get_inherance (ace);
11438N/A+ (row_r != gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ)) ||
11438N/A+ (row_w != gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE)) ||
11438N/A+ (row_x != gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE)))
11438N/A+ if (id && row_id && (strcmp (id, row_id) == 0)) {
11438N/A+ gnome_vfs_acl_unset (acl, ace);
11438N/A+ nautilus_file_set_acl (file, acl,
11438N/A+ gnome_vfs_acl_free_ace_list (ace_list);
11438N/A+ gtk_list_store_remove (model, iter);
11438N/A+del_acl_foreach_selected (GtkTreeModel *model,
11438N/A+ del_acl_foreach_selected_generic (model, path, iter, data, FALSE);
11438N/A+del_acl_default_foreach_selected (GtkTreeModel *model,
11438N/A+ del_acl_foreach_selected_generic (model, path, iter, data, TRUE);
11438N/A+remove_acl_callback (GtkWidget *button, gpointer user_data)
11438N/A+ FMPropertiesWindow *window = user_data;
11438N/A+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (window->details->acl_view));
11438N/A+ gtk_tree_selection_selected_foreach (selection, del_acl_foreach_selected, window);
11438N/A+remove_acl_default_callback (GtkWidget *button, gpointer user_data)
11438N/A+ FMPropertiesWindow *window = user_data;
11438N/A+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (window->details->acl_default_view));
11438N/A+ gtk_tree_selection_selected_foreach (selection, del_acl_default_foreach_selected, window);
11438N/A+get_acl_scheme (GList *file_list)
11438N/A+ GnomeVFSACLScheme scheme = GNOME_VFS_ACL_SCHEME_CLASSIC;
11438N/A+ for (l = file_list; l != NULL; l = l->next) {
11438N/A+ file = NAUTILUS_FILE (l->data);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ acl_scheme = gnome_vfs_acl_get_scheme(acl);
11438N/A+ if (acl_scheme != GNOME_VFS_ACL_SCHEME_CLASSIC)
11438N/A+fix_acl_nfs4_tree_status (GtkTreeStore *tree_model, const char *path)
11438N/A+ is_top_level = (strchr(path, ':') == NULL);
11438N/A+ /* Handle top level node switchs
11438N/A+ /* Check if the top level is selected
11438N/A+ gtk_tree_model_get_iter_from_string (tree_model, &iter, path);
11438N/A+ gtk_tree_model_get (tree_model, &iter,
11438N/A+ NFS4_PERMISSIONS_SELECTED, &selected,
11438N/A+ gtk_tree_model_iter_children (tree_model, &children, &iter);
11438N/A+ gtk_tree_store_set (tree_model, &children,
11438N/A+ NFS4_PERMISSIONS_SELECTED, selected,
11438N/A+ } while (gtk_tree_model_iter_next (tree_model, &children));
11438N/A+ /* Set the inconsistent state to top level nodes
11438N/A+ gtk_tree_model_get_iter_first (tree_model, &iter);
11438N/A+ gtk_tree_model_get (tree_model, &iter,
11438N/A+ NFS4_PERMISSIONS_SELECTED, &top_selected,
11438N/A+ re = gtk_tree_model_iter_children (tree_model, &children, &iter);
11438N/A+ gtk_tree_model_get (tree_model, &children,
11438N/A+ NFS4_PERMISSIONS_SELECTED, &selected,
11438N/A+ } while (gtk_tree_model_iter_next (tree_model, &children));
11438N/A+ inconsistent = ((nsel > 0) && (nunsel > 0));
11438N/A+ gtk_tree_store_set (tree_model, &iter,
11438N/A+ NFS4_PERMISSIONS_INCONSISTENT, inconsistent,
11438N/A+ /* If there is an unset entry, parent shouldn't be selected.
11438N/A+ gtk_tree_store_set (tree_model, &iter,
11438N/A+ NFS4_PERMISSIONS_SELECTED, (nunsel <= 0),
11438N/A+ } while (gtk_tree_model_iter_next (tree_model, &iter));
11438N/A+debug_print_ace_permissions (GnomeVFSACE *ace)
11438N/A+ printf (" %s/%d: %d\n", s, g, gnome_vfs_ace_check_perm(ace,g));
11438N/A+ print_perm ("read", GNOME_VFS_ACL_READ);
11438N/A+ print_perm ("exec", GNOME_VFS_ACL_EXECUTE);
11438N/A+ print_perm ("write", GNOME_VFS_ACL_WRITE);
11438N/A+ print_perm ("list dir", GNOME_VFS_ACL_LIST_DIRECTORY);
11438N/A+ print_perm ("add file", GNOME_VFS_ACL_ADD_FILE);
11438N/A+ print_perm ("append", GNOME_VFS_ACL_APPEND_DATA);
11438N/A+ print_perm ("add subdir", GNOME_VFS_ACL_ADD_SUBDIRECTORY);
11438N/A+ print_perm ("read named", GNOME_VFS_ACL_READ_NAMED_ATTRS);
11438N/A+ print_perm ("write named", GNOME_VFS_ACL_WRITE_NAMED_ATTRS);
11438N/A+ print_perm ("delete child", GNOME_VFS_ACL_DELETE_CHILD);
11438N/A+ print_perm ("read attr", GNOME_VFS_ACL_READ_ATTRIBUTES);
11438N/A+ print_perm ("write attr", GNOME_VFS_ACL_WRITE_ATTRIBUTES);
11438N/A+ print_perm ("del", GNOME_VFS_ACL_DELETE);
11438N/A+ print_perm ("read acl", GNOME_VFS_ACL_READ_ACL);
11438N/A+ print_perm ("write acl", GNOME_VFS_ACL_WRITE_ACL);
11438N/A+ print_perm ("write owner", GNOME_VFS_ACL_WRITE_OWNER);
11438N/A+set_nfs4_permission_into_ace (FMPropertiesWindow *window,
11438N/A+ tree_view = g_object_get_data (window, "ace_permissions_tree_view");
11438N/A+ g_assert (GTK_IS_TREE_VIEW(tree_view));
11438N/A+ model = gtk_tree_view_get_model (tree_view);
11438N/A+ gnome_vfs_ace_add_perm (ace, p); \
11438N/A+ gnome_vfs_ace_del_perm (ace, p); \
11438N/A+ gtk_tree_model_get_iter_first (model, &iter);
11438N/A+ gtk_tree_model_get (model, &iter,
11438N/A+ if (!gtk_tree_model_iter_children (model, &iter_child, &iter))
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_ADMIN) == 0) {
11438N/A+ gtk_tree_model_get (model, &iter_child,
11438N/A+ NFS4_PERMISSIONS_SELECTED, &selected,
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_CHANGE_PERM) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_WRITE_ACL);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_CHANGE_OWNER) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_WRITE_OWNER);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter_child));
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_READ) == 0) {
11438N/A+ gtk_tree_model_get (model, &iter_child,
11438N/A+ NFS4_PERMISSIONS_SELECTED, &selected,
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_READ_ATTRIBUTES) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_READ_ATTRIBUTES);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_READ_EXT_ATTRIBUTES) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_READ_NAMED_ATTRS);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_LIST_CONTENTS) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_READ);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_TRAVERSE_FOLDER) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_EXECUTE);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_READ_PERMISSIONS) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_READ_ACL);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter_child));
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_WRITE) == 0) {
11438N/A+ gtk_tree_model_get (model, &iter_child,
11438N/A+ NFS4_PERMISSIONS_SELECTED, &selected,
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_WRITE_ATTRIBUTES) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_WRITE_ATTRIBUTES);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_WRITE_EXT_ATTRIBUTES) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_WRITE_NAMED_ATTRS);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_CREATE_FILES) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_ADD_SUBDIRECTORY);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_CREATE_FOLDER) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_APPEND_DATA);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_DELETE) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_DELETE);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_DELETE_SUBFOLDERS) == 0) {
11438N/A+ set_perm (GNOME_VFS_ACL_DELETE_CHILD);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter_child));
11438N/A+ g_error ("Unknown entry: '%s'\n", name?name:"");
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter));
11438N/A+set_nfs4_permission_from_ace (FMPropertiesWindow *window,
11438N/A+ GnomeVFSACLInherance inherance;
11438N/A+ g_assert (GNOME_VFS_IS_ACE(ace));
11438N/A+ g_assert (FM_IS_PROPERTIES_WINDOW(window));
11438N/A+ tree_view = g_object_get_data (window, "ace_permissions_tree_view");
11438N/A+ g_assert (GTK_IS_TREE_VIEW(tree_view));
11438N/A+ gtk_widget_set_sensitive (g_object_get_data (window, "ace_props_frame"), TRUE);
11438N/A+ gtk_widget_set_sensitive (g_object_get_data (window, "acl_list_add_button"), TRUE);
11438N/A+ model = gtk_tree_view_get_model (tree_view);
11438N/A+ gtk_tree_model_get_iter_first (model, &iter);
11438N/A+ gtk_tree_model_get (model, &iter,
11438N/A+ if (!gtk_tree_model_iter_children (model, &iter_child, &iter))
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_ADMIN) == 0) {
11438N/A+ gtk_tree_model_get (model, &iter_child, NFS4_PERMISSIONS_NAME, &name, -1);
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_CHANGE_PERM) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_ACL), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_CHANGE_OWNER) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_OWNER), -1);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter_child));
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_READ) == 0) {
11438N/A+ gtk_tree_model_get (model, &iter_child, NFS4_PERMISSIONS_NAME, &name, -1);
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_READ_ATTRIBUTES) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ_ATTRIBUTES), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_READ_EXT_ATTRIBUTES) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ_NAMED_ATTRS), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_LIST_CONTENTS) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_TRAVERSE_FOLDER) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_READ_PERMISSIONS) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ_ACL), -1);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter_child));
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_WRITE) == 0) {
11438N/A+ gtk_tree_model_get (model, &iter_child, NFS4_PERMISSIONS_NAME, &name, -1);
11438N/A+ if (strcmp (name, ACL_NFS4_PERM_WRITE_ATTRIBUTES) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_ATTRIBUTES), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_WRITE_EXT_ATTRIBUTES) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_NAMED_ATTRS), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_CREATE_FILES) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_ADD_SUBDIRECTORY), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_CREATE_FOLDER) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_APPEND_DATA), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_DELETE) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_DELETE), -1);
11438N/A+ } else if (strcmp (name, ACL_NFS4_PERM_DELETE_SUBFOLDERS) == 0) {
11438N/A+ gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
11438N/A+ gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_DELETE_CHILD), -1);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter_child));
11438N/A+ g_error ("Unknown entry: '%s'\n", name?name:"");
11438N/A+ fix_acl_nfs4_tree_status (model, ":");
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter));
11438N/A+ inherance = gnome_vfs_ace_get_inherance (ace);
11438N/A+ combo = g_object_get_data (window, "acl_nfs4_inherance_combo");
11438N/A+ model = gtk_combo_box_get_model(combo);
11438N/A+ gtk_tree_model_get_iter_first (model, &iter);
11438N/A+ gtk_tree_model_get (model, &iter, 0, &name, -1);
11438N/A+ if (((!strcmp (name, ACL_NFS4_APPLY_TO_THIS_FOLDER)) && (inherance == GNOME_VFS_ACL_NO_PROPAGATE)) ||
11438N/A+ ((!strcmp (name, ACL_NFS4_APPLY_TO_CHILD_FOLDERS)) && (inherance == GNOME_VFS_ACL_DIR_INHERIT)) ||
11438N/A+ ((!strcmp (name, ACL_NFS4_APPLY_TO_CHILD_FILES)) && (inherance == GNOME_VFS_ACL_FILE_INHERIT)) ||
11438N/A+ ((!strcmp (name, ACL_NFS4_APPLY_TO_ALL_DESCENDANTS)) && (inherance == GNOME_VFS_ACL_INHERIT_ONLY)))
11438N/A+ gtk_combo_box_set_active_iter (combo, &iter);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter));
11438N/A+ type = gnome_vfs_ace_get_ace_type (ace);
11438N/A+ combo = g_object_get_data (window, "acl_nfs4_type_combo");
11438N/A+ model = gtk_combo_box_get_model(combo);
11438N/A+ gtk_tree_model_get_iter_first (model, &iter);
11438N/A+ gtk_tree_model_get (model, &iter, 0, &name, -1);
11438N/A+ if (((!strcmp (name, ACL_NFS4_TYPE_ALLOW)) && (type == GNOME_VFS_ACL_ALLOW)) ||
11438N/A+ ((!strcmp (name, ACL_NFS4_TYPE_DENY)) && (type == GNOME_VFS_ACL_DENY)))
11438N/A+ gtk_combo_box_set_active_iter (combo, &iter);
11438N/A+ } while (gtk_tree_model_iter_next (model, &iter));
11438N/A+acl_nfs4_acl_list_get_active_ace (FMPropertiesWindow *window,
11438N/A+ tree_view = g_object_get_data (window, "acl_list_tree_view");
11438N/A+ selection = gtk_tree_view_get_selection (tree_view);
11438N/A+ re = gtk_tree_selection_get_selected (selection, &model, &iter);
11438N/A+ gtk_tree_model_get (model, &iter,
11438N/A+ NFS4_ACL_LIST_TYPE, &type_str,
11438N/A+ if (strcmp (type_str, ACL_NFS4_TYPE_DENY) == 0) {
11438N/A+ file = get_target_file (window);
11438N/A+ file_acl = nautilus_file_get_acl (file);
11438N/A+ ace_list = gnome_vfs_acl_get_ace_list (file_acl);
11438N/A+ for (i=ace_list; i; i=i->next) {
11438N/A+ g_assert (GNOME_VFS_IS_ACE(ace));
11438N/A+ id = gnome_vfs_ace_get_id (ace);
11438N/A+ if (gnome_vfs_ace_get_ace_type(ace) != type)
11438N/A+ if (gnome_vfs_ace_get_kind (ace) != kind)
11438N/A+ if ((kind == GNOME_VFS_ACL_USER) ||
11438N/A+ (kind == GNOME_VFS_ACL_GROUP))
11438N/A+nfs4_permission_toggled_cb (GtkCellRendererToggle *cellrenderertoggle,
11438N/A+ tree_view = g_object_get_data (window, "ace_permissions_tree_view");
11438N/A+ tree_model = gtk_tree_view_get_model (tree_view);
11438N/A+ g_return_if_fail (GTK_IS_TREE_MODEL (tree_model));
11438N/A+ re = gtk_tree_model_get_iter_from_string (tree_model, &iter, path);
11438N/A+ g_warning ("Couldn't access path %s\n", path);
11438N/A+ memset (&value, 0, sizeof(value));
11438N/A+ gtk_tree_model_get_value (tree_model,
11438N/A+ old = g_value_get_boolean (&value);
11438N/A+ gtk_tree_store_set (GTK_TREE_STORE(tree_model), &iter, NFS4_PERMISSIONS_SELECTED, !old, -1);
11438N/A+ /* Now that the state has change, check that everething is
11438N/A+ fix_acl_nfs4_tree_status (tree_model, path);
11438N/A+ /* Apply the changes to the NautilusFile
11438N/A+ file = get_target_file (window);
11438N/A+ ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
11438N/A+ set_nfs4_permission_into_ace (window, ace);
11438N/A+ re = nautilus_file_set_acl (file, acl,
11438N/A+// gnome_vfs_acl_free_ace_list (list);
11438N/A+acl_nfs4_acl_list_selection_changed_cb (GtkTreeSelection *selection,
11438N/A+ window->details->updating_acl_tab = TRUE;
11438N/A+ g_assert (GTK_IS_TREE_SELECTION(selection));
11438N/A+ g_assert (FM_IS_PROPERTIES_WINDOW(window));
11438N/A+ ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
11438N/A+ set_nfs4_permission_from_ace (window, ace);
11438N/A+ gnome_vfs_acl_free_ace_list (list);
11438N/A+ window->details->updating_acl_tab = FALSE;
11438N/A+create_acl_nfs4_permission_tree (FMPropertiesWindow *window)
11438N/A+ GtkCellRenderer *checkbox_renderer;
11438N/A+ GtkCellRenderer *text_renderer;
11438N/A+ /* Create the tree view widget
11438N/A+ tree_view = gtk_tree_view_new ();
11438N/A+ tree_store = gtk_tree_store_new (NFS4_PERMISSIONS_N_COLUMNS,
11438N/A+ gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL(tree_store));
11438N/A+ list_add (str, &iter_child, &iter)
11438N/A+#define list_add(str, iter_child, iter) \
11438N/A+ gtk_tree_store_append (tree_store, iter_child, iter); \
11438N/A+ gtk_tree_store_set (tree_store, iter_child, \
11438N/A+ NFS4_PERMISSIONS_SELECTED, FALSE, \
11438N/A+ NFS4_PERMISSIONS_NAME, (str), \
11438N/A+ NFS4_PERMISSIONS_INCONSISTENT, FALSE,\
11438N/A+ list_add (_("Administration"), &iter, NULL);
11438N/A+ list_add_child (_("Change Permissions"));
11438N/A+ list_add_child (_("Change Owner"));
11438N/A+ list_add (_("Read"), &iter, NULL);
11438N/A+ list_add_child (_("Read Attributes"));
11438N/A+ list_add_child (_("Read Extended Attributes"));
11438N/A+ list_add_child (_("List Folder Contents (Read Data)"));
11438N/A+ list_add_child (_("Traverse Folder (Execute File)"));
11438N/A+ list_add_child (_("Read Permissions"));
11438N/A+ list_add (_("Write"), &iter, NULL);
11438N/A+ list_add_child (_("Write Attributes"));
11438N/A+ list_add_child (_("Write Extended Attributes"));
11438N/A+ list_add_child (_("Create Files (Write Data)"));
11438N/A+ list_add_child (_("Create Folder (Append Data)"));
11438N/A+ list_add_child (_("Delete Subfolders and Files"));
11438N/A+ text_renderer = gtk_cell_renderer_text_new();
11438N/A+ checkbox_renderer = gtk_cell_renderer_toggle_new();
11438N/A+ g_signal_connect (checkbox_renderer,
11438N/A+ G_CALLBACK(nfs4_permission_toggled_cb),
11438N/A+ column = gtk_tree_view_column_new_with_attributes (_("Set"), checkbox_renderer,
11438N/A+ "active", NFS4_PERMISSIONS_SELECTED,
11438N/A+ "inconsistent", NFS4_PERMISSIONS_INCONSISTENT,
11438N/A+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
11438N/A+ gtk_tree_view_append_column (tree_view, column);
11438N/A+ column = gtk_tree_view_column_new_with_attributes (_("Permission"), text_renderer,
11438N/A+ "text", NFS4_PERMISSIONS_NAME,
11438N/A+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
11438N/A+ gtk_tree_view_append_column (tree_view, column);
11438N/A+ gtk_tree_view_expand_all (tree_view);
11438N/A+create_acl_nfs4_acl_list (FMPropertiesWindow *window)
11438N/A+ GtkCellRenderer *text_renderer;
11438N/A+ GtkCellRenderer *pixbuf_renderer;
11438N/A+ /* Instance the store and the tree_view
11438N/A+ tree_view = gtk_tree_view_new ();
11438N/A+ list_store = gtk_list_store_new (NFS4_ACL_LIST_N_COLUMNS,
11438N/A+ gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL(list_store));
11438N/A+ text_renderer = gtk_cell_renderer_text_new();
11438N/A+ pixbuf_renderer = gtk_cell_renderer_pixbuf_new();
11438N/A+ column = gtk_tree_view_column_new();
11438N/A+ gtk_tree_view_column_set_title (column, _("Name"));
11438N/A+ gtk_tree_view_column_set_reorderable (column, TRUE);
11438N/A+ gtk_tree_view_column_set_resizable (column, TRUE);
11438N/A+ gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);
11438N/A+ gtk_tree_view_column_pack_start(column, pixbuf_renderer, FALSE);
11438N/A+ gtk_tree_view_column_add_attribute(column, pixbuf_renderer, "pixbuf", NFS4_ACL_LIST_ICON);
11438N/A+ gtk_tree_view_column_pack_start(column, text_renderer, TRUE);
11438N/A+ gtk_tree_view_column_add_attribute(column, text_renderer, "text", NFS4_ACL_LIST_USER);
11438N/A+ text_renderer = gtk_cell_renderer_text_new();
11438N/A+ column = gtk_tree_view_column_new_with_attributes (_("Type"), text_renderer,
11438N/A+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
11438N/A+ gtk_tree_view_append_column (tree_view, column);
11438N/A+ g_signal_connect_after (G_OBJECT (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view))),
11438N/A+ "changed", G_CALLBACK(acl_nfs4_acl_list_selection_changed_cb), window);
11438N/A+acl_nfs4_inherance_changed_cb (GtkComboBox *widget,
11438N/A+ GnomeVFSACLInherance inherance;
11438N/A+ if (window->details->updating_acl_tab)
11438N/A+ file = get_target_file (window);
11438N/A+ ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
11438N/A+ active = gtk_combo_box_get_active_text (widget);
11438N/A+ if (!strcmp (active, ACL_NFS4_APPLY_TO_THIS_FOLDER)) {
11438N/A+ inherance = GNOME_VFS_ACL_NO_PROPAGATE;
11438N/A+ } else if (!strcmp (active, ACL_NFS4_APPLY_TO_CHILD_FOLDERS)) {
11438N/A+ inherance = GNOME_VFS_ACL_DIR_INHERIT;
11438N/A+ } else if (!strcmp (active, ACL_NFS4_APPLY_TO_CHILD_FILES)) {
11438N/A+ inherance = GNOME_VFS_ACL_FILE_INHERIT;
11438N/A+ } else if (!strcmp (active, ACL_NFS4_APPLY_TO_ALL_DESCENDANTS)) {
11438N/A+ inherance = GNOME_VFS_ACL_INHERIT_ONLY;
11438N/A+ inherance = GNOME_VFS_ACL_INHERANCE_NULL;
11438N/A+ gnome_vfs_ace_set_inherance (ace, inherance);
11438N/A+ re = nautilus_file_set_acl (file, acl,
11438N/A+// gnome_vfs_acl_free_ace_list (list);
11438N/A+build_new_add_acl_nfs4_dialog_who_changed_cb (GtkComboBox *widget,
11438N/A+ entry = g_object_get_data (dialog, "id_text");
11438N/A+ text = gtk_combo_box_get_active_text(widget);
11438N/A+ hide = ((!strcmp(text, ACL_NFS4_WHO_OWNER_USER)) ||
11438N/A+ (!strcmp(text, ACL_NFS4_WHO_OWNER_GROUP)) ||
11438N/A+ (!strcmp(text, ACL_NFS4_WHO_EVERYBODY)));
11438N/A+ gtk_widget_set_sensitive (entry, !hide);
11438N/A+ gtk_entry_set_text (entry, "");
11438N/A+build_new_add_acl_nfs4_dialog (FMPropertiesWindow *window)
11438N/A+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
11438N/A+ table = gtk_table_new (2, 6, FALSE);
11438N/A+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0);
11438N/A+ label = gtk_label_new (_("Sense"));
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ label = gtk_label_new (_("Who"));
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ label = gtk_label_new (_("ID"));
11438N/A+ gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
11438N/A+ sense_combo = gtk_combo_box_new_text();
11438N/A+ gtk_combo_box_append_text(sense_combo, ACL_NFS4_TYPE_ALLOW);
11438N/A+ gtk_combo_box_append_text(sense_combo, ACL_NFS4_TYPE_DENY);
11438N/A+ gtk_table_attach (GTK_TABLE(table), sense_combo, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 6, 6);
11438N/A+ who_combo = gtk_combo_box_new_text();
11438N/A+ gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_OWNER_USER);
11438N/A+ gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_OWNER_GROUP);
11438N/A+ gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_USER);
11438N/A+ gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_GROUP);
11438N/A+ gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_EVERYBODY);
11438N/A+ gtk_table_attach (GTK_TABLE(table), who_combo, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 6, 6);
11438N/A+ gtk_table_attach (GTK_TABLE(table), id, 2, 3, 1, 2, GTK_SHRINK, GTK_SHRINK, 6, 6);
11438N/A+ gtk_combo_box_set_active (who_combo, 0);
11438N/A+ gtk_combo_box_set_active (sense_combo, 0);
11438N/A+ gtk_widget_set_sensitive(id, FALSE);
11438N/A+ g_object_set_data (dialog, "sense_combo", sense_combo);
11438N/A+ g_object_set_data (dialog, "who_combo", who_combo);
11438N/A+ g_object_set_data (dialog, "id_text", id);
11438N/A+ g_signal_connect (G_OBJECT(who_combo), "changed",
11438N/A+ G_CALLBACK(build_new_add_acl_nfs4_dialog_who_changed_cb), dialog);
11438N/A+acl_nfs4_add_button_cb (GtkButton *button,
11438N/A+ file = get_target_file (window);
11438N/A+ acl = nautilus_file_get_acl (file);
11438N/A+ dialog = build_new_add_acl_nfs4_dialog (window);
11438N/A+ result = gtk_dialog_run (dialog);
11438N/A+ if (result == GTK_RESPONSE_CANCEL) {
11438N/A+ ace = gnome_vfs_ace_new (0, NULL, 0, GNOME_VFS_ACL_ALLOW, GNOME_VFS_ACL_SCHEME_NFS4);
11438N/A+ sense_combo = g_object_get_data (dialog, "sense_combo");
11438N/A+ combo_text = gtk_combo_box_get_active_text (sense_combo);
11438N/A+ if (!strcmp(combo_text, ACL_NFS4_TYPE_DENY))
11438N/A+ gnome_vfs_ace_set_ace_type (ace, GNOME_VFS_ACL_DENY);
11438N/A+ gnome_vfs_ace_set_ace_type (ace, GNOME_VFS_ACL_ALLOW);
11438N/A+ who_combo = g_object_get_data (dialog, "who_combo");
11438N/A+ combo_text = gtk_combo_box_get_active_text (who_combo);
11438N/A+ if (!strcmp(combo_text, ACL_NFS4_WHO_OWNER_USER))
11438N/A+ gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_OWNER_USER);
11438N/A+ else if (!strcmp(combo_text, ACL_NFS4_WHO_OWNER_GROUP))
11438N/A+ gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_OWNER_GROUP);
11438N/A+ else if (!strcmp(combo_text, ACL_NFS4_WHO_EVERYBODY))
11438N/A+ gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_EVERYONE);
11438N/A+ else if (!strcmp(combo_text, ACL_NFS4_WHO_USER)) {
11438N/A+ gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_USER);
11438N/A+ } else if (!strcmp(combo_text, ACL_NFS4_WHO_GROUP)) {
11438N/A+ gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_GROUP);
11438N/A+ GtkWidget *id_text = g_object_get_data (dialog, "id_text");
11438N/A+ combo_text = gtk_entry_get_text(id_text);
11438N/A+ if ((combo_text) && strlen(combo_text))
11438N/A+ gnome_vfs_ace_set_id (ace, combo_text);
11438N/A+ re = nautilus_file_set_acl (file, acl,
11438N/A+ gnome_vfs_acl_unset (acl, ace);
11438N/A+acl_nfs4_del_button_cb (GtkButton *button,
11438N/A+ file = get_target_file (window);
11438N/A+ ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
11438N/A+ gnome_vfs_acl_unset (acl, ace);
11438N/A+ re = nautilus_file_set_acl (file, acl,
11438N/A+// gnome_vfs_acl_free_ace_list (list);
11438N/A+acl_nfs4_type_changed_cb (GtkComboBox *widget,
11438N/A+ if (window->details->updating_acl_tab) {
11438N/A+ file = get_target_file (window);
11438N/A+ ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
11438N/A+ active = gtk_combo_box_get_active_text (widget);
11438N/A+ if (!strcmp (active, ACL_NFS4_TYPE_DENY))
11438N/A+ gnome_vfs_ace_set_ace_type(ace, type);
11438N/A+ re = nautilus_file_set_acl (file, acl,
11438N/A+// gnome_vfs_acl_free_ace_list (list);
11438N/A+create_acl_page_nfs4 (FMPropertiesWindow *window)
11438N/A+ vbox = create_page_with_vbox (window->details->notebook,
11438N/A+ gtk_box_pack_start (GTK_BOX (vbox), hpaned, TRUE, TRUE, 0);
11438N/A+ acl_list = create_acl_nfs4_acl_list (window);
11438N/A+ buttons_hbox = gtk_hbox_new(TRUE, 0);
11438N/A+ button_add = gtk_button_new_from_stock (GTK_STOCK_ADD);
11438N/A+ button_remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
11438N/A+ gtk_box_pack_start (GTK_BOX(buttons_hbox), button_add, FALSE, TRUE, 6);
11438N/A+ gtk_box_pack_end (GTK_BOX(buttons_hbox), button_remove, FALSE, TRUE, 6);
11438N/A+ vbox_acl_list = gtk_vbox_new(FALSE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(vbox_acl_list), acl_list, TRUE, TRUE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(vbox_acl_list), buttons_hbox, FALSE, FALSE, 6);
11438N/A+ gtk_paned_pack1 (GTK_PANED (hpaned), vbox_acl_list, TRUE, FALSE);
11438N/A+ inherance_combo = gtk_combo_box_new_text();
11438N/A+ gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_THIS_FOLDER);
11438N/A+ gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_CHILD_FOLDERS);
11438N/A+ gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_CHILD_FILES);
11438N/A+ gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_ALL_DESCENDANTS);
11438N/A+ type_combo = gtk_combo_box_new_text();
11438N/A+ gtk_combo_box_append_text(type_combo, ACL_NFS4_TYPE_ALLOW);
11438N/A+ gtk_combo_box_append_text(type_combo, ACL_NFS4_TYPE_DENY);
11438N/A+ props_hbox = gtk_hbox_new(FALSE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(props_hbox), gtk_label_new(_("Apply to")), FALSE, FALSE, 6);
11438N/A+ gtk_box_pack_start (GTK_BOX(props_hbox), inherance_combo, FALSE, FALSE, 0);
11438N/A+ gtk_box_pack_end (GTK_BOX(props_hbox), type_combo, FALSE, FALSE, 0);
11438N/A+ gtk_box_pack_end (GTK_BOX(props_hbox), gtk_label_new(_("Type")), FALSE, FALSE, 6);
11438N/A+ props_vbox = gtk_vbox_new(FALSE, 0);
11438N/A+ perms = create_acl_nfs4_permission_tree(window);
11438N/A+ gtk_box_pack_start (GTK_BOX(props_vbox), props_hbox, FALSE, FALSE, 6);
11438N/A+ gtk_box_pack_start (GTK_BOX(props_vbox), perms, TRUE, TRUE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(props_vbox), buttons_hbox, FALSE, FALSE, 6);
11438N/A+ gtk_paned_pack2 (GTK_PANED (hpaned), props_vbox, TRUE, FALSE);
11438N/A+ window->details->acl_view = perms;
11438N/A+ g_signal_connect (G_OBJECT(type_combo), "changed",
11438N/A+ G_CALLBACK(acl_nfs4_type_changed_cb), window);
11438N/A+ g_signal_connect (G_OBJECT(inherance_combo), "changed",
11438N/A+ G_CALLBACK(acl_nfs4_inherance_changed_cb), window);
11438N/A+ g_signal_connect (G_OBJECT(button_add), "clicked",
11438N/A+ G_CALLBACK(acl_nfs4_add_button_cb), window);
11438N/A+ g_signal_connect (G_OBJECT(button_remove), "clicked",
11438N/A+ G_CALLBACK(acl_nfs4_del_button_cb), window);
11438N/A+ g_object_set_data (window, "ace_props_frame", props_vbox);
11438N/A+ g_object_set_data (window, "acl_nfs4_type_combo", type_combo);
11438N/A+ g_object_set_data (window, "acl_nfs4_inherance_combo", inherance_combo);
11438N/A+ g_object_set_data (window, "acl_list_tree_view", acl_list);
11438N/A+ g_object_set_data (window, "acl_list_add_button", button_remove);
11438N/A+ g_object_set_data (window, "ace_permissions_tree_view", perms);
11438N/A+ gtk_widget_set_sensitive (props_vbox, FALSE);
11438N/A+ gtk_widget_set_sensitive (button_remove, FALSE);
11438N/A+create_acl_page_classic (FMPropertiesWindow *window)
11438N/A+ dir_found = file_list_some_directory (window->details->target_files);
11438N/A+ vbox = create_page_with_vbox (window->details->notebook,
11438N/A+ gtk_box_pack_start (GTK_BOX (vbox), panel, TRUE, TRUE, 0);
11438N/A+ file_list = window->details->original_files;
11438N/A+// if (all_can_get_acl (file_list)) {
11438N/A+ block = gtk_vbox_new (FALSE, 0);
11438N/A+ window->details->initial_acl = get_initial_acl (window->details->target_files);
11438N/A+ title = gtk_label_new (_("Common ACL"));
11438N/A+ gtk_label_set_justify (GTK_LABEL(title), GTK_JUSTIFY_LEFT);
11438N/A+ gtk_box_pack_start (GTK_BOX (block), title, FALSE, FALSE, 0);
11438N/A+ hbox = gtk_hbox_new (FALSE, 0);
11438N/A+ gtk_container_set_border_width (GTK_CONTAINER (hbox), GNOME_PAD);
11438N/A+ gtk_box_pack_start (GTK_BOX (block), hbox, TRUE, TRUE, 0);
11438N/A+ scroll = gtk_scrolled_window_new (NULL, NULL);
11438N/A+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
11438N/A+ window->details->acl_view = create_acl_page_list (scroll, window, FALSE);
11438N/A+ gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(scroll), TRUE, TRUE, 0);
11438N/A+ button_box = gtk_vbox_new (FALSE, 0);
11438N/A+ window->details->acl_buttons = button_box;
11438N/A+ button_add = gtk_button_new_from_stock (GTK_STOCK_ADD);
11438N/A+ button_remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
11438N/A+ empty_label = gtk_label_new("");
11438N/A+ g_signal_connect_object (button_add, "clicked",
11438N/A+ G_CALLBACK (add_acl_callback),
11438N/A+ g_signal_connect_object (button_remove, "clicked",
11438N/A+ G_CALLBACK (remove_acl_callback),
11438N/A+ gtk_box_pack_start (GTK_BOX(button_box), button_add, FALSE, FALSE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(button_box), button_remove, FALSE, FALSE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(button_box), empty_label, TRUE, TRUE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(button_box), FALSE, FALSE, 0);
11438N/A+ gtk_paned_add1 (panel, block);
11438N/A+ gtk_box_pack_start (GTK_BOX (vbox), block, TRUE, TRUE, 0);
11438N/A+ block = gtk_vbox_new (FALSE, 0);
11438N/A+ title = gtk_label_new (_("Default ACL"));
11438N/A+ gtk_label_set_justify (title, GTK_JUSTIFY_LEFT);
11438N/A+ gtk_box_pack_start (GTK_BOX (block), title, FALSE, FALSE, 0);
11438N/A+ hbox = gtk_hbox_new (FALSE, 0);
11438N/A+ gtk_container_set_border_width (GTK_CONTAINER (hbox), GNOME_PAD);
11438N/A+ gtk_box_pack_start (GTK_BOX (block), hbox, TRUE, TRUE, 0);
11438N/A+ scroll = gtk_scrolled_window_new (NULL, NULL);
11438N/A+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
11438N/A+ window->details->acl_default_view = create_acl_page_list (scroll, window, TRUE);
11438N/A+ gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(scroll), TRUE, TRUE, 0);
11438N/A+ button_box = gtk_vbox_new (FALSE, 0);
11438N/A+ window->details->acl_def_buttons = button_box;
11438N/A+ button_add = gtk_button_new_from_stock (GTK_STOCK_ADD);
11438N/A+ button_remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
11438N/A+ empty_label = gtk_label_new("");
11438N/A+ g_signal_connect_object (button_add, "clicked",
11438N/A+ G_CALLBACK (add_acl_default_callback),
11438N/A+ g_signal_connect_object (button_remove, "clicked",
11438N/A+ G_CALLBACK (remove_acl_default_callback),
11438N/A+ gtk_box_pack_start (GTK_BOX(button_box), button_add, FALSE, FALSE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(button_box), button_remove, FALSE, FALSE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(button_box), empty_label, TRUE, TRUE, 0);
11438N/A+ gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(button_box), FALSE, FALSE, 0);
11438N/A+ gtk_paned_add2 (panel, block);
11438N/A+create_acl_page (FMPropertiesWindow *window)
11438N/A+ /* Ensure the ACL tab should be shown
11438N/A+ file_list = window->details->original_files;
11438N/A+ if (! all_can_get_acl (file_list))
11438N/A+ scheme = get_acl_scheme (window->details->original_files);
11438N/A+ if (scheme == GNOME_VFS_ACL_SCHEME_CLASSIC) {
11438N/A+ create_acl_page_classic (window);
11438N/A+ } else if (scheme == GNOME_VFS_ACL_SCHEME_NFS4) {
11438N/A+ create_acl_page_nfs4 (window);
11438N/A+ g_error ("Unknown ACL scheme: scheme=%d\n", scheme);
11438N/A+create_permissions_page (FMPropertiesWindow *window)
11438N/A+ GtkWidget *vbox, *button, *hbox;
11438N/A+ char *file_name, *prompt_text;
11438N/A+ vbox = create_page_with_vbox (window->details->notebook,
11438N/A+ file_list = window->details->original_files;
11438N/A+ window->details->initial_permissions = NULL;
11438N/A+ if (all_can_get_permissions (file_list) && all_can_get_permissions (window->details->target_files)) {
11438N/A+ window->details->initial_permissions = get_initial_permissions (window->details->target_files);
11438N/A+ window->details->has_recursive_apply = files_has_changable_permissions_directory (window);
11438N/A+ if (!all_can_set_permissions (file_list)) {
11438N/A+ _("You are not the owner, so you can't change these permissions."));
11438N/A+ page_table = GTK_TABLE (gtk_table_new (1, COLUMN_COUNT, FALSE));
11438N/A+ window->details->permissions_table = page_table;
11438N/A+ apply_standard_table_padding (page_table);
11438N/A+ gtk_widget_show (GTK_WIDGET (page_table));
11438N/A+ gtk_box_pack_start (GTK_BOX (vbox),
11438N/A+ if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_SHOW_ADVANCED_PERMISSIONS)) {
11438N/A+ window->details->advanced_permissions = TRUE;
11438N/A+ create_advanced_permissions (window, page_table);
11438N/A+ window->details->advanced_permissions = FALSE;
11438N/A+ create_simple_permissions (window, page_table);
11438N/A+ gtk_table_set_row_spacing (page_table, page_table->nrows - 1, 18);
11438N/A+ (window, page_table, _("SELinux Context:"),
11438N/A+ (window, page_table, _("Last changed:"),
11438N/A+ if (window->details->has_recursive_apply) {
11438N/A+ last_row = append_row (page_table);
11438N/A+ hbox = gtk_hbox_new (FALSE, 0);
11438N/A+ gtk_table_attach (page_table, hbox,
11438N/A+ button = gtk_button_new_with_mnemonic (_("Apply permissions to enclosed files"));
11438N/A+ gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
11438N/A+ g_signal_connect (button, "clicked",
11438N/A+ G_CALLBACK (apply_recursive_clicked),
11438N/A+ if (!is_multi_file_window (window)) {
11438N/A+ file_name = nautilus_file_get_display_name (get_target_file (window));
11438N/A+ prompt_text = g_strdup_printf (_("The permissions of \"%s\" could not be determined."), file_name);
11438N/A+ prompt_text = g_strdup (_("The permissions of the selected file could not be determined."));
11438N/A+ add_prompt (GTK_VBOX (vbox), prompt_text, TRUE);
11438N/A+append_extension_pages (FMPropertiesWindow *window)
11438N/A+ providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER);
11438N/A+ for (p = providers; p != NULL; p = p->next) {
11438N/A+ NautilusPropertyPageProvider *provider;
11438N/A+ provider = NAUTILUS_PROPERTY_PAGE_PROVIDER (p->data);
11438N/A+ pages = nautilus_property_page_provider_get_pages
11438N/A+ (provider, window->details->original_files);
11438N/A+ for (l = pages; l != NULL; l = l->next) {
11438N/A page = NAUTILUS_PROPERTY_PAGE (l->data);
11438N/A+should_show_acls (FMPropertiesWindow *window)
11438N/A+ if (is_multi_file_window (window)) {
11438N/A+ /* Don't show ACL tab for desktop special icons (trash, etc)
11438N/A+ * or desktop files. We don't get the open-with menu for these anyway.
11438N/A+ file = get_original_file (window);
11438N/A+ NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||
11438N/A+ nautilus_file_is_nautilus_link (file)) {
11438N/A get_pending_key (GList *file_list)
11438N/A create_open_with_page (window);
11438N/A+ printf ("should_show_acls (window) %d\n", should_show_acls (window));
11438N/A+ if (should_show_acls (window)) {
11438N/A /* append pages from available views */
11438N/A append_extension_pages (window);
11438N/A window = FM_PROPERTIES_WINDOW (object);
11438N/A window->details->initial_emblems = NULL;
11438N/A+ if (window->details->initial_acl) {
11438N/A+ g_hash_table_destroy (window->details->initial_acl);
11438N/A+ window->details->initial_acl = NULL;
11438N/A+ for (i = 0; i<NUM_COL_ICONS; i++) {
11438N/A+ if (window->details->acl_icons[i]) {
11438N/A+ g_object_unref (window->details->acl_icons[i]);
11438N/A+ window->details->acl_icons[i] = NULL;
11438N/A g_list_free (window->details->permission_buttons);
11438N/A window->details->permission_buttons = NULL;