[nautilus] files-view: Avoid leaking selection list and data



commit 5da4acab69b5b5ae63eb409b52d624e4f56d17e8
Author: Alexandru Fazakas <alex fazakas97 yahoo com>
Date:   Wed Feb 21 00:14:45 2018 +0200

    files-view: Avoid leaking selection list and data
    
    Sometimes, while working with the files_view_get_selection function, the
    freeing is not done properly. We leak a lot of objects as of this and we
    need a way to fix it.
    
    To avoid leaking, we implemented g_autoptr support for NautilusFile in order
    to have at our disposal automatic, deep cleanup whenever we use the function.
    
    In this patch, we changed all calls to use g_autolist appropriately and bumped
    the glib dependency up to 2.55.1 (in order for us to use g_autolist).
    
    Fixes https://gitlab.gnome.org/GNOME/nautilus/issues/226

 meson.build                         |   2 +-
 src/nautilus-canvas-view.c          |   8 +--
 src/nautilus-files-view.c           | 122 +++++++++++++-----------------------
 src/nautilus-list-view.c            |   7 +--
 src/nautilus-trash-bar.c            |  13 ++--
 src/nautilus-view-icon-controller.c |   8 +--
 src/nautilus-window-slot.c          |  21 +++----
 7 files changed, 66 insertions(+), 115 deletions(-)
---
diff --git a/meson.build b/meson.build
index 3b5c8dbff..1c6976797 100644
--- a/meson.build
+++ b/meson.build
@@ -28,7 +28,7 @@ pkgconfig = import('pkgconfig')
 #
 
 # Dependencies
-glib_ver = '>= 2.51.2'
+glib_ver = '>= 2.55.1'
 
 libgd = subproject(
   'libgd',
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index 161206768..f99ddd9a6 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -915,7 +915,7 @@ nautilus_canvas_view_select_first (NautilusFilesView *view)
 static void
 nautilus_canvas_view_reveal_selection (NautilusFilesView *view)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     g_return_if_fail (NAUTILUS_IS_CANVAS_VIEW (view));
 
@@ -930,8 +930,6 @@ nautilus_canvas_view_reveal_selection (NautilusFilesView *view)
             (get_canvas_container (NAUTILUS_CANVAS_VIEW (view)),
             selection->data);
     }
-
-    nautilus_file_list_free (selection);
 }
 
 static GdkRectangle *
