diff options
Diffstat (limited to 'embeddedobj')
-rw-r--r-- | embeddedobj/Library_embobj.mk | 4 | ||||
-rw-r--r-- | embeddedobj/source/general/xcreator.cxx | 39 |
2 files changed, 43 insertions, 0 deletions
diff --git a/embeddedobj/Library_embobj.mk b/embeddedobj/Library_embobj.mk index 3030e2ae70c5..6e9929e95016 100644 --- a/embeddedobj/Library_embobj.mk +++ b/embeddedobj/Library_embobj.mk @@ -10,6 +10,10 @@ $(eval $(call gb_Library_Library,embobj)) +$(eval $(call gb_Library_use_custom_headers,embobj,\ + officecfg/registry \ +)) + $(eval $(call gb_Library_set_componentfile,embobj,embeddedobj/util/embobj)) $(eval $(call gb_Library_set_include,embobj,\ diff --git a/embeddedobj/source/general/xcreator.cxx b/embeddedobj/source/general/xcreator.cxx index f825c852ade4..aa19cf429185 100644 --- a/embeddedobj/source/general/xcreator.cxx +++ b/embeddedobj/source/general/xcreator.cxx @@ -32,6 +32,7 @@ #include <comphelper/processfactory.hxx> #include <cppuhelper/supportsservice.hxx> #include <comphelper/documentconstants.hxx> +#include <officecfg/Office/Common.hxx> #include <xcreator.hxx> #include <dummyobject.hxx> @@ -208,6 +209,42 @@ uno::Reference< uno::XInterface > SAL_CALL UNOEmbeddedObjectCreator::createInsta return xResult; } +/** + * Decides if rFilter should be used to load data into a doc model or real OLE embedding should + * happen. Empty return value means the later. + */ +static OUString HandleFilter(const uno::Reference<uno::XComponentContext>& xComponentContext, + const OUString& rFilter) +{ + OUString aRet = rFilter; + + if (!officecfg::Office::Common::Filter::Microsoft::Import::WinWordToWriter::get( + xComponentContext)) + { + if (rFilter == "MS Word 97" || rFilter == "MS Word 2007 XML") + { + aRet.clear(); + } + } + + if (!officecfg::Office::Common::Filter::Microsoft::Import::ExcelToCalc::get(xComponentContext)) + { + if (rFilter == "MS Excel 97" || rFilter == "Calc MS Excel 2007 XML") + { + aRet.clear(); + } + } + if (!officecfg::Office::Common::Filter::Microsoft::Import::PowerPointToImpress::get( + xComponentContext)) + { + if (rFilter == "MS PowerPoint 97" || rFilter == "Impress MS PowerPoint 2007 XML") + { + aRet.clear(); + } + } + + return aRet; +} uno::Reference< uno::XInterface > SAL_CALL UNOEmbeddedObjectCreator::createInstanceInitFromMediaDescriptor( const uno::Reference< embed::XStorage >& xStorage, @@ -233,6 +270,8 @@ uno::Reference< uno::XInterface > SAL_CALL UNOEmbeddedObjectCreator::createInsta // check if there is FilterName OUString aFilterName = m_aConfigHelper.UpdateMediaDescriptorWithFilterName( aTempMedDescr, false ); + aFilterName = HandleFilter(m_xContext, aFilterName); + if ( !aFilterName.isEmpty() ) { // the object can be loaded by one of the office application |