diff options
author | David Zeuthen <davidz@redhat.com> | 2011-10-10 16:59:02 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2011-10-10 16:59:02 -0400 |
commit | e56eb56d445afc87f49971234736144d54e25bb6 (patch) | |
tree | cb8622f27f3e5afa15da6e0646395e450bae9d21 | |
parent | 51101993ea9c5cb7dabab4ae6cab8621abc8a038 (diff) | |
download | gvfs-e56eb56d445afc87f49971234736144d54e25bb6.tar.gz |
Support floppy drives
Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r-- | monitor/udisks2/gvfsudisks2drive.c | 8 | ||||
-rw-r--r-- | monitor/udisks2/gvfsudisks2volume.c | 25 | ||||
-rw-r--r-- | monitor/udisks2/gvfsudisks2volumemonitor.c | 23 |
3 files changed, 43 insertions, 13 deletions
diff --git a/monitor/udisks2/gvfsudisks2drive.c b/monitor/udisks2/gvfsudisks2drive.c index 73ac0c1e..ef99793b 100644 --- a/monitor/udisks2/gvfsudisks2drive.c +++ b/monitor/udisks2/gvfsudisks2drive.c @@ -166,8 +166,12 @@ update_drive (GVfsUDisks2Drive *drive) drive->is_media_removable = udisks_drive_get_media_removable (drive->udisks_drive); if (drive->is_media_removable) { - drive->has_media = (udisks_drive_get_size (drive->udisks_drive) > 0); - drive->can_eject = TRUE; + drive->has_media = udisks_drive_get_media_available (drive->udisks_drive); + /* every drive except PC floppy drives are ejectable */ + if (g_strcmp0 (udisks_drive_get_media (drive->udisks_drive), "floppy") != 0) + { + drive->can_eject = TRUE; + } } else { diff --git a/monitor/udisks2/gvfsudisks2volume.c b/monitor/udisks2/gvfsudisks2volume.c index 82e26601..5bc74657 100644 --- a/monitor/udisks2/gvfsudisks2volume.c +++ b/monitor/udisks2/gvfsudisks2volume.c @@ -242,12 +242,16 @@ update_volume (GVfsUDisks2Volume *volume) } else { - s = udisks_util_get_size_for_display (udisks_block_get_size (block), FALSE, FALSE); - /* Translators: This is used for volume with no filesystem label. - * The first %s is the formatted size (e.g. "42.0 MB"). - */ - volume->name = g_strdup_printf (_("%s Volume"), s); - g_free (s); + guint64 size = udisks_block_get_size (block); + if (size > 0) + { + s = udisks_util_get_size_for_display (size, FALSE, FALSE); + /* Translators: This is used for volume with no filesystem label. + * The first %s is the formatted size (e.g. "42.0 MB"). + */ + volume->name = g_strdup_printf (_("%s Volume"), s); + g_free (s); + } } udisks_drive = udisks_client_get_drive_for_block (gvfs_udisks2_volume_monitor_get_udisks_client (volume->monitor), @@ -290,6 +294,15 @@ update_volume (GVfsUDisks2Volume *volume) volume->icon = media_icon != NULL ? g_object_ref (media_icon) : NULL; + /* use media_desc if we haven't figured out a name yet (applies to e.g. + * /dev/fd0 since its size is 0) + */ + if (volume->name == NULL) + { + volume->name = media_desc; + media_desc = NULL; + } + g_free (media_desc); if (media_icon != NULL) g_object_unref (media_icon); diff --git a/monitor/udisks2/gvfsudisks2volumemonitor.c b/monitor/udisks2/gvfsudisks2volumemonitor.c index 73b305f5..8e117ac2 100644 --- a/monitor/udisks2/gvfsudisks2volumemonitor.c +++ b/monitor/udisks2/gvfsudisks2volumemonitor.c @@ -631,6 +631,8 @@ should_include_volume (GVfsUDisks2VolumeMonitor *monitor, gboolean allow_encrypted_cleartext) { gboolean ret = FALSE; + GDBusObject *object; + UDisksFilesystem *filesystem; /* show encrypted volumes... */ if (g_strcmp0 (udisks_block_get_id_type (block), "crypto_LUKS") == 0) @@ -668,8 +670,12 @@ should_include_volume (GVfsUDisks2VolumeMonitor *monitor, if (!should_include_volume_check_mount_points (monitor, block)) goto out; - /* TODO: handle crypto, fstab and a bunch of other stuff */ - if (g_strcmp0 (udisks_block_get_id_usage (block), "filesystem") != 0) + object = g_dbus_interface_get_object (G_DBUS_INTERFACE (block)); + if (object == NULL) + goto out; + + filesystem = udisks_object_peek_filesystem (UDISKS_OBJECT (object)); + if (filesystem == NULL) goto out; ret = TRUE; @@ -1206,10 +1212,17 @@ mount_point_has_device (GVfsUDisks2VolumeMonitor *monitor, block = udisks_client_get_block_for_dev (monitor->client, statbuf.st_rdev); if (block != NULL) { - if (udisks_block_get_size (block) == 0) + UDisksDrive *drive; + drive = udisks_client_get_drive_for_block (monitor->client, block); + if (drive != NULL) { - g_object_unref (block); - goto out; + if (!udisks_drive_get_media_available (drive)) + { + g_object_unref (drive); + g_object_unref (block); + goto out; + } + g_object_unref (drive); } g_object_unref (block); } |