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