summaryrefslogtreecommitdiff
path: root/community/mupdf/mupdf-1.2-fix-dirty-flag-handling.patch
blob: ec22ac3283047c4578a2bb7c03610ac548661a75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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