[gvfs] Support get_sort_key() in out-of-process volume monitors and gvfs-mount(1)



commit 2b5e26a0ca1f9a38fe981f431ee6fc29180d8fff
Author: David Zeuthen <davidz redhat com>
Date:   Thu Oct 13 16:55:18 2011 -0400

    Support get_sort_key() in out-of-process volume monitors and gvfs-mount(1)
    
    This is detailed in this bug
    
     https://bugzilla.gnome.org/show_bug.cgi?id=661711
    
    Also extend the private D-Bus protocol used between the client- and
    service-side for out-of-process volume monitors. In particular,
    introduce a new a{sv} member that we can use in the future to for
    expansion without breaking ABI.
    
    Signed-off-by: David Zeuthen <davidz redhat com>

 monitor/proxy/gproxydrive.c                  |   40 +++++++++++++++++++++-
 monitor/proxy/gproxymount.c                  |   26 ++++++++++++++
 monitor/proxy/gproxyshadowmount.c            |   14 ++++++++
 monitor/proxy/gproxyvolume.c                 |   27 +++++++++++++++
 monitor/proxy/gproxyvolumemonitor.c          |   24 +++++++++++++
 monitor/proxy/gvfsproxyvolumemonitordaemon.c |   46 ++++++++++++++++++++++++--
 programs/gvfs-mount.c                        |   13 +++++++
 7 files changed, 185 insertions(+), 5 deletions(-)
---
diff --git a/monitor/proxy/gproxydrive.c b/monitor/proxy/gproxydrive.c
index 49e9ae1..be2b600 100644
--- a/monitor/proxy/gproxydrive.c
+++ b/monitor/proxy/gproxydrive.c
@@ -60,6 +60,8 @@ struct _GProxyDrive {
   GDriveStartStopType start_stop_type;
 
   GHashTable *identifiers;
+
+  gchar *sort_key;
 };
 
 static void g_proxy_drive_drive_iface_init (GDriveIface *iface);
@@ -84,6 +86,7 @@ g_proxy_drive_finalize (GObject *object)
   g_strfreev (drive->volume_ids);
   if (drive->identifiers != NULL)
     g_hash_table_unref (drive->identifiers);
+  g_free (drive->sort_key);
 
   if (G_OBJECT_CLASS (g_proxy_drive_parent_class)->finalize)
     (*G_OBJECT_CLASS (g_proxy_drive_parent_class)->finalize) (object);
@@ -133,8 +136,10 @@ g_proxy_drive_new (GProxyVolumeMonitor *volume_monitor)
  * uint32               start-stop-type
  * array:string         volume-ids
  * dict:string->string  identifiers
+ * string               sort_key
+ * a{sv}                expansion
  */
