summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-monitor.c
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@gmx.de>2014-02-16 22:44:48 +0100
committerCosimo Cecchi <cosimoc@gnome.org>2014-02-17 13:01:43 -0800
commita23ed4ad0173ca7a51e26282b85d06ce4b25912a (patch)
tree9035d30717c30db4179c9d3728de0147a65521ec /libnautilus-private/nautilus-monitor.c
parentda06dfc438e578405d616c48e8e3809d37c908bb (diff)
downloadnautilus-a23ed4ad0173ca7a51e26282b85d06ce4b25912a.tar.gz
monitor: improve unmount detect heuristic
Detect when an unmount happens and a subfolder of the mount is displayed. The previous solution did a GMount pointer compare, but this was not working in any case. This patch fixes is by comparing the removed mount root with the currently monitored location. This fixes a regression since 0852847e2613dbcebb4ed7f58e5b2aee3aa86a90. https://bugzilla.gnome.org/show_bug.cgi?id=724560
Diffstat (limited to 'libnautilus-private/nautilus-monitor.c')
-rw-r--r--libnautilus-private/nautilus-monitor.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/libnautilus-private/nautilus-monitor.c b/libnautilus-private/nautilus-monitor.c
index 5b21c2438..484c75b20 100644
--- a/libnautilus-private/nautilus-monitor.c
+++ b/libnautilus-private/nautilus-monitor.c
@@ -32,7 +32,6 @@
struct NautilusMonitor {
GFileMonitor *monitor;
GVolumeMonitor *volume_monitor;
- GMount *mount;
GFile *location;
};
@@ -85,11 +84,16 @@ mount_removed (GVolumeMonitor *volume_monitor,
gpointer user_data)
{
NautilusMonitor *monitor = user_data;
+ GFile *mount_location;
- if (mount == monitor->mount) {
+ mount_location = g_mount_get_root (mount);
+
+ if (g_file_has_prefix (monitor->location, mount_location)) {
nautilus_file_changes_queue_file_removed (monitor->location);
schedule_call_consume_changes ();
}
+
+ g_object_unref (mount_location);
}
static void
@@ -143,7 +147,6 @@ nautilus_monitor_directory (GFile *location)
if (dir_monitor != NULL) {
ret->monitor = dir_monitor;
} else if (!g_file_is_native (location)) {
- ret->mount = nautilus_get_mounted_mount_for_root (location);
ret->location = g_object_ref (location);
ret->volume_monitor = g_volume_monitor_get ();
}
@@ -177,6 +180,5 @@ nautilus_monitor_cancel (NautilusMonitor *monitor)
}
g_clear_object (&monitor->location);
- g_clear_object (&monitor->mount);
g_slice_free (NautilusMonitor, monitor);
}