[gvfs] udisks2: don't automount if drive is shared across all seats



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]