From 2aa310cfe0bc10e7bf079147d379f6eb7d061b74 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Fri, 3 May 2024 08:14:16 +0500 Subject: 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 --- .../source/container/embeddedobjectcontainer.cxx | 45 ++++++++++++++-------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'comphelper') 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 #include +#include +#include #include #include #include @@ -1158,6 +1160,15 @@ namespace { } +static bool AlwaysStoreReplacementImages(const uno::Reference& 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()) ) -- cgit