diff options
author | Alexander Larsson <alexl@redhat.com> | 2004-12-12 20:01:33 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2004-12-12 20:01:33 +0000 |
commit | 30a9cf39ed20d80c0e107e058a7d24cc2adf6bbf (patch) | |
tree | f43431443cb05629a2123e8f69f64b32dfe78c41 /libnautilus-private | |
parent | a5f7e776957062573ba7c2b2d784b9f2a6f84cf4 (diff) | |
download | nautilus-30a9cf39ed20d80c0e107e058a7d24cc2adf6bbf.tar.gz |
Make sure volume filenames are unique (#153888)
2004-12-12 Alexander Larsson <alexl@redhat.com>
* libnautilus-private/nautilus-desktop-link-monitor.c:
(destroy_desktop_link_monitor),
(nautilus_desktop_link_monitor_get), (volume_file_name_used),
(nautilus_desktop_link_monitor_make_filename_unique),
(create_volume_link), (nautilus_desktop_link_monitor_init):
* libnautilus-private/nautilus-desktop-link-monitor.h:
* libnautilus-private/nautilus-desktop-link.c:
(nautilus_desktop_link_new_from_volume):
Make sure volume filenames are unique (#153888)
Diffstat (limited to 'libnautilus-private')
-rw-r--r-- | libnautilus-private/nautilus-desktop-link-monitor.c | 52 | ||||
-rw-r--r-- | libnautilus-private/nautilus-desktop-link-monitor.h | 4 | ||||
-rw-r--r-- | libnautilus-private/nautilus-desktop-link.c | 13 |
3 files changed, 58 insertions, 11 deletions
diff --git a/libnautilus-private/nautilus-desktop-link-monitor.c b/libnautilus-private/nautilus-desktop-link-monitor.c index 1c843d0c3..08ec08eaf 100644 --- a/libnautilus-private/nautilus-desktop-link-monitor.c +++ b/libnautilus-private/nautilus-desktop-link-monitor.c @@ -66,24 +66,24 @@ EEL_CLASS_BOILERPLATE (NautilusDesktopLinkMonitor, nautilus_desktop_link_monitor, G_TYPE_OBJECT) -static NautilusDesktopLinkMonitor *link_monitor = NULL; +static NautilusDesktopLinkMonitor *the_link_monitor = NULL; static void destroy_desktop_link_monitor (void) { - if (link_monitor != NULL) { - g_object_unref (link_monitor); + if (the_link_monitor != NULL) { + g_object_unref (the_link_monitor); } } NautilusDesktopLinkMonitor * nautilus_desktop_link_monitor_get (void) { - if (link_monitor == NULL) { - link_monitor = NAUTILUS_DESKTOP_LINK_MONITOR (g_object_new (NAUTILUS_TYPE_DESKTOP_LINK_MONITOR, NULL)); + if (the_link_monitor == NULL) { + g_object_new (NAUTILUS_TYPE_DESKTOP_LINK_MONITOR, NULL); eel_debug_call_at_shutdown (destroy_desktop_link_monitor); } - return link_monitor; + return the_link_monitor; } void @@ -111,6 +111,43 @@ nautilus_desktop_link_monitor_delete_link (NautilusDesktopLinkMonitor *monitor, } } +static gboolean +volume_file_name_used (NautilusDesktopLinkMonitor *monitor, + const char *name) +{ + GList *l; + char *other_name; + gboolean same; + + for (l = monitor->details->volume_links; l != NULL; l = l->next) { + other_name = nautilus_desktop_link_get_file_name (l->data); + same = strcmp (name, other_name) == 0; + g_free (other_name); + + if (same) { + return TRUE; + } + } + + return FALSE; +} + +char * +nautilus_desktop_link_monitor_make_filename_unique (NautilusDesktopLinkMonitor *monitor, + const char *filename) +{ + char *unique_name; + int i; + + i = 2; + unique_name = g_strdup (filename); + while (volume_file_name_used (monitor, unique_name)) { + g_free (unique_name); + unique_name = g_strdup_printf ("%s.%d", filename, i++); + } + return unique_name; +} + static void create_volume_link (NautilusDesktopLinkMonitor *monitor, GnomeVFSVolume *volume) @@ -127,7 +164,6 @@ create_volume_link (NautilusDesktopLinkMonitor *monitor, link = nautilus_desktop_link_new_from_volume (volume); monitor->details->volume_links = g_list_prepend (monitor->details->volume_links, link); } - } @@ -259,6 +295,8 @@ nautilus_desktop_link_monitor_init (gpointer object, gpointer klass) monitor = NAUTILUS_DESKTOP_LINK_MONITOR (object); + the_link_monitor = monitor; + monitor->details = g_new0 (NautilusDesktopLinkMonitorDetails, 1); /* We keep around a ref to the desktop dir */ diff --git a/libnautilus-private/nautilus-desktop-link-monitor.h b/libnautilus-private/nautilus-desktop-link-monitor.h index 907f3a05e..2c3c23d02 100644 --- a/libnautilus-private/nautilus-desktop-link-monitor.h +++ b/libnautilus-private/nautilus-desktop-link-monitor.h @@ -57,4 +57,8 @@ void nautilus_desktop_link_monitor_delete_link (NautilusDesktopLinkMonitor *moni NautilusDesktopLink *link, GtkWidget *parent_view); +/* Used by nautilus-desktop-link.c */ +char * nautilus_desktop_link_monitor_make_filename_unique (NautilusDesktopLinkMonitor *monitor, + const char *filename); + #endif /* NAUTILUS_DESKTOP_LINK_MONITOR_H */ diff --git a/libnautilus-private/nautilus-desktop-link.c b/libnautilus-private/nautilus-desktop-link.c index 2d88a5f2b..daf7ffd34 100644 --- a/libnautilus-private/nautilus-desktop-link.c +++ b/libnautilus-private/nautilus-desktop-link.c @@ -24,6 +24,7 @@ #include <config.h> #include "nautilus-desktop-link.h" +#include "nautilus-desktop-link-monitor.h" #include "nautilus-desktop-icon-file.h" #include "nautilus-directory-private.h" #include "nautilus-desktop-directory.h" @@ -188,7 +189,7 @@ nautilus_desktop_link_new_from_volume (GnomeVFSVolume *volume) { NautilusDesktopLink *link; GnomeVFSDrive *drive; - char *name; + char *name, *filename; link = NAUTILUS_DESKTOP_LINK (g_object_new (NAUTILUS_TYPE_DESKTOP_LINK, NULL)); @@ -205,15 +206,19 @@ nautilus_desktop_link_new_from_volume (GnomeVFSVolume *volume) name = gnome_vfs_volume_get_display_name (volume); } gnome_vfs_drive_unref (drive); - - link->details->filename = g_strconcat (name, ".volume", NULL); + + filename = g_strconcat (name, ".volume", NULL); + link->details->filename = + nautilus_desktop_link_monitor_make_filename_unique (nautilus_desktop_link_monitor_get (), + filename); + g_free (filename); g_free (name); link->details->display_name = gnome_vfs_volume_get_display_name (volume); link->details->activation_uri = gnome_vfs_volume_get_activation_uri (volume); link->details->icon = gnome_vfs_volume_get_icon (volume); - + create_icon_file (link); return link; |