Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37872248
en ru br
ALT Linux repositórios
S:45.0-alt1
5.0: 2.26.2-alt1
4.1: 2.22.5.1-alt0.M41.1
4.0: 2.16.0-alt1.M40.1

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


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);
 
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009