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;

Reply via email to