/** timing.c **/ #include GtkWidget *makeDisplay(); gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); gint oneSecondCallback(gpointer data); gint tenSecondCallback(gpointer data); static gint oneSecondTag; static gint tenSecondTag; static GtkWidget *oneSecondLabel; static GtkWidget *tenSecondLabel; static gboolean oneSecondRunning = FALSE; int main(int argc,char *argv[]) { GtkWidget *window; GtkWidget *display; gnome_init("timing","1.0",argc,argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(window), 20); gtk_signal_connect(GTK_OBJECT(window),"delete_event", GTK_SIGNAL_FUNC(eventDelete),NULL); gtk_signal_connect(GTK_OBJECT(window),"destroy", GTK_SIGNAL_FUNC(eventDestroy),NULL); display = makeDisplay(); gtk_container_add(GTK_CONTAINER(window),display); gtk_widget_show_all(window); gtk_main(); exit(0); } GtkWidget *makeDisplay() { GtkWidget *box; box = gtk_vbox_new(FALSE,0); oneSecondLabel = gtk_label_new("One Second Timer"); gtk_box_pack_start(GTK_BOX(box),oneSecondLabel, FALSE,FALSE,0); tenSecondLabel = gtk_label_new("Ten Second Timer"); gtk_box_pack_start(GTK_BOX(box),tenSecondLabel, FALSE,FALSE,0); tenSecondTag = gtk_timeout_add(10000, (GtkFunction)tenSecondCallback,NULL); return(box); } gchar *getTimeString() { struct tm *t; time_t tt; gchar *string; tt = time(NULL); t = localtime(&tt); string = asctime(t); string[strlen(string)-1] = '\0'; return(string); } gint oneSecondCallback(gpointer data) { gtk_label_set_text(GTK_LABEL(oneSecondLabel), getTimeString()); return(TRUE); } gint tenSecondCallback(gpointer data) { gtk_label_set_text(GTK_LABEL(tenSecondLabel), getTimeString()); if(oneSecondRunning) { gtk_timeout_remove(oneSecondTag); oneSecondRunning = FALSE; } else { oneSecondTag = gtk_timeout_add(1000, (GtkFunction)oneSecondCallback,NULL); oneSecondRunning = TRUE; } return(TRUE); } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }