#include #include #include gboolean running; GTimer *timer; GtkWidget *timer_display; gboolean update_progress_bar (void) { gchar output[100]; gint hours, minutes, seconds = -1; gulong gulong; seconds = g_timer_elapsed (timer, &gulong); hours = seconds / 3600; seconds -= 3600 * hours; minutes = seconds / 60; seconds -= 60 * minutes; sprintf(output, "%02d:%02d:%02d", hours, minutes, seconds); gtk_label_set_text(GTK_LABEL(timer_display), output); return TRUE; } gboolean keypress (GtkWidget *widget, GdkEventKey *event) { guint(g) = event->keyval; if((g == GDK_KEY_space)) { if(running == FALSE) { g_timer_start(timer); running = TRUE; return TRUE; } else { g_timer_stop(timer); running = FALSE; return TRUE; } } return FALSE; } int main (int argc, char *argv[]) { GtkWidget *window, *box; gtk_init(&argc, &argv); timer_display = gtk_label_new(""); box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_pack_start(GTK_BOX (box), timer_display, TRUE, TRUE, 5); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_add(GTK_CONTAINER (window), box); gtk_widget_show_all(window); timer = g_timer_new(); g_timer_stop(timer); g_timeout_add_full(G_PRIORITY_HIGH, 50, (GSourceFunc) update_progress_bar, NULL, NULL); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(keypress), window); gtk_main(); g_timer_destroy(timer); }