Blame SOURCES/files-view-Store-selected-files-list-for-compressing.patch

f41b08
From 67c7bdbf8757c51d3b1bc1f5c40eaeddef9e3a89 Mon Sep 17 00:00:00 2001
f41b08
From: Anubhav Tyagi <tyagianubhav619@gmail.com>
f41b08
Date: Sat, 17 Jul 2021 12:39:20 +0530
f41b08
Subject: [PATCH] files-view: Store selected files list for compressing
f41b08
f41b08
The selected files list is chosen after the user confirmed the compress
f41b08
operation in the compress-dialog which may result in files other than
f41b08
chosen file being compressed.
f41b08
f41b08
Store the list of selected files when the user chooses the "Compress"
f41b08
option from the menu, to avoid that
f41b08
f41b08
Fixes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/1900
f41b08
f41b08
f41b08
(cherry picked from commit 6c7eacd20302046521e89dd28240c6b0193ba942)
f41b08
---
f41b08
 src/nautilus-files-view.c | 37 +++++++++++++++++++++++++++----------
f41b08
 1 file changed, 27 insertions(+), 10 deletions(-)
f41b08
f41b08
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
f41b08
index 378e6bdba..b4a91226b 100644
f41b08
--- a/src/nautilus-files-view.c
f41b08
+++ b/src/nautilus-files-view.c
f41b08
@@ -302,6 +302,12 @@ typedef struct
f41b08
     NautilusDirectory *directory;
f41b08
 } FileAndDirectory;
f41b08
 
f41b08
+typedef struct
f41b08
+{
f41b08
+    NautilusFilesView *view;
f41b08
+    GList *selection;
f41b08
+} CompressCallbackData;
f41b08
+
f41b08
 /* forward declarations */
f41b08
 
f41b08
 static gboolean display_selection_info_idle_callback (gpointer data);
f41b08
@@ -2217,9 +2223,9 @@ static void
f41b08
 compress_dialog_controller_on_name_accepted (NautilusFileNameWidgetController *controller,
f41b08
                                              gpointer                          user_data)
f41b08
 {
f41b08
+    CompressCallbackData *callback_data = user_data;
f41b08
     NautilusFilesView *view;
f41b08
     g_autofree gchar *name = NULL;
f41b08
-    GList *selection;
f41b08
     GList *source_files = NULL;
f41b08
     GList *l;
f41b08
     CompressData *data;
f41b08
@@ -2230,12 +2236,10 @@ compress_dialog_controller_on_name_accepted (NautilusFileNameWidgetController *c
f41b08
     AutoarFormat format;
f41b08
     AutoarFilter filter;
f41b08
 
f41b08
-    view = NAUTILUS_FILES_VIEW (user_data);
f41b08
+    view = NAUTILUS_FILES_VIEW (callback_data->view);
f41b08
     priv = nautilus_files_view_get_instance_private (view);
f41b08
 
f41b08
-    selection = nautilus_files_view_get_selection_for_file_transfer (view);
f41b08
-
f41b08
-    for (l = selection; l != NULL; l = l->next)
f41b08
+    for (l = callback_data->selection; l != NULL; l = l->next)
f41b08
     {
f41b08
         source_files = g_list_prepend (source_files,
f41b08
                                        nautilus_file_get_location (l->data));
f41b08
@@ -2302,7 +2306,6 @@ compress_dialog_controller_on_name_accepted (NautilusFileNameWidgetController *c
f41b08
                                        compress_done,
f41b08
                                        data);
f41b08
 
f41b08
-    nautilus_file_list_free (selection);
f41b08
     g_list_free_full (source_files, g_object_unref);
f41b08
     g_clear_object (&priv->compress_controller);
f41b08
 }
f41b08
@@ -2320,6 +2323,12 @@ compress_dialog_controller_on_cancelled (NautilusNewFolderDialogController *cont
f41b08
     g_clear_object (&priv->compress_controller);
f41b08
 }
f41b08
 
f41b08
+static void
f41b08
+compress_callback_data_free (CompressCallbackData *data)
f41b08
+{
f41b08
+    nautilus_file_list_free (data->selection);
f41b08
+    g_free (data);
f41b08
+}
f41b08
 
f41b08
 static void
f41b08
 nautilus_files_view_compress_dialog_new (NautilusFilesView *view)
f41b08
@@ -2328,6 +2337,7 @@ nautilus_files_view_compress_dialog_new (NautilusFilesView *view)
f41b08
     NautilusFilesViewPrivate *priv;
f41b08
     g_autolist (NautilusFile) selection = NULL;
f41b08
     g_autofree char *common_prefix = NULL;
f41b08
+    CompressCallbackData *data;
f41b08
 
f41b08
     priv = nautilus_files_view_get_instance_private (view);
f41b08
 
f41b08
@@ -2365,10 +2375,17 @@ nautilus_files_view_compress_dialog_new (NautilusFilesView *view)
f41b08
                                                                          containing_directory,
f41b08
                                                                          common_prefix);
f41b08
 
f41b08
-    g_signal_connect (priv->compress_controller,
f41b08
-                      "name-accepted",
f41b08
-                      (GCallback) compress_dialog_controller_on_name_accepted,
f41b08
-                      view);
f41b08
+    data = g_new0 (CompressCallbackData, 1);
f41b08
+    data->view = view;
f41b08
+    data->selection = nautilus_files_view_get_selection_for_file_transfer (view);
f41b08
+
f41b08
+    g_signal_connect_data (priv->compress_controller,
f41b08
+                           "name-accepted",
f41b08
+                           (GCallback) compress_dialog_controller_on_name_accepted,
f41b08
+                           data,
f41b08
+                           (GClosureNotify) compress_callback_data_free,
f41b08
+                           G_CONNECT_AFTER);
f41b08
+
f41b08
     g_signal_connect (priv->compress_controller,
f41b08
                       "cancelled",
f41b08
                       (GCallback) compress_dialog_controller_on_cancelled,
f41b08
-- 
f41b08
2.31.1
f41b08