summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-12-03 15:58:12 +0100
committerMichael Stahl <mstahl@redhat.com>2015-12-03 17:52:43 +0100
commit1dac99e7ea45f90bf39eb95eb7bc01f7d79093ef (patch)
tree9744112460055ae2d23755478bc8d0526b403892 /sw
parent6c569a2ed797aa7ad52f8a7dc6be3bfb3b4b452a (diff)
sw: fix DOCX export of embedded OOXML objects
OOXML embedded objects are converted to ODF during export, which prevents the export from working, as it expects a stream, and ODF uses a storage. There is already a unit test in testEmbeddedXlsx, but it wrongly succeeds because the components necessary to convert from OOXML to ODF are missing in the test environment. Change-Id: Ib4df346e04ecfb54ec1a728535be876db921b884
Diffstat (limited to 'sw')
-rw-r--r--sw/ooxmlexport_setup.mk6
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx33
2 files changed, 25 insertions, 14 deletions
diff --git a/sw/ooxmlexport_setup.mk b/sw/ooxmlexport_setup.mk
index c8cfc9f4d205..a03370110eb9 100644
--- a/sw/ooxmlexport_setup.mk
+++ b/sw/ooxmlexport_setup.mk
@@ -33,6 +33,9 @@ define sw_ooxmlexport_components
dbaccess/util/dba \
drawinglayer/drawinglayer \
embeddedobj/util/embobj \
+ $(if $(filter-out WNT,$(OS)), \
+ embeddedobj/source/msole/emboleobj \
+ ) \
filter/source/config/cache/filterconfig1 \
filter/source/odfflatxml/odfflatxml \
filter/source/xmlfilterdetect/xmlfd \
@@ -45,6 +48,9 @@ define sw_ooxmlexport_components
package/source/xstor/xstor \
package/util/package2 \
sax/source/expatwrap/expwrap \
+ sc/util/sc \
+ sc/util/scd \
+ sc/util/scfilt \
sw/util/sw \
sw/util/swd \
sw/util/msword \
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 5b56d5bf4819..e7cdb49c6033 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -4401,22 +4401,27 @@ void DocxAttributeOutput::WriteOLE2Obj( const SdrObject* pSdrObj, SwOLENode& rOL
bool DocxAttributeOutput::WriteOLEChart( const SdrObject* pSdrObj, const Size& rSize )
{
- uno::Reference< chart2::XChartDocument > xChartDoc;
uno::Reference< drawing::XShape > xShape( const_cast<SdrObject*>(pSdrObj)->getUnoShape(), uno::UNO_QUERY );
- if( xShape.is() )
- {
- uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_QUERY );
- if( xPropSet.is() )
- xChartDoc.set( xPropSet->getPropertyValue( "Model" ), uno::UNO_QUERY );
- }
+ if (!xShape.is())
+ return false;
- if( xChartDoc.is() )
- {
- m_postponedChart = pSdrObj;
- m_postponedChartSize = rSize;
- return true;
- }
- return false;
+ uno::Reference<beans::XPropertySet> const xPropSet(xShape, uno::UNO_QUERY);
+ if (!xPropSet.is())
+ return false;
+
+ OUString clsid; // why is the property of type string, not sequence<byte>?
+ xPropSet->getPropertyValue("CLSID") >>= clsid;
+ assert(!clsid.isEmpty());
+ SvGlobalName aClassID;
+ bool const isValid(aClassID.MakeId(clsid));
+ assert(isValid);
+
+ if (!SotExchange::IsChart(aClassID))
+ return false;
+
+ m_postponedChart = pSdrObj;
+ m_postponedChartSize = rSize;
+ return true;
}
/*