summaryrefslogtreecommitdiffstats
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
parentUpdate git submodules (diff)
downloadcore-2aa310cfe0bc10e7bf079147d379f6eb7d061b74.tar.gz
core-2aa310cfe0bc10e7bf079147d379f6eb7d061b74.zip
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>
-rw-r--r--comphelper/source/container/embeddedobjectcontainer.cxx45
-rw-r--r--xmloff/source/draw/shapeexport.cxx22
2 files changed, 42 insertions, 25 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()) )
diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx
index a701fff5dd12..0f150c847cd2 100644
--- a/xmloff/source/draw/shapeexport.cxx
+++ b/xmloff/source/draw/shapeexport.cxx
@@ -2526,8 +2526,8 @@ void XMLShapeExport::ImpExportGraphicObjectShape(
//Resolves: fdo#62461 put preferred image first above, followed by
//fallback here
- const bool bAddReplacementImages = officecfg::Office::Common::Save::Graphic::AddReplacementImages::get();
- if( !bIsEmptyPresObj && bAddReplacementImages)
+ if (!bIsEmptyPresObj
+ && officecfg::Office::Common::Save::Graphic::AddReplacementImages::get())
{
uno::Reference<graphic::XGraphic> xReplacementGraphic;
xPropSet->getPropertyValue("ReplacementGraphic") >>= xReplacementGraphic;
@@ -3574,13 +3574,16 @@ void XMLShapeExport::ImpExportMediaShape(
pPluginOBJ.reset();
- uno::Reference<graphic::XGraphic> xGraphic;
- xPropSet->getPropertyValue("Graphic") >>= xGraphic;
- Graphic aGraphic(xGraphic);
- if (!aGraphic.IsNone())
+ if (officecfg::Office::Common::Save::Graphic::AddReplacementImages::get())
{
- // The media has a preview, export it.
- ExportGraphicPreview(xGraphic, mrExport, u"MediaPreview", u".png", "image/png");
+ uno::Reference<graphic::XGraphic> xGraphic;
+ xPropSet->getPropertyValue("Graphic") >>= xGraphic;
+ Graphic aGraphic(xGraphic);
+ if (!aGraphic.IsNone())
+ {
+ // The media has a preview, export it.
+ ExportGraphicPreview(xGraphic, mrExport, u"MediaPreview", u".png", "image/png");
+ }
}
ImpExportDescription(xShape);
@@ -5170,7 +5173,8 @@ void XMLShapeExport::ImpExportTableShape( const uno::Reference< drawing::XShape
}
}
- if( !bIsEmptyPresObj )
+ if (!bIsEmptyPresObj
+ && officecfg::Office::Common::Save::Graphic::AddReplacementImages::get())
{
uno::Reference< graphic::XGraphic > xGraphic( xPropSet->getPropertyValue("ReplacementGraphic"), uno::UNO_QUERY );
ExportGraphicPreview(xGraphic, mrExport, u"TablePreview", u".svm", "image/x-vclgraphic");