summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2004-12-12 20:07:53 +0000
committerAlexander Larsson <alexl@src.gnome.org>2004-12-12 20:07:53 +0000
commit929b7c2fb72d597ae46a379f2af51a72d387508e (patch)
tree75e8c071388ff34b0d3c1881ef6894054959d964
parentb1711b7fac3482b02dafdbb87fc13554e78f3a8d (diff)
downloadnautilus-929b7c2fb72d597ae46a379f2af51a72d387508e.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 5ac0f07db..1a738a434 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+ 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-11-29 Dwayne Bailey <dwayne@translate.org.za>
* configure.in: Added "nso" to ALL_LINGUAS.
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 5d3ae3440..435c488f5 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"
@@ -196,7 +197,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));
@@ -213,15 +214,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;