[gvfs] udisks2: don't automount if drive is shared across all seats
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs] udisks2: don't automount if drive is shared across all seats
- Date: Mon, 23 Apr 2012 19:58:11 +0000 (UTC)
commit 495bf23f972cb14aa55d15b7c9fe53bd610a0590
Author: David Zeuthen <davidz redhat com>
Date: Mon Apr 23 15:46:31 2012 -0400
udisks2: don't automount if drive is shared across all seats
If we automount media in a drive assigned to all seats, then all
sessions on all seats will be notified of the new media... which is
definitely going to be annoying. Instead, just disable automounting on
such drives so the user manually have to mount it.
Of course, this depends on the shell doing the right thing. Which is:
only notifying the user when successfully auto-mounting in response to
a hotplug event. This is not currently the case, see
https://bugzilla.gnome.org/show_bug.cgi?id=660595#c19
for details about this bug.
Signed-off-by: David Zeuthen <davidz redhat com>
monitor/udisks2/gvfsudisks2utils.c | 7 ++++++-
monitor/udisks2/gvfsudisks2utils.h | 3 ++-
monitor/udisks2/gvfsudisks2volume.c | 8 ++++++--
monitor/udisks2/gvfsudisks2volumemonitor.c | 2 +-
4 files changed, 15 insertions(+), 5 deletions(-)
---
diff --git a/monitor/udisks2/gvfsudisks2utils.c b/monitor/udisks2/gvfsudisks2utils.c
index 43d583a..d747a63 100644
--- a/monitor/udisks2/gvfsudisks2utils.c
+++ b/monitor/udisks2/gvfsudisks2utils.c
@@ -547,9 +547,11 @@ get_seat (void)
#endif
gboolean
-gvfs_udisks2_utils_is_drive_on_our_seat (UDisksDrive *drive)
+gvfs_udisks2_utils_is_drive_on_our_seat (UDisksDrive *drive,
+ gboolean *out_shared)
{
gboolean ret = FALSE;
+ gboolean shared = FALSE;
const gchar *seat;
const gchar *drive_seat = NULL;
@@ -584,6 +586,7 @@ gvfs_udisks2_utils_is_drive_on_our_seat (UDisksDrive *drive)
if (g_strcmp0 (drive_seat, "all") == 0)
{
ret = TRUE;
+ shared = TRUE;
goto out;
}
@@ -592,5 +595,7 @@ gvfs_udisks2_utils_is_drive_on_our_seat (UDisksDrive *drive)
ret = TRUE;
out:
+ if (out_shared != NULL)
+ *out_shared = shared;
return ret;
}
diff --git a/monitor/udisks2/gvfsudisks2utils.h b/monitor/udisks2/gvfsudisks2utils.h
index 1965883..41ce875 100644
--- a/monitor/udisks2/gvfsudisks2utils.h
+++ b/monitor/udisks2/gvfsudisks2utils.h
@@ -50,7 +50,8 @@ gboolean gvfs_udisks2_utils_spawn_finish (GAsyncResult *res,
gchar **out_standard_error,
GError **error);
-gboolean gvfs_udisks2_utils_is_drive_on_our_seat (UDisksDrive *drive);
+gboolean gvfs_udisks2_utils_is_drive_on_our_seat (UDisksDrive *drive,
+ gboolean *out_shared);
G_END_DECLS
diff --git a/monitor/udisks2/gvfsudisks2volume.c b/monitor/udisks2/gvfsudisks2volume.c
index a1c7fa4..3ef5895 100644
--- a/monitor/udisks2/gvfsudisks2volume.c
+++ b/monitor/udisks2/gvfsudisks2volume.c
@@ -269,6 +269,8 @@ update_volume (GVfsUDisks2Volume *volume)
GIcon *drive_icon;
gchar *media_desc;
GIcon *media_icon;
+ gboolean shared;
+
udisks_client_get_drive_info (gvfs_udisks2_volume_monitor_get_udisks_client (volume->monitor),
udisks_drive,
NULL, /* drive_name */
@@ -314,8 +316,10 @@ update_volume (GVfsUDisks2Volume *volume)
if (media_icon != NULL)
g_object_unref (media_icon);
- /* Only automount drives attached to the same seat as we're running on */
- if (gvfs_udisks2_utils_is_drive_on_our_seat (udisks_drive))
+ /* Only automount drives attached to the same seat as we're running on
+ * and if the drive is NOT shared across all seats
+ */
+ if (gvfs_udisks2_utils_is_drive_on_our_seat (udisks_drive, &shared) && !shared)
{
/* Only automount filesystems from drives of known types/interconnects:
*
diff --git a/monitor/udisks2/gvfsudisks2volumemonitor.c b/monitor/udisks2/gvfsudisks2volumemonitor.c
index 2826164..002ab3c 100644
--- a/monitor/udisks2/gvfsudisks2volumemonitor.c
+++ b/monitor/udisks2/gvfsudisks2volumemonitor.c
@@ -906,7 +906,7 @@ should_include_drive (GVfsUDisks2VolumeMonitor *monitor,
gboolean ret = TRUE;
/* Don't include drives on other seats */
- if (!gvfs_udisks2_utils_is_drive_on_our_seat (drive))
+ if (!gvfs_udisks2_utils_is_drive_on_our_seat (drive, NULL))
{
ret = FALSE;
goto out;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]