gvfs/0007-Better-handling-of-PC-...

118 lines
4.2 KiB
Diff

From c6405c6653c27b247f1fbb59c01b95938fb6b2d8 Mon Sep 17 00:00:00 2001
From: David Zeuthen <davidz@redhat.com>
Date: Tue, 16 Jun 2009 19:49:38 -0400
Subject: [PATCH 07/13] Better handling of PC floppy drives
PC Floppy Drives are handled in a special way since we don't poll for
media (it would make a lot of noise). Specifically we never probe for
the filesystem type. So if encountering a PC Floppy Drive, just always
show all volumes from it. Since we already have working support for
g_drive_poll_for_media() in Nautilus, things Just Work(tm)
http://people.freedesktop.org/~david/dkd-gnome-floppy-welcome-to-the-1980s.png
E.g. you can use the "Rescan" menu option to force media detection.
Welcome to the 1980s.
---
monitor/gdu/ggdudrive.c | 5 ++++-
monitor/gdu/ggduvolume.c | 5 ++++-
monitor/gdu/ggduvolumemonitor.c | 28 +++++++++++++++++++++++++++-
monitor/gdu/ggduvolumemonitor.h | 2 ++
4 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/monitor/gdu/ggdudrive.c b/monitor/gdu/ggdudrive.c
index 6195f97..d332e14 100644
--- a/monitor/gdu/ggdudrive.c
+++ b/monitor/gdu/ggdudrive.c
@@ -148,7 +148,10 @@ update_drive (GGduDrive *drive)
drive->icon = gdu_presentable_get_icon (drive->presentable);
g_free (drive->name);
- drive->name = gdu_presentable_get_name (drive->presentable);
+ if (_is_pc_floppy_drive (device))
+ drive->name = g_strdup (_("Floppy Drive"));
+ else
+ drive->name = gdu_presentable_get_name (drive->presentable);
/* the GduDevice for an activatable drive (such as RAID) is NULL if the drive is not activated */
if (device == NULL)
diff --git a/monitor/gdu/ggduvolume.c b/monitor/gdu/ggduvolume.c
index 8f75247..73ad0fc 100644
--- a/monitor/gdu/ggduvolume.c
+++ b/monitor/gdu/ggduvolume.c
@@ -304,7 +304,10 @@ update_volume (GGduVolume *volume)
volume->icon = gdu_presentable_get_icon (GDU_PRESENTABLE (volume->gdu_volume));
g_free (volume->name);
- volume->name = gdu_presentable_get_name (GDU_PRESENTABLE (volume->gdu_volume));
+ if (_is_pc_floppy_drive (device))
+ volume->name = g_strdup (_("Floppy Disk"));
+ else
+ volume->name = gdu_presentable_get_name (GDU_PRESENTABLE (volume->gdu_volume));
/* special case the name and icon for audio discs */
activation_uri = volume->activation_root != NULL ? g_file_get_uri (volume->activation_root) : NULL;
diff --git a/monitor/gdu/ggduvolumemonitor.c b/monitor/gdu/ggduvolumemonitor.c
index 5c80f64..6da7393 100644
--- a/monitor/gdu/ggduvolumemonitor.c
+++ b/monitor/gdu/ggduvolumemonitor.c
@@ -744,6 +744,32 @@ should_mount_be_ignored (GduPool *pool, GduDevice *d)
return ret;
}
+gboolean
+_is_pc_floppy_drive (GduDevice *device)
+{
+ gboolean ret;
+ gchar **drive_media_compat;
+ const gchar *drive_connection_interface;
+
+ ret = FALSE;
+
+ if (device != NULL)
+ {
+ drive_media_compat = gdu_device_drive_get_media_compatibility (device);
+ drive_connection_interface = gdu_device_drive_get_connection_interface (device);
+
+ if (g_strcmp0 (drive_connection_interface, "platform") == 0 &&
+ (drive_media_compat != NULL &&
+ g_strv_length (drive_media_compat) > 0 &&
+ g_strcmp0 (drive_media_compat[0], "floppy") == 0))
+ {
+ ret = TRUE;
+ }
+ }
+
+ return ret;
+}
+
static gboolean
should_volume_be_ignored (GduPool *pool, GduVolume *volume, GList *fstab_mount_points)
{
@@ -763,7 +789,7 @@ should_volume_be_ignored (GduPool *pool, GduVolume *volume, GList *fstab_mount_p
usage = gdu_device_id_get_usage (device);
type = gdu_device_id_get_type (device);
- if (g_strcmp0 (usage, "filesystem") == 0)
+ if (_is_pc_floppy_drive (device) || g_strcmp0 (usage, "filesystem") == 0)
{
GUnixMountPoint *mount_point;
diff --git a/monitor/gdu/ggduvolumemonitor.h b/monitor/gdu/ggduvolumemonitor.h
index ec559c4..b91ceb9 100644
--- a/monitor/gdu/ggduvolumemonitor.h
+++ b/monitor/gdu/ggduvolumemonitor.h
@@ -55,6 +55,8 @@ GType g_gdu_volume_monitor_get_type (void) G_GNUC_CONST;
GVolumeMonitor *g_gdu_volume_monitor_new (void);
+gboolean _is_pc_floppy_drive (GduDevice *device);
+
G_END_DECLS
#endif /* __G_GDU_VOLUME_MONITOR_H__ */
--
1.6.3.2