File nautilus-directory-cache-is-in-trash.diff of Package nautilus

2006-09-27  Christian Neumair  <chris@gnome-de.org>

	* libnautilus-private/nautilus-directory.c:
	* libnautilus-private/nautilus-directory.h:
	* libnautilus-private/nautilus-directory-private.h:
	Add is_in_trash_state to NautilusDirectoryDetails.
	Also add nautilus_directory_is_in_trash which works
	like nautilus_directory_is_local.

	* libnautilus-private/nautilus-file.c:
	Proxy nautilus_file_is_in_trash to
	nautilus_directory_is_in_trash, similar to
	nautilus_file_is_local.

Index: libnautilus-private/nautilus-file.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file.c,v
retrieving revision 1.390
retrieving revision 1.391
diff -u -p -r1.390 -r1.391
--- nautilus/libnautilus-private/nautilus-file.c	25 Jul 2006 14:18:03 -0000	1.390
+++ nautilus/libnautilus-private/nautilus-file.c	27 Sep 2006 16:02:39 -0000	1.391
@@ -5228,9 +5228,9 @@ nautilus_file_is_directory (NautilusFile
 gboolean
 nautilus_file_is_in_trash (NautilusFile *file)
 {
-	g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+	g_assert (NAUTILUS_IS_FILE (file));
 
-	return eel_uri_is_in_trash (file->details->directory->details->uri);
+	return nautilus_directory_is_in_trash (file->details->directory);
 }
 
 GnomeVFSResult
Index: libnautilus-private/nautilus-directory-private.h
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-directory-private.h,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -p -r1.97 -r1.98
--- nautilus/libnautilus-private/nautilus-directory-private.h	23 Aug 2006 09:07:11 -0000	1.97
+++ nautilus/libnautilus-private/nautilus-directory-private.h	27 Sep 2006 16:02:32 -0000	1.98
@@ -104,6 +104,8 @@ struct NautilusDirectoryDetails
 	GnomeVFSAsyncHandle *get_info_in_progress;
 	gboolean get_info_has_slow_mime_type;
 
+	int is_in_trash_state;
+
 	NautilusFile *slow_mime_type_file;
 	GnomeVFSAsyncHandle *slow_mime_type_in_progress;
 
Index: libnautilus-private/nautilus-directory.h
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-directory.h,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -p -r1.68 -r1.69
--- nautilus/libnautilus-private/nautilus-directory.h	12 Dec 2005 16:59:10 -0000	1.68
+++ nautilus/libnautilus-private/nautilus-directory.h	27 Sep 2006 16:02:38 -0000	1.69
@@ -216,6 +216,8 @@ gboolean           nautilus_directory_ar
 /* Return true if the directory is local. */
 gboolean           nautilus_directory_is_local                 (NautilusDirectory         *directory);
 
+gboolean           nautilus_directory_is_in_trash              (NautilusDirectory         *directory);
+
 /* Return false if directory contains anything besides a Nautilus metafile.
  * Only valid if directory is monitored. Used by the Trash monitor.
  */
Index: libnautilus-private/nautilus-directory.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-directory.c,v
retrieving revision 1.259
retrieving revision 1.260
diff -u -p -r1.259 -r1.260
--- nautilus/libnautilus-private/nautilus-directory.c	23 Aug 2006 09:07:12 -0000	1.259
+++ nautilus/libnautilus-private/nautilus-directory.c	27 Sep 2006 16:02:32 -0000	1.260
@@ -553,6 +553,25 @@ nautilus_directory_is_local (NautilusDir
 }
 
 gboolean
+nautilus_directory_is_in_trash (NautilusDirectory *directory)
+{
+	g_assert (NAUTILUS_IS_DIRECTORY (directory));
+	
+	if (directory->details->uri == NULL) {
+		return FALSE;
+	}
+	if (directory->details->is_in_trash_state == 0) {
+		if (eel_uri_is_in_trash (directory->details->uri)) {
+			directory->details->is_in_trash_state = 1;
+		} else {
+			directory->details->is_in_trash_state = -1;
+		}
+	}
+	
+	return directory->details->is_in_trash_state > 0;
+}
+
+gboolean
 nautilus_directory_are_all_files_seen (NautilusDirectory *directory)
 {
 	g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (directory), FALSE);
openSUSE Build Service is sponsored by