summaryrefslogtreecommitdiff
path: root/community/mupdf/mupdf-1.2-fix-dirty-flag-handling.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/mupdf/mupdf-1.2-fix-dirty-flag-handling.patch')
-rw-r--r--community/mupdf/mupdf-1.2-fix-dirty-flag-handling.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/community/mupdf/mupdf-1.2-fix-dirty-flag-handling.patch b/community/mupdf/mupdf-1.2-fix-dirty-flag-handling.patch
new file mode 100644
index 000000000..ec22ac328
--- /dev/null
+++ b/community/mupdf/mupdf-1.2-fix-dirty-flag-handling.patch
@@ -0,0 +1,88 @@
+From a20d6a58ebc6c60ff44f0f385cf399ee6fca55bf Mon Sep 17 00:00:00 2001
+From: Robin Watts <Robin.Watts@artifex.com>
+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
+