mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-19 15:51:40 +00:00
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:
parent
8dc76500c9
commit
6df2d6db02
20
ChangeLog
20
ChangeLog
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue