=== modified file 'src/splivarot.cpp' --- src/splivarot.cpp 2016-11-09 00:23:41 +0000 +++ src/splivarot.cpp 2017-02-08 23:11:12 +0000 @@ -1504,7 +1504,11 @@ gchar const *paint_order = sp_repr_css_property(ncss, "paint-order", NULL); SPIPaintOrder temp; temp.read( paint_order ); - if (temp.layer[0] != SP_CSS_PAINT_ORDER_NORMAL && !legacy) { + bool unique = false; + if ((!fill && !markers) || (!fill && !stroke) || (!markers && !stroke)) { + unique = true; + } + if (temp.layer[0] != SP_CSS_PAINT_ORDER_NORMAL && !legacy && !unique) { if (temp.layer[0] == SP_CSS_PAINT_ORDER_FILL) { if (temp.layer[1] == SP_CSS_PAINT_ORDER_STROKE) { @@ -1574,7 +1578,7 @@ } } - } else { + } else if (!unique) { if ( fill ) { g_repr->appendChild(fill); } @@ -1588,35 +1592,36 @@ if( fill || stroke || markers ) { did = true; } + Inkscape::XML::Node *out = NULL; - if (!fill && !markers) { + if (!fill && !markers && did) { out = stroke; - parent->mergeFrom(g_repr, ""); - parent->removeChild(g_repr); - } else if (!fill && !stroke) { + } else if (!fill && !stroke && did) { out = markers; - parent->mergeFrom(g_repr, ""); - parent->removeChild(g_repr); - } else if (!markers && !stroke) { + } else if (!markers && !stroke && did) { out = fill; - parent->mergeFrom(g_repr, ""); - parent->removeChild(g_repr); - } else { + } else if(did) { out = g_repr; } - + if (unique) { + out->setPosition(pos > 0 ? pos : 0); + parent->appendChild(out); + parent->removeChild(g_repr); + } + out->setAttribute("transform", item->getRepr()->attribute("transform")); //bug lp:1290573 : completely destroy the old object first curve->unref(); //Check for recursive markers to path - if( selection->includes(item) ){ - selection->remove(item); - item->deleteObject(false); - selection->add(out); - } else { - item->deleteObject(false); + if (did) { + if( selection->includes(item) ){ + selection->remove(item); + item->deleteObject(false); + selection->add(out); + } else { + item->deleteObject(false); + } + Inkscape::GC::release(g_repr); } - Inkscape::GC::release(g_repr); - } }