sw/inc/unotxdoc.hxx | 2 ++ sw/source/uibase/uno/unotxdoc.cxx | 7 +++++++ sw/source/writerfilter/dmapper/OLEHandler.cxx | 17 +++++++---------- sw/source/writerfilter/dmapper/OLEHandler.hxx | 4 +++- 4 files changed, 19 insertions(+), 11 deletions(-)
New commits: commit 29a19f25f001ae63c60864c6a650220ecb3d0ca1 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Thu Apr 25 16:10:21 2024 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Tue Apr 30 19:34:56 2024 +0200 use more concrete UNO classes in writerfilter (SvXMLEmbeddedObjectHelper) Change-Id: Ic813596204070a17d66d0f469bcdf30e16b16b35 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166811 Tested-by: Noel Grandin <noel.gran...@collabora.co.uk> Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx index b4a84c62029b..b690a290b7b9 100644 --- a/sw/inc/unotxdoc.hxx +++ b/sw/inc/unotxdoc.hxx @@ -118,6 +118,7 @@ class SwXTextGraphicObject; class SwXPageStyle; class SwXContentControl; class SwXTextEmbeddedObject; +class SvXMLEmbeddedObjectHelper; namespace com::sun::star::container { class XNameContainer; } namespace com::sun::star::frame { class XController; } namespace com::sun::star::lang { struct Locale; } @@ -535,6 +536,7 @@ public: SW_DLLPUBLIC rtl::Reference<SwXFootnote> createFootnote(); SW_DLLPUBLIC rtl::Reference<SwXFootnote> createEndnote(); SW_DLLPUBLIC rtl::Reference<SwXTextEmbeddedObject> createTextEmbeddedObject(); + SW_DLLPUBLIC rtl::Reference<SvXMLEmbeddedObjectHelper> createEmbeddedObjectResolver(); }; class SwXLinkTargetSupplier final : public cppu::WeakImplHelper diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index c06ea2b32a0e..d9debd315fab 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -1764,6 +1764,13 @@ rtl::Reference< SwXTextEmbeddedObject > SwXTextDocument::createTextEmbeddedObjec return SwXTextEmbeddedObject::CreateXTextEmbeddedObject(GetDocOrThrow(), nullptr); } +rtl::Reference< SvXMLEmbeddedObjectHelper > SwXTextDocument::createEmbeddedObjectResolver() +{ + SolarMutexGuard aGuard; + ThrowIfInvalid(); + return new SvXMLEmbeddedObjectHelper(*m_pDocShell, SvXMLEmbeddedObjectHelperMode::Read); +} + Reference< XInterface > SwXTextDocument::createInstance(const OUString& rServiceName) { return create(rServiceName, nullptr); diff --git a/sw/source/writerfilter/dmapper/OLEHandler.cxx b/sw/source/writerfilter/dmapper/OLEHandler.cxx index e0671c8a21b6..3c1d198d74eb 100644 --- a/sw/source/writerfilter/dmapper/OLEHandler.cxx +++ b/sw/source/writerfilter/dmapper/OLEHandler.cxx @@ -42,6 +42,8 @@ #include <com/sun/star/text/XTextDocument.hpp> #include <com/sun/star/text/WrapTextMode.hpp> #include <com/sun/star/uno/XComponentContext.hpp> +#include <svx/xmleohlp.hxx> +#include <unotxdoc.hxx> namespace writerfilter::dmapper { @@ -277,23 +279,19 @@ OUString const & OLEHandler::GetVisAreaHeight() const return m_sVisAreaHeight; } -OUString OLEHandler::copyOLEOStream( - uno::Reference<text::XTextDocument> const& xTextDocument) +OUString OLEHandler::copyOLEOStream(rtl::Reference<SwXTextDocument> const& xTextDocument) { OUString sRet; if( !m_xInputStream.is( ) ) return sRet; try { - uno::Reference < lang::XMultiServiceFactory > xFactory(xTextDocument, uno::UNO_QUERY_THROW); - uno::Reference< document::XEmbeddedObjectResolver > xEmbeddedResolver( - xFactory->createInstance("com.sun.star.document.ImportEmbeddedObjectResolver"), uno::UNO_QUERY_THROW ); + rtl::Reference< SvXMLEmbeddedObjectHelper > xEmbeddedResolver = xTextDocument->createEmbeddedObjectResolver(); //hack to work with the ImportEmbeddedObjectResolver static sal_Int32 nObjectCount = 100; - uno::Reference< container::XNameAccess > xNA( xEmbeddedResolver, uno::UNO_QUERY_THROW ); OUString aURL = "Obj" + OUString::number( nObjectCount++ ); uno::Reference < io::XOutputStream > xOLEStream; - if( (xNA->getByName( aURL ) >>= xOLEStream) && xOLEStream.is() ) + if( (xEmbeddedResolver->getByName( aURL ) >>= xOLEStream) && xOLEStream.is() ) { const sal_Int32 nReadRequest = 0x1000; uno::Sequence< sal_Int8 > aData; @@ -309,14 +307,13 @@ OUString OLEHandler::copyOLEOStream( } } - ::oox::ole::SaveInteropProperties(xTextDocument, aURL, nullptr, m_sProgId); + ::oox::ole::SaveInteropProperties(static_cast<SfxBaseModel*>(xTextDocument.get()), aURL, nullptr, m_sProgId); OUString aPersistName( xEmbeddedResolver->resolveEmbeddedObjectURL( aURL ) ); sRet = aPersistName.copy( strlen("vnd.sun.star.EmbeddedObject:") ); } - uno::Reference< lang::XComponent > xComp( xEmbeddedResolver, uno::UNO_QUERY_THROW ); - xComp->dispose(); + xEmbeddedResolver->dispose(); m_aURL = aURL; } catch( const uno::Exception& ) diff --git a/sw/source/writerfilter/dmapper/OLEHandler.hxx b/sw/source/writerfilter/dmapper/OLEHandler.hxx index 67fed0128186..1a7e40b6cecd 100644 --- a/sw/source/writerfilter/dmapper/OLEHandler.hxx +++ b/sw/source/writerfilter/dmapper/OLEHandler.hxx @@ -22,7 +22,9 @@ #include <com/sun/star/awt/Size.hpp> #include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/text/WrapTextMode.hpp> +#include <rtl/ref.hxx> +class SwXTextDocument; namespace com::sun::star{ namespace graphic{ class XGraphic; @@ -83,7 +85,7 @@ public: OUString const & GetVisAreaWidth() const; OUString const & GetVisAreaHeight() const; - OUString copyOLEOStream(css::uno::Reference<css::text::XTextDocument> const& xTextDocument); + OUString copyOLEOStream(rtl::Reference<SwXTextDocument> const& xTextDocument); css::awt::Size getSize() const; css::uno::Reference<css::graphic::XGraphic> getReplacement() const;