summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog46
-rw-r--r--libnautilus-private/nautilus-autorun.c18
-rw-r--r--libnautilus-private/nautilus-directory-async.c212
-rw-r--r--libnautilus-private/nautilus-directory-private.h4
-rw-r--r--libnautilus-private/nautilus-directory.c2
-rw-r--r--libnautilus-private/nautilus-dnd.c2
-rw-r--r--libnautilus-private/nautilus-file-attributes.h1
-rw-r--r--libnautilus-private/nautilus-file-operations.c1
-rw-r--r--libnautilus-private/nautilus-file-private.h4
-rw-r--r--libnautilus-private/nautilus-file.c62
-rw-r--r--libnautilus-private/nautilus-file.h1
-rw-r--r--src/file-manager/fm-directory-view.c8
-rw-r--r--src/file-manager/fm-icon-view.c20
-rw-r--r--src/nautilus-application.c2
-rw-r--r--src/nautilus-places-sidebar.c3
15 files changed, 362 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index d91ac9099..57cae58a1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,49 @@
+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).
+
2008-02-21 Cosimo Cecchi <cosimoc@gnome.org>
* src/nautilus-application.c: (find_parent_spatial_window):
diff --git a/libnautilus-private/nautilus-autorun.c b/libnautilus-private/nautilus-autorun.c
index 36e355dd2..9099d6dd8 100644
--- a/libnautilus-private/nautilus-autorun.c
+++ b/libnautilus-private/nautilus-autorun.c
@@ -1339,10 +1339,12 @@ should_autorun_mount (GMount *mount)
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 @@ should_autorun_mount (GMount *mount)
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 @@ should_autorun_mount (GMount *mount)
}
}
- 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);
diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c
index 0c0c902ad..419fdfb27 100644
--- a/libnautilus-private/nautilus-directory-async.c
+++ b/libnautilus-private/nautilus-directory-async.c
@@ -89,6 +89,12 @@ struct MountState {
NautilusFile *file;
};
+struct FilesystemInfoState {
+ NautilusDirectory *directory;
+ GCancellable *cancellable;
+ NautilusFile *file;
+};
+
struct DirectoryLoadState {
NautilusDirectory *directory;
GCancellable *cancellable;
@@ -628,6 +634,10 @@ nautilus_directory_set_up_request (Request *request,
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 @@ nautilus_async_destroying_file (NautilusFile *file)
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 @@ lacks_info (NautilusFile *file)
}
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 @@ request_is_satisfied (NautilusDirectory *directory,
}
}
+ 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_count_start (NautilusDirectory *directory,
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 @@ mime_list_start (NautilusDirectory *directory,
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 @@ mount_start (NautilusDirectory *directory,
}
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 @@ start_or_stop_io (NautilusDirectory *directory)
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 @@ start_or_stop_io (NautilusDirectory *directory)
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 @@ nautilus_directory_cancel (NautilusDirectory *directory)
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 @@ cancel_mount_for_file (NautilusDirectory *directory,
}
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 @@ cancel_loading_attributes (NautilusDirectory *directory,
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 @@ nautilus_directory_cancel_loading_file_attributes (NautilusDirectory *direc
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);
}
diff --git a/libnautilus-private/nautilus-directory-private.h b/libnautilus-private/nautilus-directory-private.h
index e9ae8c164..86c5bbdd0 100644
--- a/libnautilus-private/nautilus-directory-private.h
+++ b/libnautilus-private/nautilus-directory-private.h
@@ -44,6 +44,7 @@ typedef struct NewFilesState NewFilesState;
typedef struct MimeListState MimeListState;
typedef struct ThumbnailState ThumbnailState;
typedef struct MountState MountState;
+typedef struct FilesystemInfoState FilesystemInfoState;
struct NautilusDirectoryDetails
{
@@ -106,6 +107,8 @@ struct NautilusDirectoryDetails
ThumbnailState *thumbnail_state;
MountState *mount_state;
+
+ FilesystemInfoState *filesystem_info_state;
TopLeftTextReadState *top_left_read_state;
@@ -130,6 +133,7 @@ typedef struct {
gboolean extension_info;
gboolean thumbnail;
gboolean mount;
+ gboolean filesystem_info;
} Request;
NautilusDirectory *nautilus_directory_get_existing (GFile *location);
diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c
index bad713ab2..a59f7ef5f 100644
--- a/libnautilus-private/nautilus-directory.c
+++ b/libnautilus-private/nautilus-directory.c
@@ -1240,7 +1240,7 @@ collect_directories_by_container (gpointer key, gpointer value, gpointer callbac
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 =
diff --git a/libnautilus-private/nautilus-dnd.c b/libnautilus-private/nautilus-dnd.c
index df1139451..97a502ff9 100644
--- a/libnautilus-private/nautilus-dnd.c
+++ b/libnautilus-private/nautilus-dnd.c
@@ -431,7 +431,7 @@ nautilus_drag_default_drop_action_for_icons (GdkDragContext *context,
/* 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")) {
diff --git a/libnautilus-private/nautilus-file-attributes.h b/libnautilus-private/nautilus-file-attributes.h
index a660e48f2..5a7d215e1 100644
--- a/libnautilus-private/nautilus-file-attributes.h
+++ b/libnautilus-private/nautilus-file-attributes.h
@@ -41,6 +41,7 @@ typedef enum {
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 */
diff --git a/libnautilus-private/nautilus-file-operations.c b/libnautilus-private/nautilus-file-operations.c
index 9157d20af..4e0eda271 100644
--- a/libnautilus-private/nautilus-file-operations.c
+++ b/libnautilus-private/nautilus-file-operations.c
@@ -2040,7 +2040,6 @@ nautilus_file_operations_mount_volume (GtkWindow *parent_window,
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);
}
diff --git a/libnautilus-private/nautilus-file-private.h b/libnautilus-private/nautilus-file-private.h
index 9d9862428..8420a7ef5 100644
--- a/libnautilus-private/nautilus-file-private.h
+++ b/libnautilus-private/nautilus-file-private.h
@@ -206,6 +206,10 @@ struct NautilusFileDetails
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 {
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 2e6e83556..3a9843952 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -3199,10 +3199,30 @@ mimetype_limited_by_size (const char *mime_type)
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_should_show_thumbnail (NautilusFile *file)
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 @@ show_directory_item_count_changed_callback (gpointer callback_data)
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 @@ get_speed_tradeoff_preference_for_file (NautilusFile *file, NautilusSpeedTradeof
}
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
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index b7e728d62..99e0aeb98 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -218,6 +218,7 @@ void nautilus_file_set_attributes (Nautilu
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);
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index a21362ee1..0f56cbe11 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -7552,7 +7552,9 @@ load_directory (FMDirectoryView *view,
* 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 @@ load_directory (FMDirectoryView *view,
/* 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);
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index f3024e685..e10f266d1 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -1888,6 +1888,9 @@ static gboolean
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 @@ should_preview_sound (NautilusFile *file)
}
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
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 1172cb946..92fdeb83f 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -1460,7 +1460,7 @@ mount_removed_callback (GVolumeMonitor *monitor,
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);
diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c
index 8eb568836..e63db3b20 100644
--- a/src/nautilus-places-sidebar.c
+++ b/src/nautilus-places-sidebar.c
@@ -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 @@ open_selected_bookmark (NautilusPlacesSidebar *sidebar,
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 @@ mount_shortcut_cb (GtkMenuItem *item,
-1);
if (volume != NULL) {
+ nautilus_inhibit_autorun_for_volume (volume);
nautilus_file_operations_mount_volume (NULL, volume);
g_object_unref (volume);
}