More robust timer handling in GTK: never create a new timer when one

is already active.

[originally from svn r4159]
This commit is contained in:
Simon Tatham
2004-04-28 12:34:37 +00:00
parent 3d8e7585b7
commit d44034bcf6

9
gtk.c
View File

@ -52,7 +52,7 @@ struct frontend {
midend_data *me; midend_data *me;
GdkGC *gc; GdkGC *gc;
int bbox_l, bbox_r, bbox_u, bbox_d; 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) void frontend_default_colour(frontend *fe, float *output)
@ -233,12 +233,15 @@ static gint timer_func(gpointer data)
void deactivate_timer(frontend *fe) void deactivate_timer(frontend *fe)
{ {
if (fe->timer_active)
gtk_timeout_remove(fe->timer_id);
fe->timer_active = FALSE; fe->timer_active = FALSE;
} }
void activate_timer(frontend *fe) 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; fe->timer_active = TRUE;
} }
@ -390,6 +393,8 @@ static frontend *new_window(void)
fe->pixmap = NULL; fe->pixmap = NULL;
fe->timer_active = FALSE;
gtk_signal_connect(GTK_OBJECT(fe->window), "destroy", gtk_signal_connect(GTK_OBJECT(fe->window), "destroy",
GTK_SIGNAL_FUNC(destroy), fe); GTK_SIGNAL_FUNC(destroy), fe);
gtk_signal_connect(GTK_OBJECT(fe->window), "key_press_event", gtk_signal_connect(GTK_OBJECT(fe->window), "key_press_event",