static void
desktop_finalize (GObject *object)
{
	NautilusDesktopDirectoryFile *desktop_file;
	NautilusDesktopDirectory *desktop_directory;

	desktop_file = NAUTILUS_DESKTOP_DIRECTORY_FILE (object);
	desktop_directory = desktop_file->details->desktop_directory;

	/* Todo: ghash now safe? */
	eel_g_hash_table_safe_for_each
		(desktop_file->details->callbacks,
		 desktop_callback_remove_file_cover,
		 desktop_file->details->real_dir_file);
	
	if (g_hash_table_size (desktop_file->details->callbacks) != 0) {
		g_warning ("call_when_ready still pending when desktop virtual file is destroyed");
	}

	g_hash_table_destroy (desktop_file->details->callbacks);
	g_hash_table_destroy (desktop_file->details->monitors);

	nautilus_file_unref (desktop_file->details->real_dir_file);
	nautilus_directory_unref (NAUTILUS_DIRECTORY (desktop_directory));

	G_OBJECT_CLASS (nautilus_desktop_directory_file_parent_class)->finalize (object);
}
static void
merged_remove_real_directory (NemoMergedDirectory *merged,
			      NemoDirectory *real_directory)
{
	g_return_if_fail (NEMO_IS_MERGED_DIRECTORY (merged));
	g_return_if_fail (NEMO_IS_DIRECTORY (real_directory));
	g_return_if_fail (g_list_find (merged->details->directories, real_directory) != NULL);

	/* Since the real directory will be going away, act as if files were removed */
	real_directory_notify_files_removed (real_directory);

	/* Remove this directory from callbacks and monitors. */
	eel_g_hash_table_safe_for_each (merged->details->callbacks,
					merged_callback_remove_directory_cover,
					real_directory);
	g_hash_table_foreach (merged->details->monitors,
			      monitor_remove_directory,
			      real_directory);

	/* Disconnect all the signals. */
	g_signal_handlers_disconnect_matched
		(real_directory, G_SIGNAL_MATCH_DATA,
		 0, 0, NULL, NULL, merged);

	/* Remove from our list of directories. */
	merged->details->directories = g_list_remove
		(merged->details->directories, real_directory);
	merged->details->directories_not_done_loading = g_list_remove
		(merged->details->directories_not_done_loading, real_directory);
	nemo_directory_unref (real_directory);
}