Fixed bug 1927, Need a way to identify mount links as special type of

2000-08-03  Gene Z. Ragan  <gzr@eazel.com>

	Fixed bug 1927, Need a way to identify mount links as special
	type of link.

	Fixed bug 1926, Old mount links should be cleaned up
	when desktop launches.

	* libnautilus-extensions/nautilus-volume-monitor.c:
	(nautilus_volume_monitor_destroy), (add_mount_link_property),
	(nautilus_volume_monitor_is_volume_link):
	Mount links are now tagged with a special XML attribute
	when they are created.

	* libnautilus-extensions/nautilus-volume-monitor.h:
	* src/file-manager/fm-desktop-icon-view.c:
	(fm_desktop_icon_view_destroy), (fm_desktop_icon_view_initialize),
	(remove_old_mount_links):
	Old mount links are now removed when the desktop launches and quits.
This commit is contained in:
Gene Z. Ragan 2000-08-04 00:15:58 +00:00 committed by Gene Ragan
parent 8dc76500c9
commit 6df2d6db02
6 changed files with 98 additions and 32 deletions

View file

@ -1,3 +1,23 @@
2000-08-03 Gene Z. Ragan <gzr@eazel.com>
Fixed bug 1927, Need a way to identify mount links as special
type of link.
Fixed bug 1926, Old mount links should be cleaned up
when desktop launches.
* libnautilus-extensions/nautilus-volume-monitor.c:
(nautilus_volume_monitor_destroy), (add_mount_link_property),
(nautilus_volume_monitor_is_volume_link):
Mount links are now tagged with a special XML attribute
when they are created.
* libnautilus-extensions/nautilus-volume-monitor.h:
* src/file-manager/fm-desktop-icon-view.c:
(fm_desktop_icon_view_destroy), (fm_desktop_icon_view_initialize),
(remove_old_mount_links):
Old mount links are now removed when the desktop launches and quits.
2000-08-03 John Sullivan <sullivan@eazel.com>
* libnautilus-extensions/nautilus-search-bar-criterion.c:

View file

@ -49,8 +49,6 @@
#include <xmlmemory.h>
#define NAUTILUS_MOUNT_LINK_KEY "NAUTILUS_MOUNT_LINK"
/* FIXME: Remove messages when this code is done. */
#define MESSAGE g_message
@ -97,7 +95,6 @@ static gboolean mntent_is_removable_fs (struct mntent *ent);
static void free_device_info (DeviceInfo *device,
NautilusVolumeMonitor *monitor);
static gboolean add_mount_link_property (const char *path);
static gboolean is_volume_link (const char *path);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusVolumeMonitor, nautilus_volume_monitor, GTK_TYPE_OBJECT)
@ -145,7 +142,7 @@ static void
nautilus_volume_monitor_destroy (GtkObject *object)
{
NautilusVolumeMonitor *monitor;
monitor = NAUTILUS_VOLUME_MONITOR (object);
/* Remove timer function */
@ -1020,19 +1017,12 @@ add_mount_link_property (const char *path)
"Nautilus Mount Link");
xmlSaveFile (path, document);
xmlFreeDoc (document);
/* Test */
{
gboolean retval;
retval = is_volume_link (path);
g_message ("volume link: %d", retval);
}
return TRUE;
}
static gboolean
is_volume_link (const char *path)
gboolean
nautilus_volume_monitor_is_volume_link (const char *path)
{
xmlDocPtr document;
char *property;

View file

@ -29,6 +29,8 @@
#include <gtk/gtk.h>
#include "nautilus-icon-container.h"
#define NAUTILUS_MOUNT_LINK_KEY "NAUTILUS_MOUNT_LINK"
typedef struct NautilusVolumeMonitor NautilusVolumeMonitor;
typedef struct NautilusVolumeMonitorClass NautilusVolumeMonitorClass;
typedef struct NautilusVolumeMonitorDetails NautilusVolumeMonitorDetails;
@ -102,5 +104,6 @@ gboolean nautilus_volume_monitor_volume_is_mounted (const char *mount_point);
void nautilus_volume_monitor_find_mount_devices (NautilusVolumeMonitor *icon_view);
gboolean nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
const char *mount_point);
gboolean nautilus_volume_monitor_is_volume_link (const char *path);
#endif

View file

