#include int main (int argc, char **argv) { GtkWidget *window, *tree, *scrolled, *vbox; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeStore *store; GtkTreeIter iter; int i; 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_tree_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_append_column (GTK_TREE_VIEW (tree), column); gtk_container_add (GTK_CONTAINER (scrolled), tree); gtk_container_add (GTK_CONTAINER (vbox), scrolled); gtk_container_add (GTK_CONTAINER (window), vbox); for (i = 0; i < 200; i++) { gtk_tree_store_append (store, &iter, 0); gtk_tree_store_set (store, &iter, 0, "yyoyosup", -1); } gtk_widget_set_size_request (window, 400, 400); gtk_widget_show_all (window); while (gtk_events_pending ()) gtk_main_iteration (); /** * At this point, the tree is up and visible. Some background * thread now adds items to the bottom of this tree. These items * are not visible, so the only thing which should receive expose * events is the scrollbars, not the tree itself. */ gdk_window_set_debug_updates (TRUE); for (i = 0; i < 10; i++) { gtk_tree_store_append (store, &iter, 0); gtk_tree_store_set (store, &iter, 0, "this isn't visible", -1); while (gtk_events_pending ()) gtk_main_iteration (); } return 0; }