diff options
-rw-r--r-- | embeddedobj/source/commonembedding/miscobj.cxx | 22 | ||||
-rw-r--r-- | embeddedobj/source/commonembedding/persistence.cxx | 5 | ||||
-rw-r--r-- | embeddedobj/source/inc/commonembobj.hxx | 5 | ||||
-rw-r--r-- | sw/source/uibase/wrtsh/wrtsh1.cxx | 10 |
4 files changed, 42 insertions, 0 deletions
diff --git a/embeddedobj/source/commonembedding/miscobj.cxx b/embeddedobj/source/commonembedding/miscobj.cxx index 9c24185ed184..538e0b72e3da 100644 --- a/embeddedobj/source/commonembedding/miscobj.cxx +++ b/embeddedobj/source/commonembedding/miscobj.cxx @@ -39,6 +39,7 @@ #include <vcl/svapp.hxx> #include <tools/diagnose_ex.h> #include <cppuhelper/supportsservice.hxx> +#include <comphelper/sequenceashashmap.hxx> #include "persistence.hxx" @@ -398,6 +399,11 @@ uno::Any SAL_CALL OCommonEmbeddedObject::queryInterface( const uno::Type& rType void* p = static_cast<lang::XServiceInfo*>(this); return uno::Any(&p, rType); } + else if (rType == cppu::UnoType<lang::XInitialization>::get()) + { + void* p = static_cast<lang::XInitialization*>(this); + return uno::Any(&p, rType); + } else if (rType == cppu::UnoType<lang::XTypeProvider>::get()) { void* p = static_cast<lang::XTypeProvider*>(this); @@ -671,6 +677,7 @@ uno::Sequence<uno::Type> SAL_CALL OCommonEmbeddedObject::getTypes() cppu::UnoType<container::XChild>::get(), cppu::UnoType<chart2::XDefaultSizeTransmitter>::get(), cppu::UnoType<lang::XServiceInfo>::get(), + cppu::UnoType<lang::XInitialization>::get(), cppu::UnoType<lang::XTypeProvider>::get(), }; return aTypes; @@ -681,4 +688,19 @@ uno::Sequence<sal_Int8> SAL_CALL OCommonEmbeddedObject::getImplementationId() return uno::Sequence<sal_Int8>(); } +void SAL_CALL OCommonEmbeddedObject::initialize(const uno::Sequence<uno::Any>& rArguments) +{ + if (!rArguments.hasElements()) + { + return; + } + + comphelper::SequenceAsHashMap aMap(rArguments[0]); + auto it = aMap.find("ReadOnly"); + if (it != aMap.end()) + { + it->second >>= m_bReadOnly; + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx index 2ed891d33ced..faf3209e1f32 100644 --- a/embeddedobj/source/commonembedding/persistence.cxx +++ b/embeddedobj/source/commonembedding/persistence.cxx @@ -534,6 +534,11 @@ uno::Reference< util::XCloseable > OCommonEmbeddedObject::LoadDocumentFromStorag // set the document mode to embedded as the first step!!! EmbedAndReparentDoc_Impl( xDocument ); + if (m_bReadOnly) + { + aLoadArgs.put("ReadOnly", true); + } + if ( xDoc.is() ) { xDoc->loadFromStorage( xSourceStorage, aLoadArgs.getPropertyValues() ); diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx index fab8ccbc717e..785a28eaf0fd 100644 --- a/embeddedobj/source/inc/commonembobj.hxx +++ b/embeddedobj/source/inc/commonembobj.hxx @@ -34,6 +34,7 @@ #include <com/sun/star/chart2/XDefaultSizeTransmitter.hpp> #include <com/sun/star/io/XTempFile.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XInitialization.hpp> #include <cppuhelper/weak.hxx> #include <rtl/ref.hxx> #include <map> @@ -81,6 +82,7 @@ class OCommonEmbeddedObject : public css::embed::XEmbeddedObject , public css::container::XChild , public css::chart2::XDefaultSizeTransmitter , public css::lang::XServiceInfo + , public css::lang::XInitialization , public css::lang::XTypeProvider , public ::cppu::OWeakObject { @@ -408,6 +410,9 @@ public: sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + // XInitialization + void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rArguments) override; + // XTypeProvider css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override; css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override; diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index e74ac03bdec0..c6dee2be2ec6 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -25,6 +25,7 @@ #include <com/sun/star/embed/NoVisualAreaSizeException.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> #include <com/sun/star/util/XModifiable.hpp> +#include <com/sun/star/lang/XInitialization.hpp> #include <hintids.hxx> #include <sot/exchange.hxx> @@ -100,6 +101,7 @@ #include <svtools/embedhlp.hxx> #include <svx/postattr.hxx> #include <comphelper/lok.hxx> +#include <comphelper/propertyvalue.hxx> #include <memory> #include <frmtool.hxx> @@ -631,6 +633,14 @@ void SwWrtShell::LaunchOLEObj(sal_Int32 nVerb) if ( !pCli ) pCli = new SwOleClient( &GetView(), &GetView().GetEditWin(), xRef ); + uno::Reference<lang::XInitialization> xOLEInit(xRef.GetObject(), uno::UNO_QUERY); + if (xOLEInit.is()) + { + uno::Sequence<beans::PropertyValue> aArguments + = { comphelper::makePropertyValue("ReadOnly", pCli->IsProtected()) }; + xOLEInit->initialize({ uno::makeAny(aArguments) }); + } + static_cast<SwOleClient*>(pCli)->SetInDoVerb( true ); CalcAndSetScale( xRef ); |