diff options
| author | Eduard Braun <eduard.braun2@gmx.de> | 2017-11-20 23:54:29 +0000 |
|---|---|---|
| committer | Eduard Braun <eduard.braun2@gmx.de> | 2017-11-20 23:54:29 +0000 |
| commit | 4d71c10ed216be5f0f4dc52e28696a204988dd3d (patch) | |
| tree | 02747cdad3b3573a1de224e35f65e38461a8f98f /src/extension | |
| parent | More memleaks fixes (diff) | |
| download | inkscape-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')
| -rw-r--r-- | src/extension/internal/cairo-render-context.cpp | 11 | ||||
| -rw-r--r-- | src/extension/internal/cairo-render-context.h | 2 |
2 files changed, 8 insertions, 5 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) diff --git a/src/extension/internal/cairo-render-context.h b/src/extension/internal/cairo-render-context.h index be5169a74..a0ca2665b 100644 --- a/src/extension/internal/cairo-render-context.h +++ b/src/extension/internal/cairo-render-context.h @@ -72,7 +72,7 @@ class CairoRenderContext { public: CairoRenderContext *cloneMe(void) const; CairoRenderContext *cloneMe(double width, double height) const; - bool finish(void); + bool finish(bool finish_surface = true); CairoRenderer *getRenderer(void) const; cairo_t *getCairoContext(void) const; |
