summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@collabora.com>2014-01-20 09:26:58 +0100
committerJan Holesovsky <kendy@collabora.com>2014-01-20 17:37:41 +0100
commit9bc2ab30e302c210b725e7035ea4d17774ef90e1 (patch)
tree41b86d069e539a7c5baaa51a04d4fe53762741ed
parent306efefe22e02248eff14f8be2cef68d75d26e55 (diff)
Revert "svt: Use constructor feature for FilePicker and FolderPicker..."
It does not make a real sense to use constructor for implementations that act as a trampoline; instead, we should do a constructor for the real implementations that hide behind it. This reverts commit 2fbb47156773b2e300fc987efc2da85c66e567d1. This reverts (part of) commit 58ea27124af27bfac21a796b0d13d72354bd0dd3. This reverts (part of) commit 194bdbde25dd70988c94ff5e1af43b530d47d94b. This reverts (part of) commit df002e39f7518036ae1c1d2afec7a525ef902327. This reverts (part of) commit eb89c6f7dcd613cda6a9eee6f7897225e0334a25. This reverts (part of) commit bdeb57c23973f3ef79020847b2fe39f312cf3c0b. This reverts (part of) commit 4337a0664f4fb73f9e1be74f2a632847871da402. Change-Id: Ibd9b1066f3b6ea215d8da9f491d5f026cd75b029
-rw-r--r--svtools/Library_svt.mk1
-rw-r--r--svtools/source/uno/fpicker.cxx52
-rw-r--r--svtools/source/uno/fpicker.hxx47
-rw-r--r--svtools/source/uno/miscservices.cxx77
-rw-r--r--svtools/util/svt.component8
5 files changed, 168 insertions, 17 deletions
diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk
index 4690961c25de..47628080b2c3 100644
--- a/svtools/Library_svt.mk
+++ b/svtools/Library_svt.mk
@@ -230,6 +230,7 @@ $(eval $(call gb_Library_add_exception_objects,svt,\
svtools/source/uno/framestatuslistener \
svtools/source/uno/generictoolboxcontroller \
svtools/source/uno/genericunodialog \
+ svtools/source/uno/miscservices \
svtools/source/uno/popupmenucontrollerbase \
svtools/source/uno/popupwindowcontroller \
svtools/source/uno/statusbarcontroller \
diff --git a/svtools/source/uno/fpicker.cxx b/svtools/source/uno/fpicker.cxx
index 1eccb579c2c9..c3961e8fc1bb 100644
--- a/svtools/source/uno/fpicker.cxx
+++ b/svtools/source/uno/fpicker.cxx
@@ -53,12 +53,14 @@ static OUString FilePicker_getSystemPickerServiceName()
#endif
}
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
-com_sun_star_comp_svt_FilePicker_get_implementation(
- css::uno::XComponentContext *context,
- css::uno::Sequence<css::uno::Any> const &)
+Reference< css::uno::XInterface > FilePicker_CreateInstance (
+ Reference< css::uno::XComponentContext > const & context)
{
Reference< css::uno::XInterface > xResult;
+
+ if (!context.is())
+ return xResult;
+
Reference< css::lang::XMultiComponentFactory > xFactory (context->getServiceManager());
if (xFactory.is() && SvtMiscOptions().UseSystemFileDialog())
{
@@ -92,8 +94,20 @@ com_sun_star_comp_svt_FilePicker_get_implementation(
// Add to FilePicker history.
svt::addFilePicker (xResult);
}
- xResult->acquire();
- return xResult.get();
+ return xResult;
+}
+
+OUString SAL_CALL FilePicker_getImplementationName()
+{
+ return OUString("com.sun.star.comp.svt.FilePicker");
+}
+
+Sequence< OUString > FilePicker_getSupportedServiceNames()
+{
+ Sequence< OUString > aServiceNames(1);
+ aServiceNames.getArray()[0] =
+ OUString( "com.sun.star.ui.dialogs.FilePicker");
+ return aServiceNames;
}
/*
@@ -113,12 +127,14 @@ static OUString FolderPicker_getSystemPickerServiceName()
return OUString("com.sun.star.ui.dialogs.SystemFolderPicker");
}
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
-com_sun_star_comp_svt_FolderPicker_get_implementation(
- css::uno::XComponentContext *context,
- css::uno::Sequence<css::uno::Any> const &)
+Reference< css::uno::XInterface > FolderPicker_CreateInstance (
+ Reference< css::uno::XComponentContext > const & context)
{
Reference< css::uno::XInterface > xResult;
+
+ if (!context.is())
+ return xResult;
+
Reference< css::lang::XMultiComponentFactory > xFactory (context->getServiceManager());
if (xFactory.is() && SvtMiscOptions().UseSystemFileDialog())
{
@@ -149,8 +165,20 @@ com_sun_star_comp_svt_FolderPicker_get_implementation(
// Add to FolderPicker history.
svt::addFolderPicker (xResult);
}
- xResult->acquire();
- return xResult.get();
+ return xResult;
+}
+
+OUString SAL_CALL FolderPicker_getImplementationName()
+{
+ return OUString("com.sun.star.comp.svt.FolderPicker");
+}
+
+Sequence< OUString > FolderPicker_getSupportedServiceNames()
+{
+ Sequence< OUString > aServiceNames(1);
+ aServiceNames.getArray()[0] =
+ OUString( "com.sun.star.ui.dialogs.FolderPicker");
+ return aServiceNames;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/uno/fpicker.hxx b/svtools/source/uno/fpicker.hxx
new file mode 100644
index 000000000000..5042cffe0431
--- /dev/null
+++ b/svtools/source/uno/fpicker.hxx
@@ -0,0 +1,47 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SVTOOLS_SOURCE_UNO_FPICKER_HXX
+#define INCLUDED_SVTOOLS_SOURCE_UNO_FPICKER_HXX
+
+#include <sal/config.h>
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
+namespace com { namespace sun { namespace star {
+ namespace lang { class XMultiServiceFactory; }
+ namespace uno { class XInterface; }
+} } }
+
+css::uno::Reference<css::uno::XInterface> SAL_CALL FilePicker_CreateInstance(
+ css::uno::Reference< css::uno::XComponentContext > const & context);
+css::uno::Sequence<OUString> FilePicker_getSupportedServiceNames();
+OUString FilePicker_getImplementationName();
+
+css::uno::Reference<css::uno::XInterface> SAL_CALL FolderPicker_CreateInstance(
+ css::uno::Reference< css::uno::XComponentContext > const & context);
+css::uno::Sequence<OUString> FolderPicker_getSupportedServiceNames();
+OUString FolderPicker_getImplementationName();
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/uno/miscservices.cxx b/svtools/source/uno/miscservices.cxx
new file mode 100644
index 000000000000..3801ce783aff
--- /dev/null
+++ b/svtools/source/uno/miscservices.cxx
@@ -0,0 +1,77 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/types.h>
+
+#include <cppuhelper/factory.hxx>
+#include <cppuhelper/implementationentry.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+
+#include "fpicker.hxx"
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+
+namespace
+{
+ static const struct ::cppu::ImplementationEntry s_aServiceEntries[] =
+ {
+ {
+ // FilePicker should not use a constructor, it is only a
+ // trampoline to a real impl.
+ FilePicker_CreateInstance,
+ FilePicker_getImplementationName,
+ FilePicker_getSupportedServiceNames,
+ ::cppu::createSingleComponentFactory, 0, 0
+ },
+ {
+ // FolderPicker should not use a constructor, it is only a
+ // trampoline to a real impl.
+ FolderPicker_CreateInstance,
+ FolderPicker_getImplementationName,
+ FolderPicker_getSupportedServiceNames,
+ ::cppu::createSingleComponentFactory, 0, 0
+ },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+}
+
+extern "C"
+{
+
+SAL_DLLPUBLIC_EXPORT void * SAL_CALL svt_component_getFactory(
+ const sal_Char * pImplementationName, void * _pServiceManager, void * pRegistryKey)
+{
+ void * pResult = 0;
+ if (_pServiceManager)
+ {
+ Reference< XMultiServiceFactory > xSMgr(reinterpret_cast< XMultiServiceFactory * >(_pServiceManager));
+
+ pResult = cppu::component_getFactoryHelper(pImplementationName,
+ _pServiceManager,
+ pRegistryKey,
+ s_aServiceEntries);
+ }
+ return pResult;
+}
+
+} // extern "C"
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/util/svt.component b/svtools/util/svt.component
index 5e5438ef7a07..f48425fcad47 100644
--- a/svtools/util/svt.component
+++ b/svtools/util/svt.component
@@ -18,7 +18,7 @@
-->
<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- xmlns="http://openoffice.org/2010/uno-components">
+ prefix="svt" xmlns="http://openoffice.org/2010/uno-components">
<implementation name="com.sun.star.comp.graphic.GraphicProvider"
constructor="com_sun_star_comp_graphic_GraphicProvider_get_implementation">
<service name="com.sun.star.graphic.GraphicProvider"/>
@@ -43,12 +43,10 @@
constructor="com_sun_star_svtools_SvFilterOptionsDialog_get_implementation">
<service name="com.sun.star.ui.dialogs.FilterOptionsDialog"/>
</implementation>
- <implementation name="com.sun.star.comp.svt.FilePicker"
- constructor="com_sun_star_comp_svt_FilePicker_get_implementation">
+ <implementation name="com.sun.star.comp.svt.FilePicker">
<service name="com.sun.star.ui.dialogs.FilePicker"/>
</implementation>
- <implementation name="com.sun.star.comp.svt.FolderPicker"
- constructor="com_sun_star_comp_svt_FolderPicker_get_implementation">
+ <implementation name="com.sun.star.comp.svt.FolderPicker">
<service name="com.sun.star.ui.dialogs.FolderPicker"/>
</implementation>
<implementation name="com.sun.star.comp.embed.DocumentCloser"