From a20d6a58ebc6c60ff44f0f385cf399ee6fca55bf Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Fri, 26 Apr 2013 12:21:17 +0100 Subject: [PATCH] Fix dirty flag handling bug in X11 event loop. When I added transition handling to mupdf, I broke the X11 behaviour of coalescing all events and only blitting when idle. This commit restores that behaviour, except when transitions are actually in progress (when it still blits instantly). --- apps/pdfapp.c | 6 +++++- apps/x11_main.c | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/apps/pdfapp.c b/apps/pdfapp.c index c3b7d54..ff23c4b 100644 --- a/apps/pdfapp.c +++ b/apps/pdfapp.c @@ -1677,7 +1677,6 @@ void pdfapp_postblit(pdfapp_t *app) if (llama >= 256) { /* Completed. */ - app->in_transit = 0; fz_drop_pixmap(app->ctx, app->image); app->image = app->new_image; app->new_image = NULL; @@ -1689,4 +1688,9 @@ void pdfapp_postblit(pdfapp_t *app) else fz_generate_transition(app->image, app->old_image, app->new_image, llama, &app->transition); winrepaint(app); + if (llama >= 256) + { + /* Completed. */ + app->in_transit = 0; + } } diff --git a/apps/x11_main.c b/apps/x11_main.c index 364013c..987e359 100644 --- a/apps/x11_main.c +++ b/apps/x11_main.c @@ -79,6 +79,7 @@ static int mapped = 0; static Cursor xcarrow, xchand, xcwait, xccaret; static int justcopied = 0; static int dirty = 0; +static int transition_dirty = 0; static int dirtysearch = 0; static char *password = ""; static XColor xbgcolor; @@ -504,6 +505,8 @@ static void winblit(pdfapp_t *app) void winrepaint(pdfapp_t *app) { dirty = 1; + if (app->in_transit) + transition_dirty = 1; } void winrepaintsearch(pdfapp_t *app) @@ -779,7 +782,7 @@ int main(int argc, char **argv) while (!closing) { - while (!closing && XPending(xdpy) && !dirty) + while (!closing && XPending(xdpy) && !transition_dirty) { XNextEvent(xdpy, &xevt); @@ -886,6 +889,7 @@ int main(int argc, char **argv) else if (dirtysearch) winblitsearch(&gapp); dirty = 0; + transition_dirty = 0; dirtysearch = 0; pdfapp_postblit(&gapp); } @@ -899,7 +903,7 @@ int main(int argc, char **argv) timeradd(&now, &tmo, &tmo_at); } - if (XPending(xdpy) || dirty) + if (XPending(xdpy) || transition_dirty) continue; timeout = NULL; -- 1.8.3