diff options
author | Michael Stahl <mstahl@redhat.com> | 2017-02-08 18:30:42 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-02-08 18:49:45 +0100 |
commit | 791431d7e2485652c96fac7c15f47aa125271ee0 (patch) | |
tree | e13c482aa7b52c6cf363f457a805e2bc31445e62 /xmloff | |
parent | 725c81613c3855f77e2890db0713622974909b33 (diff) |
tdf#103567 xmloff: ODF import: fix loss of events on SVG multi-image
For SVG there are 2 draw:image children in the draw:frame, and the
SdXMLEventContext::EndElement() applies the content of
office:event-listeners to the shape created from the last draw:image
and then MultiImageImportHelper::solveMultipleImages() throws
it away because it's the bitmap fallback of the SVG.
Avoid that problem by calling solveMultipleImages earlier:
The ODF schema ensures that all the draw:image elements occur before
the optional property-bearing child elements of draw:frame,
so we just call solveMultipleImages on the first such optional
element, so that all subsequent properties get applied to the one
surviving shape.
(likely regression from 44cfc7cb6533d827fd2d6e586d92c61d7d7f7a70)
Change-Id: I2be5f6f424dbfd90ca2179ce6f9057929540e762
Diffstat (limited to 'xmloff')
-rw-r--r-- | xmloff/source/core/xmlmultiimagehelper.cxx | 3 | ||||
-rw-r--r-- | xmloff/source/draw/ximpshap.cxx | 10 |
2 files changed, 13 insertions, 0 deletions
diff --git a/xmloff/source/core/xmlmultiimagehelper.cxx b/xmloff/source/core/xmlmultiimagehelper.cxx index 690603a6ba23..723cc5d2b396 100644 --- a/xmloff/source/core/xmlmultiimagehelper.cxx +++ b/xmloff/source/core/xmlmultiimagehelper.cxx @@ -129,6 +129,9 @@ SvXMLImportContextRef MultiImageImportHelper::solveMultipleImages() removeGraphicFromImportContext(rCandidate); } + // re-insert it so that solveMultipleImages is idempotent + maImplContextVector.clear(); + maImplContextVector.push_back(pContext); } else if (maImplContextVector.size() == 1) { diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx index 4015489be193..9abdacfe247e 100644 --- a/xmloff/source/draw/ximpshap.cxx +++ b/xmloff/source/draw/ximpshap.cxx @@ -3558,12 +3558,22 @@ SvXMLImportContext *SdXMLFrameShapeContext::CreateChildContext( sal_uInt16 nPref (nPrefix == XML_NAMESPACE_DRAW && (IsXMLToken( rLocalName, XML_GLUE_POINT ) || IsXMLToken( rLocalName, XML_THUMBNAIL ) ) ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + // note: no more draw:image can be added once we get here + mxImplContext = solveMultipleImages(); + } SvXMLImportContext *pImplContext = mxImplContext.get(); pContext = dynamic_cast<SdXMLShapeContext&>(*pImplContext).CreateChildContext( nPrefix, rLocalName, xAttrList ); } else if ( (XML_NAMESPACE_DRAW == nPrefix) && IsXMLToken( rLocalName, XML_IMAGE_MAP ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + // note: no more draw:image can be added once we get here + mxImplContext = solveMultipleImages(); + } SdXMLShapeContext *pSContext = dynamic_cast< SdXMLShapeContext* >( mxImplContext.get() ); if( pSContext ) { |