static void
merged_callback_remove_directory (MergedCallback *merged_callback,
                                  CajaDirectory *directory)
{
    merged_callback->non_ready_directories = g_list_remove
            (merged_callback->non_ready_directories, directory);
    merged_callback_check_done (merged_callback);
}
static void
merged_call_when_ready (NemoDirectory *directory,
			NemoFileAttributes file_attributes,
			gboolean wait_for_file_list,
			NemoDirectoryCallback callback,
			gpointer callback_data)
{
	NemoMergedDirectory *merged;
	MergedCallback search_key, *merged_callback;
	GList *node;

	merged = NEMO_MERGED_DIRECTORY (directory);

	/* Check to be sure we aren't overwriting. */
	search_key.callback = callback;
	search_key.callback_data = callback_data;
	if (g_hash_table_lookup (merged->details->callbacks, &search_key) != NULL) {
		g_warning ("tried to add a new callback while an old one was pending");
		return;
	}

	/* Create a merged_callback record. */
	merged_callback = g_new0 (MergedCallback, 1);
	merged_callback->merged = merged;
	merged_callback->callback = callback;
	merged_callback->callback_data = callback_data;
	merged_callback->wait_for_attributes = file_attributes;
	merged_callback->wait_for_file_list = wait_for_file_list;
	for (node = merged->details->directories; node != NULL; node = node->next) {
		merged_callback->non_ready_directories = g_list_prepend
			(merged_callback->non_ready_directories, node->data);
	}

	/* Put it in the hash table. */
	g_hash_table_insert (merged->details->callbacks,
			     merged_callback, merged_callback);

	/* Handle the pathological case where there are no directories. */
	if (merged->details->directories == NULL) {
		merged_callback_check_done (merged_callback);
	}

	/* Now tell all the directories about it. */
	for (node = merged->details->directories; node != NULL; node = node->next) {
		nemo_directory_call_when_ready
			(node->data,
			 merged_callback->wait_for_attributes,
			 merged_callback->wait_for_file_list,
			 directory_ready_callback, merged_callback);
	}
}