diff options
Diffstat (limited to 'src/nautilus-files-view.c')
-rw-r--r-- | src/nautilus-files-view.c | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 01028dd58..aeefce69c 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -129,7 +129,7 @@ enum END_LOADING, FILE_CHANGED, MOVE_COPY_ITEMS, - REMOVE_FILE, + REMOVE_FILES, SELECTION_CHANGED, TRASH, DELETE, @@ -4336,6 +4336,8 @@ process_old_files (NautilusFilesView *view) if (files_added != NULL || files_changed != NULL) { + NautilusDirectory *prev_directory = NULL; + GList *files_removed = NULL; gboolean send_selection_change = FALSE; g_signal_emit (view, signals[BEGIN_FILE_CHANGES], 0); @@ -4365,9 +4367,22 @@ process_old_files (NautilusFilesView *view) gboolean should_show_file; pending = node->data; should_show_file = still_should_show_file (view, pending); - g_signal_emit (view, - signals[should_show_file ? FILE_CHANGED : REMOVE_FILE], 0, - pending->file, pending->directory); + if (should_show_file) + { + g_signal_emit (view, + signals[FILE_CHANGED], 0, pending->file, pending->directory); + } + else + { + if (prev_directory != NULL && prev_directory != pending->directory) + { + g_signal_emit (view, signals[REMOVE_FILES], 0, + files_removed, pending->directory); + g_clear_pointer (&files_removed, g_list_free); + } + + files_removed = g_list_prepend (files_removed, pending->file); + } /* Acknowledge the files that were pending to be revealed */ if (g_hash_table_contains (priv->pending_reveal, pending->file)) @@ -4386,6 +4401,12 @@ process_old_files (NautilusFilesView *view) } } + if (files_removed != NULL) + { + g_signal_emit (view, signals[REMOVE_FILES], 0, + files_removed, pending->directory); + g_clear_pointer (&files_removed, g_list_free); + } if (files_changed != NULL) { g_autolist (NautilusFile) selection = NULL; @@ -9570,14 +9591,14 @@ nautilus_files_view_class_init (NautilusFilesViewClass *klass) NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, NAUTILUS_TYPE_FILE, NAUTILUS_TYPE_DIRECTORY); - signals[REMOVE_FILE] = + signals[REMOVE_FILES] = g_signal_new ("remove-file", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (NautilusFilesViewClass, remove_file), + G_STRUCT_OFFSET (NautilusFilesViewClass, remove_files), NULL, NULL, g_cclosure_marshal_generic, - G_TYPE_NONE, 2, NAUTILUS_TYPE_FILE, NAUTILUS_TYPE_DIRECTORY); + G_TYPE_NONE, 2, G_TYPE_POINTER, NAUTILUS_TYPE_DIRECTORY); signals[SELECTION_CHANGED] = g_signal_new ("selection-changed", G_TYPE_FROM_CLASS (klass), |