@ -49,8 +49,6 @@
#include <xmlmemory.h>
#define NAUTILUS_MOUNT_LINK_KEY "NAUTILUS_MOUNT_LINK"
/* FIXME: Remove messages when this code is done. */
#define MESSAGE g_message
@ -97,7 +95,6 @@ static gboolean mntent_is_removable_fs (struct mntent *ent);
static void free_device_info (DeviceInfo *device,
NautilusVolumeMonitor *monitor);
static gboolean add_mount_link_property (const char *path);
static gboolean is_volume_link (const char *path);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusVolumeMonitor, nautilus_volume_monitor, GTK_TYPE_OBJECT)
@ -145,7 +142,7 @@ static void
nautilus_volume_monitor_destroy (GtkObject *object)
{
NautilusVolumeMonitor *monitor;
monitor = NAUTILUS_VOLUME_MONITOR (object);
/* Remove timer function */
@ -1020,19 +1017,12 @@ add_mount_link_property (const char *path)
"Nautilus Mount Link");
xmlSaveFile (path, document);
xmlFreeDoc (document);
/* Test */
{
gboolean retval;
retval = is_volume_link (path);
g_message ("volume link: %d", retval);
}
return TRUE;
}
static gboolean
is_volume_link (const char *path)
gboolean
nautilus_volume_monitor_is_volume_link (const char *path)
{
xmlDocPtr document;
char *property;

View file

@ -29,6 +29,8 @@
#include <gtk/gtk.h>
#include "nautilus-icon-container.h"
#define NAUTILUS_MOUNT_LINK_KEY "NAUTILUS_MOUNT_LINK"
typedef struct NautilusVolumeMonitor NautilusVolumeMonitor;
typedef struct NautilusVolumeMonitorClass NautilusVolumeMonitorClass;
typedef struct NautilusVolumeMonitorDetails NautilusVolumeMonitorDetails;
@ -102,5 +104,6 @@ gboolean nautilus_volume_monitor_volume_is_mounted (const char *mount_point);
void nautilus_volume_monitor_find_mount_devices (NautilusVolumeMonitor *icon_view);
gboolean nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
const char *mount_point);
gboolean nautilus_volume_monitor_is_volume_link (const char *path);
#endif

View file

@ -27,6 +27,8 @@
#include "fm-desktop-icon-view.h"
#include "fm-icon-view.h"
#include <ctype.h>
#include <dirent.h>
#include <fcntl.h>
#include <gdk/gdkx.h>
#include <gnome.h>
@ -38,7 +40,13 @@
#include <libnautilus-extensions/nautilus-gtk-macros.h>
#include <libnautilus-extensions/nautilus-link.h>
#include <libnautilus-extensions/nautilus-volume-monitor.h>
#include <limits.h>
#include <mntent.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include "nautilus-trash-monitor.h"
@ -70,7 +78,9 @@ static void fm_desktop_icon_view_trash_state_changed_callback (NautilusTrashM
static void mount_unmount_removable (GtkCheckMenuItem *item,
FMDesktopIconView *icon_view);
static void place_home_directory (FMDesktopIconView *icon_view);
static void remove_old_mount_links (void);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMDesktopIconView, fm_desktop_icon_view, FM_TYPE_ICON_VIEW);
static NautilusIconContainer *
@ -89,10 +99,13 @@ fm_desktop_icon_view_destroy (GtkObject *object)
icon_view = FM_DESKTOP_ICON_VIEW (object);
/* Clean up details */
/* Clean up details */
gtk_object_destroy (GTK_OBJECT (icon_view->details->volume_monitor));
g_free (icon_view->details);
/* Clean up any links that may be left over */
remove_old_mount_links ();
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
@ -170,7 +183,8 @@ fm_desktop_icon_view_initialize (FMDesktopIconView *desktop_icon_view)
desktop_icon_view->details = g_new0 (FMDesktopIconViewDetails, 1);
desktop_icon_view->details->volume_monitor = nautilus_volume_monitor_get ();
/* Check for and clean up any old mount links that may have been left behind */
/* Check for and clean up any old mount links that may have been left behind */
remove_old_mount_links ();
/* Setup home directory link */
place_home_directory (desktop_icon_view);
@ -375,3 +389,49 @@ place_home_directory (FMDesktopIconView *icon_view)
g_free (home_link_name);
g_free (desktop_path);
}
static void
remove_old_mount_links (void)
{
DIR *current_dir;
char *desktop_path;
struct dirent *this_entry;
struct stat status;
char cwd[PATH_MAX + 1];
char *link_path;
desktop_path = nautilus_get_desktop_directory ();
/* Open directory for reading */
current_dir = opendir (desktop_path);
if (current_dir == NULL) {
return;
}
/* Save working directory and connect to desktop directory */
getcwd (cwd, PATH_MAX + 1);
chdir (desktop_path);
/* Look at all the entries */
while ((this_entry = readdir (current_dir)) != NULL) {
/* Ignore "." and ".." */
if ((strcmp (this_entry->d_name, ".") != 0) &&
(strcmp (this_entry->d_name, "..") != 0)) {
stat (this_entry->d_name, &status);
/* Ignore directories. Mount links are at the top level */
if (!S_ISDIR (status.st_mode)) {
/* Check and see if this is a link */
if (nautilus_volume_monitor_is_volume_link (this_entry->d_name)) {
link_path = nautilus_make_path (desktop_path, this_entry->d_name);
unlink (this_entry->d_name);
g_free (link_path);
}
}
}
}
closedir (current_dir);
}