@@ -962,7 +960,7 @@ get_rectangle_for_data (NautilusFilesView      *view,
 static GdkRectangle *
 nautilus_canvas_view_compute_rename_popover_pointing_to (NautilusFilesView *view)
 {
-    g_autoptr (GList) selection = NULL;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusCanvasIconData *data;
 
     g_return_val_if_fail (NAUTILUS_IS_CANVAS_VIEW (view), NULL);
@@ -979,7 +977,7 @@ nautilus_canvas_view_compute_rename_popover_pointing_to (NautilusFilesView *view
 static GdkRectangle *
 nautilus_canvas_view_reveal_for_selection_context_menu (NautilusFilesView *view)
 {
-    g_autoptr (GList) selection = NULL;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusCanvasContainer *container;
     NautilusCanvasIconData *data;
 
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index a7fc8f35e..c677be771 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -906,7 +906,7 @@ nautilus_files_view_scroll_to_file (NautilusFilesView *view,
  * Get a list of NautilusFile pointers that represents the
  * currently-selected items in this view. Subclasses must override
  * the signal handler for the 'get_selection' signal. Callers are
- * responsible for g_free-ing the list (but not its data).
+ * responsible for g_free-ing the list (and unrefing its data).
  * @view: NautilusFilesView whose selected items are of interest.
  *
  * Return value: GList of NautilusFile pointers representing the selection.
@@ -1177,14 +1177,13 @@ nautilus_files_view_preview_files (NautilusFilesView *view,
 void
 nautilus_files_view_activate_selection (NautilusFilesView *view)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
     nautilus_files_view_activate_files (view,
                                         selection,
                                         0,
                                         TRUE);
-    nautilus_file_list_free (selection);
 }
 
 void
@@ -1267,7 +1266,7 @@ action_open_file_and_close_window (GSimpleAction *action,
                                    GVariant      *state,
                                    gpointer       user_data)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusFilesView *view;
 
     view = NAUTILUS_FILES_VIEW (user_data);
@@ -1277,7 +1276,6 @@ action_open_file_and_close_window (GSimpleAction *action,
                                         selection,
                                         NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND,
                                         TRUE);
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -1326,7 +1324,7 @@ action_open_item_location (GSimpleAction *action,
                            gpointer       user_data)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusFile *item;
     GFile *activation_location;
     NautilusFile *activation_file;
@@ -1363,7 +1361,6 @@ action_open_item_location (GSimpleAction *action,
     nautilus_file_unref (parent);
     nautilus_file_unref (activation_file);
     g_object_unref (activation_location);
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -1372,7 +1369,7 @@ action_open_item_new_tab (GSimpleAction *action,
                           gpointer       user_data)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     GtkWindow *window;
 
     view = NAUTILUS_FILES_VIEW (user_data);
@@ -1388,8 +1385,6 @@ action_open_item_new_tab (GSimpleAction *action,
                                             NAUTILUS_WINDOW_OPEN_FLAG_DONT_MAKE_ACTIVE,
                                             FALSE);
     }
-
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -1452,12 +1447,12 @@ choose_program (NautilusFilesView *view,
 static void
 open_with_other_program (NautilusFilesView *view)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     g_assert (NAUTILUS_IS_FILES_VIEW (view));
 
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
-    choose_program (view, selection);
+    choose_program (view, g_steal_pointer (&selection));
 }
 
 static void
@@ -1474,8 +1469,6 @@ static void
 trash_or_delete_selected_files (NautilusFilesView *view)
 {
     NautilusFilesViewPrivate *priv;
-    GList *selection;
-
     priv = nautilus_files_view_get_instance_private (view);
 
     /* This might be rapidly called multiple times for the same selection
@@ -1484,11 +1477,11 @@ trash_or_delete_selected_files (NautilusFilesView *view)
      */
     if (!priv->selection_was_removed)
     {
+        g_autolist (NautilusFile) selection = NULL;
         selection = nautilus_files_view_get_selection_for_file_transfer (view);
         trash_or_delete_files (nautilus_files_view_get_containing_window (view),
                                selection,
                                view);
-        nautilus_file_list_free (selection);
         priv->selection_was_removed = TRUE;
     }
 }
@@ -1553,7 +1546,7 @@ action_star (GSimpleAction *action,
              gpointer       user_data)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusFilesViewPrivate *priv;
 
     view = NAUTILUS_FILES_VIEW (user_data);
@@ -1573,7 +1566,7 @@ action_unstar (GSimpleAction *action,
                gpointer       user_data)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusFilesViewPrivate *priv;
 
     view = NAUTILUS_FILES_VIEW (user_data);
@@ -2047,10 +2040,9 @@ nautilus_files_view_new_folder_dialog_new (NautilusFilesView *view,
 
     if (with_selection)
     {
-        GList *selection;
+        g_autolist (NautilusFile) selection = NULL;
         selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
         common_prefix = nautilus_get_common_filename_prefix (selection, MIN_COMMON_FILENAME_PREFIX_LENGTH);
-        nautilus_file_list_free (selection);
     }
 
     priv->new_folder_controller =
@@ -2244,7 +2236,7 @@ nautilus_files_view_compress_dialog_new (NautilusFilesView *view)
 {
     NautilusDirectory *containing_directory;
     NautilusFilesViewPrivate *priv;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     g_autofree char *common_prefix = NULL;
 
     priv = nautilus_files_view_get_instance_private (view);
@@ -2291,8 +2283,6 @@ nautilus_files_view_compress_dialog_new (NautilusFilesView *view)
                       "cancelled",
                       (GCallback) compress_dialog_controller_on_cancelled,
                       view);
-
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -2413,7 +2403,7 @@ action_properties (GSimpleAction *action,
 {
     NautilusFilesView *view;
     NautilusFilesViewPrivate *priv;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     GList *files;
 
     g_assert (NAUTILUS_IS_FILES_VIEW (user_data));
@@ -2436,7 +2426,6 @@ action_properties (GSimpleAction *action,
     {
         nautilus_properties_window_present (selection, GTK_WIDGET (view), NULL);
     }
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -3207,7 +3196,7 @@ nautilus_files_view_finalize (GObject *object)
 void
 nautilus_files_view_display_selection_info (NautilusFilesView *view)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     goffset non_folder_size;
     gboolean non_folder_size_known;
     guint non_folder_count, folder_count, folder_item_count;
@@ -3270,8 +3259,6 @@ nautilus_files_view_display_selection_info (NautilusFilesView *view)
         }
     }
 
-    nautilus_file_list_free (selection);
-
     /* Break out cases for localization's sake. But note that there are still pieces
      * being assembled in a particular order, which may be a problem for some localizers.
      */
@@ -3518,7 +3505,7 @@ done_loading (NautilusFilesView *view,
 {
     NautilusFilesViewPrivate *priv;
     GList *pending_selection;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     gboolean do_reveal = FALSE;
 
     priv = nautilus_files_view_get_instance_private (view);
@@ -3555,11 +3542,6 @@ done_loading (NautilusFilesView *view,
             do_reveal = TRUE;
         }
 
-        if (selection)
-        {
-            g_list_free_full (selection, g_object_unref);
-        }
-
         if (pending_selection)
         {
             g_list_free_full (pending_selection, g_object_unref);
@@ -4051,7 +4033,7 @@ process_old_files (NautilusFilesView *view)
     NautilusFilesViewPrivate *priv;
     GList *files_added, *files_changed, *node;
     FileAndDirectory *pending;
-    GList *selection, *files;
+    GList *files;
     g_autoptr (GList) pending_additions = NULL;
 
     priv = nautilus_files_view_get_instance_private (view);
@@ -4112,12 +4094,12 @@ process_old_files (NautilusFilesView *view)
 
         if (files_changed != NULL)
         {
+            g_autolist (NautilusFile) selection = NULL;
             selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
             files = file_and_directory_list_to_files (files_changed);
             send_selection_change = eel_g_lists_sort_and_check_for_intersection
                                         (&files, &selection);
             nautilus_file_list_free (files);
-            nautilus_file_list_free (selection);
         }
 
         file_and_directory_list_free (priv->old_added_files);
@@ -4142,7 +4124,7 @@ static void
 display_pending_files (NautilusFilesView *view)
 {
     NautilusFilesViewPrivate *priv;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     process_new_files (view);
     process_old_files (view);
@@ -4163,8 +4145,6 @@ display_pending_files (NautilusFilesView *view)
     {
         done_loading (view, TRUE);
     }
-
-    nautilus_file_list_free (selection);
 }
 
 static gboolean
@@ -4759,7 +4739,7 @@ get_extension_selection_menu_items (NautilusFilesView *view)
     GList *items;
     GList *providers;
     GList *l;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     window = nautilus_files_view_get_window (view);
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
@@ -4779,7 +4759,6 @@ get_extension_selection_menu_items (NautilusFilesView *view)
     }
 
     nautilus_module_extension_list_free (providers);
-    nautilus_file_list_free (selection);
 
     return items;
 }
@@ -5168,7 +5147,7 @@ run_script (GSimpleAction *action,
     NautilusFilesViewPrivate *priv;
     ScriptLaunchParameters *launch_parameters;
     GdkScreen *screen;
-    GList *selected_files;
+    g_autolist (NautilusFile) selection = NULL;
     char *file_uri;
     char *local_file_path;
     char *quoted_path;
@@ -5188,10 +5167,10 @@ run_script (GSimpleAction *action,
 
     old_working_dir = change_to_view_directory (launch_parameters->directory_view);
 
-    selected_files = nautilus_view_get_selection (NAUTILUS_VIEW (launch_parameters->directory_view));
-    set_script_environment_variables (launch_parameters->directory_view, selected_files);
+    selection = nautilus_view_get_selection (NAUTILUS_VIEW (launch_parameters->directory_view));
+    set_script_environment_variables (launch_parameters->directory_view, selection);
 
-    parameters = get_file_names_as_parameter_array (selected_files,
+    parameters = get_file_names_as_parameter_array (selection,
                                                     priv->model);
 
     screen = gtk_widget_get_screen (GTK_WIDGET (launch_parameters->directory_view));
@@ -5203,7 +5182,6 @@ run_script (GSimpleAction *action,
                                                     (const char * const *) parameters);
     g_strfreev (parameters);
 
-    nautilus_file_list_free (selected_files);
     unset_script_environment_variables ();
     g_chdir (old_working_dir);
     g_free (old_working_dir);
@@ -6092,14 +6070,13 @@ action_paste_files_into (GSimpleAction *action,
                          gpointer       user_data)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     view = NAUTILUS_FILES_VIEW (user_data);
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
     if (selection != NULL)
     {
         paste_into (view, NAUTILUS_FILE (selection->data));
-        nautilus_file_list_free (selection);
     }
 }
 
@@ -6107,7 +6084,7 @@ static void
 real_action_rename (NautilusFilesView *view)
 {
     NautilusFile *file;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     GtkWidget *dialog;
 
     g_assert (NAUTILUS_IS_FILES_VIEW (view));
@@ -6141,8 +6118,6 @@ real_action_rename (NautilusFilesView *view)
             nautilus_files_view_rename_file_popover_new (view, file);
         }
     }
-
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6396,7 +6371,7 @@ action_extract_here (GSimpleAction *action,
                      gpointer       user_data)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     g_autoptr (GFile) location = NULL;
     g_autoptr (GFile) parent = NULL;
 
@@ -6411,8 +6386,6 @@ action_extract_here (GSimpleAction *action,
     parent = g_file_get_parent (location);
 
     extract_files (view, selection, parent);
-
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6421,15 +6394,13 @@ action_extract_to (GSimpleAction *action,
                    gpointer       user_data)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     view = NAUTILUS_FILES_VIEW (user_data);
 
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
 
     extract_files_to_chosen_location (view, selection);
-
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6518,7 +6489,7 @@ action_set_as_wallpaper (GSimpleAction *action,
                          GVariant      *state,
                          gpointer       user_data)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     /* Copy the item to Pictures/Wallpaper (internationalized) since it may be
      *  remote. Then set it as the current wallpaper. */
@@ -6553,8 +6524,6 @@ action_set_as_wallpaper (GSimpleAction *action,
         g_free (target_uri);
         g_list_free_full (uris, g_free);
     }
-
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6698,7 +6667,8 @@ action_unmount_volume (GSimpleAction *action,
                        gpointer       user_data)
 {
     NautilusFile *file;
-    GList *selection, *l;
+    g_autolist (NautilusFile) selection = NULL;
+    GList *l;
     NautilusFilesView *view;
 
     view = NAUTILUS_FILES_VIEW (user_data);
@@ -6717,7 +6687,6 @@ action_unmount_volume (GSimpleAction *action,
             g_object_unref (mount_op);
         }
     }
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6726,7 +6695,8 @@ action_eject_volume (GSimpleAction *action,
                      gpointer       user_data)
 {
     NautilusFile *file;
-    GList *selection, *l;
+    g_autolist (NautilusFile) selection = NULL;
+    GList *l;
     NautilusFilesView *view;
 
     view = NAUTILUS_FILES_VIEW (user_data);
@@ -6745,7 +6715,6 @@ action_eject_volume (GSimpleAction *action,
             g_object_unref (mount_op);
         }
     }
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6782,7 +6751,8 @@ action_start_volume (GSimpleAction *action,
                      gpointer       user_data)
 {
     NautilusFile *file;
-    GList *selection, *l;
+    g_autolist (NautilusFile) selection = NULL;
+    GList *l;
     NautilusFilesView *view;
     GMountOperation *mount_op;
 
@@ -6801,7 +6771,6 @@ action_start_volume (GSimpleAction *action,
             g_object_unref (mount_op);
         }
     }
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6810,7 +6779,8 @@ action_stop_volume (GSimpleAction *action,
                     gpointer       user_data)
 {
     NautilusFile *file;
-    GList *selection, *l;
+    g_autolist (NautilusFile) selection = NULL;
+    GList *l;
     NautilusFilesView *view;
 
     view = NAUTILUS_FILES_VIEW (user_data);
@@ -6829,7 +6799,6 @@ action_stop_volume (GSimpleAction *action,
             g_object_unref (mount_op);
         }
     }
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -6838,7 +6807,8 @@ action_detect_media (GSimpleAction *action,
                      gpointer       user_data)
 {
     NautilusFile *file;
-    GList *selection, *l;
+    g_autolist (NautilusFile) selection = NULL;
+    GList *l;
     NautilusView *view;
 
     view = NAUTILUS_VIEW (user_data);
@@ -6853,7 +6823,6 @@ action_detect_media (GSimpleAction *action,
             nautilus_file_poll_for_media (file);
         }
     }
-    nautilus_file_list_free (selection);
 }
 
 const GActionEntry view_entries[] =
@@ -7266,7 +7235,8 @@ static void
 real_update_actions_state (NautilusFilesView *view)
 {
     NautilusFilesViewPrivate *priv;
-    GList *selection, *l;
+    g_autolist (NautilusFile) selection = NULL;
+    GList *l;
     NautilusFile *file;
     gint selection_count;
     gboolean zoom_level_is_default;
@@ -7678,8 +7648,6 @@ real_update_actions_state (NautilusFilesView *view)
     action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
                                          "unstar");
     g_simple_action_set_enabled (G_SIMPLE_ACTION (action), show_unstar);
-
-    nautilus_file_list_free (selection);
 }
 
 /* Convenience function to be called when updating menus,
@@ -7699,7 +7667,8 @@ static void
 update_selection_menu (NautilusFilesView *view)
 {
     NautilusFilesViewPrivate *priv;
-    GList *selection, *l;
+    g_autolist (NautilusFile) selection = NULL;
+    GList *l;
     NautilusFile *file;
     gint selection_count;
     gboolean show_app;
@@ -7944,8 +7913,6 @@ update_selection_menu (NautilusFilesView *view)
         g_object_unref (menu_item);
     }
 
-    nautilus_file_list_free (selection);
-
     update_scripts_menu (view);
 }
 
@@ -8167,7 +8134,7 @@ nautilus_files_view_pop_up_background_context_menu (NautilusFilesView *view,
 static gboolean
 popup_menu_callback (NautilusFilesView *view)
 {
-    g_autoptr (GList) selection = NULL;
+    g_autolist (NautilusFile) selection = NULL;
 
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
 
@@ -8278,7 +8245,7 @@ nautilus_files_view_notify_selection_changed (NautilusFilesView *view)
 {
     NautilusFilesViewPrivate *priv;
     GtkWindow *window;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     g_return_if_fail (NAUTILUS_IS_FILES_VIEW (view));
 
@@ -8287,7 +8254,6 @@ nautilus_files_view_notify_selection_changed (NautilusFilesView *view)
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
     window = nautilus_files_view_get_containing_window (view);
     DEBUG_FILES (selection, "Selection changed in window %p", window);
-    nautilus_file_list_free (selection);
 
     priv->selection_was_removed = FALSE;
 
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index 166bd67c4..2cc37e838 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -1090,7 +1090,7 @@ test_expand_row_callback (GtkTreeView *tree_view,
 static void
 nautilus_list_view_reveal_selection (NautilusFilesView *view)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     g_return_if_fail (NAUTILUS_IS_LIST_VIEW (view));
 
@@ -1115,8 +1115,6 @@ nautilus_list_view_reveal_selection (NautilusFilesView *view)
             gtk_tree_path_free (path);
         }
     }
-
-    nautilus_file_list_free (selection);
 }
 
 static gboolean
@@ -1941,7 +1939,7 @@ on_longpress_gesture_pressed_event (GtkGestureLongPress *gesture,
     GdkEventSequence *event_sequence;
     const GdkEvent *event;
     NautilusListView *view = user_data;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
 
     event_sequence = gtk_gesture_get_last_updated_sequence (GTK_GESTURE (gesture));
     if (event_sequence == NULL)
@@ -1960,7 +1958,6 @@ on_longpress_gesture_pressed_event (GtkGestureLongPress *gesture,
     {
         nautilus_files_view_pop_up_background_context_menu (NAUTILUS_FILES_VIEW (view), event);
     }
-    nautilus_file_list_free (selection);
 }
 
 static void
diff --git a/src/nautilus-trash-bar.c b/src/nautilus-trash-bar.c
index 798a0234b..1256963a4 100644
--- a/src/nautilus-trash-bar.c
+++ b/src/nautilus-trash-bar.c
@@ -57,7 +57,7 @@ static void
 selection_changed_cb (NautilusFilesView *view,
                       NautilusTrashBar  *bar)
 {
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     int count;
 
     selection = nautilus_view_get_selection (NAUTILUS_VIEW (view));
@@ -66,8 +66,6 @@ selection_changed_cb (NautilusFilesView *view,
     gtk_info_bar_set_response_sensitive (GTK_INFO_BAR (bar),
                                          TRASH_BAR_RESPONSE_RESTORE,
                                          (count > 0));
-
-    nautilus_file_list_free (selection);
 }
 
 static void
@@ -162,8 +160,7 @@ trash_bar_response_cb (GtkInfoBar *infobar,
 {
     NautilusTrashBar *bar;
     GtkWidget *window;
-    GList *files;
-
+    
     bar = NAUTILUS_TRASH_BAR (infobar);
     window = gtk_widget_get_toplevel (GTK_WIDGET (bar));
 
@@ -177,9 +174,9 @@ trash_bar_response_cb (GtkInfoBar *infobar,
 
         case TRASH_BAR_RESPONSE_RESTORE:
         {
-            files = nautilus_view_get_selection (NAUTILUS_VIEW (bar->view));
-            nautilus_restore_files_from_trash (files, GTK_WINDOW (window));
-            nautilus_file_list_free (files);
+            g_autolist (NautilusFile) selection = NULL;
+            selection = nautilus_view_get_selection (NAUTILUS_VIEW (bar->view));
+            nautilus_restore_files_from_trash (selection, GTK_WINDOW (window));
         }
         break;
 
diff --git a/src/nautilus-view-icon-controller.c b/src/nautilus-view-icon-controller.c
index 322537b4f..16bd4155c 100644
--- a/src/nautilus-view-icon-controller.c
+++ b/src/nautilus-view-icon-controller.c
@@ -390,7 +390,7 @@ real_select_all (NautilusFilesView *files_view)
 static GtkWidget *
 get_first_selected_item_ui (NautilusViewIconController *self)
 {
-    g_autoptr (GList) selection = NULL;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusFile *file;
     NautilusViewItemModel *item_model;
 
@@ -664,7 +664,7 @@ real_compute_rename_popover_pointing_to (NautilusFilesView *files_view)
 static GdkRectangle *
 real_reveal_for_selection_context_menu (NautilusFilesView *files_view)
 {
-    g_autoptr (GList) selection = NULL;
+    g_autolist (NautilusFile) selection = NULL;
     NautilusViewIconController *self = NAUTILUS_VIEW_ICON_CONTROLLER (files_view);
     GtkWidget *item_ui;
 
@@ -698,7 +698,7 @@ on_button_press_event (GtkWidget *widget,
                        gpointer   user_data)
 {
     NautilusViewIconController *self;
-    g_autoptr (GList) selection = NULL;
+    g_autolist (NautilusFile) selection = NULL;
     GtkWidget *child_at_pos;
     GdkEventButton *event_button;
 
@@ -744,8 +744,6 @@ on_button_press_event (GtkWidget *widget,
         }
     }
 
-    g_list_foreach (selection, (GFunc) g_object_unref, NULL);
-
     return GDK_EVENT_STOP;
 }
 
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 4187cffff..f41eb3ef2 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -467,7 +467,7 @@ hide_query_editor (NautilusWindowSlot *self)
 
     if (nautilus_view_is_searching (view))
     {
-        GList *selection;
+        g_autolist (NautilusFile) selection = NULL;
 
         selection = nautilus_view_get_selection (view);
 
@@ -476,8 +476,6 @@ hide_query_editor (NautilusWindowSlot *self)
                                                  nautilus_view_get_location (view),
                                                  0,
                                                  selection);
-
-        nautilus_file_list_free (selection);
     }
 
     if (nautilus_window_slot_get_active (self))
@@ -1009,7 +1007,7 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot      *self,
 {
     NautilusWindowSlotPrivate *priv;
     GFile *old_location;
-    GList *old_selection;
+    g_autolist (NautilusFile) old_selection = NULL;
 
     priv = nautilus_window_slot_get_instance_private (self);
     old_selection = NULL;
@@ -1029,7 +1027,6 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot      *self,
                            NAUTILUS_LOCATION_CHANGE_STANDARD, 0, NULL);
 
 done:
-    nautilus_file_list_free (old_selection);
     nautilus_profile_end (NULL);
 }
 
@@ -1807,7 +1804,7 @@ setup_view (NautilusWindowSlot *self,
     }
     else if (old_location != NULL)
     {
-        GList *selection;
+        g_autolist (NautilusFile) selection = NULL;
 
         selection = nautilus_view_get_selection (priv->content_view);
 
@@ -1817,7 +1814,6 @@ setup_view (NautilusWindowSlot *self,
                            NULL,
                            FALSE,
                            TRUE);
-        nautilus_file_list_free (selection);
     }
     else
     {
@@ -1948,7 +1944,7 @@ nautilus_window_slot_set_content_view (NautilusWindowSlot *self,
                                        guint               id)
 {
     NautilusFilesView *view;
-    GList *selection;
+    g_autolist (NautilusFile) selection = NULL;
     char *uri;
     NautilusWindowSlotPrivate *priv;
 
@@ -2052,8 +2048,8 @@ nautilus_window_slot_force_reload (NautilusWindowSlot *self)
 {
     GFile *location;
     char *current_pos;
-    GList *selection;
     NautilusWindowSlotPrivate *priv;
+    g_autolist (NautilusFile) selection = NULL;
 
     g_assert (NAUTILUS_IS_WINDOW_SLOT (self));
 
@@ -2069,7 +2065,7 @@ nautilus_window_slot_force_reload (NautilusWindowSlot *self)
      */
     g_object_ref (location);
     current_pos = NULL;
-    selection = NULL;
+
     if (priv->new_content_view)
     {
         selection = nautilus_view_get_selection (priv->content_view);
@@ -2084,7 +2080,6 @@ nautilus_window_slot_force_reload (NautilusWindowSlot *self)
         NAUTILUS_LOCATION_CHANGE_RELOAD, 0, current_pos);
     g_free (current_pos);
     g_object_unref (location);
-    nautilus_file_list_free (selection);
 }
 
 void
@@ -3076,7 +3071,6 @@ nautilus_window_slot_set_allow_stop (NautilusWindowSlot *self,
 void
 nautilus_window_slot_stop_loading (NautilusWindowSlot *self)
 {
-    GList *selection;
     GFile *location;
     NautilusDirectory *directory;
     NautilusWindowSlotPrivate *priv;
@@ -3102,6 +3096,8 @@ nautilus_window_slot_stop_loading (NautilusWindowSlot *self)
          * be told, or it is the very pending change we wish
          * to cancel.
          */
+        g_autolist (NautilusFile) selection = NULL;
+
         selection = nautilus_view_get_selection (priv->content_view);
         load_new_location (self,
                            location,
@@ -3109,7 +3105,6 @@ nautilus_window_slot_stop_loading (NautilusWindowSlot *self)
                            NULL,
                            TRUE,
                            FALSE);
-        nautilus_file_list_free (selection);
     }
 
     end_location_change (self);


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