diff options
Diffstat (limited to 'src/io/file.cpp')
| -rw-r--r-- | src/io/file.cpp | 20 |
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; |
