/* Calls update_node for every node. This is actually a function that shouldn't be called often, because it might take a very long time to complete */ void nodes_catalog_update_all(void) { GList *delete_list = NULL; if (!all_nodes) return; /* we can't delete nodes while traversing the catalog, so while updating we * fill a list with the node_id's to remove */ nodes_catalog_foreach((GTraverseFunc) node_update, &delete_list); /* after, remove all nodes on the list from catalog * WARNING: after this call, the list items are also destroyed */ g_list_foreach(delete_list, gfunc_remove_node, NULL); /* free the list - list items are already destroyed */ g_list_free(delete_list); g_my_debug(_("Updated nodes. Active nodes %d"), nodes_catalog_size()); } /* update_nodes */
/* Called for every event a node receives. Right now it's used to * set a message in the statusbar and launch the popup timeout */ static gint node_item_event (GnomeCanvasItem * item, GdkEvent * event, canvas_node_t * canvas_node) { gdouble item_x, item_y; const node_t *node = NULL; /* This is not used yet, but it will be. */ item_x = event->button.x; item_y = event->button.y; gnome_canvas_item_w2i (item->parent, &item_x, &item_y); switch (event->type) { case GDK_2BUTTON_PRESS: if (canvas_node) node = nodes_catalog_find(&canvas_node->canvas_node_id); if (node) { node_protocols_window_create( &canvas_node->canvas_node_id ); g_my_info ("Nodes: %d (shown %u)", nodes_catalog_size(), displayed_nodes); if (DEBUG_ENABLED) { gchar *msg = node_dump(node); g_my_debug("%s", msg); g_free(msg); } } break; default: break; } return FALSE; } /* node_item_event */