summaryrefslogtreecommitdiff
path: root/comphelper
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2024-05-03 08:14:16 +0500
committerMike Kaganski <mike.kaganski@collabora.com>2024-05-03 11:19:04 +0200
commit2aa310cfe0bc10e7bf079147d379f6eb7d061b74 (patch)
tree3d2d7fe05e9c2f690e5db185d48ecefa5c715c98 /comphelper
parent9490972c04b79065f247b3076a7c53c9ec4fad67 (diff)
tdf#160915: make own OLE objects obey AddReplacementImages setting
Change-Id: I25ce3c920dc8ba25d0ac14310ff9cba8a4c23c6a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167026 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'comphelper')
-rw-r--r--comphelper/source/container/embeddedobjectcontainer.cxx45
1 files changed, 29 insertions, 16 deletions
diff --git a/comphelper/source/container/embeddedobjectcontainer.cxx b/comphelper/source/container/embeddedobjectcontainer.cxx
index 1bbf7b847fe4..0f831db3d6c5 100644
--- a/comphelper/source/container/embeddedobjectcontainer.cxx
+++ b/comphelper/source/container/embeddedobjectcontainer.cxx
@@ -36,6 +36,8 @@
#include <com/sun/star/embed/Aspects.hpp>
#include <com/sun/star/embed/EmbedMisc.hpp>
+#include <comphelper/classids.hxx>
+#include <comphelper/mimeconfighelper.hxx>
#include <comphelper/seqstream.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/storagehelper.hxx>
@@ -1158,6 +1160,15 @@ namespace {
}
+static bool AlwaysStoreReplacementImages(const uno::Reference<embed::XEmbeddedObject>& xObj)
+{
+ const auto clsid = xObj->getClassID();
+ if (clsid == MimeConfigurationHelper::GetSequenceClassID(SO3_SCH_CLASSID)
+ || clsid == MimeConfigurationHelper::GetSequenceClassID(SO3_SM_CLASSID))
+ return false;
+ return true;
+}
+
bool EmbeddedObjectContainer::StoreAsChildren(bool _bOasisFormat,bool _bCreateEmbedded, bool _bAutoSaveEvent,
const uno::Reference < embed::XStorage >& _xStorage)
{
@@ -1176,26 +1187,28 @@ bool EmbeddedObjectContainer::StoreAsChildren(bool _bOasisFormat,bool _bCreateEm
uno::Reference < io::XInputStream > xStream;
OUString aMediaType;
-
- sal_Int32 nCurState = xObj->getCurrentState();
- if ( nCurState == embed::EmbedStates::LOADED || nCurState == embed::EmbedStates::RUNNING )
+ if (officecfg::Office::Common::Save::Graphic::AddReplacementImages::get()
+ || AlwaysStoreReplacementImages(xObj))
{
- // means that the object is not active
- // copy replacement image from old to new container
- xStream = GetGraphicStream( xObj, &aMediaType );
- }
+ sal_Int32 nCurState = xObj->getCurrentState();
+ if (nCurState == embed::EmbedStates::LOADED
+ || nCurState == embed::EmbedStates::RUNNING)
+ {
+ // means that the object is not active
+ // copy replacement image from old to new container
+ xStream = GetGraphicStream(xObj, &aMediaType);
+ }
- if ( !xStream.is() && getUserAllowsLinkUpdate() )
- {
- // the image must be regenerated
- // TODO/LATER: another aspect could be used
- if ( xObj->getCurrentState() == embed::EmbedStates::LOADED )
+ if (!xStream.is() && getUserAllowsLinkUpdate())
+ {
+ // the image must be regenerated
+ // TODO/LATER: another aspect could be used
+ if (xObj->getCurrentState() == embed::EmbedStates::LOADED)
bSwitchBackToLoaded = true;
- xStream = GetGraphicReplacementStream(
- embed::Aspects::MSOLE_CONTENT,
- xObj,
- &aMediaType );
+ xStream = GetGraphicReplacementStream(embed::Aspects::MSOLE_CONTENT, xObj,
+ &aMediaType);
+ }
}
if ( _bOasisFormat || (xLink.is() && xLink->isLink()) )