sw/source/filter/ww8/docxattributeoutput.cxx | 11 +++++++---- writerfilter/Library_writerfilter.mk | 1 + writerfilter/source/ooxml/OOXMLFastContextHandler.cxx | 9 +++++++-- 3 files changed, 15 insertions(+), 6 deletions(-)
New commits: commit 44bdf23e3fa29f1b37faa6460bdf61e4b4627fe8 Author: LuboÅ¡ LuÅák <l.lu...@suse.cz> Date: Thu Aug 23 14:06:45 2012 +0200 fix math export/import in docx/rtf For some reason older gcc versions don't manage to dynamic_cast to the necessary cast. I'm not quite sure why, forcing sal/osl/unx/module.cxx to always use RTLD_GLOBAL does not seem to help. Most probably compiler bug. Changing the cast to two simpler ones helps. Signed-off-by: Miklos Vajna <vmik...@suse.cz> diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 34e383c..7ad5a1e 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -96,6 +96,7 @@ #include <editeng/opaqitem.hxx> #include <svx/svdmodel.hxx> #include <svx/svdobj.hxx> +#include <sfx2/sfxbasemodel.hxx> #include <anchoredobject.hxx> #include <docufld.hxx> @@ -2333,10 +2334,12 @@ void DocxAttributeOutput::WritePostponedMath() return; uno::Reference < embed::XEmbeddedObject > xObj(const_cast<SwOLENode*>(m_postponedMath)->GetOLEObj().GetOleRef()); uno::Reference< uno::XInterface > xInterface( xObj->getComponent(), uno::UNO_QUERY ); - if( oox::FormulaExportBase* formulaexport = dynamic_cast< oox::FormulaExportBase* >( xInterface.get())) - formulaexport->writeFormulaOoxml( m_pSerializer, GetExport().GetFilter().getVersion()); - else - OSL_FAIL( "Math OLE object cannot write out OOXML" ); +// gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class, +// so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated +// to RTLD_GLOBAL, so most probably a gcc bug. + oox::FormulaExportBase* formulaexport = dynamic_cast<oox::FormulaExportBase*>(dynamic_cast<SfxBaseModel*>(xInterface.get())); + assert( formulaexport != NULL ); + formulaexport->writeFormulaOoxml( m_pSerializer, GetExport().GetFilter().getVersion()); m_postponedMath = NULL; } diff --git a/writerfilter/Library_writerfilter.mk b/writerfilter/Library_writerfilter.mk index 5a34f94..f157ae1 100644 --- a/writerfilter/Library_writerfilter.mk +++ b/writerfilter/Library_writerfilter.mk @@ -66,6 +66,7 @@ $(eval $(call gb_Library_use_libraries,writerfilter,\ msfilter \ oox \ sal \ + sfx \ sot \ svt \ tl \ diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx index 6efa44c..f062a26 100644 --- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx +++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx @@ -42,6 +42,7 @@ #include <comphelper/embeddedobjectcontainer.hxx> #include <tools/globname.hxx> #include <comphelper/classids.hxx> +#include <sfx2/sfxbasemodel.hxx> #include "OOXMLFastContextHandler.hxx" #include "OOXMLFactory.hxx" #include "Handler.hxx" @@ -2452,8 +2453,12 @@ void OOXMLFastContextHandlerMath::process() rtl::OUString aName; uno::Reference< embed::XEmbeddedObject > ref = container.CreateEmbeddedObject( name.GetByteSequence(), aName ); uno::Reference< uno::XInterface > component( ref->getComponent(), uno::UNO_QUERY ); - if( oox::FormulaImportBase* import = dynamic_cast< oox::FormulaImportBase* >( component.get())) - import->readFormulaOoxml( buffer ); +// gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class, +// so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated +// to RTLD_GLOBAL, so most probably a gcc bug. + oox::FormulaImportBase* import = dynamic_cast< oox::FormulaImportBase* >( dynamic_cast< SfxBaseModel* >(component.get())); + assert( import != NULL ); + import->readFormulaOoxml( buffer ); if (isForwardEvents()) { OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits