diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2024-05-03 08:14:16 +0500 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2024-05-03 11:19:04 +0200 |
commit | 2aa310cfe0bc10e7bf079147d379f6eb7d061b74 (patch) | |
tree | 3d2d7fe05e9c2f690e5db185d48ecefa5c715c98 /comphelper | |
parent | 9490972c04b79065f247b3076a7c53c9ec4fad67 (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.cxx | 45 |
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()) ) |