diff --git a/src/nautilus-list-base.c b/src/nautilus-list-base.c index 117eec5a32e0690def1c8898b254ba99b769e10e..73823bc995eae5ed43dc3fb0e90e083580152f09 100644 --- a/src/nautilus-list-base.c +++ b/src/nautilus-list-base.c @@ -71,6 +71,9 @@ enum static GParamSpec *properties[N_PROPS] = { NULL, }; +static void real_add_files (NautilusFilesView *files_view, + GList *files); + static const char * get_sort_attribute_from_sort_type (NautilusFileSortType sort_type) { @@ -1062,11 +1065,30 @@ real_file_changed (NautilusFilesView *files_view, NautilusDirectory *directory) { NautilusListBase *self = NAUTILUS_LIST_BASE (files_view); + g_autoptr (NautilusFile) directory_as_file = NULL; NautilusListBasePrivate *priv = nautilus_list_base_get_instance_private (self); NautilusViewItem *item; + directory_as_file = nautilus_directory_get_corresponding_file (directory); + if (file == directory_as_file) + { + /* We don't care about changes to the current directory itself here, so + * silently ignore it. This happens only with self-owned files.*/ + return; + } + item = nautilus_view_model_find_item_for_file (priv->model, file); - nautilus_view_item_file_changed (item); + if (item != NULL) + { + nautilus_view_item_file_changed (item); + } + else + { + /* When a file that was hidden is not hidden anymore (e.g. undoing the + * rename operation which made it hidden), we get a change notification + * for a file that's not in our model. Let's add it then. */ + real_add_files (files_view, &(GList){file, NULL}); + } } static GList *