diff options
author | Noel Grandin <noel@peralex.com> | 2020-07-26 20:54:22 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-07-26 22:15:12 +0200 |
commit | 946e742aa63a2559721c761cea5c80286fbffa6b (patch) | |
tree | 390ef78138e7134d30121cc17d359bd0a99f1fa7 | |
parent | e59ac9bea9caf5b24258ac1fecfc886a0fc7374f (diff) |
fpicker/win32: create instances with uno constructors
See tdf#74608 for motivation.
Change-Id: Ic7d6c94e8709184fc8f195bd019402e361e9b810
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99461
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | fpicker/Library_fps.mk | 1 | ||||
-rw-r--r-- | fpicker/source/win32/FPServiceInfo.hxx | 37 | ||||
-rw-r--r-- | fpicker/source/win32/FPentry.cxx | 97 | ||||
-rw-r--r-- | fpicker/source/win32/VistaFilePicker.cxx | 39 | ||||
-rw-r--r-- | fpicker/source/win32/VistaFilePicker.hxx | 9 | ||||
-rw-r--r-- | fpicker/source/win32/fps.component | 8 | ||||
-rw-r--r-- | fpicker/source/win32/workbench/Test_fps.cxx | 2 |
7 files changed, 29 insertions, 164 deletions
diff --git a/fpicker/Library_fps.mk b/fpicker/Library_fps.mk index 31dd47e88b30..e41a8a40a081 100644 --- a/fpicker/Library_fps.mk +++ b/fpicker/Library_fps.mk @@ -56,7 +56,6 @@ endif $(eval $(call gb_Library_add_exception_objects,fps,\ fpicker/source/win32/asyncrequests \ fpicker/source/win32/FilterContainer \ - fpicker/source/win32/FPentry \ fpicker/source/win32/VistaFilePicker \ fpicker/source/win32/VistaFilePickerEventHandler \ fpicker/source/win32/VistaFilePickerImpl \ diff --git a/fpicker/source/win32/FPServiceInfo.hxx b/fpicker/source/win32/FPServiceInfo.hxx deleted file mode 100644 index edc350c1a9cc..000000000000 --- a/fpicker/source/win32/FPServiceInfo.hxx +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- 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_FPICKER_SOURCE_WIN32_FILEPICKER_FPSERVICEINFO_HXX -#define INCLUDED_FPICKER_SOURCE_WIN32_FILEPICKER_FPSERVICEINFO_HXX - -// the service names -#define FILE_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.SystemFilePicker" - -// the implementation names -#define FILE_PICKER_IMPL_NAME "com.sun.star.ui.dialogs.Win32FilePicker" - -// the service names -#define FOLDER_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.SystemFolderPicker" - -// the implementation names -#define FOLDER_PICKER_IMPL_NAME "com.sun.star.ui.dialogs.Win32FolderPicker" - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/fpicker/source/win32/FPentry.cxx b/fpicker/source/win32/FPentry.cxx deleted file mode 100644 index a4e48f8865e5..000000000000 --- a/fpicker/source/win32/FPentry.cxx +++ /dev/null @@ -1,97 +0,0 @@ -/* -*- 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 <cppuhelper/factory.hxx> -#include <com/sun/star/container/XSet.hpp> -#include <com/sun/star/lang/XSingleServiceFactory.hpp> -#include "FPServiceInfo.hxx" - -#include "VistaFilePicker.hxx" -#include "WinImplHelper.hxx" -#include <stdio.h> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::registry; -using namespace ::cppu; -using ::com::sun::star::ui::dialogs::XFilePicker2; -using ::com::sun::star::ui::dialogs::XFolderPicker2; - -static Reference< XInterface > createInstance( - const Reference< XMultiServiceFactory >& rServiceManager ) -{ - return Reference<ui::dialogs::XFilePicker2>( - new ::fpicker::win32::vista::VistaFilePicker(rServiceManager, false)); -} - -static Reference< XInterface > -createInstance_fop( const Reference< XMultiServiceFactory >& rServiceManager ) -{ - return Reference<ui::dialogs::XFolderPicker2>( - new ::fpicker::win32::vista::VistaFilePicker(rServiceManager, true)); -} - -extern "C" -{ - -SAL_DLLPUBLIC_EXPORT void* fps_win32_component_getFactory( - const char* pImplName, void* pSrvManager, void* ) -{ - void* pRet = nullptr; - - if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FILE_PICKER_IMPL_NAME ) ) ) - { - Sequence<OUString> aSNS { FILE_PICKER_SERVICE_NAME }; - - Reference< XSingleServiceFactory > xFactory ( createSingleFactory( - static_cast< XMultiServiceFactory* > ( pSrvManager ), - OUString::createFromAscii( pImplName ), - createInstance, - aSNS ) ); - if ( xFactory.is() ) - { - xFactory->acquire(); - pRet = xFactory.get(); - } - } - - if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, FOLDER_PICKER_IMPL_NAME ) ) ) - { - Sequence<OUString> aSNS { FOLDER_PICKER_SERVICE_NAME }; - - Reference< XSingleServiceFactory > xFactory ( createSingleFactory( - static_cast< XMultiServiceFactory* > ( pSrvManager ), - OUString::createFromAscii( pImplName ), - createInstance_fop, - aSNS ) ); - if ( xFactory.is() ) - { - xFactory->acquire(); - pRet = xFactory.get(); - } - } - - return pRet; -} - -} // extern "C" - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/fpicker/source/win32/VistaFilePicker.cxx b/fpicker/source/win32/VistaFilePicker.cxx index 67c49f4d1420..e391bcf53c58 100644 --- a/fpicker/source/win32/VistaFilePicker.cxx +++ b/fpicker/source/win32/VistaFilePicker.cxx @@ -24,7 +24,6 @@ #include "VistaFilePicker.hxx" #include "WinImplHelper.hxx" -#include "FPServiceInfo.hxx" #include "shared.hxx" #include <com/sun/star/awt/XWindow.hpp> @@ -47,20 +46,8 @@ namespace fpicker{ namespace win32{ namespace vista{ -namespace -{ - css::uno::Sequence< OUString > VistaFilePicker_getSupportedServiceNames() - { - return { - "com.sun.star.ui.dialogs.FilePicker", - "com.sun.star.ui.dialogs.SystemFilePicker", - "com.sun.star.ui.dialogs.SystemFolderPicker" }; - } -} - -VistaFilePicker::VistaFilePicker(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR, bool bFolderPicker) +VistaFilePicker::VistaFilePicker(bool bFolderPicker) : TVistaFilePickerBase (m_aMutex ) - , m_xSMGR (xSMGR ) , m_rDialog (std::make_shared<VistaFilePickerImpl>()) , m_aAsyncExecute (m_rDialog ) , m_nFilePickerThreadId (0 ) @@ -533,9 +520,9 @@ void SAL_CALL VistaFilePicker::setDescription( const OUString& aDescription ) OUString SAL_CALL VistaFilePicker::getImplementationName() { if (m_bFolderPicker) - return FOLDER_PICKER_IMPL_NAME; + return "com.sun.star.ui.dialogs.Win32FolderPicker"; else - return FILE_PICKER_IMPL_NAME; + return "com.sun.star.ui.dialogs.Win32FilePicker"; } sal_Bool SAL_CALL VistaFilePicker::supportsService(const OUString& sServiceName) @@ -545,11 +532,29 @@ sal_Bool SAL_CALL VistaFilePicker::supportsService(const OUString& sServiceName) css::uno::Sequence< OUString > SAL_CALL VistaFilePicker::getSupportedServiceNames() { - return VistaFilePicker_getSupportedServiceNames(); + return { + "com.sun.star.ui.dialogs.FilePicker", + "com.sun.star.ui.dialogs.SystemFilePicker", + "com.sun.star.ui.dialogs.SystemFolderPicker" }; } } // namespace vista } // namespace win32 } // namespace fpicker +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* +fpicker_win32_FilePicker_get_implementation( + css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const&) +{ + return cppu::acquire(new ::fpicker::win32::vista::VistaFilePicker(false)); +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* +fpicker_win32_FolderPicker_get_implementation( + css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const&) +{ + return cppu::acquire(new ::fpicker::win32::vista::VistaFilePicker(true)); +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/fpicker/source/win32/VistaFilePicker.hxx b/fpicker/source/win32/VistaFilePicker.hxx index 71ccfd992ba9..53879c0c8742 100644 --- a/fpicker/source/win32/VistaFilePicker.hxx +++ b/fpicker/source/win32/VistaFilePicker.hxx @@ -69,7 +69,7 @@ public: // ctor/dtor - explicit VistaFilePicker( const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR, bool bFolderPicker ); + explicit VistaFilePicker( bool bFolderPicker ); virtual ~VistaFilePicker() override; @@ -210,21 +210,14 @@ public: private: - - /// service manager to create own used uno services - css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR; - - css::uno::Sequence< OUString > m_lLastFiles; - /** execute the COM dialog within a STA thread * Must be used on the heap ... because it's implemented as OSL thread .-) */ RequestHandlerRef m_rDialog; AsyncRequests m_aAsyncExecute; - oslThreadIdentifier m_nFilePickerThreadId; bool m_bInitialized; diff --git a/fpicker/source/win32/fps.component b/fpicker/source/win32/fps.component index 80dac1a9b5fa..3cc9c8029814 100644 --- a/fpicker/source/win32/fps.component +++ b/fpicker/source/win32/fps.component @@ -17,11 +17,13 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . --> <component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@" - prefix="fps_win32" xmlns="http://openoffice.org/2010/uno-components"> - <implementation name="com.sun.star.ui.dialogs.Win32FilePicker"> + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.ui.dialogs.Win32FilePicker" + constructor="fpicker_win32_FilePicker_get_implementation"> <service name="com.sun.star.ui.dialogs.SystemFilePicker"/> </implementation> - <implementation name="com.sun.star.ui.dialogs.Win32FolderPicker"> + <implementation name="com.sun.star.ui.dialogs.Win32FolderPicker" + constructor="fpicker_win32_FolderPicker_get_implementation"> <service name="com.sun.star.ui.dialogs.SystemFolderPicker"/> </implementation> </component> diff --git a/fpicker/source/win32/workbench/Test_fps.cxx b/fpicker/source/win32/workbench/Test_fps.cxx index b801fcef3c50..62bc00550cca 100644 --- a/fpicker/source/win32/workbench/Test_fps.cxx +++ b/fpicker/source/win32/workbench/Test_fps.cxx @@ -263,7 +263,7 @@ int SAL_CALL main(int nArgc, char* Argv[], char* Env[] ) Reference< XFilePicker > xFilePicker( g_xFactory->createInstanceWithArguments( - FILE_PICKER_SERVICE_NAME, arguments ), UNO_QUERY ); + "com.sun.star.ui.dialogs.SystemFilePicker", arguments ), UNO_QUERY ); // install a FilePicker notifier Reference< XFilePickerListener > xFPListener( |