#include #include #include static GtkListStore *store; static int n = 10000; static int timediff( struct timeval *large, struct timeval *small ) { return ( ( ( large->tv_sec * 1000 * 1000 ) + large->tv_usec ) - ( ( small->tv_sec * 1000 * 1000 ) + small->tv_usec ) ); } static void add_elements (void) { GtkTreeIter iter; struct timeval before, after; int i; gettimeofday (&before, 0); for (i = 0; i < n; i++) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, "yippie", -1); while (gtk_events_pending ()) gtk_main_iteration (); } gettimeofday (&after, 0); fprintf (stderr, "Adding %d elements took %d usec (%.2f seconds).\n", n, timediff (&after, &before), ((double) timediff (&after, &before)) / (1000.0 * 1000.0)); gettimeofday (&before, 0); while (gtk_events_pending ()) gtk_main_iteration (); gettimeofday (&after, 0); fprintf (stderr, "Event loop took %d usec (%.2f seconds).\n", timediff (&after, &before), ((double) timediff (&after, &before)) / (1000.0 * 1000.0)); } int main (int argc, char **argv) { GtkWidget *window; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *tree; GtkWidget *scrolled; GtkWidget *vbox; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), 0); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), 0); vbox = gtk_vbox_new (FALSE, 0); scrolled = gtk_scrolled_window_new (0, 0); store = gtk_list_store_new (1, G_TYPE_STRING); tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column1", renderer, "text", 0, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); g_object_set (tree, "fixed-height-mode", TRUE, NULL); gtk_container_add (GTK_CONTAINER (scrolled), tree); gtk_container_add (GTK_CONTAINER (vbox), scrolled); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_set_size_request (window, 400, 400); gtk_widget_show_all (window); while (gtk_events_pending ()) gtk_main_iteration (); add_elements (); // gtk_main (); return 0; }