summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2022-11-29 12:32:43 -0800
committerAntónio Fernandes <antoniof@gnome.org>2023-01-10 02:01:27 +0000
commit92f5ee576bcc2d0eec51206291038f1ec1e055e0 (patch)
tree4a110dbbac7d0604931e17b3a1a6e5a5d2952b1b
parent0e1504820f9babb755272a51950f19dafa2f0160 (diff)
downloadnautilus-92f5ee576bcc2d0eec51206291038f1ec1e055e0.tar.gz
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.
-rw-r--r--src/nautilus-files-view.c23
1 files changed, 22 insertions, 1 deletions
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);