mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
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:
9
gtk.c
9
gtk.c
@ -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",
|
||||||
|
Reference in New Issue
Block a user