Bug 38535 – A DeviceAutoMountHint attribute should be added to udisks
authorAyan George <ayan.george@canonical.com>
Thu, 23 Jun 2011 17:27:06 +0000 (13:27 -0400)
committerDavid Zeuthen <davidz@redhat.com>
Thu, 23 Jun 2011 17:27:06 +0000 (13:27 -0400)
With minor changes by David Zeuthen, see the bug for details.

https://bugs.freedesktop.org/show_bug.cgi?id=38535

Signed-off-by: David Zeuthen <davidz@redhat.com>
data/org.freedesktop.UDisks.Device.xml
src/device-private.c
src/device-private.h
src/device.c

index 991976d..cdf6176 100644 (file)
       </doc:para></doc:description></doc:doc>
     </property>
 
+    <property name="DeviceAutoMountHint" type="s" access="read">
+      <doc:doc><doc:description><doc:para>
+            A hint to the desktop that indicates if a device should be automounted.
+            Possible values are:
+            <doc:list>
+              <doc:item>
+                <doc:term>always</doc:term>
+                <doc:definition>Device should always be auto-mounted.</doc:definition>
+              </doc:item>
+              <doc:item>
+                <doc:term>never</doc:term>
+                <doc:definition>Device should never be auto-mounted.</doc:definition>
+              </doc:item>
+            </doc:list>
+            An empty string is interpreted to mean that there is no
+            hint - the desktop auto-mounter should make its own
+            decision of whether to auto-mount the device.
+            </doc:para></doc:description></doc:doc>
+    </property>
+
     <property name="JobInProgress" type="b" access="read">
       <doc:doc><doc:description><doc:para>
             The job properties specify if a job initiated via the
index 22a0d35..53196f3 100644 (file)
@@ -109,6 +109,18 @@ ptr_str_array_from_strv (GStrv s)
 }
 
 void
+device_set_device_auto_mount_hint (Device *device,
+                                   const gchar *value)
+{
+  if (G_UNLIKELY (g_strcmp0 (device->priv->device_auto_mount_hint, value) != 0))
+    {
+      g_free (device->priv->device_auto_mount_hint);
+      device->priv->device_auto_mount_hint = g_strdup (value);
+      emit_changed (device, "device_auto_mount_hint");
+    }
+}
+
+void
 device_set_device_detection_time (Device *device,
                                   guint64 value)
 {
index e519083..f331ddc 100644 (file)
@@ -133,6 +133,7 @@ struct DevicePrivate
   gboolean device_presentation_nopolicy;
   char *device_presentation_name;
   char *device_presentation_icon_name;
+  char *device_auto_mount_hint;
 
   char *id_usage;
   char *id_type;
@@ -253,6 +254,7 @@ void device_set_job_initiated_by_uid (Device *device, guint value);
 void device_set_job_is_cancellable (Device *device, gboolean value);
 void device_set_job_percentage (Device *device, gdouble value);
 
+void device_set_device_auto_mount_hint (Device *device, const gchar *value);
 void device_set_device_detection_time (Device *device, guint64 value);
 void device_set_device_media_detection_time (Device *device, guint64 value);
 void device_set_device_file (Device *device, const gchar *value);
index c4b4ab3..e39208d 100644 (file)
@@ -177,6 +177,7 @@ enum
     PROP_0,
     PROP_NATIVE_PATH,
 
+    PROP_DEVICE_AUTOMOUNT_HINT,
     PROP_DEVICE_DETECTION_TIME,
     PROP_DEVICE_MEDIA_DETECTION_TIME,
     PROP_DEVICE_MAJOR,
@@ -381,6 +382,9 @@ get_property (GObject *object,
     case PROP_DEVICE_FILE:
       g_value_set_string (value, device->priv->device_file);
       break;
+    case PROP_DEVICE_AUTOMOUNT_HINT:
+      g_value_set_string (value, device->priv->device_auto_mount_hint);
+      break;
     case PROP_DEVICE_FILE_PRESENTATION:
       if (device->priv->device_file_presentation != NULL)
         g_value_set_string (value, device->priv->device_file_presentation);
@@ -864,6 +868,15 @@ device_class_init (DeviceClass *klass)
                                                                                         NULL,
                                                                                         NULL,
                                                                                         G_PARAM_READABLE));
+
+  g_object_class_install_property (object_class,
+                                   PROP_DEVICE_AUTOMOUNT_HINT,
+                                   g_param_spec_string ("device-auto-mount-hint",
+                                                        NULL,
+                                                        NULL,
+                                                        NULL,
+                                                        G_PARAM_READABLE));
+
   g_object_class_install_property (object_class,
                                    PROP_DEVICE_DETECTION_TIME,
                                    g_param_spec_uint64 ("device-detection-time",
@@ -2278,6 +2291,7 @@ update_info_presentation (Device *device)
 {
   gboolean hide;
   gboolean nopolicy;
+  const gchar *auto_mount_hint;
 
   hide = FALSE;
   if (g_udev_device_has_property (device->priv->d, "UDISKS_PRESENTATION_HIDE"))
@@ -2294,6 +2308,12 @@ update_info_presentation (Device *device)
   device_set_device_presentation_icon_name (device, g_udev_device_get_property (device->priv->d,
                                                                                 "UDISKS_PRESENTATION_ICON_NAME"));
 
+  auto_mount_hint = "";
+  if (g_udev_device_has_property (device->priv->d, "UDISKS_AUTOMOUNT_HINT"))
+    auto_mount_hint = g_udev_device_get_property (device->priv->d, "UDISKS_AUTOMOUNT_HINT");
+
+  device_set_device_auto_mount_hint (device, auto_mount_hint);
+
   return TRUE;
 }