summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2011-10-10 16:59:02 -0400
committerDavid Zeuthen <davidz@redhat.com>2011-10-10 16:59:02 -0400
commite56eb56d445afc87f49971234736144d54e25bb6 (patch)
treecb8622f27f3e5afa15da6e0646395e450bae9d21
parent51101993ea9c5cb7dabab4ae6cab8621abc8a038 (diff)
downloadgvfs-e56eb56d445afc87f49971234736144d54e25bb6.tar.gz
Support floppy drives
Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r--monitor/udisks2/gvfsudisks2drive.c8
-rw-r--r--monitor/udisks2/gvfsudisks2volume.c25
-rw-r--r--monitor/udisks2/gvfsudisks2volumemonitor.c23
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);
}