#include void subroutine(GtkWidget *button, gpointer data); gboolean sleeper(GtkWidget *subwindow); int main( int argc, char *argv[]) { GtkWidget *window, *button; gtk_init(&argc, &argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); button=gtk_button_new_from_stock(GTK_STOCK_OK); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(subroutine), NULL); gtk_container_add(GTK_CONTAINER(window),button); gtk_widget_show_all(window); gtk_main(); return 0; } void subroutine(GtkWidget *button, gpointer data) { gint x; GtkWidget *subwindow, *vbox,*label; subwindow=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(subwindow), 400, 50); vbox=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(subwindow),vbox); label=gtk_label_new("Label"); gtk_container_add(GTK_CONTAINER(vbox),label); gtk_widget_show_all(subwindow); for (x=0; x < 3000; x++) { while (g_main_context_iteration(NULL, FALSE)); g_idle_add_full(G_PRIORITY_LOW,(GSourceFunc)sleeper,(gpointer)subwindow,NULL); } gtk_widget_destroy(subwindow); return; } gboolean sleeper(GtkWidget *subwindow) { g_usleep(1000); return FALSE; }