From 92f5ee576bcc2d0eec51206291038f1ec1e055e0 Mon Sep 17 00:00:00 2001 From: Corey Berla Date: Tue, 29 Nov 2022 12:32:43 -0800 Subject: files-view: Wait to load expander subdirectory until all files loaded Now that we have a spinner on the name cell, let's wait for the directory to be completely loaded before showing it, when expanding a tree. --- src/nautilus-files-view.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 5fbee2bf7..0133b671c 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -218,6 +218,7 @@ typedef struct * after it finishes loading the directory and its view. */ gboolean loading; + gboolean subdirectory_loading; gboolean in_destruction; @@ -4590,7 +4591,7 @@ queue_pending_files (NautilusFilesView *view, * search it can be a long wait, and we actually want to show files as * they are getting found. So for search is fine if not all files are * seen */ - if (!priv->loading || + if ((!priv->loading && !priv->subdirectory_loading) || (nautilus_directory_are_all_files_seen (directory) || nautilus_view_is_searching (NAUTILUS_VIEW (view)))) { @@ -4806,6 +4807,16 @@ nautilus_files_view_has_subdirectory (NautilusFilesView *view, return g_list_find (priv->subdirectory_list, directory) != NULL; } +static void +subdirectory_done_loading (NautilusDirectory *directory, + gpointer user_data) +{ + NautilusFilesView *view = user_data; + NautilusFilesViewPrivate *priv = nautilus_files_view_get_instance_private (view); + + priv->subdirectory_loading = FALSE; +} + void nautilus_files_view_add_subdirectory (NautilusFilesView *view, NautilusDirectory *directory) @@ -4815,6 +4826,8 @@ nautilus_files_view_add_subdirectory (NautilusFilesView *view, priv = nautilus_files_view_get_instance_private (view); + priv->subdirectory_loading = TRUE; + g_return_if_fail (!g_list_find (priv->subdirectory_list, directory)); nautilus_directory_ref (directory); @@ -4838,6 +4851,9 @@ nautilus_files_view_add_subdirectory (NautilusFilesView *view, g_signal_connect (directory, "files-changed", G_CALLBACK (files_changed_callback), view); + g_signal_connect_object (directory, "done-loading", + G_CALLBACK (subdirectory_done_loading), + view, 0); priv->subdirectory_list = g_list_prepend ( priv->subdirectory_list, directory); @@ -4850,6 +4866,8 @@ nautilus_files_view_remove_subdirectory (NautilusFilesView *view, NautilusFilesViewPrivate *priv; priv = nautilus_files_view_get_instance_private (view); + priv->subdirectory_loading = FALSE; + g_return_if_fail (g_list_find (priv->subdirectory_list, directory)); priv->subdirectory_list = g_list_remove ( @@ -4861,6 +4879,9 @@ nautilus_files_view_remove_subdirectory (NautilusFilesView *view, g_signal_handlers_disconnect_by_func (directory, G_CALLBACK (files_changed_callback), view); + g_signal_handlers_disconnect_by_func (directory, + G_CALLBACK (subdirectory_done_loading), + view); nautilus_directory_file_monitor_remove (directory, &priv->model); -- cgit v1.2.1