nautilus r13795 - in trunk: . libnautilus-private src src/file-manager



Author: alexl
Date: Thu Feb 21 13:20:19 2008
New Revision: 13795
URL: http://svn.gnome.org/viewvc/nautilus?rev=13795&view=rev

Log:
2008-02-21  David Zeuthen  <davidz redhat com>

	* libnautilus-private/nautilus-autorun.c: (should_autorun_mount):
	Use g_volume_should_automount() to determine if we should autorun
	programs on a mount.

	* libnautilus-private/nautilus-directory-async.c:
	(nautilus_directory_set_up_request),
	(nautilus_async_destroying_file), (lacks_filesystem_info),
	(wants_filesystem_info), (request_is_satisfied),
	(directory_count_start), (mime_list_start),
	(filesystem_info_cancel), (filesystem_info_stop),
	(filesystem_info_state_free), (got_filesystem_info),
	(query_filesystem_info_callback), (filesystem_info_start),
	(start_or_stop_io), (nautilus_directory_cancel),
	(cancel_filesystem_info_for_file), (cancel_loading_attributes),
	(nautilus_directory_cancel_loading_file_attributes):
	* libnautilus-private/nautilus-directory-private.h:
	* libnautilus-private/nautilus-file-attributes.h: Add new
	filesystem info attribute; right now two bits in NautilusFile's
	private structure are set; the filesystem::use-preview and
	filesystem:readonly.

	* libnautilus-private/nautilus-file-operations.c:
	(nautilus_file_operations_mount_volume):
	* src/nautilus-places-sidebar.c: (open_selected_bookmark),
	(mount_shortcut_cb): Don't inhibit automount from
	nautilus_file_operations_mount_volume() because then everything
	will be inhibited as the mount_added callback use it as
	well. Rather, move the call to inhibit out to the proper call
	sites.

	* libnautilus-private/nautilus-file-private.h:
	* libnautilus-private/nautilus-file.c:
	(nautilus_file_get_filesystem_use_preview),
	(nautilus_file_should_show_thumbnail),
	(get_speed_tradeoff_preference_for_file),
	(nautilus_file_get_mount):
	* libnautilus-private/nautilus-file.h:
	* src/file-manager/fm-directory-view.c: (load_directory):
	* src/file-manager/fm-icon-view.c: (should_preview_sound):
	* src/nautilus-window-manage-views.c: (update_for_new_location):
	Use the new filesystem::use-preview hint to determine if we should
	preview non-native files (such as gphoto2:// and cdda://
	mounts). 



Modified:
   trunk/ChangeLog
   trunk/libnautilus-private/nautilus-autorun.c
   trunk/libnautilus-private/nautilus-directory-async.c
   trunk/libnautilus-private/nautilus-directory-private.h
   trunk/libnautilus-private/nautilus-directory.c
   trunk/libnautilus-private/nautilus-dnd.c
   trunk/libnautilus-private/nautilus-file-attributes.h
   trunk/libnautilus-private/nautilus-file-operations.c
   trunk/libnautilus-private/nautilus-file-private.h
   trunk/libnautilus-private/nautilus-file.c
   trunk/libnautilus-private/nautilus-file.h
   trunk/src/file-manager/fm-directory-view.c
   trunk/src/file-manager/fm-icon-view.c
   trunk/src/nautilus-application.c
   trunk/src/nautilus-places-sidebar.c

Modified: trunk/libnautilus-private/nautilus-autorun.c
==============================================================================
--- trunk/libnautilus-private/nautilus-autorun.c	(original)
+++ trunk/libnautilus-private/nautilus-autorun.c	Thu Feb 21 13:20:19 2008
@@ -1339,10 +1339,12 @@
 			ignore_autorun = TRUE;
 			g_object_set_data (G_OBJECT (enclosing_volume), "nautilus-inhibit-autorun", NULL);
 		}
