summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2004-12-12 20:01:33 +0000
committerAlexander Larsson <alexl@src.gnome.org>2004-12-12 20:01:33 +0000
commit30a9cf39ed20d80c0e107e058a7d24cc2adf6bbf (patch)
treef43431443cb05629a2123e8f69f64b32dfe78c41
parenta5f7e776957062573ba7c2b2d784b9f2a6f84cf4 (diff)
downloadnautilus-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)
-rw-r--r--ChangeLog12
-rw-r--r--libnautilus-private/nautilus-desktop-link-monitor.c52
-rw-r--r--libnautilus-private/nautilus-desktop-link-monitor.h4
-rw-r--r--libnautilus-private/nautilus-desktop-link.c13
4 files changed, 70 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 1334c72d9..b5dfea285 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
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)
+
+2004-12-12 Alexander Larsson <alexl@redhat.com>
+
* libnautilus-private/nautilus-clipboard.c (merge_out_clipboard_menu_items):
Disconnect from right object.
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;