aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-06-01 06:54:14 +0000
committerSimon Tatham <anakin@pobox.com>2005-06-01 06:54:14 +0000
commit695b6be363115a0aefc5a25b93432d9362ad4cf7 (patch)
tree79c2cd6bb57e1f46a56c8cd3998eee0ed6eaa157
parent7905d6dc07b5ba89fc3dfded3642fbcd599ae8e9 (diff)
downloadpuzzles-695b6be363115a0aefc5a25b93432d9362ad4cf7.zip
puzzles-695b6be363115a0aefc5a25b93432d9362ad4cf7.tar.gz
puzzles-695b6be363115a0aefc5a25b93432d9362ad4cf7.tar.bz2
puzzles-695b6be363115a0aefc5a25b93432d9362ad4cf7.tar.xz
Chris Emerson observed the same status-bar flicker under GTK as I
did under Windows, so here's his patch (blatantly copied from my own fix in windows.c :-). [originally from svn r5891]
-rw-r--r--gtk.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/gtk.c b/gtk.c
index 742c18c..deeb7a1 100644
--- 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;