summaryrefslogtreecommitdiffstats
path: root/office/epdfview/epdfview-0.1.8-fixes-1.patch
blob: 5e8ec288f2800ce0dbd8ff26865cb77f99aaeccd (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
Date: 2012-08-22
Initial Package Version: 0.1.8
Upstream Status: Varies
Origin: Found at fedora.
Description: Three fixes found at fedora.  For the first (only glib.h
can be included directly, with recent glib), we used to use a sed - but
the other two fixes need patches so I've put them all together.

 Second part is from upstream and fixes trashed colours
Upstream: http://trac.emma-soft.com/epdfview/changeset/367/trunk
Fixes bug: https://bugzilla.redhat.com/show_bug.cgi?id=745483

 Third part is the most critical - from Jiri Popelka, found at
https://bugzilla.redhat.com/show_bug.cgi?id=841880 - looks as if fedora
haven't applied it yet.  It solves building with cups-1.6.

diff -Naur epdfview-0.1.8.orig/src/gtk/StockIcons.h epdfview-0.1.8/src/gtk/StockIcons.h
--- epdfview-0.1.8.orig/src/gtk/StockIcons.h	2011-05-28 11:24:57.000000000 +0100
+++ epdfview-0.1.8/src/gtk/StockIcons.h	2012-08-22 20:06:08.728195806 +0100
@@ -18,7 +18,7 @@
 #if !defined (__STOCK_ICONS_H__)
 #define __STOCK_ICONS_H__
 
-#include <glib/gmacros.h>
+#include <glib.h>
 
 G_BEGIN_DECLS
 
diff -Naur epdfview-0.1.8.orig/src/PDFDocument.cxx epdfview-0.1.8/src/PDFDocument.cxx
--- epdfview-0.1.8.orig/src/PDFDocument.cxx	2011-05-28 11:25:01.000000000 +0100
+++ epdfview-0.1.8/src/PDFDocument.cxx	2012-08-22 20:07:03.627913886 +0100
@@ -20,6 +20,7 @@
 #include <time.h>
 #include <poppler.h>
 #include <unistd.h>
+#include <algorithm>
 #include "epdfview.h"
 
 using namespace ePDFView;
@@ -33,6 +34,24 @@
 static PageMode convertPageMode (gint pageMode);
 static gchar *getAbsoluteFileName (const gchar *fileName);
 
+namespace
+{
+    void
+    convert_bgra_to_rgba (guint8 *data, int width, int height)
+    {
+        using std::swap;
+
+        for (int y = 0; y < height; y++)
+        {
+            for (int x = 0; x < width; x++)
+            {
+                swap(data[0], data[2]);
+                data += 4;
+            }
+        }
+    }
+}
+
 ///
 /// @brief Constructs a new PDFDocument object.
 ///
@@ -650,6 +669,7 @@
         poppler_page_render (page, context);
         cairo_destroy(context);
         cairo_surface_destroy (surface);
+        convert_bgra_to_rgba(renderedPage->getData (), width, height);
 #else // !HAVE_POPPLER_0_17_0
         // Create the pixbuf from the data and render to it.
         GdkPixbuf *pixbuf = gdk_pixbuf_new_from_data (renderedPage->getData (),
diff -Naur epdfview-0.1.8.orig/src/PrintPter.cxx epdfview-0.1.8/src/PrintPter.cxx
--- epdfview-0.1.8.orig/src/PrintPter.cxx	2011-05-28 11:25:01.000000000 +0100
+++ epdfview-0.1.8/src/PrintPter.cxx	2012-08-22 20:11:46.362436859 +0100
@@ -22,6 +22,40 @@
 #include <locale.h>
 #include "epdfview.h"
 
+#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
+#define HAVE_CUPS_1_6 1
+#endif
+
+#ifndef HAVE_CUPS_1_6
+inline int ippGetInteger (ipp_attribute_t *attr, int element)
+{
+    return (attr->values[element].integer);
+}
+
+inline const char * ippGetString (ipp_attribute_t *attr,
+                                  int             element,
+                                  const char      **language /*UNUSED*/)
+{
+    return (attr->values[element].string.text);
+}
+
+inline int ippSetOperation (ipp_t *ipp, ipp_op_t op)
+{
+  if (!ipp)
+    return (0);
+  ipp->request.op.operation_id = op;
+  return (1);
+}
+
+inline int ippSetRequestId (ipp_t *ipp, int request_id)
+{
+    if (!ipp)
+        return (0);
+    ipp->request.any.request_id = request_id;
+    return (1);
+}
+#endif
+
 using namespace ePDFView;
 
 // Structures
@@ -380,8 +414,8 @@
 
     ipp_t *request = ippNew ();
 
-    request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
-    request->request.op.request_id = 1;
+    ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES);
+    ippSetRequestId(request, 1);
 
     ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
                   "attributes-charset", NULL, "utf-8");
@@ -403,7 +437,7 @@
             ippFindAttribute (answer, "printer-state", IPP_TAG_ZERO);
         if ( NULL != state )
         {
-            switch (state->values[0].integer)
+            switch (ippGetInteger (state, 0))
             {
                 case IPP_PRINTER_IDLE:
                     attributes->state = g_strdup (_("Idle"));
@@ -425,7 +459,7 @@
             ippFindAttribute (answer, "printer-location", IPP_TAG_ZERO);
         if ( NULL != location )
         {
-            attributes->location = g_strdup (location->values[0].string.text);
+            attributes->location = g_strdup (ippGetString (location, 0, NULL));
         }
 
         ippDelete (answer);