sw/ooxmlexport_setup.mk | 6 ++++ sw/qa/extras/ooxmlexport/ooxmlexport3.cxx | 3 ++ sw/source/filter/ww8/docxattributeoutput.cxx | 38 +++++++++++++++++---------- 3 files changed, 33 insertions(+), 14 deletions(-)
New commits: commit 7689b7b7011e6712ad4b47875927c0a6b9322319 Author: Michael Stahl <[email protected]> Date: Thu Dec 3 15:58:12 2015 +0100 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. (cherry picked from commit 1dac99e7ea45f90bf39eb95eb7bc01f7d79093ef) (cherry picked from commit 290cac714b09cd0eccb02caa03452e35b87ebaae) sw: un-break DOCX formula export (regression from 1dac99e7ea45f90bf39eb95eb7bc01f7d79093ef) (cherry picked from commit 3b63d2b9371baa5f526d0fcd41043ec76abb0d50) Change-Id: Ib4df346e04ecfb54ec1a728535be876db921b884 Reviewed-on: https://gerrit.libreoffice.org/20469 Tested-by: Jenkins <[email protected]> Reviewed-by: Miklos Vajna <[email protected]> diff --git a/sw/ooxmlexport_setup.mk b/sw/ooxmlexport_setup.mk index a3a2182..041ac9e 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/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx index 2f45f74..1dc1c45 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx @@ -984,6 +984,9 @@ DECLARE_OOXMLEXPORT_TEST(testFileOpenInputOutputError,"floatingtbl_with_formula. if (!pXmlDoc) return; assertXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:pPr/w:pStyle", "val", "Normal"); + + // let's also assert that the formula was exported properly + assertXPathContent(pXmlDoc, "//wps:txbx/w:txbxContent/w:tbl/w:tr/w:tc[2]/w:p/m:oMath/m:sSubSup/m:e/m:r/m:t", OUString::fromUtf8("\xcf\x83")); } #endif diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 19eb879..297b17b 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -126,6 +126,7 @@ #include <com/sun/star/drawing/ShadingPattern.hpp> #include <com/sun/star/text/GraphicCrop.hpp> #include <com/sun/star/drawing/LineStyle.hpp> +#include <com/sun/star/embed/EmbedStates.hpp> #include <algorithm> @@ -4330,22 +4331,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; + SAL_WARN_IF(clsid.isEmpty(), "sw.ww8", "OLE without CLSID?"); + SvGlobalName aClassID; + bool const isValid(aClassID.MakeId(clsid)); + SAL_WARN_IF(!isValid, "sw.ww8", "OLE with invalid CLSID?"); + + if (!SotExchange::IsChart(aClassID)) + return false; + + m_postponedChart = pSdrObj; + m_postponedChartSize = rSize; + return true; } /* @@ -4444,6 +4450,10 @@ bool DocxAttributeOutput::WriteOLEMath( const SdrObject*, const SwOLENode& rOLEN void DocxAttributeOutput::WritePostponedMath(const SwOLENode* pPostponedMath) { uno::Reference < embed::XEmbeddedObject > xObj(const_cast<SwOLENode*>(pPostponedMath)->GetOLEObj().GetOleRef()); + if (embed::EmbedStates::LOADED == xObj->getCurrentState()) + { // must be running so there is a Component + xObj->changeState(embed::EmbedStates::RUNNING); + } uno::Reference< uno::XInterface > xInterface( xObj->getComponent(), uno::UNO_QUERY ); if (!xInterface.is()) { _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
