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); }