[Libreoffice-commits] core.git: 2 commits - framework/source include/vcl svtools/source vcl/source

Caolán McNamara caolanm at redhat.com
Sat Dec 28 09:12:37 PST 2013


 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 <caolanm at 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 <caolanm at 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;


More information about the Libreoffice-commits mailing list