summaryrefslogtreecommitdiff
path: root/nautilus-desktop/nautilus-desktop-link.c
diff options
context:
space:
mode:
Diffstat (limited to 'nautilus-desktop/nautilus-desktop-link.c')
-rw-r--r--nautilus-desktop/nautilus-desktop-link.c482
1 files changed, 0 insertions, 482 deletions
diff --git a/nautilus-desktop/nautilus-desktop-link.c b/nautilus-desktop/nautilus-desktop-link.c
deleted file mode 100644
index e10d6c4e7..000000000
--- a/nautilus-desktop/nautilus-desktop-link.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * nautilus-desktop-link.c: Class that handles the links on the desktop
- *
- * Copyright (C) 2003 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, see <http://www.gnu.org/licenses/>.
- *
- * Author: Alexander Larsson <alexl@redhat.com>
- */
-
-#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"
-
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include <src/nautilus-file-utilities.h>
-#include <src/nautilus-trash-monitor.h>
-#include <src/nautilus-global-preferences.h>
-#include <src/nautilus-icon-names.h>
-
-#include <string.h>
-
-struct NautilusDesktopLinkDetails
-{
- NautilusDesktopLinkType type;
- char *filename;
- char *display_name;
- GFile *activation_location;
- GIcon *icon;
-
- NautilusDesktopIconFile *icon_file;
-
- /* Just for mount icons: */
- GMount *mount;
-};
-
-G_DEFINE_TYPE (NautilusDesktopLink, nautilus_desktop_link, G_TYPE_OBJECT)
-
-static void
-create_icon_file (NautilusDesktopLink *link)
-{
- link->details->icon_file = nautilus_desktop_icon_file_new (link);
-}
-
-static void
-nautilus_desktop_link_changed (NautilusDesktopLink *link)
-{
- if (link->details->icon_file != NULL)
- {
- nautilus_desktop_icon_file_update (link->details->icon_file);
- }
-}
-
-static void
-mount_changed_callback (GMount *mount,
- NautilusDesktopLink *link)
-{
- g_free (link->details->display_name);
- if (link->details->activation_location)
- {
- g_object_unref (link->details->activation_location);
- }
- if (link->details->icon)
- {
- g_object_unref (link->details->icon);
- }
-
- link->details->display_name = g_mount_get_name (mount);
- link->details->activation_location = g_mount_get_default_location (mount);
- link->details->icon = g_mount_get_icon (mount);
-
- nautilus_desktop_link_changed (link);
-}
-
-static GIcon *
-get_desktop_trash_icon (void)
-{
- const gchar *icon_name;
-
- if (nautilus_trash_monitor_is_empty ())
- {
- icon_name = NAUTILUS_DESKTOP_ICON_TRASH;
- }
- else
- {
- icon_name = NAUTILUS_DESKTOP_ICON_TRASH_FULL;
- }
-
- return g_themed_icon_new (icon_name);
-}
-
-static void
-trash_state_changed_callback (NautilusTrashMonitor *trash_monitor,
- gboolean state,
- gpointer callback_data)
-{
- NautilusDesktopLink *link;
-
- link = NAUTILUS_DESKTOP_LINK (callback_data);
- g_assert (link->details->type == NAUTILUS_DESKTOP_LINK_TRASH);
-
- if (link->details->icon)
- {
- g_object_unref (link->details->icon);
- }
- link->details->icon = get_desktop_trash_icon ();
-
- nautilus_desktop_link_changed (link);
-}
-
-static void
-home_name_changed (gpointer callback_data)
-{
- NautilusDesktopLink *link;
-
- link = NAUTILUS_DESKTOP_LINK (callback_data);
- g_assert (link->details->type == NAUTILUS_DESKTOP_LINK_HOME);
-
- g_free (link->details->display_name);
- link->details->display_name = g_settings_get_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_HOME_NAME);
- if (link->details->display_name[0] == 0)
- {
- g_free (link->details->display_name);
- link->details->display_name = g_strdup (_("Home"));
- }
-
- nautilus_desktop_link_changed (link);
-}
-
-static void
-trash_name_changed (gpointer callback_data)
-{
- NautilusDesktopLink *link;
-
- link = NAUTILUS_DESKTOP_LINK (callback_data);
- g_assert (link->details->type == NAUTILUS_DESKTOP_LINK_TRASH);
-
- g_free (link->details->display_name);
- link->details->display_name = g_settings_get_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_TRASH_NAME);
- nautilus_desktop_link_changed (link);
-}
-
-static void
-network_name_changed (gpointer callback_data)
-{
- NautilusDesktopLink *link;
-
- link = NAUTILUS_DESKTOP_LINK (callback_data);
- g_assert (link->details->type == NAUTILUS_DESKTOP_LINK_NETWORK);
-
- g_free (link->details->display_name);
- link->details->display_name = g_settings_get_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_NETWORK_NAME);
- nautilus_desktop_link_changed (link);
-}
-
-NautilusDesktopLink *
-nautilus_desktop_link_new (NautilusDesktopLinkType type)
-{
- NautilusDesktopLink *link;
-
- link = NAUTILUS_DESKTOP_LINK (g_object_new (NAUTILUS_TYPE_DESKTOP_LINK, NULL));
-
- link->details->type = type;
- switch (type)
- {
- case NAUTILUS_DESKTOP_LINK_HOME:
- {
- link->details->filename = g_strdup ("home");
- link->details->display_name = g_settings_get_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_HOME_NAME);
- link->details->activation_location = g_file_new_for_path (g_get_home_dir ());
- link->details->icon = g_themed_icon_new (NAUTILUS_DESKTOP_ICON_HOME);
-
- g_signal_connect_swapped (nautilus_desktop_preferences,
- "changed::" NAUTILUS_PREFERENCES_DESKTOP_HOME_NAME,
- G_CALLBACK (home_name_changed),
- link);
- }
- break;
-
- case NAUTILUS_DESKTOP_LINK_TRASH:
- {
- link->details->filename = g_strdup ("trash");
- link->details->display_name = g_settings_get_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_TRASH_NAME);
- link->details->activation_location = g_file_new_for_uri (EEL_TRASH_URI);
- link->details->icon = get_desktop_trash_icon ();
-
- g_signal_connect_swapped (nautilus_desktop_preferences,
- "changed::" NAUTILUS_PREFERENCES_DESKTOP_TRASH_NAME,
- G_CALLBACK (trash_name_changed),
- link);
- g_signal_connect_object (nautilus_trash_monitor_get (), "trash-state-changed",
- G_CALLBACK (trash_state_changed_callback), link, 0);
- }
- break;
-
- case NAUTILUS_DESKTOP_LINK_NETWORK:
- {
- link->details->filename = g_strdup ("network");
- link->details->display_name = g_settings_get_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_NETWORK_NAME);
- link->details->activation_location = g_file_new_for_uri ("network:///");
- link->details->icon = g_themed_icon_new (NAUTILUS_DESKTOP_ICON_NETWORK);
-
- g_signal_connect_swapped (nautilus_desktop_preferences,
- "changed::" NAUTILUS_PREFERENCES_DESKTOP_NETWORK_NAME,
- G_CALLBACK (network_name_changed),
- link);
- }
- break;
-
- default:
- case NAUTILUS_DESKTOP_LINK_MOUNT:
- {
- g_assert_not_reached ();
- }
- break;
- }
-
- create_icon_file (link);
-
- return link;
-}
-
-NautilusDesktopLink *
-nautilus_desktop_link_new_from_mount (GMount *mount)
-{
- NautilusDesktopLink *link;
- GVolume *volume;
- char *name, *filename;
-
- link = NAUTILUS_DESKTOP_LINK (g_object_new (NAUTILUS_TYPE_DESKTOP_LINK, NULL));
-
- link->details->type = NAUTILUS_DESKTOP_LINK_MOUNT;
-
- link->details->mount = g_object_ref (mount);
-
- /* We try to use the drive name to get somewhat stable filenames
- * for metadata */
- volume = g_mount_get_volume (mount);
- if (volume != NULL)
- {
- name = g_volume_get_name (volume);
- g_object_unref (volume);
- }
- else
- {
- name = g_mount_get_name (mount);
- }
-
- /* Replace slashes in name */
- filename = g_strconcat (g_strdelimit (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 = g_mount_get_name (mount);
-
- link->details->activation_location = g_mount_get_default_location (mount);
- link->details->icon = g_mount_get_icon (mount);
-
- g_signal_connect_object (mount, "changed",
- G_CALLBACK (mount_changed_callback), link, 0);
-
- create_icon_file (link);
-
- return link;
-}
-
-GMount *
-nautilus_desktop_link_get_mount (NautilusDesktopLink *link)
-{
- if (link->details->mount)
- {
- return g_object_ref (link->details->mount);
- }
- return NULL;
-}
-
-NautilusDesktopLinkType
-nautilus_desktop_link_get_link_type (NautilusDesktopLink *link)
-{
- return link->details->type;
-}
-
-char *
-nautilus_desktop_link_get_file_name (NautilusDesktopLink *link)
-{
- return g_strdup (link->details->filename);
-}
-
-char *
-nautilus_desktop_link_get_display_name (NautilusDesktopLink *link)
-{
- return g_strdup (link->details->display_name);
-}
-
-GIcon *
-nautilus_desktop_link_get_icon (NautilusDesktopLink *link)
-{
- if (link->details->icon != NULL)
- {
- return g_object_ref (link->details->icon);
- }
- return NULL;
-}
-
-GFile *
-nautilus_desktop_link_get_activation_location (NautilusDesktopLink *link)
-{
- if (link->details->activation_location)
- {
- return g_object_ref (link->details->activation_location);
- }
- return NULL;
-}
-
-char *
-nautilus_desktop_link_get_activation_uri (NautilusDesktopLink *link)
-{
- if (link->details->activation_location)
- {
- return g_file_get_uri (link->details->activation_location);
- }
- return NULL;
-}
-
-
-gboolean
-nautilus_desktop_link_get_date (NautilusDesktopLink *link,
- NautilusDateType date_type,
- time_t *date)
-{
- return FALSE;
-}
-
-gboolean
-nautilus_desktop_link_can_rename (NautilusDesktopLink *link)
-{
- return (link->details->type == NAUTILUS_DESKTOP_LINK_HOME ||
- link->details->type == NAUTILUS_DESKTOP_LINK_TRASH ||
- link->details->type == NAUTILUS_DESKTOP_LINK_NETWORK);
-}
-
-gboolean
-nautilus_desktop_link_rename (NautilusDesktopLink *link,
- const char *name)
-{
- switch (link->details->type)
- {
- case NAUTILUS_DESKTOP_LINK_HOME:
- {
- g_settings_set_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_HOME_NAME,
- name);
- }
- break;
-
- case NAUTILUS_DESKTOP_LINK_TRASH:
- {
- g_settings_set_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_TRASH_NAME,
- name);
- }
- break;
-
- case NAUTILUS_DESKTOP_LINK_NETWORK:
- {
- g_settings_set_string (nautilus_desktop_preferences,
- NAUTILUS_PREFERENCES_DESKTOP_NETWORK_NAME,
- name);
- }
- break;
-
- default:
- {
- g_assert_not_reached ();
- /* FIXME: Do we want volume renaming?
- * We didn't support that before. */
- }
- break;
- }
-
- return TRUE;
-}
-
-static void
-nautilus_desktop_link_init (NautilusDesktopLink *link)
-{
- link->details = G_TYPE_INSTANCE_GET_PRIVATE (link,
- NAUTILUS_TYPE_DESKTOP_LINK,
- NautilusDesktopLinkDetails);
-}
-
-static void
-desktop_link_finalize (GObject *object)
-{
- NautilusDesktopLink *link;
-
- link = NAUTILUS_DESKTOP_LINK (object);
-
- if (link->details->icon_file != NULL)
- {
- nautilus_desktop_icon_file_remove (link->details->icon_file);
- nautilus_file_unref (NAUTILUS_FILE (link->details->icon_file));
- link->details->icon_file = NULL;
- }
-
- if (link->details->type == NAUTILUS_DESKTOP_LINK_HOME)
- {
- g_signal_handlers_disconnect_by_func (nautilus_desktop_preferences,
- home_name_changed,
- link);
- }
-
- if (link->details->type == NAUTILUS_DESKTOP_LINK_TRASH)
- {
- g_signal_handlers_disconnect_by_func (nautilus_desktop_preferences,
- trash_name_changed,
- link);
- }
-
- if (link->details->type == NAUTILUS_DESKTOP_LINK_NETWORK)
- {
- g_signal_handlers_disconnect_by_func (nautilus_desktop_preferences,
- network_name_changed,
- link);
- }
-
- if (link->details->type == NAUTILUS_DESKTOP_LINK_MOUNT)
- {
- g_object_unref (link->details->mount);
- }
-
- g_free (link->details->filename);
- g_free (link->details->display_name);
- if (link->details->activation_location)
- {
- g_object_unref (link->details->activation_location);
- }
- if (link->details->icon)
- {
- g_object_unref (link->details->icon);
- }
-
- G_OBJECT_CLASS (nautilus_desktop_link_parent_class)->finalize (object);
-}
-
-static void
-nautilus_desktop_link_class_init (NautilusDesktopLinkClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = desktop_link_finalize;
-
- g_type_class_add_private (object_class, sizeof (NautilusDesktopLinkDetails));
-}