summaryrefslogtreecommitdiffstats
path: root/src/io/file.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/io/file.cpp')
-rw-r--r--src/io/file.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/io/file.cpp b/src/io/file.cpp
index 3505f018d..5877e2727 100644
--- a/src/io/file.cpp
+++ b/src/io/file.cpp
@@ -21,6 +21,8 @@
#include "extension/output.h"
#include "extension/input.h"
+#include "object/sp-root.h"
+
// SPDocument*
// ink_file_new(const std::string &Template)
// {
@@ -30,8 +32,9 @@
SPDocument*
-ink_file_open(const Glib::RefPtr<Gio::File>& file)
+ink_file_open(const Glib::RefPtr<Gio::File>& file, bool &cancelled)
{
+ cancelled = false;
SPDocument *doc = nullptr;
@@ -43,20 +46,33 @@ ink_file_open(const Glib::RefPtr<Gio::File>& file)
doc = nullptr;
} catch (Inkscape::Extension::Input::open_failed &e) {
doc = nullptr;
+ } catch (Inkscape::Extension::Input::open_cancelled &e) {
+ cancelled = true;
+ doc = nullptr;
}
// Try to open explicitly as SVG.
- if (doc == nullptr) {
+ if (doc == nullptr && !cancelled) {
try {
doc = Inkscape::Extension::open(Inkscape::Extension::db.get(SP_MODULE_KEY_INPUT_SVG), path.c_str());
} catch (Inkscape::Extension::Input::no_extension_found &e) {
doc = nullptr;
} catch (Inkscape::Extension::Input::open_failed &e) {
doc = nullptr;
+ } catch (Inkscape::Extension::Input::open_cancelled &e) {
+ cancelled = true;
+ doc = nullptr;
}
}
+
if (doc == nullptr) {
std::cerr << "ink_file_open: '" << path << "' cannot be opened!" << std::endl;
+ } else {
+
+ // This is the only place original values should be set.
+ SPRoot *root = doc->getRoot();
+ root->original.inkscape = root->version.inkscape;
+ root->original.svg = root->version.svg;
}
return doc;