summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/file-manager/fm-directory-view.c84
-rw-r--r--src/file-manager/fm-directory-view.h4
-rw-r--r--src/file-manager/fm-icon-view.c3
3 files changed, 71 insertions, 20 deletions
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index d0d4ce13a..544c8cbe5 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -2037,16 +2037,16 @@ fm_directory_all_selected_items_in_trash (FMDirectoryView *view)
}
gboolean
-fm_directory_trash_link_in_selection (FMDirectoryView *view)
+fm_directory_link_type_in_selection (FMDirectoryView *view, NautilusLinkType link_type)
{
- gboolean saw_trash_link;
+ gboolean saw_link;
GList *selection, *node;
NautilusFile *file;
char *uri, *path;
g_return_val_if_fail (FM_IS_DIRECTORY_VIEW (view), FALSE);
- saw_trash_link = FALSE;
+ saw_link = FALSE;
selection = fm_directory_view_get_selection (FM_DIRECTORY_VIEW (view));
for (node = selection; node != NULL; node = node->next) {
@@ -2057,22 +2057,69 @@ fm_directory_trash_link_in_selection (FMDirectoryView *view)
}
uri = nautilus_file_get_uri (file);
path = gnome_vfs_get_local_path_from_uri (uri);
- /* It's probably OK that this ignores trash links that
- * are not local since the trash link we care about is
- * on the desktop.
- */
- saw_trash_link = path != NULL
- && nautilus_link_local_is_trash_link (path);
- g_free (path);
- g_free (uri);
- if (saw_trash_link) {
- break;
+ switch (link_type) {
+ case NAUTILUS_LINK_TRASH:
+ /* It's probably OK that this ignores trash links that
+ * are not local since the trash link we care about is
+ * on the desktop.
+ */
+ saw_link = path != NULL && nautilus_link_local_is_trash_link (path);
+ if (saw_link) {
+ break;
+ }
+ break;
+
+ case NAUTILUS_LINK_MOUNT:
+ saw_link = path != NULL && nautilus_link_local_is_volume_link (path);
+ if (saw_link) {
+ break;
+ }
+ break;
+
+ case NAUTILUS_LINK_HOME:
+ saw_link = path != NULL && nautilus_link_local_is_home_link (path);
+ if (saw_link) {
+ break;
+ }
+ break;
+
+ default:
+ break;
+
}
+ g_free (path);
+ g_free (uri);
}
+
nautilus_file_list_free (selection);
- return saw_trash_link;
+ return saw_link;
+}
+
+/* special_link_in_selection
+ *
+ * Return TRUE is one of our special links is the selection.
+ * Special links include the following:
+ * NAUTILUS_LINK_TRASH, NAUTILUS_LINK_HOME, NAUTILUS_LINK_MOUNT
+ */
+
+static gboolean
+special_link_in_selection (FMDirectoryView *view)
+{
+ if (fm_directory_link_type_in_selection (view, NAUTILUS_LINK_TRASH)) {
+ return TRUE;
+ }
+
+ if (fm_directory_link_type_in_selection (view, NAUTILUS_LINK_HOME)) {
+ return TRUE;
+ }
+
+ if (fm_directory_link_type_in_selection (view, NAUTILUS_LINK_MOUNT)) {
+ return TRUE;
+ }
+
+ return FALSE;
}
static gboolean
@@ -2848,9 +2895,10 @@ fm_directory_view_real_create_selection_context_menu_items (FMDirectoryView *vie
GtkMenu *menu,
GList *files)
{
- gboolean trash_in_selection;
+ gboolean link_in_selection;
- trash_in_selection = fm_directory_trash_link_in_selection (view);
+ /* Check for special links */
+ link_in_selection = special_link_in_selection (view);
append_gtk_menu_item (view, menu, files,
FM_DIRECTORY_VIEW_MENU_PATH_OPEN,
@@ -2865,7 +2913,7 @@ fm_directory_view_real_create_selection_context_menu_items (FMDirectoryView *vie
nautilus_gtk_menu_append_separator (menu);
/* Don't add item if Trash link is in selection */
- if (!trash_in_selection) {
+ if (!link_in_selection) {
/* Trash menu item handled specially. See comment above reset_bonobo_trash_delete_menu. */
if (!fm_directory_all_selected_items_in_trash (view)) {
append_gtk_menu_item (view, menu, files,
@@ -2878,7 +2926,7 @@ fm_directory_view_real_create_selection_context_menu_items (FMDirectoryView *vie
}
}
- if (!trash_in_selection) {
+ if (!link_in_selection) {
append_gtk_menu_item (view, menu, files,
FM_DIRECTORY_VIEW_MENU_PATH_DUPLICATE,
duplicate_callback);
diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h
index a20ed689d..7bcebaa05 100644
--- a/src/file-manager/fm-directory-view.h
+++ b/src/file-manager/fm-directory-view.h
@@ -33,6 +33,7 @@
#include <libnautilus-extensions/nautilus-directory.h>
#include <libnautilus-extensions/nautilus-file.h>
#include <libnautilus-extensions/nautilus-icon-container.h>
+#include <libnautilus-extensions/nautilus-link.h>
#include <libnautilus-extensions/nautilus-string-list.h>
typedef struct FMDirectoryView FMDirectoryView;
@@ -314,7 +315,8 @@ void fm_directory_view_move_copy_items (const GList
FMDirectoryView *view);
gint fm_directory_view_get_context_menu_index (GtkMenu *menu,
const char *menu_name);
-gboolean fm_directory_trash_link_in_selection (FMDirectoryView *view);
+gboolean fm_directory_link_type_in_selection (FMDirectoryView *view,
+ NautilusLinkType link_type);
/* Wrappers for signal emitters. These are normally called
* only by FMDirectoryView itself. They have corresponding signals
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index 56599a7af..1413d7da8 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -606,7 +606,8 @@ fm_icon_view_create_selection_context_menu_items (FMDirectoryView *view,
g_assert (FM_IS_ICON_VIEW (view));
g_assert (GTK_IS_MENU (menu));
- trash_in_selection = fm_directory_trash_link_in_selection (view);
+ /* Check for special links */
+ trash_in_selection = fm_directory_link_type_in_selection (view, NAUTILUS_LINK_TRASH);
NAUTILUS_CALL_PARENT_CLASS
(FM_DIRECTORY_VIEW_CLASS,