Group :: Desktop gráfico/GNOME
RPM: nautilus
Main Changelog Spec Patches Sources Download Gear Bugs e FR Repocop
Patch: nautilus-2.22.1-umountfstab.patch
Download
Download
diff -p -up nautilus-2.22.1/libnautilus-private/nautilus-desktop-link-monitor.c.orig nautilus-2.22.1/libnautilus-private/nautilus-desktop-link-monitor.c
--- nautilus-2.22.1/libnautilus-private/nautilus-desktop-link-monitor.c.orig 2008-05-19 06:18:46.000000000 -0400
+++ nautilus-2.22.1/libnautilus-private/nautilus-desktop-link-monitor.c 2008-05-20 12:39:57.000000000 -0400
@@ -55,6 +55,7 @@ struct NautilusDesktopLinkMonitorDetails
gulong mount_id;
gulong unmount_id;
gulong changed_id;
+ gulong volume_removed_id;
GList *mount_links;
};
@@ -243,6 +244,43 @@ mount_changed_callback (GVolumeMonitor *
/* TODO: update the mount */
}
+static gboolean clean_leftover_mount (gpointer data)
+{
+ GVolume *volume;
+ NautilusDesktopLinkMonitor *monitor;
+ GList *l;
+ GMount *mount;
+ char *volume_uuid, *mount_uuid;
+
+ volume = G_VOLUME (data);
+
+ monitor = nautilus_desktop_link_monitor_get ();
+ volume_uuid = g_volume_get_uuid (volume);
+ for (l = monitor->details->mount_links; l != NULL; l = l->next) {
+ if (l->data) {
+ mount = nautilus_desktop_link_get_mount(l->data);
+ mount_uuid = g_mount_get_uuid (mount);
+
+ if (g_mount_get_volume (mount) == NULL
+ && eel_strcmp (volume_uuid, mount_uuid) == 0) {
+ g_mount_unmount (mount, G_MOUNT_UNMOUNT_NONE, NULL, NULL, NULL);
+ }
+ }
+ }
+ g_free (volume_uuid);
+ g_object_unref (volume);
+
+ return FALSE;
+}
+
+static void
+volume_removed_callback (GVolumeMonitor *volume_monitor,
+ GVolume *volume,
+ NautilusDesktopLinkMonitor *monitor)
+{
+ g_idle_add (clean_leftover_mount, g_object_ref (volume));
+}
+
static void
update_link_visibility (NautilusDesktopLinkMonitor *monitor,
NautilusDesktopLink **link_ref,
@@ -418,6 +456,9 @@ nautilus_desktop_link_monitor_init (gpoi
monitor->details->changed_id =
g_signal_connect_object (monitor->details->volume_monitor, "mount_changed",
G_CALLBACK (mount_changed_callback), monitor, 0);
+ monitor->details->volume_removed_id =
+ g_signal_connect_object (monitor->details->volume_monitor, "volume_removed",
+ G_CALLBACK (volume_removed_callback), monitor, 0);
}
@@ -471,7 +512,7 @@ desktop_link_monitor_finalize (GObject *
g_list_foreach (monitor->details->mount_links, (GFunc)g_object_unref, NULL);
g_list_free (monitor->details->mount_links);
monitor->details->mount_links = NULL;
-
+
nautilus_directory_unref (monitor->details->desktop_dir);
monitor->details->desktop_dir = NULL;
@@ -488,6 +529,9 @@ desktop_link_monitor_finalize (GObject *
if (monitor->details->changed_id != 0) {
g_source_remove (monitor->details->changed_id);
}
+ if (monitor->details->volume_removed_id != 0) {
+ g_source_remove (monitor->details->volume_removed_id);
+ }
g_free (monitor->details);