summaryrefslogtreecommitdiff
path: root/embeddedobj
diff options
context:
space:
mode:
Diffstat (limited to 'embeddedobj')
-rw-r--r--embeddedobj/Library_embobj.mk4
-rw-r--r--embeddedobj/source/general/xcreator.cxx39
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