diff options
Diffstat (limited to 'embeddedobj/source/commonembedding/persistence.cxx')
-rw-r--r-- | embeddedobj/source/commonembedding/persistence.cxx | 31 |
1 files changed, 9 insertions, 22 deletions
diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx index 77bc947650af..b32d07f1c59c 100644 --- a/embeddedobj/source/commonembedding/persistence.cxx +++ b/embeddedobj/source/commonembedding/persistence.cxx @@ -54,6 +54,7 @@ #include <comphelper/mimeconfighelper.hxx> #include <comphelper/namedvaluecollection.hxx> #include <comphelper/propertyvalue.hxx> +#include <unotools/mediadescriptor.hxx> #include <tools/diagnose_ex.h> #include <sal/log.hxx> @@ -392,6 +393,8 @@ uno::Reference< util::XCloseable > OCommonEmbeddedObject::LoadLink_Impl() try { + handleLinkedOLE(CopyBackToOLELink::CopyLinkToTemp); + // the document is not really an embedded one, it is a link EmbedAndReparentDoc_Impl( xDocument ); @@ -1254,12 +1257,14 @@ void SAL_CALL OCommonEmbeddedObject::storeAsEntry( const uno::Reference< embed:: const uno::Sequence< beans::PropertyValue >& lArguments, const uno::Sequence< beans::PropertyValue >& lObjArgs ) { - // TODO: use lObjArgs - ::osl::ResettableMutexGuard aGuard( m_aMutex ); if ( m_bDisposed ) throw lang::DisposedException(); // TODO + bool AutoSaveEvent = false; + utl::MediaDescriptor lArgs(lObjArgs); + lArgs[utl::MediaDescriptor::PROP_AUTOSAVEEVENT] >>= AutoSaveEvent; + if ( m_nObjectState == -1 ) { // the object is still not loaded @@ -1279,26 +1284,8 @@ void SAL_CALL OCommonEmbeddedObject::storeAsEntry( const uno::Reference< embed:: { m_aNewEntryName = sEntName; - if(m_aLinkTempFile.is() && m_bLinkTempFileChanged) - { - // tdf#141529 if we have a changed copy of the original OLE data we now - // need to write it back 'over' the original OLE data - uno::Reference < ucb::XSimpleFileAccess2 > xFileAccess(ucb::SimpleFileAccess::create( m_xContext )); - - uno::Reference< ucb::XSimpleFileAccess > xTempAccess(ucb::SimpleFileAccess::create(m_xContext)); - // if the temp stream is used, then the temp file remains locked - uno::Reference< io::XInputStream > xInStream(xTempAccess->openFileRead(m_aLinkTempFile->getUri())); - // This is *needed* since OTempFileService calls OTempFileService::readBytes which - // ensures the SvStream mpStream gets/is opened, *but* also sets the mnCachedPos from - // OTempFileService which still points to the end-of-file (from write-cc'ing). - uno::Reference < io::XSeekable > xSeek( xInStream, uno::UNO_QUERY_THROW ); - xSeek->seek(0); - - xFileAccess->writeFile(m_aLinkURL, xInStream); - - // reset flag m_bLinkTempFileChanged - m_bLinkTempFileChanged = false; - } + if ( !AutoSaveEvent ) + handleLinkedOLE(CopyBackToOLELink::CopyTempToLink); return; } |