-		g_object_unref (enclosing_volume);
 	}
 
 	if (ignore_autorun) {
+		if (enclosing_volume != NULL) {
+			g_object_unref (enclosing_volume);
+		}
 		return FALSE;
 	}
 	
@@ -1350,7 +1352,7 @@
 
 	for (l = inhibit_mount_handling_for; l != NULL; l = l->next) {
 		file = l->data;
-		if (g_file_contains_file (root, file)) {
+		if (g_file_has_prefix (file, root)) {
 			ignore_autorun = TRUE;
 			
 			inhibit_mount_handling_for = g_list_delete_link (inhibit_mount_handling_for, l);
@@ -1360,10 +1362,14 @@
 		}
 	}
 
-	if (!g_file_is_native (root)) {
-		/* only do autorun on local files */
-		/* TODO: Maybe we should do this on some gvfs mounts? like gphoto: ? */
-		ignore_autorun = TRUE;
+	/* only do autorun on local files or files where g_volume_should_automount() returns TRUE */
+	ignore_autorun = TRUE;
+	if (g_file_is_native (root) || 
+	    (enclosing_volume != NULL && g_volume_should_automount (enclosing_volume))) {
+		ignore_autorun = FALSE;
+	}
+	if (enclosing_volume != NULL) {
+		g_object_unref (enclosing_volume);
 	}
 	g_object_unref (root);
 

Modified: trunk/libnautilus-private/nautilus-directory-async.c
==============================================================================
--- trunk/libnautilus-private/nautilus-directory-async.c	(original)
+++ trunk/libnautilus-private/nautilus-directory-async.c	Thu Feb 21 13:20:19 2008
@@ -89,6 +89,12 @@
 	NautilusFile *file;
 };
 
+struct FilesystemInfoState {
+	NautilusDirectory *directory;
+	GCancellable *cancellable;
+	NautilusFile *file;
+};
+
 struct DirectoryLoadState {
 	NautilusDirectory *directory;
 	GCancellable *cancellable;
@@ -628,6 +634,10 @@
 		request->mount = TRUE;
 		request->file_info = TRUE;
 	}
+
+	if (file_attributes & NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO) {
+		request->filesystem_info = TRUE;
+	}
 }
 
 static void
@@ -1581,6 +1591,12 @@
 		directory->details->mount_state->file = NULL;
 		changed = TRUE;
 	}
+
+	if (directory->details->filesystem_info_state != NULL &&
+	    directory->details->filesystem_info_state->file == file) {
+		directory->details->filesystem_info_state->file = NULL;
+		changed = TRUE;
+	}
 	
 	/* Let the directory take care of the rest. */
 	if (changed) {
@@ -1645,12 +1661,24 @@
 }
 
 static gboolean
+lacks_filesystem_info (NautilusFile *file)
+{
+	return !file->details->filesystem_info_is_up_to_date;
+}
+
+static gboolean
 wants_info (const Request *request)
 {
 	return request->file_info;
 }
 
 static gboolean
+wants_filesystem_info (const Request *request)
+{
+	return request->filesystem_info;
+}
+
+static gboolean
 lacks_deep_count (NautilusFile *file)
 {
 	return file->details->deep_counts_status != NAUTILUS_REQUEST_DONE;
@@ -1798,6 +1826,12 @@
 		}
 	}
 
