diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-09-03 00:32:08 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2013-09-03 19:40:03 +0000 |
commit | 628ed5e89b6c92d41c4ba411ec53ff6bb0f3fbc8 (patch) | |
tree | fd84faa7b5659bf6d3a1f92487dd0119b8e814f2 | |
parent | 85049f0986dbfd277dd449b908d126065c92b7d3 (diff) |
fdo#68839: ODF import: fix name of multi-image frame
When multiple image child elements are inside a frame, each one is
imported and gets unique name via SwDoc::SetFlyName(). But the
retained one is not necessarily the first one, which is the only one
that may have the original name.
Also the solveMultipleImages needs to return a smart pointer, as nothing
else keeps the image contexts alive.
(regression from 44cfc7cb6533d827fd2d6e586d92c61d7d7f7a70)
(cherry picked from commit b69d152cfa1da868ba960345d72ba78f9f8e1b35)
Conflicts:
xmloff/source/core/xmlmultiimagehelper.cxx
xmloff/source/draw/ximpshap.cxx
xmloff/source/text/XMLTextFrameContext.cxx
Change-Id: I28a8a752f3eed176cc2ebb4c9af11a0dd4d18ea6
Reviewed-on: https://gerrit.libreoffice.org/5781
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r-- | xmloff/inc/xmloff/xmlmultiimagehelper.hxx | 2 | ||||
-rw-r--r-- | xmloff/source/core/xmlmultiimagehelper.cxx | 4 | ||||
-rw-r--r-- | xmloff/source/draw/ximpshap.cxx | 5 | ||||
-rw-r--r-- | xmloff/source/text/XMLTextFrameContext.cxx | 30 |
4 files changed, 34 insertions, 7 deletions
diff --git a/xmloff/inc/xmloff/xmlmultiimagehelper.hxx b/xmloff/inc/xmloff/xmlmultiimagehelper.hxx index bbe9ce121477..55448068fc64 100644 --- a/xmloff/inc/xmloff/xmlmultiimagehelper.hxx +++ b/xmloff/inc/xmloff/xmlmultiimagehelper.hxx @@ -44,7 +44,7 @@ public: /// see imlementation for evtl. changing weights and/or adding filetypes. /// /// @returns import context of the selected image - const SvXMLImportContext* solveMultipleImages(); + SvXMLImportContextRef solveMultipleImages(); /// add a content to the remembered image import contexts void addContent(const SvXMLImportContext& rSvXMLImportContext); diff --git a/xmloff/source/core/xmlmultiimagehelper.cxx b/xmloff/source/core/xmlmultiimagehelper.cxx index 5b9b9f5d61a9..c8888d7750ba 100644 --- a/xmloff/source/core/xmlmultiimagehelper.cxx +++ b/xmloff/source/core/xmlmultiimagehelper.cxx @@ -89,9 +89,9 @@ multiImageImportHelper::~multiImageImportHelper() } } -const SvXMLImportContext* multiImageImportHelper::solveMultipleImages() +SvXMLImportContextRef multiImageImportHelper::solveMultipleImages() { - const SvXMLImportContext* pContext(0); + SvXMLImportContextRef pContext; if(maImplContextVector.size() > 1) { // multiple child contexts were imported, decide which is the most valuable one diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx index d60b74d65203..545aa74e6237 100644 --- a/xmloff/source/draw/ximpshap.cxx +++ b/xmloff/source/draw/ximpshap.cxx @@ -3534,8 +3534,9 @@ void SdXMLFrameShapeContext::StartElement(const uno::Reference< xml::sax::XAttri void SdXMLFrameShapeContext::EndElement() { // solve if multiple image child contexts were imported - const SvXMLImportContext* const pSelectedContext(solveMultipleImages()); - const SdXMLGraphicObjectShapeContext* pShapeContext( dynamic_cast<const SdXMLGraphicObjectShapeContext*>( pSelectedContext ) ); + SvXMLImportContextRef const pSelectedContext(solveMultipleImages()); + const SdXMLGraphicObjectShapeContext* pShapeContext( + dynamic_cast<const SdXMLGraphicObjectShapeContext*>(&pSelectedContext)); if ( pShapeContext ) { assert( mxImplContext.Is() ); diff --git a/xmloff/source/text/XMLTextFrameContext.cxx b/xmloff/source/text/XMLTextFrameContext.cxx index 6e8fc2e2eff7..1adb2160275e 100644 --- a/xmloff/source/text/XMLTextFrameContext.cxx +++ b/xmloff/source/text/XMLTextFrameContext.cxx @@ -375,6 +375,7 @@ class XMLTextFrameContext_Impl : public SvXMLImportContext const ::rtl::OUString sTextBoxServiceName; const ::rtl::OUString sGraphicServiceName; + ::rtl::OUString m_sOrigName; ::rtl::OUString sName; ::rtl::OUString sStyleName; ::rtl::OUString sNextName; @@ -452,6 +453,8 @@ public: void SetDesc( const ::rtl::OUString& rDesc ); + void SetName(); + ::com::sun::star::text::TextContentAnchorType GetAnchorType() const { return eAnchorType; } const ::com::sun::star::uno::Reference < @@ -906,6 +909,7 @@ XMLTextFrameContext_Impl::XMLTextFrameContext_Impl( sStyleName = rValue; break; case XML_TOK_TEXT_FRAME_NAME: + m_sOrigName = rValue; sName = rValue; break; case XML_TOK_TEXT_FRAME_FRAME_NAME: @@ -1293,6 +1297,19 @@ void XMLTextFrameContext_Impl::SetHyperlink( const OUString& rHRef, } } +void XMLTextFrameContext_Impl::SetName() +{ + Reference<XNamed> xNamed(xPropSet, UNO_QUERY); + if (xNamed.is()) + { + OUString const name(xNamed->getName()); + if (name != m_sOrigName) + { + xNamed->setName(m_sOrigName); + } + } +} + // Implement Title/Description Elements UI (#i73249#) void XMLTextFrameContext_Impl::SetTitle( const OUString& rTitle ) { @@ -1402,14 +1419,23 @@ XMLTextFrameContext::~XMLTextFrameContext() void XMLTextFrameContext::EndElement() { /// solve if multiple image child contexts were imported - solveMultipleImages(); + SvXMLImportContextRef const pMultiContext(solveMultipleImages()); - SvXMLImportContext *pContext = &m_xImplContext; + SvXMLImportContext const*const pContext = + (pMultiContext) ? &pMultiContext : &m_xImplContext; XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext ); + assert(!pMultiContext || pImpl); if( pImpl ) { pImpl->CreateIfNotThere(); + // fdo#68839: in case the surviving image was not the first one, + // it will have a counter added to its name - set the original name + if (pMultiContext) // do this only when necessary; esp. not for text + { // frames that may have entries in GetRenameMap()! + pImpl->SetName(); + } + if( !m_sTitle.isEmpty() ) { pImpl->SetTitle( m_sTitle ); |