/** * Unregister callbacks in the backend and clean up. */ void nodes_gui_shutdown(void) { tree_view_motion_clear_callback(&tvm_nodes); tree_view_save_widths(treeview_nodes, PROP_NODES_COL_WIDTHS); tree_view_save_visibility(treeview_nodes, PROP_NODES_COL_VISIBLE); guc_node_remove_node_added_listener(nodes_gui_node_added); guc_node_remove_node_removed_listener(nodes_gui_node_removed); guc_node_remove_node_info_changed_listener(nodes_gui_node_info_changed); guc_node_remove_node_flags_changed_listener(nodes_gui_node_flags_changed); gtk_list_store_clear(nodes_model); g_object_unref(G_OBJECT(nodes_model)); nodes_model = NULL; gtk_tree_view_set_model(treeview_nodes, NULL); htable_foreach(nodes_handles, free_node_data, NULL); htable_free_null(&nodes_handles); hset_foreach(ht_node_info_changed, free_node_id, NULL); hset_free_null(&ht_node_info_changed); hset_foreach(ht_node_flags_changed, free_node_id, NULL); hset_free_null(&ht_node_flags_changed); hset_foreach(ht_pending_lookups, free_node_id, NULL); hset_free_null(&ht_pending_lookups); }
/** * Unregister callbacks in the backend and clean up. */ G_GNUC_COLD void nodes_gui_shutdown(void) { GtkCList *clist; clist = GTK_CLIST(gui_main_window_lookup("clist_nodes")); clist_save_visibility(clist, PROP_NODES_COL_VISIBLE); clist_save_widths(clist, PROP_NODES_COL_WIDTHS); guc_node_remove_node_added_listener(nodes_gui_node_added); guc_node_remove_node_removed_listener(nodes_gui_node_removed); guc_node_remove_node_info_changed_listener(nodes_gui_node_info_changed); guc_node_remove_node_flags_changed_listener(nodes_gui_node_flags_changed); hset_foreach_remove(hs_node_info_changed, free_node_id, NULL); hset_free_null(&hs_node_info_changed); hset_foreach_remove(hs_node_flags_changed, free_node_id, NULL); hset_free_null(&hs_node_flags_changed); nodes_gui_remove_all_nodes(); }