-#define DRIVE_STRUCT_TYPE "(sssbbbbbbbbuasa{ss})"
+#define DRIVE_STRUCT_TYPE "(sssbbbbbbbbuasa{ss}sa{sv})"
 
 void
 g_proxy_drive_update (GProxyDrive         *drive,
@@ -156,6 +161,7 @@ g_proxy_drive_update (GProxyDrive         *drive,
   dbus_uint32_t start_stop_type;
   GPtrArray *volume_ids;
   GHashTable *identifiers;
+  const char *sort_key;
 
   dbus_message_iter_recurse (iter, &iter_struct);
   dbus_message_iter_get_basic (&iter_struct, &id);
@@ -198,6 +204,15 @@ g_proxy_drive_update (GProxyDrive         *drive,
   identifiers = _get_identifiers (&iter_struct);
   dbus_message_iter_next (&iter_struct);
 
+  /* make sure we are backwards compat with old daemon instance */
+  sort_key = NULL;
+  if (dbus_message_iter_has_next (&iter_struct))
+    {
+      dbus_message_iter_get_basic (&iter_struct, &sort_key);
+      dbus_message_iter_next (&iter_struct);
+      /* TODO: decode expansion, once used */
+    }
+
   if (drive->id != NULL && strcmp (drive->id, id) != 0)
     {
       g_warning ("id mismatch during update of drive");
@@ -207,6 +222,9 @@ g_proxy_drive_update (GProxyDrive         *drive,
   if (strlen (name) == 0)
     name = NULL;
 
+  if (sort_key != NULL && strlen (sort_key) == 0)
+    sort_key = NULL;
+
   /* out with the old */
   g_free (drive->id);
   g_free (drive->name);
@@ -215,6 +233,7 @@ g_proxy_drive_update (GProxyDrive         *drive,
   g_strfreev (drive->volume_ids);
   if (drive->identifiers != NULL)
     g_hash_table_unref (drive->identifiers);
+  g_free (drive->sort_key);
 
   /* in with the new */
   drive->id = g_strdup (id);
@@ -223,7 +242,6 @@ g_proxy_drive_update (GProxyDrive         *drive,
     drive->icon = NULL;
   else
     drive->icon = g_icon_new_for_string (gicon_data, NULL);
-
   drive->can_eject = can_eject;
   drive->can_poll_for_media = can_poll_for_media;
   drive->has_media = has_media;
@@ -235,6 +253,7 @@ g_proxy_drive_update (GProxyDrive         *drive,
   drive->start_stop_type = start_stop_type;
   drive->identifiers = identifiers != NULL ? g_hash_table_ref (identifiers) : NULL;
   drive->volume_ids = g_strdupv ((char **) volume_ids->pdata);
+  drive->sort_key = g_strdup (sort_key);
 
  out:
   g_ptr_array_free (volume_ids, TRUE);
@@ -267,6 +286,12 @@ g_proxy_drive_get_name (GDrive *drive)
   return name;
 }
 
+static gboolean
+volume_compare (GVolume *a, GVolume *b)
+{
+  return g_strcmp0 (g_volume_get_sort_key (a), g_volume_get_sort_key (b));
+}
+
 static GList *
 g_proxy_drive_get_volumes (GDrive *drive)
 {
@@ -290,6 +315,8 @@ g_proxy_drive_get_volumes (GDrive *drive)
     }
   G_UNLOCK (proxy_drive);
 
+  l = g_list_sort (l, (GCompareFunc) volume_compare);
+
   return l;
 }
 
@@ -1121,6 +1148,14 @@ g_proxy_drive_poll_for_media_finish (GDrive        *drive,
 
 /* ---------------------------------------------------------------------------------------------------- */
 
+static const gchar *
+g_proxy_drive_get_sort_key (GDrive *_drive)
+{
+  GProxyDrive *drive = G_PROXY_DRIVE (_drive);
+  return drive->sort_key;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
 
 static void
 g_proxy_drive_drive_iface_init (GDriveIface *iface)
@@ -1150,6 +1185,7 @@ g_proxy_drive_drive_iface_init (GDriveIface *iface)
   iface->stop = g_proxy_drive_stop;
   iface->stop_finish = g_proxy_drive_stop_finish;
   iface->get_start_stop_type = g_proxy_drive_get_start_stop_type;
+  iface->get_sort_key = g_proxy_drive_get_sort_key;
 }
 
 void
diff --git a/monitor/proxy/gproxymount.c b/monitor/proxy/gproxymount.c
index 626d592..cd3ca49 100644
--- a/monitor/proxy/gproxymount.c
+++ b/monitor/proxy/gproxymount.c
@@ -54,6 +54,7 @@ struct _GProxyMount {
   char **x_content_types;
   GFile *root;
   GIcon *icon;
+  gchar *sort_key;
 };
 
 static void g_proxy_mount_mount_iface_init (GMountIface *iface);
@@ -82,6 +83,8 @@ g_proxy_mount_finalize (GObject *object)
   if (mount->volume_monitor != NULL)
     g_object_unref (mount->volume_monitor);
 
+  g_free (mount->sort_key);
+
   if (G_OBJECT_CLASS (g_proxy_mount_parent_class)->finalize)
     (*G_OBJECT_CLASS (g_proxy_mount_parent_class)->finalize) (object);
 }
@@ -156,6 +159,7 @@ g_proxy_mount_update (GProxyMount         *mount,
   dbus_bool_t can_unmount;
   const char *volume_id;
   GPtrArray *x_content_types;
+  const gchar *sort_key;
 
   dbus_message_iter_recurse (iter, &iter_struct);
   dbus_message_iter_get_basic (&iter_struct, &id);
@@ -185,6 +189,15 @@ g_proxy_mount_update (GProxyMount         *mount,
   g_ptr_array_add (x_content_types, NULL);
   dbus_message_iter_next (&iter_struct);
 
+  /* make sure we are backwards compat with old daemon instance */
+  sort_key = NULL;
+  if (dbus_message_iter_has_next (&iter_struct))
+    {
+      dbus_message_iter_get_basic (&iter_struct, &sort_key);
+      dbus_message_iter_next (&iter_struct);
+      /* TODO: decode expansion, once used */
+    }
+
   if (mount->id != NULL && strcmp (mount->id, id) != 0)
     {
       g_warning ("id mismatch during update of mount");
@@ -195,6 +208,8 @@ g_proxy_mount_update (GProxyMount         *mount,
     name = NULL;
   if (strlen (uuid) == 0)
     uuid = NULL;
+  if (sort_key != NULL && strlen (sort_key) == 0)
+    sort_key = NULL;
 
   /* out with the old */
   g_free (mount->id);
@@ -206,6 +221,7 @@ g_proxy_mount_update (GProxyMount         *mount,
   g_strfreev (mount->x_content_types);
   if (mount->root != NULL)
     g_object_unref (mount->root);
+  g_free (mount->sort_key);
 
   /* in with the new */
   mount->id = g_strdup (id);
@@ -219,6 +235,7 @@ g_proxy_mount_update (GProxyMount         *mount,
   mount->can_unmount = can_unmount;
   mount->volume_id = g_strdup (volume_id);
   mount->x_content_types = g_strdupv ((char **) x_content_types->pdata);
+  mount->sort_key = g_strdup (sort_key);
 
  out:
   g_ptr_array_free (x_content_types, TRUE);
@@ -677,6 +694,14 @@ g_proxy_mount_guess_content_type_sync (GMount              *mount,
   return g_strdupv (proxy_mount->x_content_types);
 }
 
+
+static const gchar *
+g_proxy_mount_get_sort_key (GMount *_mount)
+{
+  GProxyMount *mount = G_PROXY_MOUNT (_mount);
+  return mount->sort_key;
+}
+
 static void
 g_proxy_mount_mount_iface_init (GMountIface *iface)
 {
@@ -699,6 +724,7 @@ g_proxy_mount_mount_iface_init (GMountIface *iface)
   iface->guess_content_type = g_proxy_mount_guess_content_type;
   iface->guess_content_type_finish = g_proxy_mount_guess_content_type_finish;
   iface->guess_content_type_sync = g_proxy_mount_guess_content_type_sync;
+  iface->get_sort_key = g_proxy_mount_get_sort_key;
 }
 
 void
diff --git a/monitor/proxy/gproxyshadowmount.c b/monitor/proxy/gproxyshadowmount.c
index f8a5dfb..b83d2f1 100644
--- a/monitor/proxy/gproxyshadowmount.c
+++ b/monitor/proxy/gproxyshadowmount.c
@@ -477,6 +477,19 @@ g_proxy_shadow_mount_get_activation_root (GProxyShadowMount *mount)
   return g_object_ref (mount->root);
 }
 
+static const gchar *
+g_proxy_shadow_mount_get_sort_key (GMount *mount)
+{
+  GProxyShadowMount *proxy_shadow_mount = G_PROXY_SHADOW_MOUNT (mount);
+  const gchar *ret;
+
+  G_LOCK (proxy_shadow_mount);
+  ret = g_mount_get_sort_key (proxy_shadow_mount->real_mount);
+  G_UNLOCK (proxy_shadow_mount);
+
+  return ret;
+}
+
 static void
 g_proxy_shadow_mount_mount_iface_init (GMountIface *iface)
 {
@@ -499,6 +512,7 @@ g_proxy_shadow_mount_mount_iface_init (GMountIface *iface)
   iface->guess_content_type = g_proxy_shadow_mount_guess_content_type;
   iface->guess_content_type_finish = g_proxy_shadow_mount_guess_content_type_finish;
   iface->guess_content_type_sync = g_proxy_shadow_mount_guess_content_type_sync;
+  iface->get_sort_key = g_proxy_shadow_mount_get_sort_key;
 }
 
 void
diff --git a/monitor/proxy/gproxyvolume.c b/monitor/proxy/gproxyvolume.c
index d70ebc6..b6b8c91 100644
--- a/monitor/proxy/gproxyvolume.c
+++ b/monitor/proxy/gproxyvolume.c
@@ -65,6 +65,8 @@ struct _GProxyVolume {
   gboolean should_automount;
 
   GProxyShadowMount *shadow_mount;
+
+  gchar *sort_key;
 };
 
 static void g_proxy_volume_volume_iface_init (GVolumeIface *iface);
@@ -119,6 +121,7 @@ g_proxy_volume_finalize (GObject *object)
     {
       g_object_unref (volume->volume_monitor);
     }
+  g_free (volume->sort_key);
 
   if (G_OBJECT_CLASS (g_proxy_volume_parent_class)->finalize)
     (*G_OBJECT_CLASS (g_proxy_volume_parent_class)->finalize) (object);
@@ -349,6 +352,8 @@ update_shadow_mount_in_idle (GProxyVolume *volume)
  * string               drive-id
  * string               mount-id
  * dict:string->string  identifiers
+ * string               sort_key
+ * a{sv}                expansion
  */
 
 void g_proxy_volume_update (GProxyVolume    *volume,
@@ -365,6 +370,7 @@ void g_proxy_volume_update (GProxyVolume    *volume,
   dbus_bool_t can_mount;
   dbus_bool_t should_automount;
   GHashTable *identifiers;
+  const gchar *sort_key;
 
   dbus_message_iter_recurse (iter, &iter_struct);
   dbus_message_iter_get_basic (&iter_struct, &id);
@@ -389,6 +395,15 @@ void g_proxy_volume_update (GProxyVolume    *volume,
   identifiers = _get_identifiers (&iter_struct);
   dbus_message_iter_next (&iter_struct);
 
+  /* make sure we are backwards compat with old daemon instance */
+  sort_key = NULL;
+  if (dbus_message_iter_has_next (&iter_struct))
+    {
+      dbus_message_iter_get_basic (&iter_struct, &sort_key);
+      dbus_message_iter_next (&iter_struct);
+      /* TODO: decode expansion, once used */
+    }
+
   if (volume->id != NULL && strcmp (volume->id, id) != 0)
     {
       g_warning ("id mismatch during update of volume");
@@ -401,6 +416,8 @@ void g_proxy_volume_update (GProxyVolume    *volume,
     uuid = NULL;
   if (strlen (activation_uri) == 0)
     activation_uri = NULL;
+  if (sort_key != NULL && strlen (sort_key) == 0)
+    sort_key = NULL;
 
   /* out with the old */
   g_free (volume->id);
@@ -413,6 +430,7 @@ void g_proxy_volume_update (GProxyVolume    *volume,
   g_free (volume->mount_id);
   if (volume->identifiers != NULL)
     g_hash_table_unref (volume->identifiers);
+  g_free (volume->sort_key);
 
   /* in with the new */
   volume->id = g_strdup (id);
@@ -428,6 +446,7 @@ void g_proxy_volume_update (GProxyVolume    *volume,
   volume->can_mount = can_mount;
   volume->should_automount = should_automount;
   volume->identifiers = identifiers != NULL ? g_hash_table_ref (identifiers) : NULL;
+  volume->sort_key = g_strdup (sort_key);
 
   /* this calls into the union monitor; do it in idle to avoid locking issues */
   update_shadow_mount_in_idle (volume);
@@ -960,6 +979,13 @@ g_proxy_volume_get_activation_root (GVolume *volume)
     return g_file_new_for_uri (proxy_volume->activation_uri);
 }
 
+static const gchar *
+g_proxy_volume_get_sort_key (GVolume *_volume)
+{
+  GProxyVolume *volume = G_PROXY_VOLUME (_volume);
+  return volume->sort_key;
+}
+
 static void
 g_proxy_volume_volume_iface_init (GVolumeIface *iface)
 {
@@ -980,6 +1006,7 @@ g_proxy_volume_volume_iface_init (GVolumeIface *iface)
   iface->get_identifier = g_proxy_volume_get_identifier;
   iface->enumerate_identifiers = g_proxy_volume_enumerate_identifiers;
   iface->get_activation_root = g_proxy_volume_get_activation_root;
+  iface->get_sort_key = g_proxy_volume_get_sort_key;
 }
 
 void
diff --git a/monitor/proxy/gproxyvolumemonitor.c b/monitor/proxy/gproxyvolumemonitor.c
index 8661d9d..2c974d1 100644
--- a/monitor/proxy/gproxyvolumemonitor.c
+++ b/monitor/proxy/gproxyvolumemonitor.c
@@ -135,6 +135,24 @@ g_proxy_volume_monitor_dispose (GObject *object)
    */
 }
 
+static gboolean
+drive_compare (GDrive *a, GDrive *b)
+{
+  return g_strcmp0 (g_drive_get_sort_key (a), g_drive_get_sort_key (b));
+}
+
+static gboolean
+volume_compare (GVolume *a, GVolume *b)
+{
+  return g_strcmp0 (g_volume_get_sort_key (a), g_volume_get_sort_key (b));
+}
+
+static gboolean
+mount_compare (GMount *a, GMount *b)
+{
+  return g_strcmp0 (g_mount_get_sort_key (a), g_mount_get_sort_key (b));
+}
+
 static GList *
 get_mounts (GVolumeMonitor *volume_monitor)
 {
@@ -165,6 +183,8 @@ get_mounts (GVolumeMonitor *volume_monitor)
 
   G_UNLOCK (proxy_vm);
 
+  l = g_list_sort (l, (GCompareFunc) mount_compare);
+
   return l;
 }
 
@@ -187,6 +207,8 @@ get_volumes (GVolumeMonitor *volume_monitor)
 
   G_UNLOCK (proxy_vm);
 
+  l = g_list_sort (l, (GCompareFunc) volume_compare);
+
   return l;
 }
 
@@ -209,6 +231,8 @@ get_connected_drives (GVolumeMonitor *volume_monitor)
 
   G_UNLOCK (proxy_vm);
 
+  l = g_list_sort (l, (GCompareFunc) drive_compare);
+
   return l;
 }
 
diff --git a/monitor/proxy/gvfsproxyvolumemonitordaemon.c b/monitor/proxy/gvfsproxyvolumemonitordaemon.c
index 413afc5..4be64e0 100644
--- a/monitor/proxy/gvfsproxyvolumemonitordaemon.c
+++ b/monitor/proxy/gvfsproxyvolumemonitordaemon.c
@@ -412,8 +412,10 @@ static void monitor_try_create (void);
  * uint32               start-stop-type
  * array:string         volume-ids
  * dict:string->string  identifiers
+ * string               sort_key
+ * a{sv}                expansion
  */
-#define DRIVE_STRUCT_TYPE "(sssbbbbbbbbuasa{ss})"
+#define DRIVE_STRUCT_TYPE "(sssbbbbbbbbuasa{ss}sa{sv})"
 
 static void
 append_drive (GDrive *drive, DBusMessageIter *iter_array)
@@ -437,6 +439,8 @@ append_drive (GDrive *drive, DBusMessageIter *iter_array)
   GList *volumes, *l;
   char **identifiers;
   int n;
+  const gchar *sort_key;
+  DBusMessageIter iter_expansion;
 
   dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct);
 
@@ -462,6 +466,10 @@ append_drive (GDrive *drive, DBusMessageIter *iter_array)
   if (name == NULL)
     name = g_strdup ("");
 
+  sort_key = g_drive_get_sort_key (drive);
+  if (sort_key == NULL)
+    sort_key = "";
+
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &id);
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name);
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &icon_data);
@@ -503,6 +511,11 @@ append_drive (GDrive *drive, DBusMessageIter *iter_array)
     }
   dbus_message_iter_close_container (&iter_struct, &iter_identifiers);
 
+  dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &sort_key);
+  dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "{sv}", &iter_expansion);
+  /* left for future expansion without ABI breaks */
+  dbus_message_iter_close_container (&iter_struct, &iter_expansion);
+
   g_strfreev (identifiers);
   g_list_foreach (volumes, (GFunc) g_object_unref, NULL);
   g_list_free (volumes);
@@ -524,8 +537,10 @@ append_drive (GDrive *drive, DBusMessageIter *iter_array)
  * string               drive-id
  * string               mount-id
  * dict:string->string  identifiers
+ * string               sort_key
+ * a{sv}                expansion
  */
-#define VOLUME_STRUCT_TYPE "(sssssbbssa{ss})"
+#define VOLUME_STRUCT_TYPE "(sssssbbssa{ss}sa{sv})"
 
 static void
 append_volume (GVolume *volume, DBusMessageIter *iter_array)
@@ -547,6 +562,8 @@ append_volume (GVolume *volume, DBusMessageIter *iter_array)
   char *mount_id;
   char **identifiers;
   int n;
+  const gchar *sort_key;
+  DBusMessageIter iter_expansion;
 
   dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct);
 
@@ -582,6 +599,10 @@ append_volume (GVolume *volume, DBusMessageIter *iter_array)
   if (uuid == NULL)
     uuid = g_strdup ("");
 
+  sort_key = g_volume_get_sort_key (volume);
+  if (sort_key == NULL)
+    sort_key = "";
+
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &id);
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name);
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &icon_data);
@@ -611,6 +632,11 @@ append_volume (GVolume *volume, DBusMessageIter *iter_array)
     }
   dbus_message_iter_close_container (&iter_struct, &iter_identifiers);
 
+  dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &sort_key);
+  dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "{sv}", &iter_expansion);
+  /* left for future expansion without ABI breaks */
+  dbus_message_iter_close_container (&iter_struct, &iter_expansion);
+
   g_strfreev (identifiers);
   g_free (mount_id);
   if (mount != NULL)
