summaryrefslogtreecommitdiffstats
path: root/src/extension/system.cpp
diff options
context:
space:
mode:
authorMoritz Eberl <moritz@semiodesk.com>2016-04-11 14:53:05 +0000
committerMoritz Eberl <moritz@semiodesk.com>2016-04-11 14:53:05 +0000
commit58a5565b6d840af2e6a0e74c1554018f75d689b0 (patch)
treebe65d1a9c02dc80d6508ed315950eac33232a34d /src/extension/system.cpp
parentFix node size regression and add ctrlResize property for multiple use. (diff)
downloadinkscape-58a5565b6d840af2e6a0e74c1554018f75d689b0.tar.gz
inkscape-58a5565b6d840af2e6a0e74c1554018f75d689b0.zip
Added a mechanism to load c++ extensions dynamically.
(bzr r14761.1.1)
Diffstat (limited to 'src/extension/system.cpp')
-rw-r--r--src/extension/system.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/extension/system.cpp b/src/extension/system.cpp
index 6a95717f2..5a77ac28e 100644
--- a/src/extension/system.cpp
+++ b/src/extension/system.cpp
@@ -39,6 +39,7 @@
#include "io/sys.h"
#include "inkscape.h"
#include "document-undo.h"
+#include "loader.h"
namespace Inkscape {
@@ -426,7 +427,7 @@ build_from_reprdoc(Inkscape::XML::Document *doc, Implementation::Implementation
enum {
MODULE_EXTENSION,
MODULE_XSLT,
- /* MODULE_PLUGIN, */
+ MODULE_PLUGIN,
MODULE_UNKNOWN_IMP
} module_implementation_type = MODULE_UNKNOWN_IMP;
enum {
@@ -465,10 +466,8 @@ build_from_reprdoc(Inkscape::XML::Document *doc, Implementation::Implementation
module_implementation_type = MODULE_EXTENSION;
} else if (!strcmp(element_name, INKSCAPE_EXTENSION_NS "xslt")) {
module_implementation_type = MODULE_XSLT;
-#if 0
- } else if (!strcmp(element_name, "plugin")) {
+ } else if (!strcmp(element_name, INKSCAPE_EXTENSION_NS "plugin")) {
module_implementation_type = MODULE_PLUGIN;
-#endif
}
//Inkscape::XML::Node *old_repr = child_repr;
@@ -489,13 +488,15 @@ build_from_reprdoc(Inkscape::XML::Document *doc, Implementation::Implementation
imp = static_cast<Implementation::Implementation *>(xslt);
break;
}
-#if 0
case MODULE_PLUGIN: {
- Implementation::Plugin *plugin = new Implementation::Plugin();
- imp = static_cast<Implementation::Implementation *>(plugin);
+ Inkscape::Extension::Loader loader = Inkscape::Extension::Loader();
+ loader.setBaseDirectory ( Inkscape::Application::profile_path("extensions"));
+ imp = loader.LoadImplementation(doc);
+ if( imp != NULL) {
+ return new Extension(repr, imp);
+ }
break;
}
-#endif
default: {
imp = NULL;
break;