summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/vsd-input.cpp
diff options
context:
space:
mode:
authorEduard Braun <eduard.braun2@gmx.de>2017-04-30 15:40:28 +0000
committerEduard Braun <eduard.braun2@gmx.de>2017-04-30 15:40:28 +0000
commit957df000b3fe2c65d773ef5117a4a3dd376d42aa (patch)
treeb613c4afd9c7efefb406c85f765f4cd59fe52867 /src/extension/internal/vsd-input.cpp
parentcmake: do not intalls header files generated by i18n.py (filters.svg.h, palle... (diff)
downloadinkscape-957df000b3fe2c65d773ef5117a4a3dd376d42aa.tar.gz
inkscape-957df000b3fe2c65d773ef5117a4a3dd376d42aa.zip
CDR/VSD input: Avoid crash when preview image can not be rendered and show a placeholder instead
(bzr r15653)
Diffstat (limited to 'src/extension/internal/vsd-input.cpp')
-rw-r--r--src/extension/internal/vsd-input.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/extension/internal/vsd-input.cpp b/src/extension/internal/vsd-input.cpp
index b7277b99e..c1cfb5cc6 100644
--- a/src/extension/internal/vsd-input.cpp
+++ b/src/extension/internal/vsd-input.cpp
@@ -146,7 +146,7 @@ VsdImportDialog::VsdImportDialog(const std::vector<RVNGString> &vec)
_page_selector_box->pack_start(*_labelTotalPages, Gtk::PACK_SHRINK);
vbox1->pack_end(*_page_selector_box, Gtk::PACK_SHRINK);
-
+
// Buttons
cancelbutton = Gtk::manage(new Gtk::Button(_("_Cancel"), true));
okbutton = Gtk::manage(new Gtk::Button(_("_OK"), true));
@@ -211,6 +211,19 @@ void VsdImportDialog::_setPreviewPage()
}
SPDocument *doc = SPDocument::createNewDocFromMem(_vec[_current_page-1].cstr(), strlen(_vec[_current_page-1].cstr()), 0);
+ if(!doc) {
+ g_warning("VSD import: Could not create preview for page %d", _current_page);
+ gchar const *no_preview_template =
+ "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>"
+ " <path style='fill:none;stroke:#ff0000;stroke-width:2px;' d='M 82,10 18,74 m 0,-64 64,64' />"
+ " <rect style='fill:none;stroke:#000000;stroke-width:1.5px;' width='64' height='64' x='18' y='10' />"
+ " <text x='50' y='92' style='font-size:10px;text-anchor:middle;font-family:sans-serif;'>%s</text>"
+ "</svg>";
+ gchar * no_preview = g_strdup_printf(no_preview_template, _("No preview"));
+ doc = SPDocument::createNewDocFromMem(no_preview, strlen(no_preview), 0);
+ g_free(no_preview);
+ }
+
Gtk::Widget * tmpPreviewArea = Glib::wrap(sp_svg_view_widget_new(doc));
std::swap(_previewArea, tmpPreviewArea);
delete tmpPreviewArea;