GTK misfires timers at inconvenient moments, sometimes causing a new
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 31 May 2005 08:50:42 +0000 (08:50 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 31 May 2005 08:50:42 +0000 (08:50 +0000)
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
midend.c
puzzles.h

diff --git a/gtk.c b/gtk.c
index 645b250..81aeda1 100644 (file)
--- 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;
 }
index e8bcd20..de20e14 100644 (file)
--- 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)
index 4ee718e..bf441c6 100644 (file)
--- 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);