From 008b4378244bc9da9bc021598c8ff6d75a420593 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 31 May 2005 08:50:42 +0000 Subject: [PATCH] GTK misfires timers at inconvenient moments, sometimes causing a new puzzle of a different size to be redrawn before the pixmap is resized, and since backends never redraw already-drawn stuff this is a problem. Was biting me when I entered a Mines game ID of a different size than the current settings into the Specific box. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5872 cda61777-01e9-0310-a592-d414129be87e --- gtk.c | 2 +- midend.c | 8 ++++++++ puzzles.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gtk.c b/gtk.c index 645b250..81aeda1 100644 --- a/gtk.c +++ b/gtk.c @@ -468,7 +468,7 @@ static gint configure_area(GtkWidget *widget, gdk_draw_rectangle(fe->pixmap, gc, 1, 0, 0, fe->w, fe->h); gdk_gc_unref(gc); - midend_redraw(fe->me); + midend_force_redraw(fe->me); return TRUE; } diff --git a/midend.c b/midend.c index e8bcd20..de20e14 100644 --- a/midend.c +++ b/midend.c @@ -132,6 +132,14 @@ static void midend_set_timer(midend_data *me) deactivate_timer(me->frontend); } +void midend_force_redraw(midend_data *me) +{ + if (me->drawstate) + me->ourgame->free_drawstate(me->drawstate); + me->drawstate = me->ourgame->new_drawstate(me->states[0].state); + midend_redraw(me); +} + void midend_new_game(midend_data *me) { while (me->nstates > 0) diff --git a/puzzles.h b/puzzles.h index 4ee718e..bf441c6 100644 --- a/puzzles.h +++ b/puzzles.h @@ -131,6 +131,7 @@ void midend_size(midend_data *me, int *x, int *y); void midend_new_game(midend_data *me); void midend_restart_game(midend_data *me); int midend_process_key(midend_data *me, int x, int y, int button); +void midend_force_redraw(midend_data *me); void midend_redraw(midend_data *me); float *midend_colours(midend_data *me, int *ncolours); void midend_timer(midend_data *me, float tplus); -- 2.11.0