@@ -638,8 +664,10 @@ append_volume (GVolume *volume, DBusMessageIter *iter_array)
  * boolean              can-unmount
  * string               volume-id
  * array:string         x-content-types
+ * string               sort_key
+ * a{sv}                expansion
  */
-#define MOUNT_STRUCT_TYPE "(sssssbsas)"
+#define MOUNT_STRUCT_TYPE "(sssssbsassa{sv})"
 
 static void
 append_mount (GMount *mount, DBusMessageIter *iter_array)
@@ -658,6 +686,8 @@ append_mount (GMount *mount, DBusMessageIter *iter_array)
   char *volume_id;
   char **x_content_types;
   int n;
+  const gchar *sort_key;
+  DBusMessageIter iter_expansion;
 
   dbus_message_iter_open_container (iter_array, DBUS_TYPE_STRUCT, NULL, &iter_struct);
 
@@ -683,6 +713,11 @@ append_mount (GMount *mount, DBusMessageIter *iter_array)
   if (uuid == NULL)
     uuid = g_strdup ("");
 
+  sort_key = g_mount_get_sort_key (mount);
+  if (sort_key == NULL)
+    sort_key = "";
+
+
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &id);
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &name);
   dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &icon_data);
@@ -700,6 +735,11 @@ append_mount (GMount *mount, DBusMessageIter *iter_array)
     }
   dbus_message_iter_close_container (&iter_struct, &iter_x_content_types_array);
 
