patches/nautilus-08-acl.diff
author yippi
Mon, 27 Sep 2010 21:07:51 +0000
changeset 20108 51df67ca9307
parent 10696 664047797716
permissions -rw-r--r--
I had these modules listed as being owned by me, but they are really owned by wangke, correcting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10696
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     1
--- nautilus-2.18.0.1-orig/libnautilus-private/nautilus-directory-async.c	2007-04-10 02:59:55.163189000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     2
+++ nautilus-2.18.0.1-alo/libnautilus-private/nautilus-directory-async.c	2007-04-03 12:36:03.664915000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     3
@@ -2596,7 +2596,7 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     4
 	gnome_vfs_async_load_directory
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     5
 		(&directory->details->mime_list_in_progress,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     6
 		 uri,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     7
-		 GNOME_VFS_FILE_INFO_GET_MIME_TYPE,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     8
+		 (GNOME_VFS_FILE_INFO_GET_MIME_TYPE | GNOME_VFS_FILE_INFO_GET_ACL),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
     9
 		 DIRECTORY_LOAD_ITEMS_PER_CALLBACK,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    10
 		 GNOME_VFS_PRIORITY_DEFAULT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    11
 		 mime_list_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    12
--- nautilus-2.18.0.1-orig/libnautilus-private/nautilus-file.h	2007-04-10 02:59:55.124136000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    13
+++ nautilus-2.18.0.1-alo/libnautilus-private/nautilus-file.h	2007-04-03 12:36:02.762619000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    14
@@ -201,6 +201,15 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    15
 gboolean                nautilus_file_can_get_selinux_context           (NautilusFile                   *file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    16
 char *                  nautilus_file_get_selinux_context               (NautilusFile                   *file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    17
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    18
+/* ACL */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    19
+gboolean                nautilus_file_can_get_acl                       (NautilusFile                   *file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    20
+gboolean                nautilus_file_can_set_acl                       (NautilusFile                   *file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    21
+GnomeVFSACL *           nautilus_file_get_acl                           (NautilusFile                   *file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    22
+GnomeVFSResult                     nautilus_file_set_acl                           (NautilusFile                   *file,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    23
+                                                                        GnomeVFSACL                    *acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    24
+                                                                        NautilusFileOperationCallback   callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    25
+									 gpointer                        callback_data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    26
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    27
 /* "Capabilities". */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    28
 gboolean                nautilus_file_can_read                          (NautilusFile                   *file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    29
 gboolean                nautilus_file_can_write                         (NautilusFile                   *file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    30
--- nautilus-2.18.0.1-orig/libnautilus-private/nautilus-file.c	2007-04-10 02:59:55.240107000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    31
+++ nautilus-2.18.0.1-alo/libnautilus-private/nautilus-file.c	2007-04-03 12:36:06.206964000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    32
@@ -65,6 +65,7 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    33
 #include <libgnomevfs/gnome-vfs-volume.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    34
 #include <libgnomevfs/gnome-vfs-volume-monitor.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    35
 #include <libgnomevfs/gnome-vfs-drive.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    36
+#include <libgnomevfs/gnome-vfs-ops.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    37
 #include <glib/gfileutils.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    38
 #include <libnautilus-extension/nautilus-file-info.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    39
 #include <libxml/parser.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    40
@@ -73,6 +74,7 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    41
 #include <sys/time.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    42
 #include <time.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    43
 #include <unistd.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    44
+#include <errno.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    45
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    46
 #ifdef HAVE_SELINUX
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    47
 #include <selinux/selinux.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    48
@@ -661,6 +663,30 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    49
 	return nautilus_directory_get_corresponding_file (file->details->directory);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    50
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    51
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    52
+static GnomeVFSACLPerm
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    53
+to_acl_perm (GnomeVFSFilePermissions p)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    54
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    55
+	if ((p == GNOME_VFS_PERM_USER_READ)  ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    56
+	    (p == GNOME_VFS_PERM_GROUP_READ) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    57
+	    (p == GNOME_VFS_PERM_OTHER_READ) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    58
+	    (p == GNOME_VFS_PERM_ACCESS_READABLE)) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    59
+		return GNOME_VFS_ACL_READ; 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    60
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    61
+	if ((p == GNOME_VFS_PERM_USER_WRITE)  ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    62
+	    (p == GNOME_VFS_PERM_GROUP_WRITE) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    63
+	    (p == GNOME_VFS_PERM_OTHER_WRITE) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    64
+	    (p == GNOME_VFS_PERM_ACCESS_WRITABLE)) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    65
+		return GNOME_VFS_ACL_WRITE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    66
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    67
+	if ((p == GNOME_VFS_PERM_USER_EXEC)  ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    68
+	    (p == GNOME_VFS_PERM_GROUP_EXEC) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    69
+	    (p == GNOME_VFS_PERM_OTHER_EXEC) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    70
+	    (p == GNOME_VFS_PERM_ACCESS_EXECUTABLE)) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    71
+		return GNOME_VFS_ACL_EXECUTE; 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    72
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    73
+	return GNOME_VFS_ACL_PERM_NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    74
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    75
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    76
 /**
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    77
  * nautilus_file_denies_access_permission:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    78
  * 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    79
@@ -681,6 +707,9 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    80
 nautilus_file_denies_access_permission (NautilusFile *file, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    81
 				        GnomeVFSFilePermissions permissions)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    82
 {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    83
+ 	GList *acls, *iter;	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    84
+ 	GnomeVFSACL *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    85
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    86
 	g_assert (NAUTILUS_IS_FILE (file));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    87
 	g_assert (permissions & (GNOME_VFS_PERM_ACCESS_READABLE |
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    88
 				 GNOME_VFS_PERM_ACCESS_WRITABLE |
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    89
@@ -698,7 +727,10 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    90
 		return FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    91
 	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    92
 	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    93
-	return (file->details->info->permissions & permissions) != permissions;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    94
+	if ((file->details->info->permissions & permissions) == permissions)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    95
+		return FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    96
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    97
+ 	return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    98
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
    99
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   100
 /**
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   101
@@ -3438,6 +3470,134 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   102
 	return !nautilus_file_info_missing (file, GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   103
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   104
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   105
+gboolean
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   106
+nautilus_file_can_get_acl (NautilusFile *file)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   107
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   108
+	return !nautilus_file_info_missing (file, GNOME_VFS_FILE_INFO_FIELDS_ACL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   109
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   110
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   111
+gboolean                
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   112
+nautilus_file_can_set_acl (NautilusFile *file)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   113
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   114
+	uid_t user_id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   115
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   116
+  	if (!nautilus_file_can_get_acl (file)) { 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   117
+  		return FALSE; 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   118
+  	} 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   119
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   120
+	/* Check the user. */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   121
+	user_id = geteuid();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   122
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   123
+	/* Owner is allowed to set group (with restrictions). */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   124
+	if (user_id == (uid_t) file->details->info->uid) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   125
+		return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   126
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   127
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   128
+	/* Root is also allowed to set group. */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   129
+	if (user_id == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   130
+		return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   131
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   132
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   133
+	return FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   134
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   135
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   136
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   137
+set_permissions_callback (GnomeVFSAsyncHandle *handle,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   138
+			  GnomeVFSResult result,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   139
+			  GnomeVFSFileInfo *new_info,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   140
+			  gpointer callback_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   141
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   142
+	Operation *op;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   143
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   144
+	op = callback_data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   145
+	g_assert (handle == op->handle);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   146
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   147
+	if (result == GNOME_VFS_OK && new_info != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   148
+		nautilus_file_update_info (op->file, new_info, op->use_slow_mime);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   149
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   150
+	operation_complete (op, result);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   151
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   152
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   153
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   154
+set_acl_callback (GnomeVFSAsyncHandle *handle,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   155
+		  GnomeVFSResult result,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   156
+		  GnomeVFSFileInfo *new_info,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   157
+		  gpointer callback_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   158
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   159
+	Operation *op;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   160
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   161
+	op = callback_data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   162
+	g_assert (handle == op->handle);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   163
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   164
+	if (result == GNOME_VFS_OK && new_info != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   165
+		if (op->file->details->info->acl != NULL) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   166
+			g_object_unref (op->file->details->info->acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   167
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   168
+		op->file->details->info->acl = new_info->acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   169
+	} 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   170
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   171
+	operation_complete (op, result);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   172
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   173
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   174
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   175
+GnomeVFSACL *           
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   176
+nautilus_file_get_acl (NautilusFile *file)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   177
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   178
+	return nautilus_file_info_missing (file, GNOME_VFS_FILE_INFO_FIELDS_ACL)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   179
+		? NULL : file->details->info->acl;	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   180
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   181
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   182
+// void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   183
+GnomeVFSResult 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   184
+nautilus_file_set_acl (NautilusFile                   *file,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   185
+		       GnomeVFSACL                    *acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   186
+		       NautilusFileOperationCallback   callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   187
+		       gpointer                        callback_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   188
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   189
+	Operation *op;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   190
+	GnomeVFSURI *vfs_uri;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   191
+	GnomeVFSFileInfo *partial_file_info;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   192
+	GnomeVFSFileInfoOptions options;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   193
+	GnomeVFSResult re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   194
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   195
+	if (!nautilus_file_can_set_acl (file)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   196
+		nautilus_file_changed (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   197
+		(* callback) (file, GNOME_VFS_ERROR_ACCESS_DENIED, callback_data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   198
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   199
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   200
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   201
+	op = operation_new (file, callback, callback_data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   202
+	op->use_slow_mime = file->details->got_slow_mime_type;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   203
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   204
+	options = GNOME_VFS_FILE_INFO_GET_ACL
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   205
+		| GNOME_VFS_FILE_INFO_GET_MIME_TYPE
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   206
+		| GNOME_VFS_FILE_INFO_FOLLOW_LINKS;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   207
+	if (op->use_slow_mime) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   208
+		options |= GNOME_VFS_FILE_INFO_FORCE_SLOW_MIME_TYPE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   209
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   210
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   211
+	partial_file_info = gnome_vfs_file_info_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   212
+	gnome_vfs_file_info_copy (partial_file_info, file->details->info);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   213
+	partial_file_info->acl = acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   214
+	vfs_uri = nautilus_file_get_gnome_vfs_uri (file);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   215
+#if 0
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   216
+	gnome_vfs_async_set_file_info (&op->handle,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   217
+				       vfs_uri, partial_file_info, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   218
+				       GNOME_VFS_SET_FILE_INFO_ACL,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   219
+				       options,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   220
+				       GNOME_VFS_PRIORITY_DEFAULT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   221
+				       set_acl_callback, op);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   222
+#else 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   223
+	re = gnome_vfs_set_file_info_uri (vfs_uri, partial_file_info, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   224
+					  GNOME_VFS_SET_FILE_INFO_ACL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   225
+	callback (file, re, callback_data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   226
+#endif
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   227
+	gnome_vfs_file_info_unref (partial_file_info);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   228
+	gnome_vfs_uri_unref (vfs_uri);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   229
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   230
+	return re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   231
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   232
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   233
 /**
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   234
  * nautilus_file_can_set_permissions:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   235
  * 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   236
@@ -3486,22 +3646,6 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   237
 	return file->details->info->permissions;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   238
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   239
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   240
-static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   241
-set_permissions_callback (GnomeVFSAsyncHandle *handle,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   242
-			  GnomeVFSResult result,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   243
-			  GnomeVFSFileInfo *new_info,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   244
-			  gpointer callback_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   245
-{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   246
-	Operation *op;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   247
-
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   248
-	op = callback_data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   249
-	g_assert (handle == op->handle);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   250
-
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   251
-	if (result == GNOME_VFS_OK && new_info != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   252
-		nautilus_file_update_info (op->file, new_info, op->use_slow_mime);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   253
-	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   254
-	operation_complete (op, result);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   255
-}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   256
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   257
 /**
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   258
  * nautilus_file_set_permissions:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   259
@@ -3553,6 +3697,7 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   260
 	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   261
 	/* Change the file-on-disk permissions. */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   262
 	partial_file_info = gnome_vfs_file_info_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   263
+	gnome_vfs_file_info_copy(partial_file_info, file->details->info);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   264
 	partial_file_info->permissions = new_permissions;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   265
 	vfs_uri = nautilus_file_get_gnome_vfs_uri (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   266
 	gnome_vfs_async_set_file_info (&op->handle,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   267
--- nautilus-2.18.0.1-orig/libnautilus-private/nautilus-file-private.h	2007-04-10 02:59:55.167442000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   268
+++ nautilus-2.18.0.1-alo/libnautilus-private/nautilus-file-private.h	2007-04-03 12:36:04.930411000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   269
@@ -42,7 +42,8 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   270
 	(GNOME_VFS_FILE_INFO_FOLLOW_LINKS | \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   271
 	 GNOME_VFS_FILE_INFO_GET_MIME_TYPE |	\
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   272
 	 GNOME_VFS_FILE_INFO_GET_SELINUX_CONTEXT | \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   273
-	 GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   274
+	 GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS | \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   275
+         GNOME_VFS_FILE_INFO_GET_ACL)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   276
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   277
 /* These are in the typical sort order. Known things come first, then
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   278
  * things where we can't know, finally things where we don't yet know.
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   279
--- nautilus-2.18.0.1-orig/src/file-manager/fm-properties-window.c	2007-04-10 02:59:55.413853000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   280
+++ nautilus-2.18.0.1-alo/src/file-manager/fm-properties-window.c	2007-04-10 01:41:45.120623000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   281
@@ -3,6 +3,7 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   282
 /* fm-properties-window.c - window that lets user modify file properties
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   283
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   284
    Copyright (C) 2000 Eazel, Inc.
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   285
+   Copyright (C) 2006 Sun Microsystems, Inc.
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   286
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   287
    The Gnome Library is free software; you can redistribute it and/or
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   288
    modify it under the terms of the GNU Library General Public License as
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   289
@@ -20,6 +21,7 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   290
    Boston, MA 02111-1307, USA.
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   291
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   292
    Authors: Darin Adler <[email protected]>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   293
+            Alvaro Lopez Ortega <[email protected]>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   294
 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   295
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   296
 #include <config.h>
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   297
@@ -86,6 +88,96 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   298
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   299
 #define ROW_PAD 6
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   300
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   301
+                           /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   302
+#define DEFAULT_USER_STR   _("Default user")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   303
+                           /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   304
+#define DEFAULT_GROUP_STR  _("Default group")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   305
+                           /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   306
+#define DEFAULT_OTHERS_STR _("Default others")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   307
+                           /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   308
+#define DEFAULT_MASK_STR   _("Default mask")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   309
+                           /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   310
+#define MASK_STR           _("Mask")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   311
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   312
+enum {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   313
+       COL_KIND = 0,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   314
+       COL_ICON,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   315
+       COL_USER,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   316
+       COL_PERM_READ,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   317
+       COL_PERM_WRITE,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   318
+       COL_PERM_EXECUTE,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   319
+       COL_EFFECTIVE,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   320
+       NUM_COLS
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   321
+};
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   322
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   323
+enum {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   324
+       COL_USER_ENTRY,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   325
+/*        COL_NEG_USER_ENTRY, */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   326
+       COL_GROUP_ENTRY,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   327
+/*        COL_NEG_GROUP_ENTRY, */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   328
+       NUM_PERM_TYPES
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   329
+};
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   330
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   331
+enum {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   332
+       COL_ICON_USER,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   333
+       COL_ICON_NEG_USER,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   334
+       COL_ICON_GROUP,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   335
+       COL_ICON_NEG_GROUP,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   336
+       COL_ICON_MASK,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   337
+       COL_ICON_OTHER,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   338
+       COL_ICON_NEG_OTHER,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   339
+       NUM_COL_ICONS
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   340
+};
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   341
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   342
+enum {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   343
+	NFS4_ACL_LIST_USER = 0,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   344
+	NFS4_ACL_LIST_ICON,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   345
+	NFS4_ACL_LIST_TYPE,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   346
+	NFS4_ACL_LIST_KIND,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   347
+	NFS4_ACL_LIST_N_COLUMNS
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   348
+};
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   349
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   350
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   351
+enum {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   352
+	NFS4_PERMISSIONS_SELECTED = 0,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   353
+	NFS4_PERMISSIONS_NAME,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   354
+	NFS4_PERMISSIONS_INCONSISTENT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   355
+	NFS4_PERMISSIONS_N_COLUMNS
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   356
+};
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   357
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   358
+/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   359
+#define ACL_NFS4_APPLY_TO_THIS_FOLDER      _("This folder") 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   360
+#define ACL_NFS4_APPLY_TO_CHILD_FOLDERS    _("Child folders")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   361
+#define ACL_NFS4_APPLY_TO_CHILD_FILES      _("Child files")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   362
+#define ACL_NFS4_APPLY_TO_ALL_DESCENDANTS  _("All descendants")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   363
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   364
+#define ACL_NFS4_TYPE_ALLOW                _("Allow")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   365
+#define ACL_NFS4_TYPE_DENY                 _("Deny")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   366
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   367
+#define ACL_NFS4_PERM_ADMIN                _("Administration")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   368
+#define ACL_NFS4_PERM_CHANGE_PERM          _("Change Permissions")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   369
+#define ACL_NFS4_PERM_CHANGE_OWNER         _("Change Owner")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   370
+#define ACL_NFS4_PERM_READ                 _("Read")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   371
+#define ACL_NFS4_PERM_READ_ATTRIBUTES      _("Read Attributes")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   372
+#define ACL_NFS4_PERM_READ_EXT_ATTRIBUTES  _("Read Extended Attributes")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   373
+#define ACL_NFS4_PERM_LIST_CONTENTS        _("List Folder Contents (Read Data)")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   374
+#define ACL_NFS4_PERM_TRAVERSE_FOLDER      _("Traverse Folder (Execute File)")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   375
+#define ACL_NFS4_PERM_READ_PERMISSIONS     _("Read Permissions")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   376
+#define ACL_NFS4_PERM_WRITE                _("Write")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   377
+#define ACL_NFS4_PERM_WRITE_ATTRIBUTES     _("Write Attributes")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   378
+#define ACL_NFS4_PERM_WRITE_EXT_ATTRIBUTES _("Write Extended Attributes")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   379
+#define ACL_NFS4_PERM_CREATE_FILES         _("Create Files (Write Data)")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   380
+#define ACL_NFS4_PERM_CREATE_FOLDER        _("Create Folder (Append Data)")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   381
+#define ACL_NFS4_PERM_DELETE               _("Delete")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   382
+#define ACL_NFS4_PERM_DELETE_SUBFOLDERS    _("Delete Subfolders and Files")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   383
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   384
+#define ACL_NFS4_WHO_OWNER_USER            _("Owner user")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   385
+#define ACL_NFS4_WHO_OWNER_GROUP           _("Owner group")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   386
+#define ACL_NFS4_WHO_USER                  _("User")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   387
+#define ACL_NFS4_WHO_GROUP                 _("Group")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   388
+#define ACL_NFS4_WHO_EVERYBODY             _("Everybody")
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   389
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   390
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   391
 static GHashTable *windows;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   392
 static GHashTable *pending_lists;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   393
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   394
@@ -127,6 +219,14 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   395
 	GHashTable *initial_permissions;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   396
 	gboolean has_recursive_apply;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   397
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   398
+	GtkWidget *acl_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   399
+	GtkWidget *acl_default_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   400
+	GHashTable *initial_acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   401
+	GdkPixbuf *acl_icons[NUM_COL_ICONS];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   402
+	GtkWidget *acl_buttons;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   403
+	GtkWidget *acl_def_buttons;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   404
+	gboolean   updating_acl_tab;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   405
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   406
 	GList *value_fields;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   407
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   408
 	GList *mime_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   409
@@ -1135,6 +1235,362 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   410
 	return ret;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   411
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   412
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   413
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   414
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   415
+update_acl_page_add_entry (FMPropertiesWindow *window, GnomeVFSACL *acl) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   416
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   417
+	GList *ace_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   418
+	GList *i;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   419
+	GnomeVFSACE *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   420
+	gboolean  mr,mw,mx;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   421
+	gboolean  imr,imw,imx;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   422
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   423
+	imr = imw = imx = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   424
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   425
+	/* Read the mask
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   426
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   427
+	ace_list = gnome_vfs_acl_get_ace_list (acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   428
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   429
+	mx = mw = mx = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   430
+	for (i=ace_list; i; i=i->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   431
+		ace = i->data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   432
+		if (gnome_vfs_ace_get_kind (ace) == GNOME_VFS_ACL_MASK) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   433
+			if (gnome_vfs_ace_get_inherance (ace)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   434
+				imr = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   435
+				imw = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   436
+				imx = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   437
+			} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   438
+				mr = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   439
+				mw = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   440
+				mx = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   441
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   442
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   443
+	}	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   444
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   445
+	/* Add the ACL entries
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   446
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   447
+	for (i=ace_list; i; i=i->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   448
+		const char            *id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   449
+		const GnomeVFSACLPerm *perms;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   450
+		GnomeVFSACLKind        kind;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   451
+		gboolean               inherit;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   452
+		gchar                  masked_str[4] = {'-','-','-',0};
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   453
+		gboolean               r,w,x;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   454
+		GdkPixbuf              *icon = NULL;		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   455
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   456
+		GtkTreeIter   iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   457
+		GtkTreeModel *model;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   458
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   459
+		ace      = i->data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   460
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   461
+		id       = gnome_vfs_ace_get_id (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   462
+		kind     = gnome_vfs_ace_get_kind (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   463
+		perms    = gnome_vfs_ace_get_perms (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   464
+		inherit  = gnome_vfs_ace_get_inherance (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   465
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   466
+		r = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   467
+		w = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   468
+		x = gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   469
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   470
+		if (inherit) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   471
+			if (imr & r) masked_str[0] = 'r';	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   472
+			if (imw & w) masked_str[1] = 'w';	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   473
+			if (imx & x) masked_str[2] = 'x';
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   474
+		} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   475
+			if (mr & r) masked_str[0] = 'r';	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   476
+			if (mw & w) masked_str[1] = 'w';	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   477
+			if (mx & x) masked_str[2] = 'x';
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   478
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   479
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   480
+		if (inherit)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   481
+			model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_default_view));  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   482
+		else 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   483
+			model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_view));  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   484
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   485
+		switch (kind) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   486
+		case GNOME_VFS_ACL_USER:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   487
+			if (inherit && !id)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   488
+				id = DEFAULT_USER_STR;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   489
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   490
+			if (id != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   491
+				icon = window->details->acl_icons[COL_ICON_USER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   492
+				gtk_list_store_append (model , &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   493
+				gtk_list_store_set (model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   494
+						    COL_ICON, icon,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   495
+						    COL_KIND, kind, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   496
+						    COL_USER, id,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   497
+						    COL_PERM_READ, r,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   498
+						    COL_PERM_WRITE, w,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   499
+						    COL_PERM_EXECUTE, x,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   500
+						    COL_EFFECTIVE, masked_str,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   501
+						    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   502
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   503
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   504
+		case GNOME_VFS_ACL_GROUP:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   505
+			if (inherit && !id)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   506
+				id = DEFAULT_GROUP_STR;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   507
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   508
+			if (id != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   509
+				icon = window->details->acl_icons[COL_ICON_GROUP];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   510
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   511
+				gtk_list_store_append (model , &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   512
+				gtk_list_store_set (model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   513
+						    COL_ICON, icon,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   514
+						    COL_KIND, kind, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   515
+						    COL_USER, id, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   516
+						    COL_PERM_READ, r,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   517
+						    COL_PERM_WRITE, w,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   518
+						    COL_PERM_EXECUTE, x,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   519
+						    COL_EFFECTIVE, masked_str,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   520
+						    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   521
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   522
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   523
+		case GNOME_VFS_ACL_OTHER:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   524
+			if (inherit && !id)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   525
+				id = DEFAULT_OTHERS_STR;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   526
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   527
+			if (id != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   528
+				icon = window->details->acl_icons[COL_ICON_OTHER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   529
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   530
+				gtk_list_store_append (model , &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   531
+				gtk_list_store_set (model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   532
+						    COL_ICON, icon,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   533
+						    COL_KIND, kind, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   534
+						    COL_USER, id, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   535
+						    COL_PERM_READ, r,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   536
+						    COL_PERM_WRITE, w,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   537
+						    COL_PERM_EXECUTE, x,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   538
+						    COL_EFFECTIVE, masked_str,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   539
+						    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   540
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   541
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   542
+		case GNOME_VFS_ACL_MASK:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   543
+			id = (inherit) ? DEFAULT_MASK_STR : MASK_STR;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   544
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   545
+			icon = window->details->acl_icons[COL_ICON_MASK];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   546
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   547
+			gtk_list_store_append (model , &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   548
+			gtk_list_store_set (model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   549
+					    COL_ICON, icon,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   550
+					    COL_KIND, kind, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   551
+					    COL_USER, id, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   552
+					    COL_PERM_READ, r,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   553
+					    COL_PERM_WRITE, w,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   554
+					    COL_PERM_EXECUTE, x,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   555
+					    COL_EFFECTIVE, masked_str,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   556
+					    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   557
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   558
+		default:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   559
+			g_error ("Unhandled ACE: kind=%d\n", kind);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   560
+			continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   561
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   562
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   563
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   564
+	gnome_vfs_acl_free_ace_list (ace_list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   565
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   566
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   567
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   568
+update_acl_page_classic (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   569
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   570
+	GtkTreeModel *model;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   571
+	gboolean      can_set_acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   572
+	gboolean      can_get_acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   573
+	NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   574
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   575
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   576
+	can_set_acl = nautilus_file_can_set_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   577
+	can_get_acl = nautilus_file_can_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   578
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   579
+	/* Clean it up
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   580
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   581
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_view));  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   582
+	gtk_list_store_clear (GTK_LIST_STORE(model));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   583
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   584
+	gtk_widget_set_sensitive (window->details->acl_buttons, can_set_acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   585
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   586
+	if (window->details->acl_default_view) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   587
+		model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_default_view));  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   588
+		gtk_list_store_clear (GTK_LIST_STORE(model));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   589
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   590
+		gtk_widget_set_sensitive (window->details->acl_def_buttons, can_set_acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   591
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   592
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   593
+	/* Fill it out again
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   594
+	 */	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   595
+	if (window->details->initial_acl != NULL && can_get_acl) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   596
+		GnomeVFSACL  *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   597
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   598
+		g_hash_table_remove (window->details->initial_acl, file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   599
+		acl = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   600
+		g_hash_table_insert (window->details->initial_acl, file, acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   601
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   602
+		update_acl_page_add_entry (window, acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   603
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   604
+		/* Update the sentitivity of the lists
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   605
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   606
+		gtk_widget_set_sensitive (window->details->acl_view, can_set_acl);		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   607
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   608
+		if (window->details->acl_default_view)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   609
+			gtk_widget_set_sensitive (window->details->acl_default_view, can_set_acl);		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   610
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   611
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   612
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   613
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   614
+update_acl_nfs4_list_guts (FMPropertiesWindow *window,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   615
+			   GtkTreeView        *acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   616
+			   GnomeVFSACL        *file_acl)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   617
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   618
+	GList *i;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   619
+	GList *ace_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   620
+	GnomeVFSACE *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   621
+	GtkListStore *list_store;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   622
+	GtkTreeIter iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   623
+	const gchar *type_str;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   624
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   625
+	g_assert (GNOME_VFS_IS_ACL(file_acl));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   626
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   627
+	ace_list = gnome_vfs_acl_get_ace_list (file_acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   628
+	list_store = gtk_tree_view_get_model (acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   629
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   630
+	for (i=ace_list; i; i=i->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   631
+		const char      *id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   632
+		GnomeVFSACLType  type;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   633
+		GnomeVFSACLKind  kind;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   634
+		GdkPixbuf       *icon;		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   635
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   636
+		ace  = i->data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   637
+		icon = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   638
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   639
+		g_assert (GNOME_VFS_IS_ACE(ace));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   640
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   641
+		type = gnome_vfs_ace_get_ace_type(ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   642
+		kind = gnome_vfs_ace_get_kind (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   643
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   644
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   645
+		type_str = (type == GNOME_VFS_ACL_DENY) ? ACL_NFS4_TYPE_DENY : ACL_NFS4_TYPE_ALLOW;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   646
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   647
+		switch (kind) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   648
+		case GNOME_VFS_ACL_USER:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   649
+			id   = gnome_vfs_ace_get_id (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   650
+			if (type == GNOME_VFS_ACL_DENY) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   651
+				icon = window->details->acl_icons[COL_ICON_NEG_USER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   652
+			else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   653
+				icon = window->details->acl_icons[COL_ICON_USER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   654
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   655
+		case GNOME_VFS_ACL_GROUP:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   656
+			id   = gnome_vfs_ace_get_id (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   657
+			if (type == GNOME_VFS_ACL_DENY) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   658
+				icon = window->details->acl_icons[COL_ICON_NEG_GROUP];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   659
+			else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   660
+				icon = window->details->acl_icons[COL_ICON_GROUP];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   661
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   662
+		case GNOME_VFS_ACL_OTHER:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   663
+			id = g_strdup(_("Others"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   664
+			if (type == GNOME_VFS_ACL_DENY) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   665
+				icon = window->details->acl_icons[COL_ICON_NEG_OTHER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   666
+			else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   667
+				icon = window->details->acl_icons[COL_ICON_OTHER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   668
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   669
+		case GNOME_VFS_ACL_MASK:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   670
+			id = g_strdup(_("Mask"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   671
+			icon = window->details->acl_icons[COL_ICON_MASK];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   672
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   673
+		case GNOME_VFS_ACL_EVERYONE:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   674
+			id = g_strdup(_("Everyone"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   675
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   676
+		case GNOME_VFS_ACL_OWNER_USER:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   677
+			id = g_strdup(_("Owner user")); 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   678
+			if (type == GNOME_VFS_ACL_DENY) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   679
+				icon = window->details->acl_icons[COL_ICON_NEG_USER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   680
+			else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   681
+				icon = window->details->acl_icons[COL_ICON_USER];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   682
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   683
+		case GNOME_VFS_ACL_OWNER_GROUP:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   684
+			id = g_strdup(_("Owner group"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   685
+			if (type == GNOME_VFS_ACL_DENY) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   686
+				icon = window->details->acl_icons[COL_ICON_NEG_GROUP];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   687
+			else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   688
+				icon = window->details->acl_icons[COL_ICON_GROUP];
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   689
+			break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   690
+		default:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   691
+			id = g_strdup("UNKNOWN");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   692
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   693
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   694
+		gtk_list_store_append (list_store , &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   695
+		gtk_list_store_set (list_store, &iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   696
+				    NFS4_ACL_LIST_USER, id,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   697
+				    NFS4_ACL_LIST_TYPE, type_str,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   698
+				    NFS4_ACL_LIST_KIND, kind,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   699
+				    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   700
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   701
+		if (icon != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   702
+			gtk_list_store_set (list_store, &iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   703
+					    NFS4_ACL_LIST_ICON, icon,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   704
+					    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   705
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   706
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   707
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   708
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   709
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   710
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   711
+update_acl_nfs4_list (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   712
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   713
+	GtkTreeView  *tree_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   714
+	GtkListStore *list_store;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   715
+	NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   716
+	GnomeVFSACL  *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   717
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   718
+	g_assert (FM_IS_PROPERTIES_WINDOW(window));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   719
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   720
+	/* Get the ACL
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   721
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   722
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   723
+	acl = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   724
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   725
+	/* Clean the list
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   726
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   727
+	tree_view  = g_object_get_data(window, "acl_list_tree_view");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   728
+	list_store = gtk_tree_view_get_model(tree_view);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   729
+	gtk_list_store_clear (list_store);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   730
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   731
+	update_acl_nfs4_list_guts (window, tree_view, acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   732
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   733
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   734
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   735
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   736
+update_acl_page_nfs4 (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   737
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   738
+	update_acl_nfs4_list (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   739
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   740
+	gtk_widget_set_sensitive (g_object_get_data (window, "ace_props_frame"), FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   741
+	gtk_widget_set_sensitive (g_object_get_data (window, "acl_list_add_button"), FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   742
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   743
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   744
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   745
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   746
+update_acl_page (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   747
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   748
+	GnomeVFSACL       *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   749
+	GnomeVFSACLScheme  acl_scheme;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   750
+	NautilusFile      *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   751
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   752
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   753
+	acl = nautilus_file_get_acl (file);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   754
+	if (acl == NULL) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   755
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   756
+	acl_scheme = gnome_vfs_acl_get_scheme(acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   757
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   758
+	window->details->updating_acl_tab = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   759
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   760
+	if (acl_scheme == GNOME_VFS_ACL_SCHEME_CLASSIC)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   761
+		update_acl_page_classic (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   762
+	else 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   763
+		update_acl_page_nfs4 (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   764
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   765
+	window->details->updating_acl_tab = FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   766
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   767
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   768
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   769
 static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   770
 properties_window_update (FMPropertiesWindow *window, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   771
 			  GList *files)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   772
@@ -1179,6 +1633,9 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   773
 		update_properties_window_icon (GTK_IMAGE (window->details->icon_image));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   774
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   775
 		update_name_field (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   776
+		if (should_show_acls (window)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   777
+			update_acl_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   778
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   779
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   780
 		for (l = window->details->emblem_buttons; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   781
 			emblem_button_update (window, GTK_TOGGLE_BUTTON (l->data));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   782
@@ -1337,6 +1794,18 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   783
 	return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   784
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   785
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   786
+static gboolean
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   787
+file_list_some_directory (GList *file_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   788
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   789
+	GList *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   790
+	for (l = file_list; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   791
+		if (nautilus_file_is_directory (NAUTILUS_FILE (l->data))) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   792
+			return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   793
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   794
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   795
+	return FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   796
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   797
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   798
 static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   799
 value_field_update_internal (GtkLabel *label, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   800
 			     GList *file_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   801
@@ -3689,6 +4158,24 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   802
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   803
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   804
 static gboolean
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   805
+all_can_get_acl (GList *file_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   806
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   807
+       GList *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   808
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   809
+       for (l = file_list; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   810
+               NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   811
+               
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   812
+               file = NAUTILUS_FILE (l->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   813
+               
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   814
+               if (!nautilus_file_can_get_acl (file)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   815
+                       return FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   816
+               }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   817
+       }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   818
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   819
+       return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   820
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   821
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   822
+static gboolean
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   823
 all_can_set_permissions (GList *file_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   824
 {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   825
 	GList *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   826
@@ -4143,112 +4630,2016 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   827
 	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   828
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   829
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   830
-static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   831
-create_permissions_page (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   832
+static GHashTable *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   833
+get_initial_acl (GList *file_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   834
 {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   835
-	GtkWidget *vbox, *button, *hbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   836
-	GtkTable *page_table;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   837
-	char *file_name, *prompt_text;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   838
-	GList *file_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   839
-	guint last_row;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   840
-
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   841
-	vbox = create_page_with_vbox (window->details->notebook,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   842
-				      _("Permissions"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   843
-
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   844
-	file_list = window->details->original_files;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   845
-
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   846
-	window->details->initial_permissions = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   847
-	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   848
-	if (all_can_get_permissions (file_list) && all_can_get_permissions (window->details->target_files)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   849
-		window->details->initial_permissions = get_initial_permissions (window->details->target_files);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   850
-		window->details->has_recursive_apply = files_has_changable_permissions_directory (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   851
-		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   852
-		if (!all_can_set_permissions (file_list)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   853
-			add_prompt_and_separator (
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   854
-				GTK_VBOX (vbox), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   855
-				_("You are not the owner, so you can't change these permissions."));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   856
-		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   857
-
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   858
-		page_table = GTK_TABLE (gtk_table_new (1, COLUMN_COUNT, FALSE));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   859
-		window->details->permissions_table = page_table;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   860
-
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   861
-		apply_standard_table_padding (page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   862
-		gtk_widget_show (GTK_WIDGET (page_table));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   863
-		gtk_box_pack_start (GTK_BOX (vbox), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   864
-				    GTK_WIDGET (page_table), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   865
-				    TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   866
+	GHashTable *ret;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   867
+	GList *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   868
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   869
-		if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_SHOW_ADVANCED_PERMISSIONS)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   870
-			window->details->advanced_permissions = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   871
-			create_advanced_permissions (window, page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   872
-		} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   873
-			window->details->advanced_permissions = FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   874
-			create_simple_permissions (window, page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   875
-		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   876
-		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   877
-		gtk_table_set_row_spacing (page_table, page_table->nrows - 1, 18);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   878
-	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   879
-		append_title_value_pair
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   880
-			(window, page_table, _("SELinux Context:"), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   881
-			 "selinux_context", _("--"),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   882
-			 FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   883
-		append_title_value_pair
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   884
-			(window, page_table, _("Last changed:"), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   885
-			 "date_permissions", _("--"),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   886
-			 FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   887
+	ret = g_hash_table_new (g_direct_hash,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   888
+				g_direct_equal);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   889
 	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   890
-		if (window->details->has_recursive_apply) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   891
-			last_row = append_row (page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   892
-			hbox = gtk_hbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   893
-			gtk_widget_show (hbox);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   894
-			gtk_table_attach (page_table, hbox,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   895
-					  0, 2,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   896
-					  last_row, last_row+1,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   897
-					  GTK_FILL, 0,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   898
-					  0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   899
+	for (l = file_list; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   900
+		GnomeVFSACL *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   901
+		NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   902
 		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   903
-			button = gtk_button_new_with_mnemonic (_("Apply permissions to enclosed files"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   904
-			gtk_widget_show (button);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   905
-			gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   906
-			g_signal_connect (button, "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   907
-					  G_CALLBACK (apply_recursive_clicked),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   908
-					  window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   909
-		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   910
-	} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   911
-		if (!is_multi_file_window (window)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   912
-			file_name = nautilus_file_get_display_name (get_target_file (window));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   913
-			prompt_text = g_strdup_printf (_("The permissions of \"%s\" could not be determined."), file_name);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   914
-			g_free (file_name);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   915
-		} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   916
-			prompt_text = g_strdup (_("The permissions of the selected file could not be determined."));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   917
-		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   918
+		file = NAUTILUS_FILE (l->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   919
 		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   920
-		add_prompt (GTK_VBOX (vbox), prompt_text, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   921
-		g_free (prompt_text);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   922
+		acl = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   923
+		g_hash_table_insert (ret, file, acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   924
 	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   925
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   926
+	return ret;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   927
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   928
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   929
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   930
 static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   931
-append_extension_pages (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   932
+acl_change_callback (NautilusFile *file, GnomeVFSResult result, gpointer callback_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   933
 {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   934
-	GList *providers;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   935
-	GList *p;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   936
-	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   937
- 	providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   938
-	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   939
-	for (p = providers; p != NULL; p = p->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   940
-		NautilusPropertyPageProvider *provider;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   941
-		GList *pages;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   942
-		GList *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   943
+       FMPropertiesWindow *window;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   944
+       g_assert (callback_data != NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   945
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   946
-		provider = NAUTILUS_PROPERTY_PAGE_PROVIDER (p->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   947
-		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   948
-		pages = nautilus_property_page_provider_get_pages 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   949
-			(provider, window->details->original_files);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   950
-		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   951
-		for (l = pages; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   952
-			NautilusPropertyPage *page;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   953
-			GtkWidget *page_widget;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   954
+       window = FM_PROPERTIES_WINDOW (callback_data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   955
+       if (GTK_WIDGET (window)->window != NULL &&
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   956
+           window->details->long_operation_underway == 1) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   957
+               /* finished !! */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   958
+               gdk_window_set_cursor (GTK_WIDGET (window)->window, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   959
+       }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   960
+       window->details->long_operation_underway--;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   961
+       
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   962
+       /* Report the error if it's an error. */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   963
+       fm_report_error_setting_permissions (file, result, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   964
+       g_object_unref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   965
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   966
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   967
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   968
+static void        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   969
+ace_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   970
+		     gchar                 *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   971
+		     gpointer               user_data,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   972
+		     GnomeVFSACLPerm        perm,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   973
+		     gboolean               is_default_acl)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   974
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   975
+	GtkTreeIter         iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   976
+	GtkTreeModel       *model;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   977
+	FMPropertiesWindow *window = user_data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   978
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   979
+	gchar *row_id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   980
+	gboolean perm_val;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   981
+	GnomeVFSACLKind row_kind;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   982
+	int column;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   983
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   984
+	GList *file_list, *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   985
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   986
+	/* Look for the row
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   987
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   988
+	if (is_default_acl)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   989
+		model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_default_view));  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   990
+	else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   991
+		model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->details->acl_view));  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   992
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   993
+	gtk_tree_model_get_iter_from_string (model, &iter, path);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   994
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   995
+	switch (perm) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   996
+	case GNOME_VFS_ACL_READ:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   997
+		column = COL_PERM_READ;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   998
+		break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
   999
+	case GNOME_VFS_ACL_WRITE:	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1000
+		column = COL_PERM_WRITE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1001
+		break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1002
+	case GNOME_VFS_ACL_EXECUTE:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1003
+		column = COL_PERM_EXECUTE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1004
+		break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1005
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1006
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1007
+	/* Update the model
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1008
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1009
+	gtk_tree_model_get (model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1010
+			    COL_USER, &row_id, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1011
+			    COL_KIND, &row_kind,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1012
+			    column,   &perm_val,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1013
+			    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1014
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1015
+	perm_val = !perm_val;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1016
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1017
+	/* Update the files
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1018
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1019
+	file_list = window->details->original_files;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1020
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1021
+	for (l = file_list; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1022
+		GnomeVFSACL *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1023
+		NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1024
+		GList *ace_list, *i;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1025
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1026
+		file = NAUTILUS_FILE (l->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1027
+		acl = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1028
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1029
+		ace_list = gnome_vfs_acl_get_ace_list (acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1030
+		for (i=ace_list; i; i=i->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1031
+			const char            *id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1032
+			GnomeVFSACE           *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1033
+			const GnomeVFSACLPerm *perms;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1034
+			GnomeVFSACLKind        kind;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1035
+			gboolean               inherit;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1036
+			gboolean               default_acl_obj = FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1037
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1038
+			ace = i->data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1039
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1040
+			id       = gnome_vfs_ace_get_id (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1041
+			kind     = gnome_vfs_ace_get_kind (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1042
+			perms    = gnome_vfs_ace_get_perms (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1043
+			inherit  = gnome_vfs_ace_get_inherance (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1044
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1045
+			if ((kind != row_kind) || 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1046
+			    (is_default_acl != inherit))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1047
+				continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1048
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1049
+			if ((id == NULL) && 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1050
+			    ((strcmp (row_id, MASK_STR) == 0)          ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1051
+			     (strcmp (row_id, DEFAULT_MASK_STR) == 0)  ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1052
+			     (strcmp (row_id, DEFAULT_USER_STR) == 0)  ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1053
+			     (strcmp (row_id, DEFAULT_GROUP_STR) == 0) ||	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1054
+			     (strcmp (row_id, DEFAULT_OTHERS_STR) == 0)))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1055
+				default_acl_obj = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1056
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1057
+			if (!default_acl_obj) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1058
+			{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1059
+				if (id && !row_id) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1060
+					continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1061
+				if (!id && row_id) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1062
+					continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1063
+				if (id && row_id && (strcmp (id, row_id) != 0))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1064
+					continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1065
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1066
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1067
+			if (perm_val) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1068
+				gnome_vfs_ace_add_perm (ace, perm);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1069
+			} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1070
+				gnome_vfs_ace_del_perm (ace, perm);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1071
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1072
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1073
+			g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1074
+			nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1075
+					       acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1076
+					       window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1077
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1078
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1079
+		gnome_vfs_acl_free_ace_list (ace_list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1080
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1081
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1082
+	/* Update the model
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1083
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1084
+	gtk_list_store_set (model, &iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1085
+			    column, perm_val,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1086
+			    -1);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1087
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1088
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1089
+static void        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1090
+ace_r_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1091
+		       gchar                 *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1092
+		       gpointer               user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1093
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1094
+	ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_READ, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1095
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1096
+static void        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1097
+ace_w_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1098
+		       gchar                 *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1099
+		       gpointer               user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1100
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1101
+	ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_WRITE, FALSE);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1102
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1103
+static void        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1104
+ace_x_perm_toggled_cb (GtkCellRendererToggle *cell_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1105
+		       gchar                 *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1106
+		       gpointer               user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1107
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1108
+	ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_EXECUTE, FALSE);		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1109
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1110
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1111
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1112
+static void        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1113
+ace_r_perm_def_toggled_cb (GtkCellRendererToggle *cell_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1114
+			   gchar                 *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1115
+			   gpointer               user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1116
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1117
+	ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_READ, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1118
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1119
+static void        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1120
+ace_w_perm_def_toggled_cb (GtkCellRendererToggle *cell_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1121
+			   gchar                 *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1122
+			   gpointer               user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1123
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1124
+	ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_WRITE, TRUE);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1125
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1126
+static void        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1127
+ace_x_perm_def_toggled_cb (GtkCellRendererToggle *cell_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1128
+			   gchar                 *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1129
+			   gpointer               user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1130
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1131
+	ace_perm_toggled_cb (cell_renderer, path, user_data, GNOME_VFS_ACL_EXECUTE, TRUE);		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1132
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1133
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1134
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1135
+static GtkWidget *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1136
+create_acl_page_list (GtkWidget *container,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1137
+		      FMPropertiesWindow *window,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1138
+		      gboolean default_acl_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1139
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1140
+	GtkListStore      *store;  // GtkTreeModel
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1141
+	GtkWidget         *view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1142
+	GtkCellRenderer   *renderer;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1143
+	GtkTreeViewColumn *col;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1144
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1145
+	/* Load the icons
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1146
+	 */ 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1147
+	window->details->acl_icons[COL_ICON_USER]      = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/user.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1148
+	window->details->acl_icons[COL_ICON_NEG_USER]  = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/user_neg.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1149
+	window->details->acl_icons[COL_ICON_GROUP]     = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/group.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1150
+	window->details->acl_icons[COL_ICON_NEG_GROUP] = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/group_neg.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1151
+	window->details->acl_icons[COL_ICON_MASK]      = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/mask.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1152
+	window->details->acl_icons[COL_ICON_OTHER]     = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/other.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1153
+	window->details->acl_icons[COL_ICON_NEG_OTHER] = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/other_neg.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1154
+		  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1155
+	/* Interface
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1156
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1157
+	view = gtk_tree_view_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1158
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1159
+	/* The model
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1160
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1161
+	store = gtk_list_store_new (NUM_COLS, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1162
+				    G_TYPE_INT,       /* Kind: user, group, other */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1163
+				    GDK_TYPE_PIXBUF,  /* Type: user, group, other */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1164
+				    G_TYPE_STRING,    /* ID */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1165
+				    G_TYPE_BOOLEAN,   /* r */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1166
+				    G_TYPE_BOOLEAN,   /* w */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1167
+				    G_TYPE_BOOLEAN,   /* x */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1168
+				    G_TYPE_STRING);   /* Effective */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1169
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1170
+	gtk_tree_view_set_model (GTK_TREE_VIEW(view), GTK_TREE_MODEL(store));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1171
+        g_object_unref (store);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1172
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1173
+	/* First column */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1174
+        col = gtk_tree_view_column_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1175
+        gtk_tree_view_column_set_title (col, "");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1176
+        gtk_tree_view_column_set_reorderable (col, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1177
+        gtk_tree_view_column_set_resizable (col, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1178
+        gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1179
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1180
+	renderer = gtk_cell_renderer_pixbuf_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1181
+        gtk_tree_view_column_pack_start(col, renderer, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1182
+        gtk_tree_view_column_add_attribute(col, renderer, "pixbuf", COL_ICON);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1183
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1184
+        renderer = gtk_cell_renderer_text_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1185
+        gtk_tree_view_column_pack_start(col, renderer, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1186
+        gtk_tree_view_column_add_attribute(col, renderer, "text", COL_USER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1187
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1188
+	/* READ column */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1189
+	col = gtk_tree_view_column_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1190
+        /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1191
+        gtk_tree_view_column_set_title (col, _("read"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1192
+        gtk_tree_view_column_set_reorderable (col, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1193
+        gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1194
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1195
+        renderer = gtk_cell_renderer_toggle_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1196
+        gtk_tree_view_column_pack_start (col, renderer, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1197
+        gtk_tree_view_column_add_attribute (col, renderer, "active", COL_PERM_READ);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1198
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1199
+	if (default_acl_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1200
+		g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_r_perm_def_toggled_cb), G_OBJECT(window), 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1201
+	else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1202
+		g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_r_perm_toggled_cb), G_OBJECT(window), 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1203
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1204
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1205
+	/* WRITE column */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1206
+	col = gtk_tree_view_column_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1207
+        /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1208
+        gtk_tree_view_column_set_title (col, _("write"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1209
+        gtk_tree_view_column_set_reorderable (col, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1210
+        gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1211
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1212
+        renderer = gtk_cell_renderer_toggle_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1213
+        gtk_tree_view_column_pack_start (col, renderer, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1214
+        gtk_tree_view_column_add_attribute (col, renderer, "active", COL_PERM_WRITE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1215
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1216
+	if (default_acl_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1217
+		g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_w_perm_def_toggled_cb), G_OBJECT(window), 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1218
+	else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1219
+		g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_w_perm_toggled_cb), G_OBJECT(window), 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1220
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1221
+	/* EXECUTE column */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1222
+	col = gtk_tree_view_column_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1223
+        /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1224
+        gtk_tree_view_column_set_title (col, _("exec"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1225
+        gtk_tree_view_column_set_reorderable (col, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1226
+        gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1227
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1228
+        renderer = gtk_cell_renderer_toggle_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1229
+        gtk_tree_view_column_pack_start (col, renderer, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1230
+	gtk_tree_view_column_add_attribute (col, renderer, "active", COL_PERM_EXECUTE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1231
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1232
+	if (default_acl_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1233
+		g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_x_perm_def_toggled_cb), G_OBJECT(window), 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1234
+	else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1235
+		g_signal_connect_object (renderer, "toggled", G_CALLBACK(ace_x_perm_toggled_cb), G_OBJECT(window), 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1236
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1237
+	/* Effective */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1238
+        col = gtk_tree_view_column_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1239
+        /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1240
+        gtk_tree_view_column_set_title(col, _("Effective"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1241
+        gtk_tree_view_column_set_reorderable(col, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1242
+        gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1243
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1244
+        renderer = gtk_cell_renderer_text_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1245
+        gtk_tree_view_column_pack_start(col, renderer, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1246
+        gtk_tree_view_column_add_attribute(col, renderer, "text", COL_EFFECTIVE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1247
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1248
+	gtk_container_add (GTK_CONTAINER(container), view);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1249
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1250
+	return view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1251
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1252
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1253
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1254
+acl_add_dialog_response_cb (GtkDialog *dialog,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1255
+			    gint       arg1,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1256
+			    gpointer   user_data)  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1257
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1258
+	gchar           *id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1259
+	GnomeVFSACE     *ace      = GNOME_VFS_ACE(user_data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1260
+	GnomeVFSACLPerm  perms[4] = {0, 0, 0, 0};
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1261
+	guint            iperm    = 0;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1262
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1263
+	GtkWidget *check_r = g_object_get_data (G_OBJECT(dialog), "check_r");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1264
+	GtkWidget *check_w = g_object_get_data (G_OBJECT(dialog), "check_w");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1265
+	GtkWidget *check_x = g_object_get_data (G_OBJECT(dialog), "check_x");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1266
+	GtkWidget *combo   = g_object_get_data (G_OBJECT(dialog), "combo");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1267
+	GtkWidget *entry   = g_object_get_data (G_OBJECT(dialog), "entry");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1268
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1269
+	if (arg1 == GTK_RESPONSE_CANCEL)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1270
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1271
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1272
+	/* Kind
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1273
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1274
+	switch (gtk_combo_box_get_active (GTK_COMBO_BOX(combo))) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1275
+	case COL_USER_ENTRY:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1276
+		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_USER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1277
+		break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1278
+/* 	case COL_NEG_USER_ENTRY: */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1279
+/* 		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_USER); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1280
+/* 		gnome_vfs_ace_set_negative (ace, TRUE); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1281
+/* 		break; */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1282
+	case COL_GROUP_ENTRY:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1283
+		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_GROUP);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1284
+		break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1285
+/* 	case COL_NEG_GROUP_ENTRY: */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1286
+/* 		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_GROUP); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1287
+/* 		gnome_vfs_ace_set_negative (ace, TRUE); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1288
+/* 		break; */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1289
+	default:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1290
+		break;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1291
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1292
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1293
+	/* ID
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1294
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1295
+	id = gtk_entry_get_text (GTK_ENTRY(entry));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1296
+	if (id != NULL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1297
+		gnome_vfs_ace_set_id (ace, id);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1298
+	} 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1299
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1300
+	/* Perms
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1301
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1302
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check_r))) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1303
+		perms[iperm] = GNOME_VFS_ACL_READ;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1304
+		iperm++;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1305
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1306
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check_w))) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1307
+		perms[iperm] = GNOME_VFS_ACL_WRITE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1308
+		iperm++;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1309
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1310
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(check_x))) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1311
+		perms[iperm] = GNOME_VFS_ACL_EXECUTE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1312
+		iperm++;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1313
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1314
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1315
+	gnome_vfs_ace_set_perms (ace, perms);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1316
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1317
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1318
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1319
+static GtkWidget *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1320
+build_new_add_acl_dialog  (FMPropertiesWindow *window, GnomeVFSACE *ace)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1321
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1322
+	GtkWidget *dialog;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1323
+	GtkWidget *table;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1324
+	GtkWidget *label;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1325
+	GtkWidget *check;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1326
+	GtkWidget *combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1327
+	GtkCellRenderer *renderer;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1328
+	GtkListStore *combo_store;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1329
+	GtkWidget *entry;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1330
+	GtkTreeIter iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1331
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1332
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1333
+	dialog = gtk_dialog_new_with_buttons (_("Add User/Group"),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1334
+					      GTK_WINDOW(window),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1335
+					      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1336
+					      GTK_STOCK_CANCEL,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1337
+					      GTK_RESPONSE_CANCEL,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1338
+					      GTK_STOCK_ADD,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1339
+					      GTK_RESPONSE_ACCEPT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1340
+					      NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1341
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1342
+	table = gtk_table_new (2, 6, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1343
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1344
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1345
+	label = gtk_label_new (_("User/Group"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1346
+	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1347
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1348
+	label = gtk_label_new (_("Name"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1349
+	gtk_table_attach (GTK_TABLE(table), label, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1350
+	label = gtk_label_new ("r");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1351
+	gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1352
+	label = gtk_label_new ("w");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1353
+	gtk_table_attach (GTK_TABLE(table), label, 3, 4, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1354
+	label = gtk_label_new ("x");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1355
+	gtk_table_attach (GTK_TABLE(table), label, 4, 5, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1356
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1357
+	label = gtk_label_new (_("Effective"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1358
+	gtk_table_attach (GTK_TABLE(table), label, 5, 6, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1359
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1360
+	combo_store = gtk_list_store_new (1, G_TYPE_STRING, NULL);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1361
+	gtk_list_store_append (combo_store , &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1362
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1363
+	gtk_list_store_set (combo_store, &iter, 0, _("User"), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1364
+/* 	gtk_list_store_append (combo_store , &iter); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1365
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1366
+/* 	gtk_list_store_set (combo_store, &iter, 0, _("User negative"), -1); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1367
+	gtk_list_store_append (combo_store , &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1368
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1369
+	gtk_list_store_set (combo_store, &iter, 0, _("Group"), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1370
+/* 	gtk_list_store_append (combo_store , &iter); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1371
+	/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1372
+/* 	gtk_list_store_set (combo_store, &iter, 0, _("Group negative"), -1); */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1373
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1374
+	combo = gtk_combo_box_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1375
+	g_object_set_data (G_OBJECT(dialog), "combo", combo);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1376
+	renderer = gtk_cell_renderer_text_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1377
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(combo), renderer, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1378
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT(combo),	renderer, "text", 0, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1379
+	gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL(combo_store));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1380
+	g_object_unref (G_OBJECT (combo_store));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1381
+	gtk_combo_box_set_active (combo, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1382
+	gtk_table_attach (GTK_TABLE(table), combo, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1383
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1384
+	entry = gtk_entry_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1385
+	g_object_set_data (G_OBJECT(dialog), "entry", entry);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1386
+	gtk_entry_set_max_length (GTK_ENTRY(entry), 64);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1387
+	gtk_table_attach (GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1388
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1389
+	check = gtk_check_button_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1390
+	g_object_set_data (G_OBJECT(dialog), "check_r", check);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1391
+	gtk_table_attach (GTK_TABLE(table), check, 2, 3, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1392
+	check = gtk_check_button_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1393
+	g_object_set_data (G_OBJECT(dialog), "check_w", check);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1394
+	gtk_table_attach (GTK_TABLE(table), check, 3, 4, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1395
+	check = gtk_check_button_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1396
+	g_object_set_data (G_OBJECT(dialog), "check_x", check);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1397
+	gtk_table_attach (GTK_TABLE(table), check, 4, 5, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1398
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1399
+	label = gtk_label_new (" - - - ");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1400
+	gtk_table_attach (GTK_TABLE(table), label, 5, 6, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1401
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1402
+	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1403
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1404
+	g_signal_connect_object (dialog, "response",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1405
+				 G_CALLBACK (acl_add_dialog_response_cb), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1406
+				 G_OBJECT (ace), 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1407
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1408
+	return dialog;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1409
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1410
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1411
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1412
+add_acl_callback_generic (GtkWidget *button, gpointer user_data, gboolean inherit)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1413
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1414
+	gint                result;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1415
+	GtkWidget          *dialog;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1416
+	GnomeVFSACL        *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1417
+	GnomeVFSACE        *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1418
+	NautilusFile       *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1419
+	FMPropertiesWindow *window = user_data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1420
+	GnomeVFSResult      re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1421
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1422
+	ace = gnome_vfs_ace_new (0, NULL, 0, GNOME_VFS_ACL_ALLOW, GNOME_VFS_ACL_SCHEME_CLASSIC);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1423
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1424
+	dialog = build_new_add_acl_dialog (window, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1425
+	gtk_widget_show_all (dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1426
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1427
+	result = gtk_dialog_run (dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1428
+	gtk_widget_destroy (dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1429
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1430
+	if (result == GTK_RESPONSE_CANCEL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1431
+		g_object_unref (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1432
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1433
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1434
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1435
+	gnome_vfs_ace_set_inherance (ace, inherit);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1436
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1437
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1438
+	acl  = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1439
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1440
+	gnome_vfs_acl_set (acl, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1441
+	g_object_unref (ace);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1442
+	g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1443
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1444
+	g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1445
+	re = nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1446
+				    acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1447
+				    window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1448
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1449
+	if (re != GNOME_VFS_OK)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1450
+		gnome_vfs_acl_unset (acl, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1451
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1452
+	update_acl_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1453
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1454
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1455
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1456
+add_acl_callback (GtkWidget *button, gpointer user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1457
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1458
+	add_acl_callback_generic (button, user_data, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1459
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1460
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1461
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1462
+add_acl_default_callback (GtkWidget *button, gpointer user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1463
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1464
+	add_acl_callback_generic (button, user_data, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1465
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1466
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1467
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1468
+del_acl_foreach_selected_generic (GtkTreeModel *model,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1469
+				  GtkTreePath *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1470
+				  GtkTreeIter *iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1471
+				  gpointer data,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1472
+				  gboolean is_default)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1473
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1474
+	GList *l, *i;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1475
+	gchar *row_id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1476
+	GList *file_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1477
+	gboolean row_r, row_w, row_x;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1478
+	GnomeVFSACLKind row_kind;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1479
+	FMPropertiesWindow *window = data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1480
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1481
+	/* Extract the information from the row
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1482
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1483
+	gtk_tree_model_get (model, iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1484
+			    COL_USER, &row_id, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1485
+			    COL_KIND, &row_kind,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1486
+			    COL_PERM_READ, &row_r,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1487
+			    COL_PERM_WRITE, &row_w,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1488
+			    COL_PERM_EXECUTE, &row_x,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1489
+			    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1490
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1491
+	if (row_kind == GNOME_VFS_ACL_MASK) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1492
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1493
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1494
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1495
+	/* Compare it with the ACEs
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1496
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1497
+	file_list = window->details->original_files;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1498
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1499
+	for (l = file_list; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1500
+		GnomeVFSACL *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1501
+		NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1502
+		GList *ace_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1503
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1504
+		file = NAUTILUS_FILE (l->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1505
+		acl = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1506
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1507
+		ace_list = gnome_vfs_acl_get_ace_list (acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1508
+		for (i=ace_list; i; i=i->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1509
+			const char            *id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1510
+			GnomeVFSACE           *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1511
+			const GnomeVFSACLPerm *perms;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1512
+			GnomeVFSACLKind        kind;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1513
+			gboolean               inherit;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1514
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1515
+			ace = i->data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1516
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1517
+			id       = gnome_vfs_ace_get_id (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1518
+			kind     = gnome_vfs_ace_get_kind (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1519
+			perms    = gnome_vfs_ace_get_perms (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1520
+			inherit  = gnome_vfs_ace_get_inherance (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1521
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1522
+			if ((kind != row_kind) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1523
+			    (inherit != is_default) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1524
+			    (row_r != gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ)) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1525
+			    (row_w != gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE)) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1526
+			    (row_x != gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE))) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1527
+			{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1528
+				continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1529
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1530
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1531
+			if (id && row_id && (strcmp (id, row_id) == 0)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1532
+				gnome_vfs_acl_unset (acl, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1533
+				
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1534
+				g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1535
+				nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1536
+						       acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1537
+						       window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1538
+			}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1539
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1540
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1541
+		gnome_vfs_acl_free_ace_list (ace_list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1542
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1543
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1544
+	/* Remove that list row
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1545
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1546
+	gtk_list_store_remove (model, iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1547
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1548
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1549
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1550
+del_acl_foreach_selected (GtkTreeModel *model,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1551
+			  GtkTreePath *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1552
+			  GtkTreeIter *iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1553
+			  gpointer data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1554
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1555
+	del_acl_foreach_selected_generic (model, path, iter, data, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1556
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1557
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1558
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1559
+del_acl_default_foreach_selected (GtkTreeModel *model,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1560
+				  GtkTreePath *path,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1561
+				  GtkTreeIter *iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1562
+				  gpointer data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1563
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1564
+	del_acl_foreach_selected_generic (model, path, iter, data, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1565
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1566
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1567
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1568
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1569
+remove_acl_callback (GtkWidget *button, gpointer user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1570
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1571
+	GtkTreeSelection *selection;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1572
+	FMPropertiesWindow *window = user_data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1573
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1574
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (window->details->acl_view));        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1575
+        gtk_tree_selection_selected_foreach (selection, del_acl_foreach_selected, window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1576
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1577
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1578
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1579
+remove_acl_default_callback (GtkWidget *button, gpointer user_data)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1580
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1581
+	GtkTreeSelection *selection;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1582
+	FMPropertiesWindow *window = user_data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1583
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1584
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (window->details->acl_default_view));        
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1585
+        gtk_tree_selection_selected_foreach (selection, del_acl_default_foreach_selected, window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1586
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1587
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1588
+static GnomeVFSACLScheme
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1589
+get_acl_scheme (GList *file_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1590
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1591
+	GList             *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1592
+	GnomeVFSACLScheme  scheme = GNOME_VFS_ACL_SCHEME_CLASSIC;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1593
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1594
+	for (l = file_list; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1595
+		GnomeVFSACL       *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1596
+		NautilusFile      *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1597
+		GnomeVFSACLScheme  acl_scheme;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1598
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1599
+		file = NAUTILUS_FILE (l->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1600
+		acl = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1601
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1602
+		acl_scheme = gnome_vfs_acl_get_scheme(acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1603
+		if (acl_scheme != GNOME_VFS_ACL_SCHEME_CLASSIC)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1604
+			scheme = acl_scheme;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1605
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1606
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1607
+	return scheme;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1608
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1609
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1610
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1611
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1612
+fix_acl_nfs4_tree_status (GtkTreeStore *tree_model, const char *path)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1613
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1614
+	gboolean     re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1615
+	GtkTreeIter  iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1616
+	GtkTreeIter  children; 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1617
+	const char  *name;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1618
+	gboolean     selected;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1619
+	gboolean     is_top_level;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1620
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1621
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1622
+	is_top_level = (strchr(path, ':') == NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1623
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1624
+	/* Handle top level node switchs
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1625
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1626
+	if (is_top_level) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1627
+		/* Check if the top level is selected
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1628
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1629
+		gtk_tree_model_get_iter_from_string (tree_model, &iter, path);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1630
+		gtk_tree_model_get (tree_model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1631
+				    NFS4_PERMISSIONS_NAME, &name,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1632
+				    NFS4_PERMISSIONS_SELECTED, &selected,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1633
+				    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1634
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1635
+		/* (Un)Select children
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1636
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1637
+		gtk_tree_model_iter_children (tree_model, &children, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1638
+		do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1639
+			gtk_tree_store_set (tree_model, &children, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1640
+					    NFS4_PERMISSIONS_SELECTED, selected,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1641
+					    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1642
+		} while (gtk_tree_model_iter_next (tree_model, &children));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1643
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1644
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1645
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1646
+	/* Set the inconsistent state to top level nodes
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1647
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1648
+ 	gtk_tree_model_get_iter_first (tree_model, &iter); 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1649
+	do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1650
+		guint nsel;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1651
+		guint nunsel;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1652
+		gboolean top_selected;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1653
+		gboolean inconsistent;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1654
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1655
+		gtk_tree_model_get (tree_model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1656
+				    NFS4_PERMISSIONS_SELECTED, &top_selected,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1657
+				    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1658
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1659
+		/* Check children
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1660
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1661
+		nsel   = 0;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1662
+		nunsel = 0;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1663
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1664
+		re = gtk_tree_model_iter_children (tree_model, &children, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1665
+		g_assert (re == TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1666
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1667
+		do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1668
+			const char *tmp;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1669
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1670
+			gtk_tree_model_get (tree_model, &children, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1671
+					    NFS4_PERMISSIONS_SELECTED, &selected,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1672
+					    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1673
+			if (selected) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1674
+				nsel++;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1675
+			else 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1676
+				nunsel++;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1677
+ 		} while (gtk_tree_model_iter_next (tree_model, &children));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1678
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1679
+		/* Set parent consistency
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1680
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1681
+		inconsistent = ((nsel > 0) && (nunsel > 0));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1682
+		gtk_tree_store_set (tree_model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1683
+				    NFS4_PERMISSIONS_INCONSISTENT, inconsistent,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1684
+				    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1685
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1686
+		/* If there is an unset entry, parent shouldn't be selected.
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1687
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1688
+		gtk_tree_store_set (tree_model, &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1689
+				    NFS4_PERMISSIONS_SELECTED, (nunsel <= 0),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1690
+				    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1691
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1692
+	} while (gtk_tree_model_iter_next (tree_model, &iter));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1693
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1694
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1695
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1696
+debug_print_ace_permissions (GnomeVFSACE *ace)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1697
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1698
+#define print_perm(s,g) \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1699
+	printf ("  %s/%d: %d\n", s, g, gnome_vfs_ace_check_perm(ace,g));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1700
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1701
+	printf ("ACE %p\n", ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1702
+	print_perm ("read", GNOME_VFS_ACL_READ);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1703
+	print_perm ("exec", GNOME_VFS_ACL_EXECUTE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1704
+	print_perm ("write", GNOME_VFS_ACL_WRITE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1705
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1706
+	print_perm ("list dir", GNOME_VFS_ACL_LIST_DIRECTORY);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1707
+	print_perm ("add file", GNOME_VFS_ACL_ADD_FILE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1708
+	print_perm ("append", GNOME_VFS_ACL_APPEND_DATA);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1709
+	print_perm ("add subdir", GNOME_VFS_ACL_ADD_SUBDIRECTORY);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1710
+	print_perm ("read named", GNOME_VFS_ACL_READ_NAMED_ATTRS);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1711
+	print_perm ("write named", GNOME_VFS_ACL_WRITE_NAMED_ATTRS);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1712
+	print_perm ("delete child", GNOME_VFS_ACL_DELETE_CHILD);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1713
+	print_perm ("read attr", GNOME_VFS_ACL_READ_ATTRIBUTES);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1714
+	print_perm ("write attr", GNOME_VFS_ACL_WRITE_ATTRIBUTES);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1715
+	print_perm ("del", GNOME_VFS_ACL_DELETE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1716
+	print_perm ("read acl", GNOME_VFS_ACL_READ_ACL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1717
+	print_perm ("write acl", GNOME_VFS_ACL_WRITE_ACL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1718
+	print_perm ("write owner", GNOME_VFS_ACL_WRITE_OWNER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1719
+#undef print_perm
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1720
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1721
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1722
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1723
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1724
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1725
+set_nfs4_permission_into_ace (FMPropertiesWindow *window,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1726
+			      GnomeVFSACE        *ace)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1727
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1728
+	GtkTreeView  *tree_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1729
+	GtkTreeModel *model;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1730
+	GtkTreeIter   iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1731
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1732
+	tree_view = g_object_get_data (window, "ace_permissions_tree_view");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1733
+	g_assert (GTK_IS_TREE_VIEW(tree_view));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1734
+	model = gtk_tree_view_get_model (tree_view);  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1735
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1736
+#define set_perm(p)                       \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1737
+  do {                                    \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1738
+    if (selected) {                       \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1739
+	gnome_vfs_ace_add_perm (ace, p);  \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1740
+    } else 	                          \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1741
+	gnome_vfs_ace_del_perm (ace, p);  \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1742
+  } while(0)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1743
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1744
+	gtk_tree_model_get_iter_first (model, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1745
+	do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1746
+		const char *name;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1747
+		gboolean    selected;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1748
+		GtkTreeIter iter_child;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1749
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1750
+		gtk_tree_model_get (model, &iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1751
+				    NFS4_PERMISSIONS_NAME, &name, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1752
+				    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1753
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1754
+		if (!gtk_tree_model_iter_children (model, &iter_child, &iter))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1755
+			continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1756
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1757
+		if (strcmp (name, ACL_NFS4_PERM_ADMIN) == 0) {			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1758
+			do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1759
+				gtk_tree_model_get (model, &iter_child, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1760
+						    NFS4_PERMISSIONS_NAME, &name, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1761
+						    NFS4_PERMISSIONS_SELECTED, &selected, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1762
+						    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1763
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1764
+				if (strcmp (name, ACL_NFS4_PERM_CHANGE_PERM) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1765
+					set_perm (GNOME_VFS_ACL_WRITE_ACL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1766
+				} else if (strcmp (name, ACL_NFS4_PERM_CHANGE_OWNER) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1767
+					set_perm (GNOME_VFS_ACL_WRITE_OWNER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1768
+				}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1769
+			} while (gtk_tree_model_iter_next (model, &iter_child));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1770
+		} else if (strcmp (name, ACL_NFS4_PERM_READ) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1771
+			do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1772
+				gtk_tree_model_get (model, &iter_child, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1773
+						    NFS4_PERMISSIONS_NAME, &name, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1774
+						    NFS4_PERMISSIONS_SELECTED, &selected, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1775
+						    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1776
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1777
+				if (strcmp (name, ACL_NFS4_PERM_READ_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1778
+					set_perm (GNOME_VFS_ACL_READ_ATTRIBUTES);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1779
+				} else if (strcmp (name, ACL_NFS4_PERM_READ_EXT_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1780
+					set_perm (GNOME_VFS_ACL_READ_NAMED_ATTRS);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1781
+				} else if (strcmp (name, ACL_NFS4_PERM_LIST_CONTENTS) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1782
+					set_perm (GNOME_VFS_ACL_READ);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1783
+				} else if (strcmp (name, ACL_NFS4_PERM_TRAVERSE_FOLDER) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1784
+					set_perm (GNOME_VFS_ACL_EXECUTE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1785
+				} else if (strcmp (name, ACL_NFS4_PERM_READ_PERMISSIONS) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1786
+					set_perm (GNOME_VFS_ACL_READ_ACL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1787
+				}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1788
+			} while (gtk_tree_model_iter_next (model, &iter_child));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1789
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1790
+		} else if (strcmp (name, ACL_NFS4_PERM_WRITE) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1791
+			do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1792
+				gtk_tree_model_get (model, &iter_child, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1793
+						    NFS4_PERMISSIONS_NAME, &name, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1794
+						    NFS4_PERMISSIONS_SELECTED, &selected, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1795
+						    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1796
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1797
+				if (strcmp (name, ACL_NFS4_PERM_WRITE_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1798
+					set_perm (GNOME_VFS_ACL_WRITE_ATTRIBUTES);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1799
+				} else if (strcmp (name, ACL_NFS4_PERM_WRITE_EXT_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1800
+					set_perm (GNOME_VFS_ACL_WRITE_NAMED_ATTRS);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1801
+				} else if (strcmp (name, ACL_NFS4_PERM_CREATE_FILES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1802
+					set_perm (GNOME_VFS_ACL_ADD_SUBDIRECTORY);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1803
+				} else if (strcmp (name, ACL_NFS4_PERM_CREATE_FOLDER) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1804
+					set_perm (GNOME_VFS_ACL_APPEND_DATA);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1805
+				} else if (strcmp (name, ACL_NFS4_PERM_DELETE) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1806
+					set_perm (GNOME_VFS_ACL_DELETE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1807
+				} else if (strcmp (name, ACL_NFS4_PERM_DELETE_SUBFOLDERS) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1808
+					set_perm (GNOME_VFS_ACL_DELETE_CHILD);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1809
+				}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1810
+			} while (gtk_tree_model_iter_next (model, &iter_child));			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1811
+		} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1812
+			g_error ("Unknown entry: '%s'\n", name?name:"");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1813
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1814
+	} while (gtk_tree_model_iter_next (model, &iter));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1815
+#undef set_perm
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1816
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1817
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1818
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1819
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1820
+set_nfs4_permission_from_ace (FMPropertiesWindow *window,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1821
+			      GnomeVFSACE        *ace)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1822
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1823
+	GtkTreeIter   iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1824
+	GtkTreeView  *tree_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1825
+	GtkTreeModel *model;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1826
+	GnomeVFSACLInherance inherance;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1827
+	GnomeVFSACLType type;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1828
+	GtkWidget    *combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1829
+	const char   *name;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1830
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1831
+	g_assert (GNOME_VFS_IS_ACE(ace));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1832
+	g_assert (FM_IS_PROPERTIES_WINDOW(window));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1833
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1834
+	tree_view = g_object_get_data (window, "ace_permissions_tree_view");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1835
+	g_assert (GTK_IS_TREE_VIEW(tree_view));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1836
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1837
+	gtk_widget_set_sensitive (g_object_get_data (window, "ace_props_frame"), TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1838
+	gtk_widget_set_sensitive (g_object_get_data (window, "acl_list_add_button"), TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1839
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1840
+	/* Set the permissions
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1841
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1842
+	model = gtk_tree_view_get_model (tree_view);  
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1843
+	gtk_tree_model_get_iter_first (model, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1844
+	do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1845
+		const char *name;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1846
+		GtkTreeIter   iter_child;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1847
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1848
+		gtk_tree_model_get (model, &iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1849
+				    NFS4_PERMISSIONS_NAME, &name, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1850
+				    -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1851
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1852
+		if (!gtk_tree_model_iter_children (model, &iter_child, &iter))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1853
+			continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1854
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1855
+		if (strcmp (name, ACL_NFS4_PERM_ADMIN) == 0) {			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1856
+			do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1857
+				gtk_tree_model_get (model, &iter_child, NFS4_PERMISSIONS_NAME, &name, -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1858
+				if (strcmp (name, ACL_NFS4_PERM_CHANGE_PERM) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1859
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1860
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_ACL), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1861
+				} else if (strcmp (name, ACL_NFS4_PERM_CHANGE_OWNER) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1862
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1863
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_OWNER), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1864
+				}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1865
+			} while (gtk_tree_model_iter_next (model, &iter_child));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1866
+		} else if (strcmp (name, ACL_NFS4_PERM_READ) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1867
+			do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1868
+				gtk_tree_model_get (model, &iter_child, NFS4_PERMISSIONS_NAME, &name, -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1869
+				if (strcmp (name, ACL_NFS4_PERM_READ_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1870
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1871
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ_ATTRIBUTES), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1872
+				} else if (strcmp (name, ACL_NFS4_PERM_READ_EXT_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1873
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1874
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ_NAMED_ATTRS), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1875
+				} else if (strcmp (name, ACL_NFS4_PERM_LIST_CONTENTS) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1876
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1877
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1878
+				} else if (strcmp (name, ACL_NFS4_PERM_TRAVERSE_FOLDER) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1879
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1880
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_EXECUTE), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1881
+				} else if (strcmp (name, ACL_NFS4_PERM_READ_PERMISSIONS) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1882
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1883
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_READ_ACL), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1884
+				}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1885
+			} while (gtk_tree_model_iter_next (model, &iter_child));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1886
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1887
+		} else if (strcmp (name, ACL_NFS4_PERM_WRITE) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1888
+			do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1889
+				gtk_tree_model_get (model, &iter_child, NFS4_PERMISSIONS_NAME, &name, -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1890
+				if (strcmp (name, ACL_NFS4_PERM_WRITE_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1891
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1892
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_ATTRIBUTES), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1893
+				} else if (strcmp (name, ACL_NFS4_PERM_WRITE_EXT_ATTRIBUTES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1894
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1895
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_WRITE_NAMED_ATTRS), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1896
+				} else if (strcmp (name, ACL_NFS4_PERM_CREATE_FILES) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1897
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1898
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_ADD_SUBDIRECTORY), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1899
+				} else if (strcmp (name, ACL_NFS4_PERM_CREATE_FOLDER) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1900
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1901
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_APPEND_DATA), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1902
+				} else if (strcmp (name, ACL_NFS4_PERM_DELETE) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1903
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1904
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_DELETE), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1905
+				} else if (strcmp (name, ACL_NFS4_PERM_DELETE_SUBFOLDERS) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1906
+					gtk_tree_store_set (model, &iter_child, NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1907
+							    gnome_vfs_ace_check_perm (ace, GNOME_VFS_ACL_DELETE_CHILD), -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1908
+				}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1909
+			} while (gtk_tree_model_iter_next (model, &iter_child));			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1910
+		} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1911
+			g_error ("Unknown entry: '%s'\n", name?name:"");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1912
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1913
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1914
+		fix_acl_nfs4_tree_status (model, ":");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1915
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1916
+	} while (gtk_tree_model_iter_next (model, &iter));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1917
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1918
+	/* Set Inherance
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1919
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1920
+	inherance = gnome_vfs_ace_get_inherance (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1921
+	combo     = g_object_get_data (window, "acl_nfs4_inherance_combo");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1922
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1923
+	model = gtk_combo_box_get_model(combo);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1924
+	gtk_tree_model_get_iter_first (model, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1925
+	do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1926
+		gtk_tree_model_get (model, &iter, 0, &name, -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1927
+		if (((!strcmp (name, ACL_NFS4_APPLY_TO_THIS_FOLDER))     && (inherance == GNOME_VFS_ACL_NO_PROPAGATE)) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1928
+		    ((!strcmp (name, ACL_NFS4_APPLY_TO_CHILD_FOLDERS))   && (inherance == GNOME_VFS_ACL_DIR_INHERIT))  ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1929
+		    ((!strcmp (name, ACL_NFS4_APPLY_TO_CHILD_FILES))     && (inherance == GNOME_VFS_ACL_FILE_INHERIT)) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1930
+		    ((!strcmp (name, ACL_NFS4_APPLY_TO_ALL_DESCENDANTS)) && (inherance == GNOME_VFS_ACL_INHERIT_ONLY)))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1931
+			gtk_combo_box_set_active_iter (combo, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1932
+	} while (gtk_tree_model_iter_next (model, &iter));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1933
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1934
+	/* Set type
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1935
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1936
+	type  = gnome_vfs_ace_get_ace_type (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1937
+	combo = g_object_get_data (window, "acl_nfs4_type_combo");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1938
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1939
+	model = gtk_combo_box_get_model(combo);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1940
+	gtk_tree_model_get_iter_first (model, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1941
+	do {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1942
+		gtk_tree_model_get (model, &iter, 0, &name, -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1943
+		if (((!strcmp (name, ACL_NFS4_TYPE_ALLOW)) && (type == GNOME_VFS_ACL_ALLOW)) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1944
+		    ((!strcmp (name, ACL_NFS4_TYPE_DENY))  && (type == GNOME_VFS_ACL_DENY)))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1945
+			gtk_combo_box_set_active_iter (combo, &iter);			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1946
+	} while (gtk_tree_model_iter_next (model, &iter));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1947
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1948
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1949
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1950
+static GnomeVFSACE *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1951
+acl_nfs4_acl_list_get_active_ace (FMPropertiesWindow  *window, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1952
+				  GnomeVFSACL        **acl_ret,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1953
+				  GList              **ace_list_ret)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1954
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1955
+	gint              re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1956
+	GtkTreeView      *tree_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1957
+	GtkTreeModel     *model;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1958
+	GtkTreeSelection *selection;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1959
+	GtkTreeIter       iter;	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1960
+	const char *id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1961
+	const char *name;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1962
+	const char *type_str;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1963
+	GnomeVFSACLType type;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1964
+	GnomeVFSACLKind kind;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1965
+	NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1966
+	GnomeVFSACL  *file_acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1967
+	GList *ace_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1968
+	GList *i;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1969
+	GnomeVFSACE  *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1970
+	GnomeVFSACE  *the_ace = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1971
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1972
+	tree_view = g_object_get_data (window, "acl_list_tree_view");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1973
+	selection = gtk_tree_view_get_selection (tree_view);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1974
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1975
+	re = gtk_tree_selection_get_selected (selection, &model, &iter);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1976
+	if (!re) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1977
+		return NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1978
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1979
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1980
+	gtk_tree_model_get (model, &iter,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1981
+			    NFS4_ACL_LIST_USER, &name,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1982
+			    NFS4_ACL_LIST_TYPE, &type_str,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1983
+			    NFS4_ACL_LIST_KIND, &kind,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1984
+			    -1);		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1985
+	/* Type
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1986
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1987
+	if (strcmp (type_str, ACL_NFS4_TYPE_DENY) == 0) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1988
+		type = GNOME_VFS_ACL_DENY;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1989
+	} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1990
+		type = GNOME_VFS_ACL_ALLOW;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1991
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1992
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1993
+	/* Look for the right ACE
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1994
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1995
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1996
+	file_acl = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1997
+	ace_list = gnome_vfs_acl_get_ace_list (file_acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1998
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  1999
+	*acl_ret      = file_acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2000
+	*ace_list_ret = ace_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2001
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2002
+	for (i=ace_list; i; i=i->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2003
+		ace = i->data;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2004
+		g_assert (GNOME_VFS_IS_ACE(ace));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2005
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2006
+		id = gnome_vfs_ace_get_id (ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2007
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2008
+		if (gnome_vfs_ace_get_ace_type(ace) != type)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2009
+			continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2010
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2011
+		if (gnome_vfs_ace_get_kind (ace) != kind)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2012
+			continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2013
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2014
+		if ((kind == GNOME_VFS_ACL_USER) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2015
+		    (kind == GNOME_VFS_ACL_GROUP))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2016
+		{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2017
+			if (strcmp (name, id) != 0)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2018
+				continue;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2019
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2020
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2021
+		return ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2022
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2023
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2024
+	return NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2025
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2026
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2027
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2028
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2029
+nfs4_permission_toggled_cb (GtkCellRendererToggle *cellrenderertoggle, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2030
+			    gchar                 *path, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2031
+			    FMPropertiesWindow    *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2032
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2033
+	gint          re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2034
+	GtkTreeIter   iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2035
+	GtkTreeStore *tree_model;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2036
+	GValue        value;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2037
+	gboolean      old;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2038
+	GtkTreeView  *tree_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2039
+	NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2040
+	GnomeVFSACL  *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2041
+	GnomeVFSACE  *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2042
+	GList        *list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2043
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2044
+	g_assert (path != NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2045
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2046
+	/* Get find the iter
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2047
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2048
+	tree_view = g_object_get_data (window, "ace_permissions_tree_view");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2049
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2050
+	tree_model = gtk_tree_view_get_model (tree_view);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2051
+	g_return_if_fail (GTK_IS_TREE_MODEL (tree_model));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2052
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2053
+	re = gtk_tree_model_get_iter_from_string (tree_model, &iter, path);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2054
+	if (re != TRUE) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2055
+		g_warning ("Couldn't access path %s\n", path);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2056
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2057
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2058
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2059
+	/* Read the value
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2060
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2061
+	memset (&value, 0, sizeof(value));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2062
+	gtk_tree_model_get_value (tree_model, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2063
+				  &iter, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2064
+				  NFS4_PERMISSIONS_SELECTED, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2065
+				  &value);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2066
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2067
+	old = g_value_get_boolean (&value);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2068
+	g_value_unset (&value);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2069
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2070
+	/* Set the new value
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2071
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2072
+	gtk_tree_store_set (GTK_TREE_STORE(tree_model), &iter, NFS4_PERMISSIONS_SELECTED, !old, -1);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2073
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2074
+	/* Now that the state has change, check that everething is
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2075
+	 * still coherent.
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2076
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2077
+	fix_acl_nfs4_tree_status (tree_model, path);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2078
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2079
+	/* Apply the changes to the NautilusFile
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2080
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2081
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2082
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2083
+	ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2084
+	if (!ace) return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2085
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2086
+	set_nfs4_permission_into_ace (window, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2087
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2088
+	g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2089
+	re = nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2090
+				    acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2091
+				    window);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2092
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2093
+//	gnome_vfs_acl_free_ace_list (list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2094
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2095
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2096
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2097
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2098
+acl_nfs4_acl_list_selection_changed_cb (GtkTreeSelection   *selection,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2099
+					FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2100
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2101
+	GList        *list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2102
+	GnomeVFSACL  *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2103
+	GnomeVFSACE  *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2104
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2105
+	window->details->updating_acl_tab = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2106
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2107
+	g_assert (GTK_IS_TREE_SELECTION(selection));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2108
+	g_assert (FM_IS_PROPERTIES_WINDOW(window));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2109
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2110
+	ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2111
+	if (!ace) goto out;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2112
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2113
+	set_nfs4_permission_from_ace (window, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2114
+	gnome_vfs_acl_free_ace_list (list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2115
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2116
+out:
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2117
+	window->details->updating_acl_tab = FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2118
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2119
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2120
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2121
+static GtkWidget *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2122
+create_acl_nfs4_permission_tree (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2123
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2124
+	GtkTreeView  *tree_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2125
+	GtkTreeStore *tree_store;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2126
+	GtkTreeIter   iter;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2127
+	GtkTreeIter   iter_child;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2128
+	GtkTreeViewColumn *column;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2129
+	GtkCellRenderer *checkbox_renderer;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2130
+	GtkCellRenderer *text_renderer;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2131
+	GtkTreeSelection *selection;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2132
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2133
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2134
+	/* Create the tree view widget
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2135
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2136
+	tree_view = gtk_tree_view_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2137
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2138
+	/* Create the model
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2139
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2140
+	tree_store = gtk_tree_store_new (NFS4_PERMISSIONS_N_COLUMNS, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2141
+					 G_TYPE_BOOLEAN,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2142
+					 G_TYPE_STRING,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2143
+					 G_TYPE_BOOLEAN);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2144
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2145
+	gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL(tree_store));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2146
+	g_object_unref (tree_store);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2147
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2148
+	/* Add a few examples
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2149
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2150
+#define list_add_child(str)                                      \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2151
+	list_add (str, &iter_child, &iter)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2152
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2153
+#define list_add(str, iter_child, iter)                          \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2154
+	gtk_tree_store_append (tree_store, iter_child, iter);    \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2155
+	gtk_tree_store_set (tree_store, iter_child,              \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2156
+			    NFS4_PERMISSIONS_SELECTED, FALSE,    \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2157
+			    NFS4_PERMISSIONS_NAME, (str),        \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2158
+			    NFS4_PERMISSIONS_INCONSISTENT, FALSE,\
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2159
+			    -1)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2160
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2161
+	list_add (_("Administration"), &iter, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2162
+	list_add_child (_("Change Permissions"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2163
+	list_add_child (_("Change Owner"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2164
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2165
+	list_add (_("Read"), &iter, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2166
+	list_add_child (_("Read Attributes"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2167
+	list_add_child (_("Read Extended Attributes"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2168
+	list_add_child (_("List Folder Contents (Read Data)"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2169
+	list_add_child (_("Traverse Folder (Execute File)"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2170
+	list_add_child (_("Read Permissions"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2171
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2172
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2173
+	list_add (_("Write"), &iter, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2174
+	list_add_child (_("Write Attributes"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2175
+	list_add_child (_("Write Extended Attributes"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2176
+	list_add_child (_("Create Files (Write Data)"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2177
+	list_add_child (_("Create Folder (Append Data)"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2178
+	list_add_child (_("Delete"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2179
+	list_add_child (_("Delete Subfolders and Files"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2180
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2181
+#undef list_add
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2182
+#undef list_add_child
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2183
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2184
+	/* Add the columns
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2185
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2186
+	text_renderer = gtk_cell_renderer_text_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2187
+	checkbox_renderer = gtk_cell_renderer_toggle_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2188
+	g_signal_connect (checkbox_renderer, 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2189
+			  "toggled", 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2190
+			  G_CALLBACK(nfs4_permission_toggled_cb), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2191
+			  window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2192
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2193
+	column = gtk_tree_view_column_new_with_attributes (_("Set"), checkbox_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2194
+							   "active", NFS4_PERMISSIONS_SELECTED,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2195
+							   "inconsistent", NFS4_PERMISSIONS_INCONSISTENT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2196
+							   NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2197
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2198
+	gtk_tree_view_append_column (tree_view, column);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2199
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2200
+	column = gtk_tree_view_column_new_with_attributes (_("Permission"), text_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2201
+							   "text", NFS4_PERMISSIONS_NAME,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2202
+							   NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2203
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2204
+	gtk_tree_view_append_column (tree_view, column);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2205
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2206
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2207
+	/* Final steps
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2208
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2209
+#if 0
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2210
+	gtk_tree_view_expand_all (tree_view);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2211
+#endif
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2212
+	return GTK_WIDGET(tree_view);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2213
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2214
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2215
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2216
+static GtkWidget *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2217
+create_acl_nfs4_acl_list (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2218
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2219
+	GtkListStore *list_store;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2220
+	GtkTreeView  *tree_view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2221
+	GtkCellRenderer *text_renderer;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2222
+	GtkCellRenderer *pixbuf_renderer;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2223
+	GtkTreeViewColumn *column;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2224
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2225
+	/* Instance the store and the tree_view
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2226
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2227
+	tree_view = gtk_tree_view_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2228
+	list_store = gtk_list_store_new (NFS4_ACL_LIST_N_COLUMNS,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2229
+					 G_TYPE_STRING,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2230
+					 GDK_TYPE_PIXBUF,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2231
+					 G_TYPE_STRING,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2232
+					 G_TYPE_INT);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2233
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2234
+	gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL(list_store));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2235
+	g_object_unref (list_store);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2236
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2237
+	/* Add columns
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2238
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2239
+	text_renderer = gtk_cell_renderer_text_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2240
+	pixbuf_renderer = gtk_cell_renderer_pixbuf_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2241
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2242
+        column = gtk_tree_view_column_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2243
+        gtk_tree_view_column_set_title (column, _("Name"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2244
+        gtk_tree_view_column_set_reorderable (column, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2245
+        gtk_tree_view_column_set_resizable (column, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2246
+        gtk_tree_view_append_column (GTK_TREE_VIEW(tree_view), column);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2247
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2248
+        gtk_tree_view_column_pack_start(column, pixbuf_renderer, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2249
+        gtk_tree_view_column_add_attribute(column, pixbuf_renderer, "pixbuf", NFS4_ACL_LIST_ICON);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2250
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2251
+        gtk_tree_view_column_pack_start(column, text_renderer, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2252
+        gtk_tree_view_column_add_attribute(column, text_renderer, "text", NFS4_ACL_LIST_USER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2253
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2254
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2255
+	text_renderer = gtk_cell_renderer_text_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2256
+	column = gtk_tree_view_column_new_with_attributes (_("Type"), text_renderer,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2257
+							   "text", NFS4_ACL_LIST_TYPE,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2258
+							   NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2259
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2260
+	gtk_tree_view_append_column (tree_view, column);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2261
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2262
+	/* Events
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2263
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2264
+        g_signal_connect_after (G_OBJECT (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view))),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2265
+				"changed", G_CALLBACK(acl_nfs4_acl_list_selection_changed_cb), window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2266
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2267
+	return GTK_WIDGET(tree_view);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2268
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2269
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2270
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2271
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2272
+acl_nfs4_inherance_changed_cb (GtkComboBox *widget,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2273
+			       FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2274
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2275
+	guint         re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2276
+	GList        *list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2277
+	GnomeVFSACL  *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2278
+	GnomeVFSACE  *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2279
+	GnomeVFSACLInherance inherance;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2280
+	const char   *active;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2281
+	NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2282
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2283
+	if (window->details->updating_acl_tab)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2284
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2285
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2286
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2287
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2288
+	ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2289
+	if (!ace) return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2290
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2291
+	active = gtk_combo_box_get_active_text (widget);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2292
+	if (!active) return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2293
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2294
+	if (!strcmp (active, ACL_NFS4_APPLY_TO_THIS_FOLDER)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2295
+		inherance = GNOME_VFS_ACL_NO_PROPAGATE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2296
+	} else if (!strcmp (active, ACL_NFS4_APPLY_TO_CHILD_FOLDERS)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2297
+		inherance = GNOME_VFS_ACL_DIR_INHERIT;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2298
+	} else if (!strcmp (active, ACL_NFS4_APPLY_TO_CHILD_FILES)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2299
+		inherance = GNOME_VFS_ACL_FILE_INHERIT;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2300
+	} else if (!strcmp (active, ACL_NFS4_APPLY_TO_ALL_DESCENDANTS)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2301
+		inherance = GNOME_VFS_ACL_INHERIT_ONLY;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2302
+	} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2303
+		inherance = GNOME_VFS_ACL_INHERANCE_NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2304
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2305
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2306
+	gnome_vfs_ace_set_inherance (ace, inherance);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2307
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2308
+	g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2309
+	re = nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2310
+				    acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2311
+				    window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2312
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2313
+//	gnome_vfs_acl_free_ace_list (list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2314
+	update_acl_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2315
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2316
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2317
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2318
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2319
+build_new_add_acl_nfs4_dialog_who_changed_cb (GtkComboBox *widget,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2320
+					      GtkWidget   *dialog)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2321
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2322
+	gboolean    hide;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2323
+	const char *text;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2324
+	GtkWidget  *entry;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2325
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2326
+	entry = g_object_get_data (dialog, "id_text");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2327
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2328
+	text = gtk_combo_box_get_active_text(widget);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2329
+	if (!text) return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2330
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2331
+	hide = ((!strcmp(text, ACL_NFS4_WHO_OWNER_USER)) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2332
+		(!strcmp(text, ACL_NFS4_WHO_OWNER_GROUP)) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2333
+		(!strcmp(text, ACL_NFS4_WHO_EVERYBODY)));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2334
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2335
+	gtk_widget_set_sensitive (entry, !hide);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2336
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2337
+	if (hide)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2338
+		gtk_entry_set_text (entry, "");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2339
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2340
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2341
+static GtkWidget *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2342
+build_new_add_acl_nfs4_dialog (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2343
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2344
+	GtkWidget *dialog;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2345
+	GtkWidget *table;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2346
+	GtkWidget *label;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2347
+	GtkWidget *who_combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2348
+	GtkWidget *sense_combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2349
+	GtkWidget *id;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2350
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2351
+	dialog = gtk_dialog_new_with_buttons (_("Add User/Group"),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2352
+					      GTK_WINDOW(window),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2353
+					      GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2354
+					      GTK_STOCK_CANCEL,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2355
+					      GTK_RESPONSE_CANCEL,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2356
+					      GTK_STOCK_ADD,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2357
+					      GTK_RESPONSE_ACCEPT,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2358
+					      NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2359
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2360
+	table = gtk_table_new (2, 6, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2361
+	gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2362
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2363
+	label = gtk_label_new (_("Sense"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2364
+	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2365
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2366
+	label = gtk_label_new (_("Who"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2367
+	gtk_table_attach (GTK_TABLE(table), label, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2368
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2369
+	label = gtk_label_new (_("ID"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2370
+	gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2371
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2372
+	sense_combo = gtk_combo_box_new_text();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2373
+	gtk_combo_box_append_text(sense_combo, ACL_NFS4_TYPE_ALLOW);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2374
+	gtk_combo_box_append_text(sense_combo, ACL_NFS4_TYPE_DENY);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2375
+	gtk_table_attach (GTK_TABLE(table), sense_combo, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 6, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2376
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2377
+	who_combo = gtk_combo_box_new_text();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2378
+	gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_OWNER_USER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2379
+	gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_OWNER_GROUP);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2380
+	gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_USER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2381
+	gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_GROUP);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2382
+	gtk_combo_box_append_text(who_combo, ACL_NFS4_WHO_EVERYBODY);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2383
+	gtk_table_attach (GTK_TABLE(table), who_combo, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 6, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2384
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2385
+	id = gtk_entry_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2386
+	gtk_table_attach (GTK_TABLE(table), id, 2, 3, 1, 2, GTK_SHRINK, GTK_SHRINK, 6, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2387
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2388
+	/* Initial state
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2389
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2390
+	gtk_combo_box_set_active (who_combo, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2391
+	gtk_combo_box_set_active (sense_combo, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2392
+	gtk_widget_set_sensitive(id, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2393
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2394
+	/* Pointers
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2395
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2396
+	g_object_set_data (dialog, "sense_combo", sense_combo);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2397
+	g_object_set_data (dialog, "who_combo", who_combo);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2398
+	g_object_set_data (dialog, "id_text", id);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2399
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2400
+	/* Events
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2401
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2402
+	g_signal_connect (G_OBJECT(who_combo), "changed", 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2403
+			  G_CALLBACK(build_new_add_acl_nfs4_dialog_who_changed_cb), dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2404
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2405
+	return dialog;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2406
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2407
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2408
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2409
+acl_nfs4_add_button_cb (GtkButton *button,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2410
+			FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2411
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2412
+	gint                re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2413
+	gint                result;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2414
+	GnomeVFSACL        *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2415
+	GnomeVFSACE        *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2416
+	NautilusFile       *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2417
+	GtkWidget          *dialog;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2418
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2419
+	GtkWidget          *sense_combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2420
+	GtkWidget          *who_combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2421
+	const char         *combo_text;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2422
+	gboolean            read_id = FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2423
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2424
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2425
+	acl  = nautilus_file_get_acl (file);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2426
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2427
+	dialog = build_new_add_acl_nfs4_dialog (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2428
+	gtk_widget_show_all (dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2429
+	result = gtk_dialog_run (dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2430
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2431
+	if (result == GTK_RESPONSE_CANCEL) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2432
+		gtk_widget_destroy (dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2433
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2434
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2435
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2436
+	ace = gnome_vfs_ace_new (0, NULL, 0, GNOME_VFS_ACL_ALLOW, GNOME_VFS_ACL_SCHEME_NFS4);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2437
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2438
+	/* Read Type
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2439
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2440
+	sense_combo = g_object_get_data (dialog, "sense_combo");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2441
+	combo_text = gtk_combo_box_get_active_text (sense_combo);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2442
+	if (!strcmp(combo_text, ACL_NFS4_TYPE_DENY)) 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2443
+		gnome_vfs_ace_set_ace_type (ace, GNOME_VFS_ACL_DENY);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2444
+	else 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2445
+		gnome_vfs_ace_set_ace_type (ace, GNOME_VFS_ACL_ALLOW);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2446
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2447
+	/* Read Kind
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2448
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2449
+	who_combo = g_object_get_data (dialog, "who_combo");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2450
+	combo_text = gtk_combo_box_get_active_text (who_combo);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2451
+	if (!strcmp(combo_text, ACL_NFS4_WHO_OWNER_USER))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2452
+		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_OWNER_USER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2453
+	else if (!strcmp(combo_text, ACL_NFS4_WHO_OWNER_GROUP))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2454
+		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_OWNER_GROUP);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2455
+	else if (!strcmp(combo_text, ACL_NFS4_WHO_EVERYBODY))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2456
+		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_EVERYONE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2457
+	else if (!strcmp(combo_text, ACL_NFS4_WHO_USER)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2458
+		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_USER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2459
+		read_id = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2460
+	} else if (!strcmp(combo_text, ACL_NFS4_WHO_GROUP)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2461
+		gnome_vfs_ace_set_kind (ace, GNOME_VFS_ACL_GROUP);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2462
+		read_id = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2463
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2464
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2465
+	/* ID
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2466
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2467
+	if (read_id) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2468
+		GtkWidget *id_text = g_object_get_data (dialog, "id_text");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2469
+		combo_text = gtk_entry_get_text(id_text);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2470
+		if ((combo_text) && strlen(combo_text))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2471
+			gnome_vfs_ace_set_id (ace, combo_text);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2472
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2473
+       
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2474
+	gnome_vfs_acl_set (acl, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2475
+	g_object_unref (ace);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2476
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2477
+	g_object_ref (window);	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2478
+	re = nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2479
+				    acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2480
+				    window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2481
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2482
+	if (re != GNOME_VFS_OK)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2483
+		gnome_vfs_acl_unset (acl, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2484
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2485
+	update_acl_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2486
+	gtk_widget_destroy (dialog);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2487
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2488
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2489
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2490
+acl_nfs4_del_button_cb (GtkButton *button,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2491
+			FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2492
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2493
+	gint          re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2494
+	GList        *list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2495
+	GnomeVFSACL  *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2496
+	GnomeVFSACE  *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2497
+	NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2498
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2499
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2500
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2501
+	ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2502
+	if (!ace) return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2503
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2504
+	gnome_vfs_acl_unset (acl, ace);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2505
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2506
+	g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2507
+	re = nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2508
+				    acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2509
+				    window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2510
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2511
+//	gnome_vfs_acl_free_ace_list (list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2512
+	update_acl_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2513
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2514
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2515
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2516
+acl_nfs4_type_changed_cb (GtkComboBox *widget,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2517
+			  FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2518
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2519
+	guint         re;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2520
+	GList        *list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2521
+	GnomeVFSACL  *acl;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2522
+	GnomeVFSACE  *ace;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2523
+	const char *active;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2524
+	NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2525
+	GnomeVFSACLType type;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2526
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2527
+	if (window->details->updating_acl_tab) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2528
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2529
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2530
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2531
+	file = get_target_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2532
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2533
+	ace = acl_nfs4_acl_list_get_active_ace (window, &acl, &list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2534
+	if (!ace) return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2535
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2536
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2537
+	active = gtk_combo_box_get_active_text (widget);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2538
+	if (!active) return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2539
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2540
+	if (!strcmp (active, ACL_NFS4_TYPE_DENY))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2541
+		type = GNOME_VFS_ACL_DENY;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2542
+	else 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2543
+		type = GNOME_VFS_ACL_ALLOW;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2544
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2545
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2546
+	gnome_vfs_ace_set_ace_type(ace, type);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2547
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2548
+	g_object_ref (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2549
+	re = nautilus_file_set_acl (file, acl,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2550
+				    acl_change_callback,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2551
+				    window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2552
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2553
+//	gnome_vfs_acl_free_ace_list (list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2554
+	update_acl_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2555
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2556
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2557
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2558
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2559
+create_acl_page_nfs4 (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2560
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2561
+	GtkWidget *hpaned;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2562
+	GtkWidget *vbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2563
+	GtkWidget *vbox_acl_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2564
+	GtkWidget *acl_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2565
+	GtkWidget *perms;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2566
+	GtkWidget *props_vbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2567
+	GtkWidget *props_hbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2568
+	GtkWidget *buttons_hbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2569
+	GtkWidget *inherance_combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2570
+	GtkWidget *type_combo;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2571
+	GtkWidget *button_add;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2572
+	GtkWidget *button_remove;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2573
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2574
+	/* Load the icons
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2575
+	 */ 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2576
+	window->details->acl_icons[COL_ICON_USER]      = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/user.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2577
+	window->details->acl_icons[COL_ICON_NEG_USER]  = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/user_neg.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2578
+	window->details->acl_icons[COL_ICON_GROUP]     = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/group.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2579
+	window->details->acl_icons[COL_ICON_NEG_GROUP] = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/group_neg.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2580
+	window->details->acl_icons[COL_ICON_MASK]      = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/mask.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2581
+	window->details->acl_icons[COL_ICON_OTHER]     = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/other.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2582
+	window->details->acl_icons[COL_ICON_NEG_OTHER] = gdk_pixbuf_new_from_file (DATADIR"/pixmaps/nautilus/other_neg.png", NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2583
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2584
+	/* Panel
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2585
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2586
+	hpaned = gtk_hpaned_new ();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2587
+	vbox = create_page_with_vbox (window->details->notebook,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2588
+				      /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2589
+				      _("Access List"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2590
+	gtk_box_pack_start (GTK_BOX (vbox), hpaned, TRUE, TRUE, 0);			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2591
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2592
+	/* Add ACL 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2593
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2594
+	acl_list = create_acl_nfs4_acl_list (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2595
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2596
+	buttons_hbox = gtk_hbox_new(TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2597
+	button_add    = gtk_button_new_from_stock (GTK_STOCK_ADD);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2598
+	button_remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2599
+	gtk_box_pack_start (GTK_BOX(buttons_hbox), button_add, FALSE, TRUE, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2600
+	gtk_box_pack_end   (GTK_BOX(buttons_hbox), button_remove, FALSE, TRUE, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2601
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2602
+	vbox_acl_list = gtk_vbox_new(FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2603
+	gtk_box_pack_start (GTK_BOX(vbox_acl_list), acl_list, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2604
+	gtk_box_pack_start (GTK_BOX(vbox_acl_list), buttons_hbox, FALSE, FALSE, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2605
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2606
+	gtk_paned_pack1 (GTK_PANED (hpaned), vbox_acl_list, TRUE, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2607
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2608
+	/* Add the property tree
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2609
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2610
+	inherance_combo = gtk_combo_box_new_text();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2611
+	gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_THIS_FOLDER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2612
+	gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_CHILD_FOLDERS);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2613
+	gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_CHILD_FILES);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2614
+	gtk_combo_box_append_text(inherance_combo, ACL_NFS4_APPLY_TO_ALL_DESCENDANTS);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2615
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2616
+	type_combo = gtk_combo_box_new_text();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2617
+	gtk_combo_box_append_text(type_combo, ACL_NFS4_TYPE_ALLOW);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2618
+	gtk_combo_box_append_text(type_combo, ACL_NFS4_TYPE_DENY);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2619
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2620
+	props_hbox = gtk_hbox_new(FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2621
+	gtk_box_pack_start (GTK_BOX(props_hbox), gtk_label_new(_("Apply to")), FALSE, FALSE, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2622
+	gtk_box_pack_start (GTK_BOX(props_hbox), inherance_combo, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2623
+	gtk_box_pack_end   (GTK_BOX(props_hbox), type_combo, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2624
+	gtk_box_pack_end   (GTK_BOX(props_hbox), gtk_label_new(_("Type")), FALSE, FALSE, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2625
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2626
+	props_vbox = gtk_vbox_new(FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2627
+	perms = create_acl_nfs4_permission_tree(window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2628
+	gtk_box_pack_start (GTK_BOX(props_vbox), props_hbox, FALSE, FALSE, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2629
+	gtk_box_pack_start (GTK_BOX(props_vbox), perms, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2630
+	gtk_box_pack_start (GTK_BOX(props_vbox), buttons_hbox, FALSE, FALSE, 6);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2631
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2632
+	gtk_paned_pack2 (GTK_PANED (hpaned), props_vbox, TRUE, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2633
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2634
+	window->details->acl_view = perms;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2635
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2636
+	/* Events
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2637
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2638
+	g_signal_connect (G_OBJECT(type_combo), "changed",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2639
+			  G_CALLBACK(acl_nfs4_type_changed_cb), window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2640
+	g_signal_connect (G_OBJECT(inherance_combo), "changed",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2641
+			  G_CALLBACK(acl_nfs4_inherance_changed_cb), window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2642
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2643
+	g_signal_connect (G_OBJECT(button_add), "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2644
+			  G_CALLBACK(acl_nfs4_add_button_cb), window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2645
+	g_signal_connect (G_OBJECT(button_remove), "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2646
+			  G_CALLBACK(acl_nfs4_del_button_cb), window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2647
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2648
+	/* Store a few pointers
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2649
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2650
+	g_object_set_data (window, "ace_props_frame", props_vbox);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2651
+	g_object_set_data (window, "acl_nfs4_type_combo", type_combo);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2652
+	g_object_set_data (window, "acl_nfs4_inherance_combo", inherance_combo);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2653
+	g_object_set_data (window, "acl_list_tree_view", acl_list);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2654
+	g_object_set_data (window, "acl_list_add_button", button_remove);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2655
+	g_object_set_data (window, "ace_permissions_tree_view", perms);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2656
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2657
+	/* Set initial state
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2658
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2659
+	gtk_widget_set_sensitive (props_vbox, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2660
+	gtk_widget_set_sensitive (button_remove, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2661
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2662
+	gtk_widget_show_all (vbox);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2663
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2664
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2665
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2666
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2667
+create_acl_page_classic (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2668
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2669
+	GtkWidget *vbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2670
+	GtkWidget *hbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2671
+	GtkWidget *button_box;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2672
+	GList     *file_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2673
+	GtkWidget *button_add;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2674
+	GtkWidget *button_remove;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2675
+	GtkWidget *empty_label;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2676
+	GtkWidget *scroll;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2677
+	GtkWidget *view;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2678
+	GtkWidget *title;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2679
+	gboolean   dir_found;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2680
+	GtkWidget *panel = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2681
+	GtkWidget *block;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2682
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2683
+	dir_found = file_list_some_directory (window->details->target_files);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2684
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2685
+	vbox = create_page_with_vbox (window->details->notebook,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2686
+				      /* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2687
+				      _("Access List"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2688
+	if (dir_found) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2689
+		panel = gtk_vpaned_new();
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2690
+		gtk_box_pack_start (GTK_BOX (vbox), panel, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2691
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2692
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2693
+	file_list = window->details->original_files;			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2694
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2695
+//	if (all_can_get_acl (file_list)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2696
+		block = gtk_vbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2697
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2698
+		window->details->initial_acl = get_initial_acl (window->details->target_files);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2699
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2700
+		/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2701
+		title = gtk_label_new (_("Common ACL"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2702
+		gtk_label_set_justify (GTK_LABEL(title), GTK_JUSTIFY_LEFT);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2703
+		gtk_box_pack_start (GTK_BOX (block), title, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2704
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2705
+		hbox = gtk_hbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2706
+		gtk_container_set_border_width (GTK_CONTAINER (hbox), GNOME_PAD);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2707
+		gtk_box_pack_start (GTK_BOX (block), hbox, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2708
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2709
+		/* Left hand column
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2710
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2711
+		scroll = gtk_scrolled_window_new (NULL, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2712
+		gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2713
+						GTK_POLICY_AUTOMATIC,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2714
+						GTK_POLICY_AUTOMATIC);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2715
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2716
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2717
+		window->details->acl_view = create_acl_page_list (scroll, window, FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2718
+		gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(scroll), TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2719
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2720
+		/* Right hand column
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2721
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2722
+		button_box = gtk_vbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2723
+		window->details->acl_buttons = button_box;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2724
+		button_add    = gtk_button_new_from_stock (GTK_STOCK_ADD);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2725
+		button_remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2726
+		empty_label   = gtk_label_new("");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2727
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2728
+		g_signal_connect_object (button_add, "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2729
+					 G_CALLBACK (add_acl_callback),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2730
+					 G_OBJECT (window),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2731
+					 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2732
+		g_signal_connect_object (button_remove, "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2733
+					 G_CALLBACK (remove_acl_callback),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2734
+					 G_OBJECT (window),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2735
+					 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2736
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2737
+		gtk_box_pack_start (GTK_BOX(button_box), button_add, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2738
+		gtk_box_pack_start (GTK_BOX(button_box), button_remove, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2739
+		gtk_box_pack_start (GTK_BOX(button_box), empty_label, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2740
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2741
+		gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(button_box), FALSE, FALSE, 0);		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2742
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2743
+		if (panel)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2744
+			gtk_paned_add1 (panel, block);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2745
+		else
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2746
+			gtk_box_pack_start (GTK_BOX (vbox), block, TRUE, TRUE, 0);			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2747
+//	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2748
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2749
+	/* Default ACLs
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2750
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2751
+	if (dir_found) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2752
+		block = gtk_vbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2753
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2754
+		/* SUN_BRANDING */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2755
+		title = gtk_label_new (_("Default ACL"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2756
+		gtk_label_set_justify (title, GTK_JUSTIFY_LEFT);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2757
+		gtk_box_pack_start (GTK_BOX (block), title, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2758
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2759
+		hbox = gtk_hbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2760
+		gtk_container_set_border_width (GTK_CONTAINER (hbox), GNOME_PAD);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2761
+		gtk_box_pack_start (GTK_BOX (block), hbox, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2762
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2763
+		scroll = gtk_scrolled_window_new (NULL, NULL);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2764
+		gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2765
+						GTK_POLICY_AUTOMATIC,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2766
+						GTK_POLICY_AUTOMATIC);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2767
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2768
+		window->details->acl_default_view = create_acl_page_list (scroll, window, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2769
+		gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(scroll), TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2770
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2771
+		/* Right hand column
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2772
+		 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2773
+		button_box    = gtk_vbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2774
+		window->details->acl_def_buttons = button_box;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2775
+		button_add    = gtk_button_new_from_stock (GTK_STOCK_ADD);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2776
+		button_remove = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2777
+		empty_label   = gtk_label_new("");
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2778
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2779
+		g_signal_connect_object (button_add, "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2780
+					 G_CALLBACK (add_acl_default_callback),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2781
+					 G_OBJECT (window),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2782
+					 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2783
+		g_signal_connect_object (button_remove, "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2784
+					 G_CALLBACK (remove_acl_default_callback),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2785
+					 G_OBJECT (window),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2786
+					 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2787
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2788
+		gtk_box_pack_start (GTK_BOX(button_box), button_add, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2789
+		gtk_box_pack_start (GTK_BOX(button_box), button_remove, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2790
+		gtk_box_pack_start (GTK_BOX(button_box), empty_label, TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2791
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2792
+		gtk_box_pack_start (GTK_BOX(hbox), GTK_WIDGET(button_box), FALSE, FALSE, 0);		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2793
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2794
+		gtk_paned_add2 (panel, block);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2795
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2796
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2797
+	gtk_widget_show_all (vbox);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2798
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2799
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2800
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2801
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2802
+create_acl_page (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2803
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2804
+	GList             *file_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2805
+	GnomeVFSACLScheme  scheme;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2806
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2807
+	/* Ensure the ACL tab should be shown
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2808
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2809
+	file_list = window->details->original_files;			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2810
+	if (! all_can_get_acl (file_list))
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2811
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2812
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2813
+	/* Check the ACL type
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2814
+	 */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2815
+	scheme = get_acl_scheme (window->details->original_files);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2816
+	if (scheme == GNOME_VFS_ACL_SCHEME_CLASSIC) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2817
+		create_acl_page_classic (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2818
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2819
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2820
+	} else if (scheme == GNOME_VFS_ACL_SCHEME_NFS4) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2821
+		create_acl_page_nfs4 (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2822
+		return;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2823
+	} 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2824
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2825
+	g_error ("Unknown ACL scheme: scheme=%d\n", scheme);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2826
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2827
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2828
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2829
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2830
+create_permissions_page (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2831
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2832
+	GtkWidget *vbox, *button, *hbox;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2833
+	GtkTable *page_table;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2834
+	char *file_name, *prompt_text;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2835
+	GList *file_list;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2836
+	guint last_row;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2837
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2838
+	vbox = create_page_with_vbox (window->details->notebook,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2839
+				      _("Permissions"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2840
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2841
+	file_list = window->details->original_files;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2842
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2843
+	window->details->initial_permissions = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2844
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2845
+	if (all_can_get_permissions (file_list) && all_can_get_permissions (window->details->target_files)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2846
+		window->details->initial_permissions = get_initial_permissions (window->details->target_files);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2847
+		window->details->has_recursive_apply = files_has_changable_permissions_directory (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2848
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2849
+		if (!all_can_set_permissions (file_list)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2850
+			add_prompt_and_separator (
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2851
+				GTK_VBOX (vbox), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2852
+				_("You are not the owner, so you can't change these permissions."));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2853
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2854
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2855
+		page_table = GTK_TABLE (gtk_table_new (1, COLUMN_COUNT, FALSE));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2856
+		window->details->permissions_table = page_table;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2857
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2858
+		apply_standard_table_padding (page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2859
+		gtk_widget_show (GTK_WIDGET (page_table));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2860
+		gtk_box_pack_start (GTK_BOX (vbox), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2861
+				    GTK_WIDGET (page_table), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2862
+				    TRUE, TRUE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2863
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2864
+		if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_SHOW_ADVANCED_PERMISSIONS)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2865
+			window->details->advanced_permissions = TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2866
+			create_advanced_permissions (window, page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2867
+		} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2868
+			window->details->advanced_permissions = FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2869
+			create_simple_permissions (window, page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2870
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2871
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2872
+		gtk_table_set_row_spacing (page_table, page_table->nrows - 1, 18);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2873
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2874
+		append_title_value_pair
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2875
+			(window, page_table, _("SELinux Context:"), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2876
+			 "selinux_context", _("--"),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2877
+			 FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2878
+		append_title_value_pair
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2879
+			(window, page_table, _("Last changed:"), 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2880
+			 "date_permissions", _("--"),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2881
+			 FALSE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2882
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2883
+		if (window->details->has_recursive_apply) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2884
+			last_row = append_row (page_table);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2885
+			hbox = gtk_hbox_new (FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2886
+			gtk_widget_show (hbox);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2887
+			gtk_table_attach (page_table, hbox,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2888
+					  0, 2,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2889
+					  last_row, last_row+1,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2890
+					  GTK_FILL, 0,
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2891
+					  0, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2892
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2893
+			button = gtk_button_new_with_mnemonic (_("Apply permissions to enclosed files"));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2894
+			gtk_widget_show (button);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2895
+			gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2896
+			g_signal_connect (button, "clicked",
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2897
+					  G_CALLBACK (apply_recursive_clicked),
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2898
+					  window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2899
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2900
+	} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2901
+		if (!is_multi_file_window (window)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2902
+			file_name = nautilus_file_get_display_name (get_target_file (window));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2903
+			prompt_text = g_strdup_printf (_("The permissions of \"%s\" could not be determined."), file_name);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2904
+			g_free (file_name);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2905
+		} else {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2906
+			prompt_text = g_strdup (_("The permissions of the selected file could not be determined."));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2907
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2908
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2909
+		add_prompt (GTK_VBOX (vbox), prompt_text, TRUE);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2910
+		g_free (prompt_text);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2911
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2912
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2913
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2914
+static void
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2915
+append_extension_pages (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2916
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2917
+	GList *providers;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2918
+	GList *p;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2919
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2920
+ 	providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2921
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2922
+	for (p = providers; p != NULL; p = p->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2923
+		NautilusPropertyPageProvider *provider;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2924
+		GList *pages;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2925
+		GList *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2926
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2927
+		provider = NAUTILUS_PROPERTY_PAGE_PROVIDER (p->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2928
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2929
+		pages = nautilus_property_page_provider_get_pages 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2930
+			(provider, window->details->original_files);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2931
+		
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2932
+		for (l = pages; l != NULL; l = l->next) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2933
+			NautilusPropertyPage *page;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2934
+			GtkWidget *page_widget;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2935
 			GtkWidget *label;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2936
 			
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2937
 			page = NAUTILUS_PROPERTY_PAGE (l->data);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2938
@@ -4306,6 +6697,27 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2939
 	return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2940
 }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2941
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2942
+static gboolean
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2943
+should_show_acls (FMPropertiesWindow *window)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2944
+{
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2945
+       NautilusFile *file;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2946
+       
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2947
+       if (is_multi_file_window (window)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2948
+               return FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2949
+       }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2950
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2951
+       /* Don't show ACL tab for desktop special icons (trash, etc)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2952
+        * or desktop files. We don't get the open-with menu for these anyway.
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2953
+        */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2954
+       file = get_original_file (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2955
+       if (file == NULL ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2956
+           NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2957
+           nautilus_file_is_nautilus_link (file)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2958
+               return FALSE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2959
+       }
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2960
+       return TRUE;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2961
+}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2962
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2963
 static char *
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2964
 get_pending_key (GList *file_list)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2965
 {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2966
@@ -4547,6 +6959,12 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2967
 		create_open_with_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2968
 	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2969
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2970
+	printf ("should_show_acls (window) %d\n", should_show_acls (window));
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2971
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2972
+	if (should_show_acls (window)) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2973
+		create_acl_page (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2974
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2975
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2976
 	/* append pages from available views */
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2977
 	append_extension_pages (window);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2978
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2979
@@ -4799,6 +7217,7 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2980
 {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2981
 	FMPropertiesWindow *window;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2982
 	GList *l;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2983
+	guint i;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2984
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2985
 	window = FM_PROPERTIES_WINDOW (object);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2986
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2987
@@ -4829,6 +7248,18 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2988
 		window->details->initial_emblems = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2989
 	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2990
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2991
+	if (window->details->initial_acl) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2992
+		g_hash_table_destroy (window->details->initial_acl);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2993
+		window->details->initial_acl = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2994
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2995
+	
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2996
+	for (i = 0; i<NUM_COL_ICONS; i++) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2997
+		if (window->details->acl_icons[i]) {
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2998
+			g_object_unref (window->details->acl_icons[i]);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  2999
+			window->details->acl_icons[i] = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3000
+		}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3001
+	}
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3002
+
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3003
 	g_list_free (window->details->permission_buttons);
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3004
 	window->details->permission_buttons = NULL;
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3005
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3006
--- nautilus-2.18.0.1-orig/icons/Makefile.am	2007-04-10 02:59:55.100929000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3007
+++ nautilus-2.18.0.1-alo/icons/Makefile.am	2007-04-03 12:35:58.912379000 +0200
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3008
@@ -14,6 +14,13 @@
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3009
 	knob.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3010
 	note-indicator.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3011
 	thumbnail_frame.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3012
+	user.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3013
+	user_neg.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3014
+	group.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3015
+	group_neg.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3016
+	mask.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3017
+	other.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3018
+	other_neg.png \
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3019
 	$(NULL)
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3020
 
664047797716 2007-10-24 Stephen Browne <set EMAIL_ADDRESS environment variable>
stephen
parents:
diff changeset
  3021
 EXTRA_DIST = $(icon_DATA)