/* * delete the entire list */ static void curses_connection_purge(void *conn) { /* variable not used */ (void) conn; DEBUG_MSG("curses_connection_purge"); conntrack_purge(); refresh_connections(); }
/* * the auto-refreshing list of connections */ void gtkui_show_connections(void) { GtkWidget *scrolled, *vbox, *items, *hbox, *button; GtkWidget *context_menu; GtkCellRenderer *renderer; GtkTreeViewColumn *column; DEBUG_MSG("gtk_show_connections"); /* if the object already exist, set the focus to it */ if (conns_window) { if(GTK_IS_WINDOW (conns_window)) gtk_window_present(GTK_WINDOW (conns_window)); else gtkui_page_present(conns_window); return; } conns_window = gtkui_page_new("Connections", >kui_kill_connections, >kui_connections_detach); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER (conns_window), vbox); gtk_widget_show(vbox); /* list */ scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0); gtk_widget_show(scrolled); treeview = gtk_tree_view_new(); gtk_container_add(GTK_CONTAINER (scrolled), treeview); gtk_widget_show(treeview); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (treeview), "row_activated", G_CALLBACK (gtkui_connection_data), NULL); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (" ", renderer, "text", 0, NULL); gtk_tree_view_column_set_sort_column_id (column, 0); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Host ", renderer, "text", 1, NULL); gtk_tree_view_column_set_sort_column_id (column, 1); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Port", renderer, "text", 2, NULL); gtk_tree_view_column_set_sort_column_id (column, 2); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("-", renderer, "text", 3, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Host ", renderer, "text", 4, NULL); gtk_tree_view_column_set_sort_column_id (column, 4); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Port", renderer, "text", 5, NULL); gtk_tree_view_column_set_sort_column_id (column, 5); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Proto", renderer, "text", 6, NULL); gtk_tree_view_column_set_sort_column_id (column, 6); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("State", renderer, "text", 7, NULL); gtk_tree_view_column_set_sort_column_id (column, 7); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Bytes", renderer, "text", 8, NULL); gtk_tree_view_column_set_sort_column_id (column, 8); gtk_tree_view_append_column (GTK_TREE_VIEW(treeview), column); hbox = gtk_hbox_new(TRUE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); button = gtk_button_new_with_mnemonic("View _Details"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gtkui_connection_detail), NULL); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_mnemonic("_Kill Connection"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gtkui_connection_kill), NULL); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_mnemonic("E_xpunge Connections"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gtkui_connection_purge), NULL); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_widget_show(button); /* context menu */ context_menu = gtk_menu_new(); items = gtk_menu_item_new_with_label("View Details"); gtk_menu_shell_append (GTK_MENU_SHELL (context_menu), items); g_signal_connect (G_OBJECT (items), "activate", G_CALLBACK (gtkui_connection_detail), NULL); gtk_widget_show (items); items = gtk_menu_item_new_with_label("Kill Connection"); gtk_menu_shell_append (GTK_MENU_SHELL (context_menu), items); g_signal_connect (G_OBJECT (items), "activate", G_CALLBACK (gtkui_connection_kill), NULL); gtk_widget_show (items); g_signal_connect(G_OBJECT(treeview), "button-press-event", G_CALLBACK(gtkui_context_menu), context_menu); /* initialize the list */ refresh_connections(NULL); gtk_tree_view_set_model(GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (ls_conns)); /* refresh the list every 1000 ms */ /* gtk_idle_add refreshes too fast, uses all cpu */ connections_idle = gtk_timeout_add(1000, refresh_connections, NULL); gtk_widget_show(conns_window); }