More robust timer handling in GTK: never create a new timer when one
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 28 Apr 2004 12:34:37 +0000 (12:34 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 28 Apr 2004 12:34:37 +0000 (12:34 +0000)
is already active.

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@4159 cda61777-01e9-0310-a592-d414129be87e

gtk.c

diff --git a/gtk.c b/gtk.c
index 102ed9c..23ca66d 100644 (file)
--- a/gtk.c
+++ b/gtk.c
@@ -52,7 +52,7 @@ struct frontend {
     midend_data *me;
     GdkGC *gc;
     int bbox_l, bbox_r, bbox_u, bbox_d;
-    int timer_active;
+    int timer_active, timer_id;
 };
 
 void frontend_default_colour(frontend *fe, float *output)
@@ -233,12 +233,15 @@ static gint timer_func(gpointer data)
 
 void deactivate_timer(frontend *fe)
 {
+    if (fe->timer_active)
+        gtk_timeout_remove(fe->timer_id);
     fe->timer_active = FALSE;
 }
 
 void activate_timer(frontend *fe)
 {
-    gtk_timeout_add(20, timer_func, fe);
+    if (!fe->timer_active)
+        fe->timer_id = gtk_timeout_add(20, timer_func, fe);
     fe->timer_active = TRUE;
 }
 
@@ -390,6 +393,8 @@ static frontend *new_window(void)
 
     fe->pixmap = NULL;
 
+    fe->timer_active = FALSE;
+
     gtk_signal_connect(GTK_OBJECT(fe->window), "destroy",
                       GTK_SIGNAL_FUNC(destroy), fe);
     gtk_signal_connect(GTK_OBJECT(fe->window), "key_press_event",