summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cairo-render-context.cpp
diff options
context:
space:
mode:
authorEduard Braun <eduard.braun2@gmx.de>2017-11-20 23:54:29 +0000
committerEduard Braun <eduard.braun2@gmx.de>2017-11-20 23:54:29 +0000
commit4d71c10ed216be5f0f4dc52e28696a204988dd3d (patch)
tree02747cdad3b3573a1de224e35f65e38461a8f98f /src/extension/internal/cairo-render-context.cpp
parentMore memleaks fixes (diff)
downloadinkscape-4d71c10ed216be5f0f4dc52e28696a204988dd3d.tar.gz
inkscape-4d71c10ed216be5f0f4dc52e28696a204988dd3d.zip
Fix printing multiple copies of a document
Previously only the first page was printed properly, all following pages were either blank or were not printed at all. This was caused by finishing/destroying the cairo surface of the cairo context associated with the GtkPrintContext used for printing which made it impossible to draw to it for any consecutive page Fixed bugs: - https://bugs.launchpad.net/inkscape/+bug/1733424 - https://bugs.launchpad.net/inkscape/+bug/490866
Diffstat (limited to 'src/extension/internal/cairo-render-context.cpp')
-rw-r--r--src/extension/internal/cairo-render-context.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index 972081c0d..16100dc88 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -878,7 +878,7 @@ CairoRenderContext::_finishSurfaceSetup(cairo_surface_t *surface, cairo_matrix_t
}
bool
-CairoRenderContext::finish(void)
+CairoRenderContext::finish(bool finish_surface)
{
g_assert( _is_valid );
@@ -893,10 +893,13 @@ CairoRenderContext::finish(void)
}
cairo_destroy(_cr);
- cairo_surface_finish(_surface);
- cairo_status_t status = cairo_surface_status(_surface);
- cairo_surface_destroy(_surface);
_cr = NULL;
+
+ if (finish_surface)
+ cairo_surface_finish(_surface);
+ cairo_status_t status = cairo_surface_status(_surface);
+ if (finish_surface)
+ cairo_surface_destroy(_surface);
_surface = NULL;
if (_layout)