summaryrefslogtreecommitdiffstats
path: root/src/persp3d-reference.cpp
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc@jeanmougin.fr>2015-07-14 11:04:32 +0000
committerMarc Jeanmougin <marcjeanmougin@free.fr>2015-07-14 11:04:32 +0000
commit676707120d5527ff8c8c8c89ea33d1eadf9cf1b4 (patch)
treec2d91ac1c2c2453f8db7a5bed7b9f52b67320178 /src/persp3d-reference.cpp
parentfix "arrange" tool (typo) (diff)
downloadinkscape-676707120d5527ff8c8c8c89ea33d1eadf9cf1b4.tar.gz
inkscape-676707120d5527ff8c8c8c89ea33d1eadf9cf1b4.zip
Fix for circular references detection in almost all cases, fixing https://bugs.launchpad.net/inkscape/+bug/167247 and a few of its duplicates.
This fix is aimed at preventing any sort of circular references with the URIReference::_acceptObject method, checking the absence of loops in the reference+child tree. There can be some performance improvements done if we add a pointer from cloned sub-objects to their origin sub-object. The remaining cases that are not fixed can involve non-trivial loops using one or more "url()" stylesheet references. Being able to take them into account would require a non-obvious style.cpp refactoring making use of URIReference for this kind of reference (and not handling manually the signals in the styling code, which would probably be a good thing to do anyway) (bzr r14245)
Diffstat (limited to 'src/persp3d-reference.cpp')
-rw-r--r--src/persp3d-reference.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/persp3d-reference.cpp b/src/persp3d-reference.cpp
index 895eac6f2..4526a8d8f 100644
--- a/src/persp3d-reference.cpp
+++ b/src/persp3d-reference.cpp
@@ -35,7 +35,8 @@ Persp3DReference::~Persp3DReference(void)
bool
Persp3DReference::_acceptObject(SPObject *obj) const
{
- return SP_IS_PERSP3D(obj);
+ return SP_IS_PERSP3D(obj) && URIReference::_acceptObject(obj);
+;
/* effic: Don't bother making this an inline function: _acceptObject is a virtual function,
typically called from a context where the runtime type is not known at compile time. */
}