summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2023-01-20 10:33:41 -0800
committerCorey Berla <corey@berla.me>2023-04-07 20:46:40 -0700
commit65f420907b0541a371a0815399c8834ceb72a62f (patch)
treedbb850173f32751c6216bc01a0b57615aa0d2f50
parentc4b52e3460853b7126f705b97e4f29c77c7000cf (diff)
downloadnautilus-65f420907b0541a371a0815399c8834ceb72a62f.tar.gz
list-base: Optimize get_selection_for_file_transfer
get_selection_for_file_transfer is very similar to get_selection except in the case where subdirectories (i.e. from expanders) exist. We perform some expensive operations within this special case to check if the parent is also selected. Let's only check the special case if its parent is a subdirectory.
-rw-r--r--src/nautilus-list-base.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/nautilus-list-base.c b/src/nautilus-list-base.c
index 19f09ea5b..cb0c2fa81 100644
--- a/src/nautilus-list-base.c
+++ b/src/nautilus-list-base.c
@@ -1081,6 +1081,7 @@ get_selection (NautilusFilesView *files_view,
{
NautilusListBase *self = NAUTILUS_LIST_BASE (files_view);
NautilusListBasePrivate *priv = nautilus_list_base_get_instance_private (self);
+ NautilusFile *view_file = nautilus_files_view_get_directory_as_file (files_view);
g_autoptr (GtkSelectionFilterModel) selection = NULL;
guint n_selected;
GList *selected_files = NULL;
@@ -1090,15 +1091,16 @@ get_selection (NautilusFilesView *files_view,
for (guint i = 0; i < n_selected; i++)
{
g_autoptr (NautilusViewItem) item = NULL;
+ g_autoptr (NautilusFile) parent = NULL;
NautilusFile *file;
item = get_view_item (G_LIST_MODEL (selection), i);
file = nautilus_view_item_get_file (item);
+ parent = nautilus_file_get_parent (file);
- if (for_file_transfer)
+ if (for_file_transfer && view_file != parent)
{
/* If the parent is already selected don't include the child. */
- g_autoptr (NautilusFile) parent = nautilus_file_get_parent (file);
NautilusViewItem *parent_item;
guint parent_pos;