+	if (request->filesystem_info) {
+		if (has_problem (directory, file, lacks_filesystem_info)) {
+			return FALSE;
+		}
+	}
+
 	if (request->top_left_text) {
 		if (has_problem (directory, file, lacks_top_left)) {
 			return FALSE;
@@ -2606,10 +2640,15 @@
 	
 	directory->details->count_in_progress = state;
 	
+	location = nautilus_file_get_location (file);
 #ifdef DEBUG_LOAD_DIRECTORY		
-	g_message ("load_directory called to get shallow file count for %s", uri);
+	{
+		char *uri;
+		uri = g_file_get_uri (location);
+		g_message ("load_directory called to get shallow file count for %s", uri);
+		g_free (uri);
+	}
 #endif
-	location = nautilus_file_get_location (file);
 
 	g_file_enumerate_children_async (location,
 					 G_FILE_ATTRIBUTE_STANDARD_NAME ","
@@ -3137,11 +3176,16 @@
 
 	directory->details->mime_list_in_progress = state;
 
+	location = nautilus_file_get_location (file);
 #ifdef DEBUG_LOAD_DIRECTORY		
-	g_message ("load_directory called to get MIME list of %s", uri);
+	{
+		char *uri;
+		uri = g_file_get_uri (location);
+		g_message ("load_directory called to get MIME list of %s", uri);
+		g_free (uri);
+	}
 #endif	
 	
-	location = nautilus_file_get_location (file);
 	g_file_enumerate_children_async (location,
 					 G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
 					 0, /* flags */
@@ -4080,6 +4124,147 @@
 }
 
 static void
+filesystem_info_cancel (NautilusDirectory *directory)
+{
+	if (directory->details->filesystem_info_state != NULL) {
+		g_cancellable_cancel (directory->details->filesystem_info_state->cancellable);
+		directory->details->filesystem_info_state->directory = NULL;
+		directory->details->filesystem_info_state = NULL;
+		async_job_end (directory, "filesystem info");
+	}
+}
+
+static void
+filesystem_info_stop (NautilusDirectory *directory)
+{
+	NautilusFile *file;
+
+	if (directory->details->filesystem_info_state != NULL) {
+		file = directory->details->filesystem_info_state->file;
+
+		if (file != NULL) {
+			g_assert (NAUTILUS_IS_FILE (file));
+			g_assert (file->details->directory == directory);
+			if (is_needy (file,
+				      lacks_filesystem_info,
+				      wants_filesystem_info)) {
+				return;
+			}
+		}
+
+		/* The filesystem info is not wanted, so stop it. */
+		filesystem_info_cancel (directory);
+	}
+}
+
+static void
+filesystem_info_state_free (FilesystemInfoState *state)
+{
+	g_object_unref (state->cancellable);
+	g_free (state);
+}
+
+static void
+got_filesystem_info (FilesystemInfoState *state, GFileInfo *info)
+{
+	NautilusDirectory *directory;
+	NautilusFile *file;
+
+	/* careful here, info may be NULL */
+
+	directory = nautilus_directory_ref (state->directory);
+
+	state->directory->details->filesystem_info_state = NULL;
+	async_job_end (state->directory, "filesystem info");
+	
+	file = nautilus_file_ref (state->file);
+
+	file->details->filesystem_info_is_up_to_date = TRUE;
+	if (info != NULL) {
+		file->details->filesystem_use_preview = 
+			g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW);
+		file->details->filesystem_readonly = 
+			g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_FILESYSTEM_READONLY);
+	}
+	
+	nautilus_directory_async_state_changed (directory);
+	nautilus_file_changed (file);
+	
+	nautilus_file_unref (file);
+	
+	nautilus_directory_unref (directory);
+	
+	filesystem_info_state_free (state);
+}
+
+static void
+query_filesystem_info_callback (GObject *source_object,
+				GAsyncResult *res,
+				gpointer user_data)
+{
+	GFileInfo *info;
+	FilesystemInfoState *state;
+
+	state = user_data;
+	if (state->directory == NULL) {
+		/* Operation was cancelled. Bail out */
+		filesystem_info_state_free (state);
+		return;
+	}
+
+	info = g_file_query_filesystem_info_finish (G_FILE (source_object), res, NULL);
+
+	got_filesystem_info (state, info);
+
+	if (info != NULL) {
+		g_object_unref (info);
+	}
+}
+
+static void
+filesystem_info_start (NautilusDirectory *directory,
+		       NautilusFile *file,
+		       gboolean *doing_io)
+{
+	GFile *location;
+	FilesystemInfoState *state;
+
+	if (directory->details->filesystem_info_state != NULL) {
+		*doing_io = TRUE;
+		return;
+	}
+
+	if (!is_needy (file,
+		       lacks_filesystem_info,
+		       wants_filesystem_info)) {
+		return;
+	}
+	*doing_io = TRUE;
+
+	if (!async_job_start (directory, "filesystem info")) {
+		return;
+	}
+	
+	state = g_new0 (FilesystemInfoState, 1);
+	state->directory = directory;
+	state->file = file;
+	state->cancellable = g_cancellable_new ();
+
+	location = nautilus_file_get_location (file);
+	
+	directory->details->filesystem_info_state = state;
+
+	g_file_query_filesystem_info_async (location,
+					    G_FILE_ATTRIBUTE_FILESYSTEM_READONLY ","
+					    G_FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW,
+					    G_PRIORITY_DEFAULT,
+					    state->cancellable, 
+					    query_filesystem_info_callback, 
+					    state);
+	g_object_unref (location);
+}
+
+static void
 extension_info_cancel (NautilusDirectory *directory)
 {
 	if (directory->details->extension_info_in_progress != NULL) {
@@ -4257,6 +4442,7 @@
 	extension_info_stop (directory);
 	mount_stop (directory);
 	thumbnail_stop (directory);
+	filesystem_info_stop (directory);
 
 	doing_io = FALSE;
 	/* Take files that are all done off the queue. */
@@ -4285,6 +4471,7 @@
 		mime_list_start (directory, file, &doing_io);
 		top_left_start (directory, file, &doing_io);
 		thumbnail_start (directory, file, &doing_io);
+		filesystem_info_start (directory, file, &doing_io);
 
 		if (doing_io) {
 			return;
@@ -4356,6 +4543,7 @@
 	extension_info_cancel (directory);
 	thumbnail_cancel (directory);
 	mount_cancel (directory);
+	filesystem_info_cancel (directory);
 
 	/* We aren't waiting for anything any more. */
 	if (waiting_directories != NULL) {
@@ -4435,6 +4623,16 @@
 }
 
 static void
+cancel_filesystem_info_for_file (NautilusDirectory *directory,
+				 NautilusFile      *file)
+{
+	if (directory->details->filesystem_info_state != NULL &&
+	    directory->details->filesystem_info_state->file == file) {
+		filesystem_info_cancel (directory);
+	}
+}
+
+static void
 cancel_link_info_for_file (NautilusDirectory *directory,
 			   NautilusFile      *file)
 {
@@ -4469,6 +4667,9 @@
 	if (request.file_info) {
 		file_info_cancel (directory);
 	}
+	if (request.filesystem_info) {
+		filesystem_info_cancel (directory);
+	}
 	if (request.link_info) {
 		link_info_cancel (directory);
 	}
@@ -4518,6 +4719,9 @@
 	if (request.file_info) {
 		cancel_file_info_for_file (directory, file);
 	}
+	if (request.filesystem_info) {
+		cancel_filesystem_info_for_file (directory, file);
+	}
 	if (request.link_info) {
 		cancel_link_info_for_file (directory, file);
 	}

Modified: trunk/libnautilus-private/nautilus-directory-private.h
==============================================================================
--- trunk/libnautilus-private/nautilus-directory-private.h	(original)
+++ trunk/libnautilus-private/nautilus-directory-private.h	Thu Feb 21 13:20:19 2008
@@ -44,6 +44,7 @@
 typedef struct MimeListState MimeListState;
 typedef struct ThumbnailState ThumbnailState;
 typedef struct MountState MountState;
+typedef struct FilesystemInfoState FilesystemInfoState;
 
 struct NautilusDirectoryDetails
 {
@@ -106,6 +107,8 @@
 	ThumbnailState *thumbnail_state;
 
 	MountState *mount_state;
+
+	FilesystemInfoState *filesystem_info_state;
 	
 	TopLeftTextReadState *top_left_read_state;
 
@@ -130,6 +133,7 @@
 	gboolean extension_info;
 	gboolean thumbnail;
 	gboolean mount;
+	gboolean filesystem_info;
 } Request;
 
 NautilusDirectory *nautilus_directory_get_existing                    (GFile                     *location);

Modified: trunk/libnautilus-private/nautilus-directory.c
==============================================================================
--- trunk/libnautilus-private/nautilus-directory.c	(original)
+++ trunk/libnautilus-private/nautilus-directory.c	Thu Feb 21 13:20:19 2008
@@ -1240,7 +1240,7 @@
 	directory = NAUTILUS_DIRECTORY (value);
 	collect_data = (CollectData *) callback_data;
 
-	if (g_file_contains_file (collect_data->container, location) ||
+	if (g_file_has_prefix (location, collect_data->container) ||
 	    g_file_equal (collect_data->container, location)) {
 		nautilus_directory_ref (directory);
 		collect_data->directories =

Modified: trunk/libnautilus-private/nautilus-dnd.c
==============================================================================
--- trunk/libnautilus-private/nautilus-dnd.c	(original)
+++ trunk/libnautilus-private/nautilus-dnd.c	Thu Feb 21 13:20:19 2008
@@ -431,7 +431,7 @@
 	/* Compare the first dropped uri with the target uri for same fs match. */
 	dropped = g_file_new_for_uri (dropped_uri);
 	same_fs = check_same_fs (target, dropped);
-	target_is_source_parent = g_file_contains_file (target, dropped);
+	target_is_source_parent = g_file_has_prefix (dropped, target);
 	
 	if (same_fs || target_is_source_parent ||
 	    g_file_has_uri_scheme (dropped, "trash")) {

Modified: trunk/libnautilus-private/nautilus-file-attributes.h
==============================================================================
--- trunk/libnautilus-private/nautilus-file-attributes.h	(original)
+++ trunk/libnautilus-private/nautilus-file-attributes.h	Thu Feb 21 13:20:19 2008
@@ -41,6 +41,7 @@
 	NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO = 1 << 8,
 	NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL = 1 << 9,
 	NAUTILUS_FILE_ATTRIBUTE_MOUNT = 1 << 10,
+	NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO = 1 << 11,
 } NautilusFileAttributes;
 
 #endif /* NAUTILUS_FILE_ATTRIBUTES_H */

Modified: trunk/libnautilus-private/nautilus-file-operations.c
==============================================================================
--- trunk/libnautilus-private/nautilus-file-operations.c	(original)
+++ trunk/libnautilus-private/nautilus-file-operations.c	Thu Feb 21 13:20:19 2008
@@ -2040,7 +2040,6 @@
 	GMountOperation *mount_op;
 	
 	mount_op = eel_mount_operation_new (parent_window);
-	nautilus_inhibit_autorun_for_volume (volume);
 	g_volume_mount (volume, 0, mount_op, NULL, volume_mount_cb, mount_op);
 }
 

Modified: trunk/libnautilus-private/nautilus-file-private.h
==============================================================================
--- trunk/libnautilus-private/nautilus-file-private.h	(original)
+++ trunk/libnautilus-private/nautilus-file-private.h	Thu Feb 21 13:20:19 2008
@@ -206,6 +206,10 @@
 	eel_boolean_bit can_mount                     : 1;
 	eel_boolean_bit can_unmount                   : 1;
 	eel_boolean_bit can_eject                     : 1;
+
+	eel_boolean_bit filesystem_readonly           : 1;
+	eel_boolean_bit filesystem_use_preview        : 2; /* GFilesystemPreviewType */
+	eel_boolean_bit filesystem_info_is_up_to_date : 1;
 };
 
 typedef struct {

Modified: trunk/libnautilus-private/nautilus-file.c
==============================================================================
--- trunk/libnautilus-private/nautilus-file.c	(original)
+++ trunk/libnautilus-private/nautilus-file.c	Thu Feb 21 13:20:19 2008
@@ -3199,10 +3199,30 @@
         return FALSE;
 }
 
+GFilesystemPreviewType
+nautilus_file_get_filesystem_use_preview (NautilusFile *file)
+{
+	GFilesystemPreviewType use_preview;
+	NautilusFile *parent;
+
+	parent = nautilus_file_get_parent (file);
+	if (parent != NULL) {
+		use_preview = parent->details->filesystem_use_preview;
+		g_object_unref (parent);
+	} else {
+		use_preview = 0;
+	}
+
+	return use_preview;
+}
+
 gboolean
 nautilus_file_should_show_thumbnail (NautilusFile *file)
 {
 	const char *mime_type;
+	GFilesystemPreviewType use_preview;
+
+	use_preview = nautilus_file_get_filesystem_use_preview (file);
 
 	mime_type = eel_ref_str_peek (file->details->mime_type);
 	if (mime_type == NULL) {
@@ -3213,14 +3233,26 @@
 	    nautilus_file_get_size (file) > (unsigned int)cached_thumbnail_limit) {
 		return FALSE;
 	}
-	
+
 	if (show_image_thumbs == NAUTILUS_SPEED_TRADEOFF_ALWAYS) {
-		return TRUE;
+		if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
+			return FALSE;
+		} else {
+			return TRUE;
+		}
 	} else if (show_image_thumbs == NAUTILUS_SPEED_TRADEOFF_NEVER) {
 		return FALSE;
 	} else {
-		/* only local files */
-		return nautilus_file_is_local (file);
+		if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
+			/* file system says to never thumbnail anything */
+			return FALSE;
+		} else if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL) {
+			/* file system says we should treat file as if it's local */
+			return TRUE;
+		} else {
+			/* only local files */
+			return nautilus_file_is_local (file);
+		}
 	}
 
 	return FALSE;
@@ -3715,10 +3747,18 @@
 static gboolean
 get_speed_tradeoff_preference_for_file (NautilusFile *file, NautilusSpeedTradeoffValue value)
 {
+	GFilesystemPreviewType use_preview;
+
 	g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+	use_preview = nautilus_file_get_filesystem_use_preview (file);
 	
 	if (value == NAUTILUS_SPEED_TRADEOFF_ALWAYS) {
-		return TRUE;
+		if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
+			return FALSE;
+		} else {
+			return TRUE;
+		}
 	}
 	
 	if (value == NAUTILUS_SPEED_TRADEOFF_NEVER) {
@@ -3726,7 +3766,17 @@
 	}
 
 	g_assert (value == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY);
-	return nautilus_file_is_local (file);
+
+	if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
+		/* file system says to never preview anything */
+		return FALSE;
+	} else if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL) {
+		/* file system says we should treat file as if it's local */
+		return TRUE;
+	} else {
+		/* only local files */
+		return nautilus_file_is_local (file);
+	}
 }
 
 gboolean

