summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2016-04-12 14:05:31 +0200
committerCarlos Soriano <csoriano@gnome.org>2016-04-12 16:25:52 +0200
commit15fdd59eae89d4de4fcfb5e9b9eb133a57bf74de (patch)
treed0d269a554fe6cbae06fae62733e3361b02928b5
parent20578f1bd7684ea91ed2eb2c014f0982058b5fcc (diff)
downloadnautilus-15fdd59eae89d4de4fcfb5e9b9eb133a57bf74de.tar.gz
file: move special link to file instead of the view
This feels like belonging to the file itself rather than the view.
-rw-r--r--libnautilus-private/nautilus-desktop-icon-file.c7
-rw-r--r--libnautilus-private/nautilus-file.c13
-rw-r--r--libnautilus-private/nautilus-file.h6
-rw-r--r--src/nautilus-desktop-canvas-view.c27
-rw-r--r--src/nautilus-files-view.c25
-rw-r--r--src/nautilus-files-view.h5
6 files changed, 42 insertions, 41 deletions
diff --git a/libnautilus-private/nautilus-desktop-icon-file.c b/libnautilus-private/nautilus-desktop-icon-file.c
index 48b06d18a..95a45e476 100644
--- a/libnautilus-private/nautilus-desktop-icon-file.c
+++ b/libnautilus-private/nautilus-desktop-icon-file.c
@@ -468,6 +468,12 @@ real_opens_in_view (NautilusFile *file)
return TRUE;
}
+static gboolean
+real_is_special_link (NautilusFile *file)
+{
+ return TRUE;
+}
+
static void
nautilus_desktop_icon_file_set_metadata (NautilusFile *file,
const char *key,
@@ -514,6 +520,7 @@ nautilus_desktop_icon_file_class_init (NautilusDesktopIconFileClass *klass)
file_class->drag_can_accept_files = real_drag_can_accept_files;
file_class->invalidate_attributes_internal = real_invalidate_attributes_internal;
file_class->opens_in_view = real_opens_in_view;
+ file_class->is_special_link = real_is_special_link;
g_type_class_add_private (object_class, sizeof(NautilusDesktopIconFileDetails));
}
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 51cc87ccc..8e7d170e1 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -6971,6 +6971,18 @@ nautilus_file_is_user_special_directory (NautilusFile *file,
}
gboolean
+nautilus_file_is_special_link (NautilusFile *file)
+{
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->is_special_link (file);
+}
+
+static gboolean
+real_is_special_link (NautilusFile *file)
+{
+ return FALSE;
+}
+
+gboolean
nautilus_file_is_archive (NautilusFile *file)
{
char *mime_type;
@@ -8019,6 +8031,7 @@ nautilus_file_class_init (NautilusFileClass *class)
class->drag_can_accept_files = real_drag_can_accept_files;
class->invalidate_attributes_internal = real_invalidate_attributes_internal;
class->opens_in_view = real_opens_in_view;
+ class->is_special_link = real_is_special_link;
signals[CHANGED] =
g_signal_new ("changed",
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index ca97c7506..4c2645ab5 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -208,6 +208,7 @@ gboolean nautilus_file_is_executable (Nautilu
gboolean nautilus_file_is_directory (NautilusFile *file);
gboolean nautilus_file_is_user_special_directory (NautilusFile *file,
GUserDirectory special_directory);
+gboolean nautilus_file_is_special_link (NautilusFile *file);
gboolean nautilus_file_is_archive (NautilusFile *file);
gboolean nautilus_file_is_in_search (NautilusFile *file);
gboolean nautilus_file_is_in_trash (NautilusFile *file);
@@ -608,6 +609,11 @@ typedef struct {
NautilusFileAttributes file_attributes);
gboolean (* opens_in_view) (NautilusFile *file);
+
+ /* Use this if the custom file class doesn't support usual operations like
+ * copy, delete or move.
+ */
+ gboolean (* is_special_link) (NautilusFile *file);
} NautilusFileClass;
#endif /* NAUTILUS_FILE_H */
diff --git a/src/nautilus-desktop-canvas-view.c b/src/nautilus-desktop-canvas-view.c
index f42aa98ae..5fe8f0a12 100644
--- a/src/nautilus-desktop-canvas-view.c
+++ b/src/nautilus-desktop-canvas-view.c
@@ -69,8 +69,6 @@ static void default_zoom_level_changed (gpointer
static void real_update_context_menus (NautilusFilesView *view);
static char* real_get_backing_uri (NautilusFilesView *view);
static void real_check_empty_states (NautilusFilesView *view);
-static gboolean real_special_link_in_selection (NautilusFilesView *view,
- GList *selection);
static char * real_get_file_paths_or_uris_as_newline_delimited_string (NautilusFilesView *view,
GList *selection,
gboolean get_paths);
@@ -313,8 +311,6 @@ nautilus_desktop_canvas_view_class_init (NautilusDesktopCanvasViewClass *class)
vclass->check_empty_states = real_check_empty_states;
vclass->get_file_paths_or_uris_as_newline_delimited_string = real_get_file_paths_or_uris_as_newline_delimited_string;
- vclass->special_link_in_selection = real_special_link_in_selection;
-
g_type_class_add_private (class, sizeof (NautilusDesktopCanvasViewDetails));
}
@@ -580,29 +576,6 @@ const GActionEntry desktop_view_entries[] = {
{ "unstretch", action_unstretch },
};
-static gboolean
-real_special_link_in_selection (NautilusFilesView *view,
- GList *selection)
-{
- gboolean saw_link;
- GList *node;
- NautilusFile *file;
-
- saw_link = FALSE;
-
- for (node = selection; node != NULL; node = node->next) {
- file = NAUTILUS_FILE (node->data);
-
- saw_link = NAUTILUS_IS_DESKTOP_ICON_FILE (file);
-
- if (saw_link) {
- break;
- }
- }
-
- return saw_link;
-}
-
static void
real_check_empty_states (NautilusFilesView *view)
{
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index b701b488b..1e6a2ae8d 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -4054,15 +4054,23 @@ static gboolean
nautilus_files_view_special_link_in_selection (NautilusFilesView *view,
GList *selection)
{
- return NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->special_link_in_selection (view, selection);
-}
+ gboolean saw_link;
+ GList *node;
+ NautilusFile *file;
-static gboolean
-real_special_link_in_selection (NautilusFilesView *view,
- GList *selection)
-{
- /* Normal views doesn't have any special link */
- return FALSE;
+ saw_link = FALSE;
+
+ for (node = selection; node != NULL; node = node->next) {
+ file = NAUTILUS_FILE (node->data);
+
+ saw_link = nautilus_file_is_special_link (file);
+
+ if (saw_link) {
+ break;
+ }
+ }
+
+ return saw_link;
}
/* desktop_or_home_dir_in_selection
@@ -7971,7 +7979,6 @@ nautilus_files_view_class_init (NautilusFilesViewClass *klass)
klass->update_context_menus = real_update_context_menus;
klass->update_actions_state = real_update_actions_state;
klass->check_empty_states = real_check_empty_states;
- klass->special_link_in_selection = real_special_link_in_selection;
klass->get_file_paths_or_uris_as_newline_delimited_string = real_get_file_paths_or_uris_as_newline_delimited_string;
copied_files_atom = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
diff --git a/src/nautilus-files-view.h b/src/nautilus-files-view.h
index 38b825e58..f775ab0a7 100644
--- a/src/nautilus-files-view.h
+++ b/src/nautilus-files-view.h
@@ -263,11 +263,6 @@ struct NautilusFilesViewClass {
* By default it shows a widget overlay on top of the view */
void (* check_empty_states) (NautilusFilesView *view);
- /* Use this to tell the view whether inside the selection there is some link
- * that cannot be worked with. This is used by the desktop for the trash,
- * home and other special links. */
- gboolean (* special_link_in_selection) (NautilusFilesView *view,
- GList *selection);
/* Use this when the scripts environment vars are being set, for selected files, etc.,
* if the subclassed view has some special links that need conversion to
* normal uris */