diff --git a/src/sp-style-elem.cpp b/src/sp-style-elem.cpp
index d713a518b2f996740017c08d6ab08633d67d7539..46c311920708dd6cebf0c3cbd87854efc3675c3b 100644 (file)
--- a/src/sp-style-elem.cpp
+++ b/src/sp-style-elem.cpp
#include "document.h"
#include "sp-style-elem.h"
#include "attributes.h"
+#include "style.h"
using Inkscape::XML::TEXT_NODE;
static void sp_style_elem_init(SPStyleElem *style_elem);
static void sp_style_elem_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr);
static void sp_style_elem_set(SPObject *object, unsigned const key, gchar const *const value);
static void sp_style_elem_read_content(SPObject *);
-static Inkscape::XML::Node *sp_style_elem_write(SPObject *, Inkscape::XML::Node *, guint flags);
+static Inkscape::XML::Node *sp_style_elem_write(SPObject *, Inkscape::XML::Document *, Inkscape::XML::Node *, guint flags);
static SPObjectClass *parent_class;
}
static Inkscape::XML::Node *
-sp_style_elem_write(SPObject *const object, Inkscape::XML::Node *repr, guint const flags)
+sp_style_elem_write(SPObject *const object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint const flags)
{
if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object));
repr = xml_doc->createElement("svg:style");
}
@@ -139,7 +139,7 @@ sp_style_elem_write(SPObject *const object, Inkscape::XML::Node *repr, guint con
/* todo: media */
if (((SPObjectClass *) parent_class)->write)
- ((SPObjectClass *) parent_class)->write(object, repr, flags);
+ ((SPObjectClass *) parent_class)->write(object, xml_doc, repr, flags);
return repr;
}
}
cr_parser_destroy(parser);
//object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+
+ // Style references via class= do not, and actually cannot, use autoupdating URIReferences.
+ // Therefore, if an object refers to a stylesheet which has not yet loaded when the object is being loaded
+ // (e.g. if the stylesheet is below or inside the object in XML), its class= has no effect (bug 1491639).
+ // Below is a partial hack that fixes this for a single case: when the <style> is a child of the object
+ // that uses a style from it. It just forces the parent of <style> to reread its style as soon as the stylesheet
+ // is fully loaded. Naturally, this won't work if the user of the stylesheet is its grandparent or precedent.
+ SPObject *parent = SP_OBJECT_PARENT (object);
+ if ( parent ) {
+ sp_style_read_from_object(parent->style, parent);
+ }
}
/**