summaryrefslogtreecommitdiff
path: root/embeddedobj/source/commonembedding/persistence.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'embeddedobj/source/commonembedding/persistence.cxx')
-rw-r--r--embeddedobj/source/commonembedding/persistence.cxx31
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;
}