diff -Nur nautilus-2.17.90/src/file-manager/fm-list-model.c nautilus-2.17.90-new/src/file-manager/fm-list-model.c --- nautilus-2.17.90/src/file-manager/fm-list-model.c 2007-01-22 10:10:45.000000000 +0100 +++ nautilus-2.17.90-new/src/file-manager/fm-list-model.c 2007-02-04 12:13:08.000000000 +0100 @@ -89,6 +89,7 @@ GSequence *files; GSequenceIter *ptr; guint loaded : 1; + guint has_children : 1; }; static const GtkTargetEntry drag_types [] = { @@ -1251,6 +1252,7 @@ } file_entry->loaded = 0; + file_entry->has_children = 0; /* Remove all children */ while (g_sequence_get_length (file_entry->files) > 0) { @@ -1698,7 +1700,7 @@ file_entry->loaded = 1; files = file_entry->files; - if (g_sequence_get_length (files) == 1) { + if (!file_entry->has_children && g_sequence_get_length (files) == 1) { dummy_ptr = g_sequence_get_iter_at_pos (file_entry->files, 0); dummy_entry = g_sequence_get (dummy_ptr); if (dummy_entry->file == NULL) { @@ -1745,3 +1747,22 @@ g_timeout_add (LOADING_TO_EMPTY_DELAY, change_dummy_row_callback, data); } + +void +fm_list_model_subdirectory_files_added (FMListModel *model, NautilusDirectory *directory) +{ + FileEntry *file_entry; + GSequenceIter *parent_ptr; + + if (model == NULL || model->details->directory_reverse_map == NULL) { + return; + } + + parent_ptr = g_hash_table_lookup (model->details->directory_reverse_map, directory); + if (parent_ptr == NULL) { + return; + } + + file_entry = g_sequence_get (parent_ptr); + file_entry->has_children = 1; +} diff -Nur nautilus-2.17.90/src/file-manager/fm-list-model.h nautilus-2.17.90-new/src/file-manager/fm-list-model.h --- nautilus-2.17.90/src/file-manager/fm-list-model.h 2007-01-03 09:52:12.000000000 +0100 +++ nautilus-2.17.90-new/src/file-manager/fm-list-model.h 2007-02-04 12:13:39.000000000 +0100 @@ -135,5 +135,7 @@ void fm_list_model_subdirectory_done_loading (FMListModel *model, NautilusDirectory *directory); +void fm_list_model_subdirectory_files_added (FMListModel *model, + NautilusDirectory *directory); #endif /* FM_LIST_MODEL_H */ diff -Nur nautilus-2.17.90/src/file-manager/fm-list-view.c nautilus-2.17.90-new/src/file-manager/fm-list-view.c --- nautilus-2.17.90/src/file-manager/fm-list-view.c 2007-01-03 09:52:12.000000000 +0100 +++ nautilus-2.17.90-new/src/file-manager/fm-list-view.c 2007-02-04 12:15:22.000000000 +0100 @@ -778,6 +778,12 @@ } static void +subdirectory_files_added_callback (NautilusDirectory *directory, GList* files, FMListView *view) +{ + fm_list_model_subdirectory_files_added (view->details->model, directory); +} + +static void row_expanded_callback (GtkTreeView *treeview, GtkTreeIter *iter, GtkTreePath *path, gpointer callback_data) { FMListView *view; @@ -801,6 +807,9 @@ fm_list_model_subdirectory_done_loading (view->details->model, directory); } else { + g_signal_connect_object (directory, "files_added", + G_CALLBACK (subdirectory_files_added_callback), + view, 0); g_signal_connect_object (directory, "done_loading", G_CALLBACK (subdirectory_done_loading_callback), view, 0); @@ -916,6 +925,9 @@ g_signal_handlers_disconnect_by_func (directory, G_CALLBACK (subdirectory_done_loading_callback), view); + g_signal_handlers_disconnect_by_func (directory, + G_CALLBACK (subdirectory_files_added_callback), + view); fm_directory_view_remove_subdirectory (FM_DIRECTORY_VIEW (view), directory); }