framework/source/services/pathsettings.cxx | 10 +++++----- include/vcl/svapp.hxx | 6 +++--- svtools/source/uno/fpicker.cxx | 14 +++++++++----- vcl/source/app/svapp.cxx | 12 ++++++++++-- 4 files changed, 27 insertions(+), 15 deletions(-)
New commits: commit 58ea27124af27bfac21a796b0d13d72354bd0dd3 Author: Caolán McNamara <caol...@redhat.com> Date: Sat Dec 28 17:05:40 2013 +0000 make FilePicker::createWithMode not crash i.e. calc->data->XML Source->"browse to set source" calls com_sun_star_comp_svt_FilePicker_get_implementation with its single argument in arguments as opposed to the empty argument expected there. So allow the single-argument case, and pass the argument through and apply it automatically via XInitialization::initialize in Application::createFilePicker. I'm far from sure that this is the right solution, but it has the advantage of working vs crashing. Change-Id: I07c1baae7f47781920eac56763e8fd003a7b99e1 diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx index 1620efa..57814e0 100644 --- a/include/vcl/svapp.hxx +++ b/include/vcl/svapp.hxx @@ -389,9 +389,9 @@ public: /** Create a platform specific file picker, if one is available, otherwise return an empty reference */ - static com::sun::star::uno::Reference< com::sun::star::ui::dialogs::XFilePicker2 > - createFilePicker( const com::sun::star::uno::Reference< - com::sun::star::uno::XComponentContext >& rServiceManager ); + static css::uno::Reference<css::ui::dialogs::XFilePicker2> + createFilePicker(const css::uno::Sequence<css::uno::Any>& rArguments, + const css::uno::Reference<css::uno::XComponentContext>& rServiceManager); /** Create a platform specific folder picker, if one is available, otherwise return an empty reference diff --git a/svtools/source/uno/fpicker.cxx b/svtools/source/uno/fpicker.cxx index a9d06ad..1034baf 100644 --- a/svtools/source/uno/fpicker.cxx +++ b/svtools/source/uno/fpicker.cxx @@ -57,19 +57,22 @@ extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL com_sun_star_comp_svt_FilePicker_get_implementation( css::uno::XComponentContext *context, uno_Sequence * arguments) { - assert(arguments != 0 && arguments->nElements == 0); (void) arguments; + assert(arguments != 0 && (arguments->nElements == 0 || arguments->nElements == 1)); + css::uno::Sequence<css::uno::Any> aArgs(reinterpret_cast<css::uno::Any *>(arguments->elements), + arguments->nElements); Reference< css::uno::XInterface > xResult; Reference< css::lang::XMultiComponentFactory > xFactory (context->getServiceManager()); if (xFactory.is() && SvtMiscOptions().UseSystemFileDialog()) { - xResult = Reference< css::uno::XInterface >( Application::createFilePicker( context ) ); + xResult = Reference<css::uno::XInterface>(Application::createFilePicker(aArgs, context)); if (!xResult.is()) { try { - xResult = xFactory->createInstanceWithContext ( + xResult = xFactory->createInstanceWithArgumentsAndContext( FilePicker_getSystemPickerServiceName(), + aArgs, context); } catch (css::uno::Exception const &) @@ -83,8 +86,9 @@ com_sun_star_comp_svt_FilePicker_get_implementation( if (!xResult.is() && xFactory.is()) { // Always fall back to OfficeFilePicker. - xResult = xFactory->createInstanceWithContext ( - OUString( "com.sun.star.ui.dialogs.OfficeFilePicker"), + xResult = xFactory->createInstanceWithArgumentsAndContext( + "com.sun.star.ui.dialogs.OfficeFilePicker", + aArgs, context); } if (xResult.is()) diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index 5e573d0..945229c 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -62,6 +62,7 @@ #include "com/sun/star/uno/Reference.h" #include "com/sun/star/awt/XToolkit.hpp" #include "com/sun/star/uno/XNamingService.hpp" +#include "com/sun/star/lang/XInitialization.hpp" #include "com/sun/star/lang/XMultiServiceFactory.hpp" #include "comphelper/solarmutex.hxx" #include "osl/process.h" @@ -1647,10 +1648,17 @@ bool Application::hasNativeFileSelection() } Reference< ui::dialogs::XFilePicker2 > -Application::createFilePicker( const Reference< uno::XComponentContext >& xSM ) +Application::createFilePicker(const uno::Sequence<uno::Any>& rArguments, + const Reference< uno::XComponentContext >& xSM) { ImplSVData* pSVData = ImplGetSVData(); - return pSVData->mpDefInst->createFilePicker( xSM ); + Reference< ui::dialogs::XFilePicker2 > xRet(pSVData->mpDefInst->createFilePicker(xSM)); + if (xRet.is() && rArguments.getLength()) + { + uno::Reference<lang::XInitialization> xInit(xRet, uno::UNO_QUERY_THROW); + xInit->initialize(rArguments); + } + return xRet; } Reference< ui::dialogs::XFolderPicker2 > commit fe868bf7cfba864c6f11f068df87c5fdaae7458c Author: Caolán McNamara <caol...@redhat.com> Date: Sat Dec 28 16:34:24 2013 +0000 can use string literals here now Change-Id: Ieeead634ac23003924d74140a5b6aba2611db8d7 diff --git a/framework/source/services/pathsettings.cxx b/framework/source/services/pathsettings.cxx index e4e2a56..904f3bd 100644 --- a/framework/source/services/pathsettings.cxx +++ b/framework/source/services/pathsettings.cxx @@ -46,8 +46,8 @@ #include <fwkdllapi.h> -#define CFGPROP_USERPATHS OUString("UserPaths") -#define CFGPROP_WRITEPATH OUString("WritePath") +#define CFGPROP_USERPATHS "UserPaths" +#define CFGPROP_WRITEPATH "WritePath" /* 0 : old style "Template" string using ";" as separator @@ -56,9 +56,9 @@ 3 : write path "Template_write" string */ -#define POSTFIX_INTERNAL_PATHS OUString("_internal") -#define POSTFIX_USER_PATHS OUString("_user") -#define POSTFIX_WRITE_PATH OUString("_writable") +#define POSTFIX_INTERNAL_PATHS "_internal" +#define POSTFIX_USER_PATHS "_user" +#define POSTFIX_WRITE_PATH "_writable" const sal_Int32 IDGROUP_OLDSTYLE = 0; const sal_Int32 IDGROUP_INTERNAL_PATHS = 1;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits