Chris Emerson observed the same status-bar flicker under GTK as I
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 1 Jun 2005 06:54:14 +0000 (06:54 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 1 Jun 2005 06:54:14 +0000 (06:54 +0000)
did under Windows, so here's his patch (blatantly copied from my own
fix in windows.c :-).

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5891 cda61777-01e9-0310-a592-d414129be87e

gtk.c

diff --git a/gtk.c b/gtk.c
index 742c18c..deeb7a1 100644 (file)
--- a/gtk.c
+++ b/gtk.c
@@ -78,6 +78,7 @@ struct frontend {
     GtkWidget *cfgbox;
     char *paste_data;
     int paste_data_len;
+    char *laststatus;
 };
 
 void get_random_seed(void **randseed, int *randseedsize)
@@ -103,9 +104,14 @@ void status_bar(frontend *fe, char *text)
     assert(fe->statusbar);
 
     rewritten = midend_rewrite_statusbar(fe->me, text);
-    gtk_statusbar_pop(GTK_STATUSBAR(fe->statusbar), fe->statusctx);
-    gtk_statusbar_push(GTK_STATUSBAR(fe->statusbar), fe->statusctx, rewritten);
-    sfree(rewritten);
+    if (!fe->laststatus || strcmp(rewritten, fe->laststatus)) {
+       gtk_statusbar_pop(GTK_STATUSBAR(fe->statusbar), fe->statusctx);
+       gtk_statusbar_push(GTK_STATUSBAR(fe->statusbar), fe->statusctx, rewritten);
+       sfree(fe->laststatus);
+       fe->laststatus = rewritten;
+    } else {
+       sfree(rewritten);
+    }
 }
 
 void start_draw(frontend *fe)
@@ -1204,6 +1210,8 @@ static frontend *new_window(char *game_id, char **error)
     fe->fonts = NULL;
     fe->nfonts = fe->fontsize = 0;
 
+    fe->laststatus = NULL;
+
     fe->paste_data = NULL;
     fe->paste_data_len = 0;