+  dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &sort_key);
+  dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_ARRAY, "{sv}", &iter_expansion);
+  /* left for future expansion without ABI breaks */
+  dbus_message_iter_close_container (&iter_struct, &iter_expansion);
+
   g_free (volume_id);
   if (volume != NULL)
     g_object_unref (volume);
diff --git a/programs/gvfs-mount.c b/programs/gvfs-mount.c
index 58adfa6..d6ccc9c 100644
--- a/programs/gvfs-mount.c
+++ b/programs/gvfs-mount.c
@@ -364,6 +364,7 @@ list_mounts (GList *mounts,
   GIcon *icon;
   char **x_content_types;
   char *type_name;
+  const gchar *sort_key;
 
   for (c = 0, l = mounts; l != NULL; l = l->next, c++)
     {
@@ -427,6 +428,9 @@ list_mounts (GList *mounts,
           g_print ("%*scan_unmount=%d\n", indent + 2, "", g_mount_can_unmount (mount));
           g_print ("%*scan_eject=%d\n", indent + 2, "", g_mount_can_eject (mount));
           g_print ("%*sis_shadowed=%d\n", indent + 2, "", g_mount_is_shadowed (mount));
+          sort_key = g_mount_get_sort_key (mount);
+          if (sort_key != NULL)
+            g_print ("%*ssort_key=%s\n", indent + 2, "", sort_key);
           g_free (uuid);
         }
 
@@ -452,6 +456,7 @@ list_volumes (GList *volumes,
   char **ids;
   GIcon *icon;
   char *type_name;
+  const gchar *sort_key;
 
   for (c = 0, l = volumes; l != NULL; l = l->next, c++)
     {
@@ -516,6 +521,9 @@ list_volumes (GList *volumes,
           g_print ("%*scan_mount=%d\n", indent + 2, "", g_volume_can_mount (volume));
           g_print ("%*scan_eject=%d\n", indent + 2, "", g_volume_can_eject (volume));
           g_print ("%*sshould_automount=%d\n", indent + 2, "", g_volume_should_automount (volume));
+          sort_key = g_volume_get_sort_key (volume);
+          if (sort_key != NULL)
+            g_print ("%*ssort_key=%s\n", indent + 2, "", sort_key);
           g_free (uuid);
         }
 
@@ -541,6 +549,7 @@ list_drives (GList *drives,
   char **ids;
   GIcon *icon;
   char *type_name;
+  const gchar *sort_key;
 
   for (c = 0, l = drives; l != NULL; l = l->next, c++)
     {
@@ -598,6 +607,10 @@ list_drives (GList *drives,
                        enum_value != NULL ? enum_value->value_nick : "UNKNOWN");
               g_type_class_unref (klass);
             }
+
+          sort_key = g_drive_get_sort_key (drive);
+          if (sort_key != NULL)
+            g_print ("%*ssort_key=%s\n", indent + 2, "", sort_key);
         }
       volumes = g_drive_get_volumes (drive);
       list_volumes (volumes, indent + 2, FALSE);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]