diff options
author | Federico Mena Quintero <federico@ximian.com> | 2005-09-08 19:31:30 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2005-09-08 19:31:30 +0000 |
commit | d6df1e840665b3798edbf56c6a2e901dd147ac16 (patch) | |
tree | 1e5b85ef4315dc2b36a061c25424d20666e0e8a1 | |
parent | 293fe087c37558ff60eececc59d9ae2979bc6845 (diff) | |
download | nautilus-d6df1e840665b3798edbf56c6a2e901dd147ac16.tar.gz |
Fixes bug #171073:
2005-09-08 Federico Mena Quintero <federico@ximian.com>
Fixes bug #171073:
* libnautilus-private/nautilus-trash-directory.c
(nautilus_trash_directory_instance_init): In addition to
connecting to "volume_pre_unmount" on the volume monitor, also
connect to "volume_unmounted". This will let the trash clean up
its merged directory even if the unmount is not initiated from
Nautilus.
* libnautilus-private/nautilus-merged-directory.c
(merged_remove_real_directory): When a real directory is removed
from the merged directory, emit notifications to that effect.
This lets the trash window remove the icons that used to
correspond to a volume that got unmounted.
(real_directory_notify_files_removed): New utility function.
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | libnautilus-private/nautilus-merged-directory.c | 29 | ||||
-rw-r--r-- | libnautilus-private/nautilus-trash-directory.c | 10 |
3 files changed, 57 insertions, 0 deletions
@@ -1,3 +1,21 @@ +2005-09-08 Federico Mena Quintero <federico@ximian.com> + + Fixes bug #171073: + + * libnautilus-private/nautilus-trash-directory.c + (nautilus_trash_directory_instance_init): In addition to + connecting to "volume_pre_unmount" on the volume monitor, also + connect to "volume_unmounted". This will let the trash clean up + its merged directory even if the unmount is not initiated from + Nautilus. + + * libnautilus-private/nautilus-merged-directory.c + (merged_remove_real_directory): When a real directory is removed + from the merged directory, emit notifications to that effect. + This lets the trash window remove the icons that used to + correspond to a volume that got unmounted. + (real_directory_notify_files_removed): New utility function. + 2005-09-06 Christian Neumair <chris@gnome-de.org> * src/file-manager/fm-list-view.c: (fm_list_view_init): Ensure that diff --git a/libnautilus-private/nautilus-merged-directory.c b/libnautilus-private/nautilus-merged-directory.c index ffb366a5a..80016772a 100644 --- a/libnautilus-private/nautilus-merged-directory.c +++ b/libnautilus-private/nautilus-merged-directory.c @@ -27,6 +27,7 @@ #include "nautilus-merged-directory.h" #include "nautilus-directory-private.h" +#include "nautilus-directory-notify.h" #include "nautilus-file.h" #include <eel/eel-glib-extensions.h> #include <gtk/gtksignal.h> @@ -540,6 +541,31 @@ monitor_remove_directory (gpointer key, } static void +real_directory_notify_files_removed (NautilusDirectory *real_directory) +{ + GList *files, *l; + + files = nautilus_directory_get_file_list (real_directory); + + for (l = files; l; l = l->next) { + NautilusFile *file; + char *uri; + + file = NAUTILUS_FILE (l->data); + uri = nautilus_file_get_uri (file); + nautilus_file_unref (file); + + l->data = uri; + } + + if (files) { + nautilus_directory_notify_files_removed (files); + } + + eel_g_list_free_deep (files); +} + +static void merged_remove_real_directory (NautilusMergedDirectory *merged, NautilusDirectory *real_directory) { @@ -547,6 +573,9 @@ merged_remove_real_directory (NautilusMergedDirectory *merged, g_return_if_fail (NAUTILUS_IS_DIRECTORY (real_directory)); g_return_if_fail (g_list_find (merged->details->directories, real_directory) != NULL); + /* Since the real directory will be going away, act as if files were removed */ + real_directory_notify_files_removed (real_directory); + /* Remove this directory from callbacks and monitors. */ eel_g_hash_table_safe_for_each (merged->details->callbacks, merged_callback_remove_directory_cover, diff --git a/libnautilus-private/nautilus-trash-directory.c b/libnautilus-private/nautilus-trash-directory.c index aebbfb0f1..b254ef961 100644 --- a/libnautilus-private/nautilus-trash-directory.c +++ b/libnautilus-private/nautilus-trash-directory.c @@ -265,6 +265,14 @@ volume_mounted_callback (GnomeVFSVolumeMonitor *monitor, } static void +volume_unmounted_callback (GnomeVFSVolumeMonitor *monitor, + GnomeVFSVolume *volume, + NautilusTrashDirectory *trash) +{ + remove_volume (trash, volume); +} + +static void nautilus_trash_directory_instance_init (NautilusTrashDirectory *trash) { GnomeVFSVolumeMonitor *volume_monitor; @@ -278,6 +286,8 @@ nautilus_trash_directory_instance_init (NautilusTrashDirectory *trash) G_CALLBACK (volume_mounted_callback), trash, 0); g_signal_connect_object (volume_monitor, "volume_pre_unmount", G_CALLBACK (volume_unmount_started_callback), trash, 0); + g_signal_connect_object (volume_monitor, "volume_unmounted", + G_CALLBACK (volume_unmounted_callback), trash, 0); } /* Finish initializing a new NautilusTrashDirectory. We have to do the |