[nautilus/origin/wip/desktop-split-nofonclicts: 11/26] file: move special link to file instead of the view



commit 15fdd59eae89d4de4fcfb5e9b9eb133a57bf74de
Author: Carlos Soriano <csoriano gnome org>
Date:   Tue Apr 12 14:05:31 2016 +0200

    file: move special link to file instead of the view
    
    This feels like belonging to the file itself rather than the view.

 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 48b06d1..95a45e4 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 51cc87c..8e7d170 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 ca97c75..4c2645a 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 f42aa98..5fe8f0a 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 b701b48..1e6a2ae 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 38b825e..f775ab0 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 */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]