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>
This commit is contained in:
@@ -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()) )
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user