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

Martin Nathansen marsianer at gmail.com
Mon Apr 18 17:44:54 UTC 2016


 sc/source/core/data/simpleformulacalc.cxx |    4 ++++
 sc/source/core/inc/interpre.hxx           |    5 +++++
 sc/source/core/tool/interpr2.cxx          |   12 ++++++------
 sc/source/core/tool/interpr4.cxx          |    1 +
 4 files changed, 16 insertions(+), 6 deletions(-)

New commits:
commit 6a92ada1f624b3d37976845517595e15ed5a73f6
Author: Martin Nathansen <marsianer at gmail.com>
Date:   Mon Apr 18 14:59:13 2016 +0200

    tdf#99371 fix for DDE link update via Function Wizard
    
    With this fix the DDE links can be edited again without
    producing additional wrong DDE links. However below
    the updated DDE link there is still a unnecessary table
    added which should be fixed.
    
    Change-Id: I51e5a7ec84d2fc1429e68554dc131e4e456540df
    Reviewed-on: https://gerrit.libreoffice.org/24213
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/sc/source/core/data/simpleformulacalc.cxx b/sc/source/core/data/simpleformulacalc.cxx
index 49b3459..63d8b54 100644
--- a/sc/source/core/data/simpleformulacalc.cxx
+++ b/sc/source/core/data/simpleformulacalc.cxx
@@ -46,6 +46,10 @@ void ScSimpleFormulaCalculator::Calculate()
 
     mbCalculated = true;
     ScInterpreter aInt(nullptr, mpDoc, maAddr, *mpCode.get());
+
+    std::unique_ptr<sfx2::LinkManager> pNewLinkMgr( new sfx2::LinkManager(mpDoc->GetDocumentShell()) );
+    aInt.SetLinkManager( pNewLinkMgr.get() );
+
     if (mbMatrixFormula)
         aInt.AssertFormulaMatrix();
 
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 5530d58..4f06f86 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -26,6 +26,7 @@
 #include <unotools/textsearch.hxx>
 #include <formula/errorcodes.hxx>
 #include <formula/tokenarray.hxx>
+#include <sfx2/linkmgr.hxx>
 #include "scdll.hxx"
 #include "scdllapi.h"
 #include "types.hxx"
@@ -182,6 +183,7 @@ private:
     ScAddress   aPos;
     ScTokenArray& rArr;
     ScDocument* pDok;
+    sfx2::LinkManager* mpLinkManager;
     svl::SharedStringPool& mrStrPool;
     formula::FormulaTokenRef  xResult;
     ScJumpMatrix*   pJumpMatrix;        // currently active array condition, if any
@@ -922,6 +924,9 @@ public:
             { if (nError && !nGlobalError) nGlobalError = nError; }
     void AssertFormulaMatrix();
 
+    void SetLinkManager(sfx2::LinkManager* pLinkMgr)
+            { mpLinkManager = pLinkMgr; }
+
     sal_uInt16                  GetError() const            { return nGlobalError; }
     formula::StackVar           GetResultType() const       { return xResult->GetType(); }
     svl::SharedString GetStringResult() const;
diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx
index 18fd2bb..c1a812a 100644
--- a/sc/source/core/tool/interpr2.cxx
+++ b/sc/source/core/tool/interpr2.cxx
@@ -2452,8 +2452,8 @@ void ScInterpreter::ScDde()
         //  temporary documents (ScFunctionAccess) have no DocShell
         //  and no LinkManager -> abort
 
-        sfx2::LinkManager* pLinkMgr = pDok->GetLinkManager();
-        if (!pLinkMgr)
+        //sfx2::LinkManager* pLinkMgr = pDok->GetLinkManager();
+        if (!mpLinkManager)
         {
             PushNoValue();
             return;
@@ -2471,7 +2471,7 @@ void ScInterpreter::ScDde()
 
             // Get/ Create link object
 
-        ScDdeLink* pLink = lcl_GetDdeLink( pLinkMgr, aAppl, aTopic, aItem, nMode );
+        ScDdeLink* pLink = lcl_GetDdeLink( mpLinkManager, aAppl, aTopic, aItem, nMode );
 
         //TODO: Save Dde-links (in addition) more efficient at document !!!!!
         //      ScDdeLink* pLink = pDok->GetDdeLink( aAppl, aTopic, aItem );
@@ -2481,8 +2481,8 @@ void ScInterpreter::ScDde()
         if (!pLink)
         {
             pLink = new ScDdeLink( pDok, aAppl, aTopic, aItem, nMode );
-            pLinkMgr->InsertDDELink( pLink, aAppl, aTopic, aItem );
-            if ( pLinkMgr->GetLinks().size() == 1 )                    // erster ?
+            mpLinkManager->InsertDDELink( pLink, aAppl, aTopic, aItem );
+            if ( mpLinkManager->GetLinks().size() == 1 )                    // erster ?
             {
                 SfxBindings* pBindings = pDok->GetViewBindings();
                 if (pBindings)
@@ -2530,7 +2530,7 @@ void ScInterpreter::ScDde()
             PushNA();
 
         pDok->EnableIdle(bOldEnabled);
-        pLinkMgr->CloseCachedComps();
+        mpLinkManager->CloseCachedComps();
     }
 }
 
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 027a253..570a3d0 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -3461,6 +3461,7 @@ ScInterpreter::ScInterpreter( ScFormulaCell* pCell, ScDocument* pDoc,
     , aPos(rPos)
     , rArr(r)
     , pDok(pDoc)
+    , mpLinkManager(pDok->GetLinkManager())
     , mrStrPool(pDoc->GetSharedStringPool())
     , pJumpMatrix(nullptr)
     , pTokenMatrixMap(nullptr)


More information about the Libreoffice-commits mailing list