Modified: trunk/libnautilus-private/nautilus-file.h
==============================================================================
--- trunk/libnautilus-private/nautilus-file.h	(original)
+++ trunk/libnautilus-private/nautilus-file.h	Thu Feb 21 13:20:19 2008
@@ -218,6 +218,7 @@
 									 GFileInfo                      *attributes,
 									 NautilusFileOperationCallback   callback,
 									 gpointer                        callback_data);
+GFilesystemPreviewType  nautilus_file_get_filesystem_use_preview        (NautilusFile *file);
 
 /* Permissions. */
 gboolean                nautilus_file_can_get_permissions               (NautilusFile                   *file);

Modified: trunk/src/file-manager/fm-directory-view.c
==============================================================================
--- trunk/src/file-manager/fm-directory-view.c	(original)
+++ trunk/src/file-manager/fm-directory-view.c	Thu Feb 21 13:20:19 2008
@@ -7552,7 +7552,9 @@
          * well as doing a call when ready), in case external forces
          * change the directory's file metadata.
 	 */
-	attributes = NAUTILUS_FILE_ATTRIBUTE_METADATA;
+	attributes = 
+		NAUTILUS_FILE_ATTRIBUTE_METADATA |
+		NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO;
 	view->details->metadata_for_directory_as_file_pending = TRUE;
 	view->details->metadata_for_files_in_directory_pending = TRUE;
 	nautilus_file_call_when_ready
