diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-05-31 08:50:42 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-05-31 08:50:42 +0000 |
| commit | 2698fc9e9e29b9ef5578bf79bd4059616d9667d8 (patch) | |
| tree | 3ca0fa043a3e6769365ab518837bf48b0d39186a | |
| parent | ee429c13cd91a43609eb4688c7a20b5c5056662f (diff) | |
| download | puzzles-2698fc9e9e29b9ef5578bf79bd4059616d9667d8.zip puzzles-2698fc9e9e29b9ef5578bf79bd4059616d9667d8.tar.gz puzzles-2698fc9e9e29b9ef5578bf79bd4059616d9667d8.tar.bz2 puzzles-2698fc9e9e29b9ef5578bf79bd4059616d9667d8.tar.xz | |
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.
[originally from svn r5872]
| -rw-r--r-- | gtk.c | 2 | ||||
| -rw-r--r-- | midend.c | 8 | ||||
| -rw-r--r-- | puzzles.h | 1 |
3 files changed, 10 insertions, 1 deletions
@@ -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; } @@ -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) @@ -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); |