diff options
author | Corey Berla <corey@berla.me> | 2023-01-20 10:33:41 -0800 |
---|---|---|
committer | Corey Berla <corey@berla.me> | 2023-04-07 20:46:40 -0700 |
commit | 65f420907b0541a371a0815399c8834ceb72a62f (patch) | |
tree | dbb850173f32751c6216bc01a0b57615aa0d2f50 | |
parent | c4b52e3460853b7126f705b97e4f29c77c7000cf (diff) | |
download | nautilus-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.c | 6 |
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; |