@@ -7568,7 +7570,9 @@
 	/* If capabilities change, then we need to update the menus
 	 * because of New Folder, and relative emblems.
 	 */
-	attributes = NAUTILUS_FILE_ATTRIBUTE_INFO;
+	attributes = 
+		NAUTILUS_FILE_ATTRIBUTE_INFO |
+		NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO;
 	nautilus_file_monitor_add (view->details->directory_as_file,
 				   &view->details->directory_as_file,
 				   attributes);

Modified: trunk/src/file-manager/fm-icon-view.c
==============================================================================
--- trunk/src/file-manager/fm-icon-view.c	(original)
+++ trunk/src/file-manager/fm-icon-view.c	Thu Feb 21 13:20:19 2008
@@ -1888,6 +1888,9 @@
 should_preview_sound (NautilusFile *file)
 {
 	GFile *location;
+	GFilesystemPreviewType use_preview;
+
+	use_preview = nautilus_file_get_filesystem_use_preview (file);
 
 	location = nautilus_file_get_location (file);
 	if (g_file_has_uri_scheme (location, "burn")) {
@@ -1902,10 +1905,23 @@
 	}
 		
 	if (preview_sound_auto_value == NAUTILUS_SPEED_TRADEOFF_ALWAYS) {
-		return TRUE;
+		if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
+			return FALSE;
+		} else {
+			return TRUE;
+		}
 	}
 	
