[Libreoffice-commits] core.git: sc/inc sc/source

Eike Rathke erack at redhat.com
Tue Nov 26 15:14:04 PST 2013


 sc/inc/tablink.hxx                 |    8 +++++++-
 sc/source/ui/docshell/arealink.cxx |    2 +-
 sc/source/ui/docshell/tablink.cxx  |   18 ++++++++++++------
 3 files changed, 20 insertions(+), 8 deletions(-)

New commits:
commit 513eadd422ff6a41cfe9a16f82cf32872d729652
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Nov 27 00:04:44 2013 +0100

    resolved fdo#53103 actually use the external data filter options
    
    ScDocShell::ConvertFrom() queries the filter options from the SfxItemSet
    at SfxMedium, which is fine when loading the data into the table
    selector first, but the final load via ScAreaLink created a bare
    SfxMedium without options set. Do so.
    
    Additionally it may now even work that ScDocShell sets options at
    SfxMedium, which the ScAreaLink code prepared for but previously the
    SfxMedium did not have an SfxItemSet.
    
    Change-Id: I45d6a24906dc3ba41654b8c0951dd84939d8af5e

diff --git a/sc/inc/tablink.hxx b/sc/inc/tablink.hxx
index aabb2e2..d8d173e 100644
--- a/sc/inc/tablink.hxx
+++ b/sc/inc/tablink.hxx
@@ -72,6 +72,7 @@ public:
 
 class ScDocument;
 class SfxMedium;
+class SfxFilter;
 
 class SC_DLLPUBLIC ScDocumentLoader
 {
@@ -92,7 +93,12 @@ public:
 
     void                ReleaseDocRef();    // without calling DoClose
 
-    static OUString GetOptions( SfxMedium& rMedium );
+    /** Create SfxMedium for stream read with SfxFilter and filter options set
+        at the medium's SfxItemSet.
+     */
+    static SfxMedium*   CreateMedium( const OUString& rFileName, const SfxFilter* pFilter, const OUString& rOptions );
+
+    static OUString     GetOptions( SfxMedium& rMedium );
 
     /** Returns the filter name and options from a file name.
         @param bWithContent
diff --git a/sc/source/ui/docshell/arealink.cxx b/sc/source/ui/docshell/arealink.cxx
index 2069141..f917e88 100644
--- a/sc/source/ui/docshell/arealink.cxx
+++ b/sc/source/ui/docshell/arealink.cxx
@@ -253,7 +253,7 @@ sal_Bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilt
     if ( rNewFilter != aFilterName )
         aOptions = "";
 
-    SfxMedium* pMed = new SfxMedium(aNewUrl, STREAM_STD_READ, pFilter);
+    SfxMedium* pMed = ScDocumentLoader::CreateMedium( aNewUrl, pFilter, aOptions);
 
     // aRef->DoClose() will be closed explicitly, but it is still more safe to use SfxObjectShellLock here
     ScDocShell* pSrcShell = new ScDocShell(SFX_CREATE_MODE_INTERNAL);
diff --git a/sc/source/ui/docshell/tablink.cxx b/sc/source/ui/docshell/tablink.cxx
index 9085f08..0e89441 100644
--- a/sc/source/ui/docshell/tablink.cxx
+++ b/sc/source/ui/docshell/tablink.cxx
@@ -506,6 +506,17 @@ void ScDocumentLoader::RemoveAppPrefix( OUString& rFilterName )
         rFilterName = rFilterName.copy( aAppPrefix.getLength());
 }
 
+SfxMedium* ScDocumentLoader::CreateMedium( const OUString& rFileName, const SfxFilter* pFilter,
+        const OUString& rOptions )
+{
+    // Always create SfxItemSet so ScDocShell can set options.
+    SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() );
+    if ( !rOptions.isEmpty() )
+        pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, rOptions ) );
+
+    return new SfxMedium( rFileName, STREAM_STD_READ, pFilter, pSet );
+}
+
 ScDocumentLoader::ScDocumentLoader( const OUString& rFileName,
                                     OUString& rFilterName, OUString& rOptions,
                                     sal_uInt32 nRekCnt, bool bWithInteraction ) :
@@ -517,12 +528,7 @@ ScDocumentLoader::ScDocumentLoader( const OUString& rFileName,
 
     const SfxFilter* pFilter = ScDocShell::Factory().GetFilterContainer()->GetFilter4FilterName( rFilterName );
 
-    //  ItemSet immer anlegen, damit die DocShell die Optionen setzen kann
-    SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() );
-    if ( !rOptions.isEmpty() )
-        pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, rOptions ) );
-
-    pMedium = new SfxMedium( rFileName, STREAM_STD_READ, pFilter, pSet );
+    pMedium = CreateMedium( rFileName, pFilter, rOptions);
     if ( pMedium->GetError() != ERRCODE_NONE )
         return ;
 


More information about the Libreoffice-commits mailing list