summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/print.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/ui/dialog/print.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/ui/dialog/print.cpp')
-rw-r--r--src/ui/dialog/print.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/ui/dialog/print.cpp b/src/ui/dialog/print.cpp
index 532a8c364..ea99ffa19 100644
--- a/src/ui/dialog/print.cpp
+++ b/src/ui/dialog/print.cpp
@@ -35,6 +35,10 @@ static void draw_page(GtkPrintOperation *,
gint /*page_nr*/,
gpointer user_data)
{
+ // TODO: If the user prints multiple copies we render the whole page for each copy
+ // It would be more efficient to render the page once (e.g. in "begin_print")
+ // and simply print this result as often as necessary
+
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
struct workaround_gtkmm *junk = (struct workaround_gtkmm*)user_data;
//printf("%s %d\n",__FUNCTION__, page_nr);
@@ -120,7 +124,7 @@ static void draw_page(GtkPrintOperation *,
ret = renderer.setupDocument (ctx, junk->_doc, TRUE, 0., NULL);
if (ret) {
renderer.renderItem(ctx, junk->_base);
- ctx->finish();
+ ctx->finish(false); // do not finish the cairo_surface_t - it's owned by our GtkPrintContext!
}
else {
g_warning("%s", _("Could not set up Document"));