-	return nautilus_file_is_local (file);
+	if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
+		/* file system says to never preview anything */
+		return FALSE;
+	} else if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL) {
+		/* file system says we should treat file as if it's local */
+		return TRUE;
+	} else {
+		/* only local files */
+		return nautilus_file_is_local (file);
+	}
 }
 
 static int

Modified: trunk/src/nautilus-application.c
==============================================================================
--- trunk/src/nautilus-application.c	(original)
+++ trunk/src/nautilus-application.c	Thu Feb 21 13:20:19 2008
@@ -1460,7 +1460,7 @@
 
 			location = nautilus_window_get_location (window);
 
-			if (g_file_contains_file (root, location)) {
+			if (g_file_has_prefix (location, root)) {
 				close_list = g_list_prepend (close_list, window);
 			} 
 			g_object_unref (location);

Modified: trunk/src/nautilus-places-sidebar.c
==============================================================================
--- trunk/src/nautilus-places-sidebar.c	(original)
+++ trunk/src/nautilus-places-sidebar.c	Thu Feb 21 13:20:19 2008
@@ -56,6 +56,7 @@
 #include <libnautilus-private/nautilus-file-operations.h>
 #include <libnautilus-private/nautilus-trash-monitor.h>
 #include <libnautilus-private/nautilus-icon-names.h>
+#include <libnautilus-private/nautilus-autorun.h>
 #include <gio/gio.h>
 
 #include "nautilus-bookmark-list.h"
@@ -1314,6 +1315,7 @@
 		GVolume *volume;
 		gtk_tree_model_get (model, &iter, PLACES_SIDEBAR_COLUMN_VOLUME, &volume, -1);
 		if (volume != NULL) {
+			nautilus_inhibit_autorun_for_volume (volume);
 			nautilus_file_operations_mount_volume (NULL, volume);
 			g_object_unref (volume);
 		}
@@ -1429,6 +1431,7 @@
 			    -1);
 
 	if (volume != NULL) {
+		nautilus_inhibit_autorun_for_volume (volume);
 		nautilus_file_operations_mount_volume (NULL, volume);
 		g_object_unref (volume);
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]