static void forward_files_changed_cover (NemoDirectory *real_directory, GList *files, gpointer callback_data) { nemo_directory_emit_files_changed (NEMO_DIRECTORY (callback_data), files); }
static void monitor_remove_directory (gpointer key, gpointer value, gpointer callback_data) { nemo_directory_file_monitor_remove (NEMO_DIRECTORY (callback_data), value); }
static void merged_callback_remove_directory_cover (gpointer key, gpointer value, gpointer callback_data) { merged_callback_remove_directory (value, NEMO_DIRECTORY (callback_data)); }
static void call_files_changed_unref_free_list (gpointer key, gpointer value, gpointer user_data) { g_assert (value != NULL); g_assert (user_data == NULL); call_files_changed_common (NEMO_DIRECTORY (key), value); nemo_file_list_free (value); }
static GList * nemo_directory_moved_internal (GFile *old_location, GFile *new_location) { CollectData collection; NemoDirectory *directory; GList *node, *affected_files; GFile *new_directory_location; char *relative_path; collection.container = old_location; collection.directories = NULL; g_hash_table_foreach (directories, collect_directories_by_container, &collection); affected_files = NULL; for (node = collection.directories; node != NULL; node = node->next) { directory = NEMO_DIRECTORY (node->data); new_directory_location = NULL; if (g_file_equal (directory->details->location, old_location)) { new_directory_location = g_object_ref (new_location); } else { relative_path = g_file_get_relative_path (old_location, directory->details->location); if (relative_path != NULL) { new_directory_location = g_file_resolve_relative_path (new_location, relative_path); g_free (relative_path); } } if (new_directory_location) { change_directory_location (directory, new_directory_location); g_object_unref (new_directory_location); /* Collect affected files. */ if (directory->details->as_file != NULL) { affected_files = g_list_prepend (affected_files, nemo_file_ref (directory->details->as_file)); } affected_files = g_list_concat (affected_files, nemo_file_list_copy (directory->details->file_list)); } nemo_directory_unref (directory); } g_list_free (collection.directories); return affected_files; }
static void file_changed (NemoFile *file, NemoSearchDirectory *search) { GList list; list.data = file; list.next = NULL; nemo_directory_emit_files_changed (NEMO_DIRECTORY (search), &list); }
static void done_loading_callback (NemoDirectory *real_directory, NemoMergedDirectory *merged) { merged->details->directories_not_done_loading = g_list_remove (merged->details->directories_not_done_loading, real_directory); if (merged->details->directories_not_done_loading == NULL) { nemo_directory_emit_done_loading (NEMO_DIRECTORY (merged)); } }
static void search_engine_hits_added (NemoSearchEngine *engine, GList *hits, NemoSearchDirectory *search) { GList *hit_list; GList *file_list; NemoFile *file; char *uri; SearchMonitor *monitor; GList *monitor_list; file_list = NULL; for (hit_list = hits; hit_list != NULL; hit_list = hit_list->next) { uri = hit_list->data; if (g_str_has_suffix (uri, NEMO_SAVED_SEARCH_EXTENSION)) { /* Never return saved searches themselves as hits */ continue; } file = nemo_file_get_by_uri (uri); for (monitor_list = search->details->monitor_list; monitor_list; monitor_list = monitor_list->next) { monitor = monitor_list->data; /* Add monitors */ nemo_file_monitor_add (file, monitor, monitor->monitor_attributes); } g_signal_connect (file, "changed", G_CALLBACK (file_changed), search), file_list = g_list_prepend (file_list, file); } search->details->files = g_list_concat (search->details->files, file_list); nemo_directory_emit_files_added (NEMO_DIRECTORY (search), file_list); file = nemo_directory_get_corresponding_file (NEMO_DIRECTORY (search)); nemo_file_emit_changed (file); nemo_file_unref (file); }
static void search_engine_error (NemoSearchEngine *engine, const char *error_message, NemoSearchDirectory *search) { GError *error; error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, error_message); nemo_directory_emit_load_error (NEMO_DIRECTORY (search), error); g_error_free (error); }
static void collect_all_directories (gpointer key, gpointer value, gpointer callback_data) { NemoDirectory *directory; GList **dirs; directory = NEMO_DIRECTORY (value); dirs = callback_data; *dirs = g_list_prepend (*dirs, nemo_directory_ref (directory)); }
static void search_callback_invoke_and_destroy (SearchCallback *search_callback) { search_callback->callback (NEMO_DIRECTORY (search_callback->search_directory), search_callback->file_list, search_callback->callback_data); search_callback->search_directory->details->callback_list = g_list_remove (search_callback->search_directory->details->callback_list, search_callback); search_callback_destroy (search_callback); }
static void search_engine_hits_subtracted (NemoSearchEngine *engine, GList *hits, NemoSearchDirectory *search) { GList *hit_list; GList *monitor_list; SearchMonitor *monitor; GList *file_list; char *uri; NemoFile *file; file_list = NULL; for (hit_list = hits; hit_list != NULL; hit_list = hit_list->next) { uri = hit_list->data; file = nemo_file_get_by_uri (uri); for (monitor_list = search->details->monitor_list; monitor_list; monitor_list = monitor_list->next) { monitor = monitor_list->data; /* Remove monitors */ nemo_file_monitor_remove (file, monitor); } g_signal_handlers_disconnect_by_func (file, file_changed, search); search->details->files = g_list_remove (search->details->files, file); file_list = g_list_prepend (file_list, file); } nemo_directory_emit_files_changed (NEMO_DIRECTORY (search), file_list); nemo_file_list_free (file_list); file = nemo_directory_get_corresponding_file (NEMO_DIRECTORY (search)); nemo_file_emit_changed (file); nemo_file_unref (file); }
static void invalidate_one_count (gpointer key, gpointer value, gpointer user_data) { NemoDirectory *directory; g_assert (key != NULL); g_assert (NEMO_IS_DIRECTORY (value)); g_assert (user_data == NULL); directory = NEMO_DIRECTORY (value); nemo_directory_invalidate_count_and_mime_list (directory); }
static void merged_monitor_destroy (MergedMonitor *monitor) { NemoDesktopDirectory *desktop; desktop = monitor->desktop_dir; /* Call through to the real directory remove calls. */ nemo_directory_file_monitor_remove (desktop->details->real_directory, monitor); nemo_directory_monitor_remove_internal (NEMO_DIRECTORY (desktop), NULL, monitor); g_free (monitor); }
static void nemo_directory_finalize (GObject *object) { NemoDirectory *directory; directory = NEMO_DIRECTORY (object); g_hash_table_remove (directories, directory->details->location); nemo_directory_cancel (directory); g_assert (directory->details->count_in_progress == NULL); if (directory->details->monitor_list != NULL) { g_warning ("destroying a NemoDirectory while it's being monitored"); g_list_free_full (directory->details->monitor_list, g_free); } if (directory->details->monitor != NULL) { nemo_monitor_cancel (directory->details->monitor); } if (directory->details->dequeue_pending_idle_id != 0) { g_source_remove (directory->details->dequeue_pending_idle_id); } if (directory->details->call_ready_idle_id != 0) { g_source_remove (directory->details->call_ready_idle_id); } if (directory->details->location) { g_object_unref (directory->details->location); } g_assert (directory->details->file_list == NULL); g_hash_table_destroy (directory->details->file_hash); if (directory->details->hidden_file_hash) { g_hash_table_destroy (directory->details->hidden_file_hash); } nemo_file_queue_destroy (directory->details->high_priority_queue); nemo_file_queue_destroy (directory->details->low_priority_queue); nemo_file_queue_destroy (directory->details->extension_queue); g_assert (directory->details->directory_load_in_progress == NULL); g_assert (directory->details->count_in_progress == NULL); g_assert (directory->details->dequeue_pending_idle_id == 0); g_list_free_full (directory->details->pending_file_info, g_object_unref); G_OBJECT_CLASS (nemo_directory_parent_class)->finalize (object); }
static void monitor_add_directory (gpointer key, gpointer value, gpointer callback_data) { MergedMonitor *monitor; monitor = value; nemo_directory_file_monitor_add (NEMO_DIRECTORY (callback_data), monitor, monitor->monitor_hidden_files, monitor->monitor_attributes, forward_files_added_cover, monitor->merged); }
static void async_state_changed_one (gpointer key, gpointer value, gpointer user_data) { NemoDirectory *directory; g_assert (key != NULL); g_assert (NEMO_IS_DIRECTORY (value)); g_assert (user_data == NULL); directory = NEMO_DIRECTORY (value); nemo_directory_async_state_changed (directory); emit_change_signals_for_all_files (directory); }
static NemoDirectory * nemo_directory_new (GFile *location) { NemoDirectory *directory; char *uri; uri = g_file_get_uri (location); if (eel_uri_is_desktop (uri)) { directory = NEMO_DIRECTORY (g_object_new (NEMO_TYPE_DESKTOP_DIRECTORY, NULL)); } else if (eel_uri_is_search (uri)) { directory = NEMO_DIRECTORY (g_object_new (NEMO_TYPE_SEARCH_DIRECTORY, NULL)); } else if (g_str_has_suffix (uri, NEMO_SAVED_SEARCH_EXTENSION)) { directory = NEMO_DIRECTORY (nemo_search_directory_new_from_saved_search (uri)); } else { directory = NEMO_DIRECTORY (g_object_new (NEMO_TYPE_VFS_DIRECTORY, NULL)); } set_directory_location (directory, location); g_free (uri); return directory; }
static void search_engine_finished (NemoSearchEngine *engine, NemoSearchDirectory *search) { search->details->search_finished = TRUE; nemo_directory_emit_done_loading (NEMO_DIRECTORY (search)); /* Add all file callbacks */ g_list_foreach (search->details->pending_callback_list, (GFunc)search_callback_add_pending_file_callbacks, NULL); search->details->callback_list = g_list_concat (search->details->callback_list, search->details->pending_callback_list); g_list_free (search->details->pending_callback_list); search->details->pending_callback_list = NULL; }
void emit_change_signals_for_all_files_in_all_directories (void) { GList *dirs, *l; NemoDirectory *directory; dirs = NULL; g_hash_table_foreach (directories, collect_all_directories, &dirs); for (l = dirs; l != NULL; l = l->next) { directory = NEMO_DIRECTORY (l->data); emit_change_signals_for_all_files (directory); nemo_directory_unref (directory); } g_list_free (dirs); }
static void collect_directories_by_container (gpointer key, gpointer value, gpointer callback_data) { NemoDirectory *directory; CollectData *collect_data; GFile *location; location = (GFile *) key; directory = NEMO_DIRECTORY (value); collect_data = (CollectData *) callback_data; if (g_file_has_prefix (location, collect_data->container) || g_file_equal (collect_data->container, location)) { nemo_directory_ref (directory); collect_data->directories = g_list_prepend (collect_data->directories, directory); } }
static void merged_callback_check_done (MergedCallback *merged_callback) { /* Check if we are ready. */ if (merged_callback->non_ready_directories != NULL) { return; } /* Remove from the hash table before sending it. */ g_hash_table_steal (merged_callback->desktop_dir->details->callbacks, merged_callback); /* We are ready, so do the real callback. */ (* merged_callback->callback) (NEMO_DIRECTORY (merged_callback->desktop_dir), merged_callback->merged_file_list, merged_callback->callback_data); /* And we are done. */ merged_callback_destroy (merged_callback); }
static GList * merged_get_file_list (NemoDirectory *directory) { GList *dirs_file_list, *merged_dir_file_list = NULL; GList *dir_list; GList *cur_node; dirs_file_list = NULL; dir_list = NEMO_MERGED_DIRECTORY (directory)->details->directories; for (cur_node = dir_list; cur_node != NULL; cur_node = cur_node->next) { NemoDirectory *cur_dir; cur_dir = NEMO_DIRECTORY (cur_node->data); dirs_file_list = g_list_concat (dirs_file_list, nemo_directory_get_file_list (cur_dir)); } merged_dir_file_list = NEMO_DIRECTORY_CLASS (nemo_merged_directory_parent_class)->get_file_list (directory); return g_list_concat (dirs_file_list, merged_dir_file_list); }
static int compare_by_uri_cover (gconstpointer a, gconstpointer b) { return compare_by_uri (NEMO_DIRECTORY (a), NEMO_DIRECTORY (b)); }
static void done_loading_callback (NemoDirectory *real_directory, NemoDesktopDirectory *desktop) { nemo_directory_emit_done_loading (NEMO_DIRECTORY (desktop)); }
static void desktop_directory_changed_callback (gpointer data) { update_desktop_directory (NEMO_DESKTOP_DIRECTORY (data)); nemo_directory_force_reload (NEMO_DIRECTORY (data)); }