From 191fbb46db58bffa20bfbf7b145ec7a13beb3346 Mon Sep 17 00:00:00 2001 From: Carlos Soriano Date: Tue, 12 Apr 2016 14:05:31 +0200 Subject: file: move special link to file instead of the view This feels like belonging to the file itself rather than the view. https://bugzilla.gnome.org/show_bug.cgi?id=712620 --- libnautilus-private/nautilus-desktop-icon-file.c | 7 ++++++ libnautilus-private/nautilus-file.c | 13 ++++++++++++ libnautilus-private/nautilus-file.h | 6 ++++++ src/nautilus-desktop-canvas-view.c | 27 ------------------------ src/nautilus-files-view.c | 25 ++++++++++++++-------- src/nautilus-files-view.h | 5 ----- 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 @@ -6970,6 +6970,18 @@ nautilus_file_is_user_special_directory (NautilusFile *file, return is_special_dir; } +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) { @@ -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 */ -- cgit v1.2.1