[Libreoffice-commits] core.git: Branch 'libreoffice-6-3' - sc/inc sc/source

Szymon Kłos (via logerrit) logerrit at kemper.freedesktop.org
Tue Nov 26 14:59:10 UTC 2019


 sc/inc/scmod.hxx                 |    7 ---
 sc/source/ui/app/inputhdl.cxx    |    5 +-
 sc/source/ui/app/inputwin.cxx    |    3 -
 sc/source/ui/app/scmod.cxx       |   34 ++++------------
 sc/source/ui/formdlg/formula.cxx |   81 ++++++++++++++++++++-------------------
 sc/source/ui/inc/formula.hxx     |    1 
 sc/source/ui/inc/tabvwsh.hxx     |    7 ++-
 sc/source/ui/view/cellsh3.cxx    |    5 +-
 sc/source/ui/view/tabvwsh4.cxx   |    2 
 sc/source/ui/view/tabvwsha.cxx   |    2 
 sc/source/ui/view/tabvwshc.cxx   |   11 +++++
 11 files changed, 82 insertions(+), 76 deletions(-)

New commits:
commit e5f74d20c2b72b107fe719cc888d779f17e5d57c
Author:     Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Wed Sep 5 21:12:23 2018 +0200
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Nov 26 15:58:12 2019 +0100

    tdf#124513 Allow to use multiple Formula dialog instances
    
    Reviewed-on: https://gerrit.libreoffice.org/79463
    Tested-by: Jenkins
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    (cherry picked from commit b3a9fd1c51b4d0c2a8146c250e5571cc38eae9e6)
    
    Change-Id: Ia24556f40dd06e3acb40f24334ab972e2dada26a
    Reviewed-on: https://gerrit.libreoffice.org/83702
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx
index 7d0d7e0a3675..6f42d443de23 100644
--- a/sc/inc/scmod.hxx
+++ b/sc/inc/scmod.hxx
@@ -100,7 +100,6 @@ class SAL_DLLPUBLIC_RTTI ScModule: public SfxModule, public SfxListener, public
     std::unique_ptr<SvtCTLOptions>           m_pCTLOptions;
     std::unique_ptr<SvtUserOptions>          m_pUserOptions;
     std::unique_ptr<SfxErrorHandler>  m_pErrorHdl;
-    std::unique_ptr<ScFormEditData>   m_pFormEditData;
     sal_uInt16          m_nCurRefDlgId;
     bool                m_bIsWaterCan:1;
     bool                m_bIsInEditCommand:1;
@@ -206,7 +205,6 @@ public:
     void                InputSelection( const EditView* pView );
     void                InputChanged( const EditView* pView );
     ScInputHandler*     GetInputHdl( ScTabViewShell* pViewSh = nullptr, bool bUseRef = true );
-
     void                SetRefInputHdl( ScInputHandler* pNew );
     ScInputHandler*     GetRefInputHdl() { return m_pRefInputHandler;}
 
@@ -217,14 +215,9 @@ public:
     void                InputSetSelection( sal_Int32 nStart, sal_Int32 nEnd );
     void                InputReplaceSelection( const OUString& rStr );
     void                InputTurnOffWinEngine();
-    OUString            InputGetFormulaStr();
     void                ActivateInputWindow( const OUString* pStr = nullptr,
                                                 bool bMatrix = false );
 
-    void                InitFormEditData();
-    void                ClearFormEditData();
-    ScFormEditData*     GetFormEditData()       { return m_pFormEditData.get(); }
-
     // input of reference:
     SC_DLLPUBLIC void   SetRefDialog( sal_uInt16 nId, bool bVis, SfxViewFrame* pViewFrm = nullptr );
     bool                IsModalMode(SfxObjectShell* pDocSh = nullptr);
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index ecbdfafbe1d3..1988d7b3a4f4 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -3639,9 +3639,12 @@ void ScInputHandler::NotifyChange( const ScInputHdlState* pState,
     {
         ScModule* pScMod = SC_MOD();
 
+        ScTabViewShell* pScTabViewShell = pScMod ? dynamic_cast<ScTabViewShell*>(pScMod->GetViewShell()) : nullptr;
+
         // Also take foreign reference input into account here (e.g. FunctionsAutoPilot),
         // FormEditData, if we're switching from Help to Calc:
-        if ( !bFormulaMode && !pScMod->IsFormulaMode() && !pScMod->GetFormEditData() )
+        if ( !bFormulaMode && !pScMod->IsFormulaMode() &&
+             ( !pScTabViewShell || !pScTabViewShell->GetFormEditData() ) )
         {
             bool bIgnore = false;
             if ( bModified )
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index 216a5bd6477e..dc5f92ca09ff 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -66,6 +66,7 @@
 #include <editeng/fontitem.hxx>
 #include <AccessibleEditObject.hxx>
 #include <AccessibleText.hxx>
+#include <comphelper/lok.hxx>
 #include <comphelper/string.hxx>
 #include <com/sun/star/frame/XLayoutManager.hpp>
 #include <helpids.h>
@@ -309,7 +310,7 @@ void ScInputWindow::Select()
             {
                 //! new method at ScModule to query if function autopilot is open
                 SfxViewFrame* pViewFrm = SfxViewFrame::Current();
-                if ( pViewFrm && !pViewFrm->GetChildWindow( SID_OPENDLG_FUNCTION ) )
+                if ( pViewFrm && ( comphelper::LibreOfficeKit::isActive() || !pViewFrm->GetChildWindow( SID_OPENDLG_FUNCTION ) ) )
                 {
                     pViewFrm->GetDispatcher()->Execute( SID_OPENDLG_FUNCTION,
                                               SfxCallMode::SYNCHRON | SfxCallMode::RECORD );
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index 76faf343953c..8bf155562d71 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -166,8 +166,6 @@ ScModule::~ScModule()
 
     SfxItemPool::Free(m_pMessagePool);
 
-    m_pFormEditData.reset();
-
     m_pDragData.reset();
     m_pErrorHdl.reset();
 
@@ -654,16 +652,6 @@ void ScModule::SetSelectionTransfer( ScSelectionTransferObj* pNew )
     m_pSelTransfer = pNew;
 }
 
-void ScModule::InitFormEditData()
-{
-    m_pFormEditData.reset( new ScFormEditData );
-}
-
-void ScModule::ClearFormEditData()
-{
-    m_pFormEditData.reset();
-}
-
 void ScModule::SetViewOptions( const ScViewOptions& rOpt )
 {
     if ( !m_pViewCfg )
@@ -1318,7 +1306,7 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
  */
 ScInputHandler* ScModule::GetInputHdl( ScTabViewShell* pViewSh, bool bUseRef )
 {
-    if ( m_pRefInputHandler && bUseRef )
+    if ( !comphelper::LibreOfficeKit::isActive() && m_pRefInputHandler && bUseRef )
         return m_pRefInputHandler;
 
     ScInputHandler* pHdl = nullptr;
@@ -1443,15 +1431,6 @@ void ScModule::InputTurnOffWinEngine()
         pHdl->InputTurnOffWinEngine();
 }
 
-OUString ScModule::InputGetFormulaStr()
-{
-    ScInputHandler* pHdl = GetInputHdl();
-    OUString aStr;
-    if ( pHdl )
-        aStr = pHdl->GetFormString();
-    return aStr;
-}
-
 void ScModule::ActivateInputWindow( const OUString* pStrFormula, bool bMatrix )
 {
     ScInputHandler* pHdl = GetInputHdl();
@@ -1493,7 +1472,8 @@ void ScModule::SetRefDialog( sal_uInt16 nId, bool bVis, SfxViewFrame* pViewFrm )
 {
     //TODO: Move reference dialog handling to view
     //      Just keep function autopilot here for references to other documents
-    if(m_nCurRefDlgId==0 || (nId==m_nCurRefDlgId && !bVis))
+    if ( m_nCurRefDlgId == 0 || ( nId == m_nCurRefDlgId && !bVis )
+       || ( comphelper::LibreOfficeKit::isActive() && m_nCurRefDlgId == SID_OPENDLG_FUNCTION ) )
     {
         if ( !pViewFrm )
             pViewFrm = SfxViewFrame::Current();
@@ -1661,7 +1641,13 @@ bool ScModule::IsFormulaMode()
 
     if ( m_nCurRefDlgId )
     {
-        SfxChildWindow* pChildWnd = lcl_GetChildWinFromCurrentView( m_nCurRefDlgId );
+        SfxChildWindow* pChildWnd = nullptr;
+
+        if ( comphelper::LibreOfficeKit::isActive() )
+            pChildWnd = lcl_GetChildWinFromCurrentView( m_nCurRefDlgId );
+        else
+            pChildWnd = lcl_GetChildWinFromAnyView( m_nCurRefDlgId );
+
         if ( pChildWnd )
         {
             if (pChildWnd->GetWindow())
diff --git a/sc/source/ui/formdlg/formula.cxx b/sc/source/ui/formdlg/formula.cxx
index 3c412a95aa16..56c406e2e306 100644
--- a/sc/source/ui/formdlg/formula.cxx
+++ b/sc/source/ui/formdlg/formula.cxx
@@ -60,11 +60,12 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
                            weld::Window* pParent, const ScViewData* pViewData, const formula::IFunctionManager* _pFunctionMgr)
     : formula::FormulaDlg(pB, pCW, pParent, _pFunctionMgr, this)
     , m_aHelper(this,pB)
+    , m_pViewShell( nullptr )
 {
     m_aHelper.SetDialog(m_xDialog.get());
     ScModule* pScMod = SC_MOD();
     pScMod->InputEnterHandler();
-    ScTabViewShell* pScViewShell = nullptr;
+    m_pViewShell = nullptr;
 
     // title has to be from the view that opened the dialog,
     // even if it's not the current view
@@ -77,9 +78,9 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
             SfxViewFrame* pMyViewFrm = pMyDisp->GetFrame();
             if (pMyViewFrm)
             {
-                pScViewShell = dynamic_cast<ScTabViewShell*>( pMyViewFrm->GetViewShell()  );
-                if( pScViewShell )
-                    pScViewShell->UpdateInputHandler(true);
+                m_pViewShell = dynamic_cast<ScTabViewShell*>( pMyViewFrm->GetViewShell()  );
+                if( m_pViewShell )
+                    m_pViewShell->UpdateInputHandler(true);
             }
         }
     }
@@ -93,12 +94,11 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
     m_xOpCodeMapper.set(ScServiceProvider::MakeInstance(ScServiceProvider::Type::OPCODEMAPPER,
                                                         static_cast<ScDocShell*>(m_pDoc->GetDocumentShell())),uno::UNO_QUERY);
 
-    ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl(pScViewShell);
+    ScInputHandler* pInputHdl = SC_MOD()->GetInputHdl(m_pViewShell);
 
-    OSL_ENSURE( pInputHdl, "Missing input handler :-/" );
+    assert(pInputHdl && "Missing input handler :-/");
 
-    if ( pInputHdl )
-        pInputHdl->NotifyChange( nullptr );
+    pInputHdl->NotifyChange( nullptr );
 
     ScFormulaReferenceHelper::enableInput( true );
     ScFormulaReferenceHelper::EnableSpreadsheets();
@@ -108,10 +108,10 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
     notifyChange();
     fill();
 
-    ScFormEditData* pData = pScMod->GetFormEditData();
+    ScFormEditData* pData = m_pViewShell->GetFormEditData();
     if (!pData)
     {
-        pScMod->SetRefInputHdl(pScMod->GetInputHdl());
+        pScMod->SetRefInputHdl(pInputHdl);
 
         m_pDoc = pViewData->GetDocument();
         SCCOL nCol = pViewData->GetCurX();
@@ -119,9 +119,9 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
         SCTAB nTab = pViewData->GetTabNo();
         m_CursorPos = ScAddress( nCol, nRow, nTab );
 
-        pScMod->InitFormEditData();                             // create new
-        pData = pScMod->GetFormEditData();
-        pData->SetInputHandler(pScMod->GetInputHdl());
+        m_pViewShell->InitFormEditData();                             // create new
+        pData = m_pViewShell->GetFormEditData();
+        pData->SetInputHandler(pInputHdl);
         pData->SetDocShell(pViewData->GetDocShell());
 
         OSL_ENSURE(pData,"FormEditData not available");
@@ -142,12 +142,12 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
             sal_Int32 nFEnd   = 0;
             if ( GetFormulaHelper().GetNextFunc( aFormula, false, nFStart, &nFEnd) )
             {
-                pScMod->InputReplaceSelection( aFormula );
-                pScMod->InputSetSelection( nFStart, nFEnd );
+                pInputHdl->InputReplaceSelection( aFormula );
+                pInputHdl->InputSetSelection( nFStart, nFEnd );
                 sal_Int32 PrivStart, PrivEnd;
-                pScMod->InputGetSelection( PrivStart, PrivEnd);
+                pInputHdl->InputGetSelection( PrivStart, PrivEnd);
 
-                eMode = SetMeText(pScMod->InputGetFormulaStr(),PrivStart, PrivEnd, bMatrix, true, true);
+                eMode = SetMeText(pInputHdl->GetFormString(),PrivStart, PrivEnd, bMatrix, true, true);
                 pData->SetFStart( nFStart );
             }
             else
@@ -160,11 +160,11 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
             if ( aFormula.startsWith("=") )
                 aNewFormula = aFormula;
 
-            pScMod->InputReplaceSelection( aNewFormula );
-            pScMod->InputSetSelection( 1, aNewFormula.getLength()+1 );
+            pInputHdl->InputReplaceSelection( aNewFormula );
+            pInputHdl->InputSetSelection( 1, aNewFormula.getLength()+1 );
             sal_Int32 PrivStart, PrivEnd;
-            pScMod->InputGetSelection( PrivStart, PrivEnd);
-            SetMeText(pScMod->InputGetFormulaStr(),PrivStart, PrivEnd,bMatrix,false,false);
+            pInputHdl->InputGetSelection( PrivStart, PrivEnd);
+            SetMeText(pInputHdl->GetFormString(),PrivStart, PrivEnd,bMatrix,false,false);
 
             pData->SetFStart( 1 );      // after "="
         }
@@ -179,9 +179,7 @@ ScFormulaDlg::ScFormulaDlg(SfxBindings* pB, SfxChildWindow* pCW,
 
 void ScFormulaDlg::notifyChange()
 {
-    ScModule* pScMod = SC_MOD();
-
-    ScInputHandler* pInputHdl = pScMod->GetInputHdl();
+    ScInputHandler* pInputHdl = m_pViewShell->GetInputHandler();
     if ( pInputHdl )
         pInputHdl->NotifyChange( nullptr );
 }
@@ -189,7 +187,7 @@ void ScFormulaDlg::notifyChange()
 void ScFormulaDlg::fill()
 {
     ScModule* pScMod = SC_MOD();
-    ScFormEditData* pData = pScMod->GetFormEditData();
+    ScFormEditData* pData = static_cast<ScFormEditData*>(getFormEditData());
     notifyChange();
     OUString rStrExp;
     if (pData)
@@ -219,11 +217,11 @@ void ScFormulaDlg::fill()
             pData->SetInputHandler(pInputHdl);
         }
 
-        OUString aOldFormulaTmp(pScMod->InputGetFormulaStr());
-        pScMod->InputSetSelection( 0, aOldFormulaTmp.getLength());
+        OUString aOldFormulaTmp(pData->GetInputHandler()->GetFormString());
+        pData->GetInputHandler()->InputSetSelection( 0, aOldFormulaTmp.getLength());
 
         rStrExp=pData->GetUndoStr();
-        pScMod->InputReplaceSelection(rStrExp);
+        pData->GetInputHandler()->InputReplaceSelection(rStrExp);
 
         SetMeText(rStrExp);
 
@@ -235,16 +233,18 @@ void ScFormulaDlg::fill()
 
 ScFormulaDlg::~ScFormulaDlg()
 {
-    ScModule* pScMod = SC_MOD();
-    ScFormEditData* pData = pScMod->GetFormEditData();
+    ScFormEditData* pData = m_pViewShell->GetFormEditData();
+
     m_aHelper.dispose();
 
     if (pData) // close doesn't destroy;
     {
         //set back reference input handler
-        pScMod->SetRefInputHdl(nullptr);
+        SC_MOD()->SetRefInputHdl(nullptr);
         StoreFormEditData(pData);
     }
+
+    m_pViewShell->ClearFormEditData();
 }
 
 bool ScFormulaDlg::IsInputHdl(const ScInputHandler* pHdl)
@@ -556,8 +556,8 @@ void ScFormulaDlg::setDispatcherLock( bool bLock )
 }
 void ScFormulaDlg::deleteFormData()
 {
-    ScModule* pScMod = SC_MOD();
-    pScMod->ClearFormEditData();        // pData is invalid!
+    if (m_pViewShell)
+        m_pViewShell->ClearFormEditData();        // pData is invalid!
 }
 void ScFormulaDlg::clear()
 {
@@ -574,10 +574,9 @@ void ScFormulaDlg::clear()
 }
 void ScFormulaDlg::switchBack()
 {
-    ScModule* pScMod = SC_MOD();
     // back to the document
     // (foreign doc could be above - #34222#)
-    ScInputHandler* pHdl = pScMod->GetInputHdl();
+    ScInputHandler* pHdl = m_pViewShell->GetInputHandler();
     if ( pHdl )
     {
         pHdl->ViewShellGone(nullptr);  // -> get active view
@@ -602,8 +601,10 @@ void ScFormulaDlg::switchBack()
 }
 formula::FormEditData* ScFormulaDlg::getFormEditData() const
 {
-    ScModule* pScMod = SC_MOD();
-    return pScMod->GetFormEditData();
+    ScTabViewShell* pViewShell = m_pViewShell;
+    if (pViewShell)
+        return pViewShell->GetFormEditData();
+    return nullptr;
 }
 void ScFormulaDlg::setCurrentFormula(const OUString& _sReplacement)
 {
@@ -639,8 +640,10 @@ void ScFormulaDlg::getSelection(sal_Int32& _nStart, sal_Int32& _nEnd) const
 }
 OUString ScFormulaDlg::getCurrentFormula() const
 {
-    ScModule* pScMod = SC_MOD();
-    return pScMod->InputGetFormulaStr();
+    ScFormEditData* pData = m_pViewShell->GetFormEditData();
+    if (pData && pData->GetInputHandler())
+        return pData->GetInputHandler()->GetFormString();
+    return "";
 }
 formula::IFunctionManager* ScFormulaDlg::getFunctionManager()
 {
diff --git a/sc/source/ui/inc/formula.hxx b/sc/source/ui/inc/formula.hxx
index 9d4e7c68fc42..5b19928e933f 100644
--- a/sc/source/ui/inc/formula.hxx
+++ b/sc/source/ui/inc/formula.hxx
@@ -41,6 +41,7 @@ class ScFormulaDlg final : public formula::FormulaDlg,
 
             ScDocument*                 m_pDoc;
             ScAddress                   m_CursorPos;
+            ScTabViewShell*             m_pViewShell;
     mutable std::shared_ptr<ScCompiler> m_xCompiler;
 
 public:
diff --git a/sc/source/ui/inc/tabvwsh.hxx b/sc/source/ui/inc/tabvwsh.hxx
index 7d51dbc5c7fa..f9472508fa0f 100644
--- a/sc/source/ui/inc/tabvwsh.hxx
+++ b/sc/source/ui/inc/tabvwsh.hxx
@@ -88,6 +88,7 @@ enum ObjectSelectionType
     OST_Media
 };
 
+class ScFormEditData;
 class SC_DLLPUBLIC ScTabViewShell: public SfxViewShell, public ScDBFunc
 {
 private:
@@ -112,6 +113,7 @@ private:
 
     std::unique_ptr<FmFormShell> pFormShell;
 
+    std::unique_ptr<ScFormEditData> mpFormEditData;
     std::unique_ptr<ScInputHandler, o3tl::default_delete<ScInputHandler>> mpInputHandler;              // for OLE input cell
 
     std::unique_ptr<::editeng::SvxBorderLine> pCurFrameLine;
@@ -162,7 +164,6 @@ private:
     bool    mbInSwitch;
     OUString   maName;
     OUString   maScope;
-
 private:
     void    Construct( TriState nForceDesignMode );
 
@@ -391,6 +392,10 @@ public:
     static bool isAnyEditViewInRange(bool bColumns, SCCOLROW nStart, SCCOLROW nEnd);
     css::uno::Reference<css::drawing::XShapes> getSelectedXShapes();
     static  css::uno::Reference<css::datatransfer::XTransferable2> GetClipData(vcl::Window* pWin);
+
+    void InitFormEditData();
+    void ClearFormEditData();
+    ScFormEditData* GetFormEditData() { return mpFormEditData.get(); }
 };
 
 #endif
diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx
index 621427d69eda..0d380e11bf64 100644
--- a/sc/source/ui/view/cellsh3.cxx
+++ b/sc/source/ui/view/cellsh3.cxx
@@ -46,6 +46,7 @@
 #include <markdata.hxx>
 #include <scabstdlg.hxx>
 #include <columnspanset.hxx>
+#include <comphelper/lok.hxx>
 
 #include <memory>
 
@@ -308,8 +309,8 @@ void ScCellShell::Execute( SfxRequest& rReq )
                 sal_uInt16 nId = SID_OPENDLG_FUNCTION;
                 SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
                 SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
-
-                pScMod->SetRefDialog( nId, pWnd == nullptr );
+                bool bVis = comphelper::LibreOfficeKit::isActive() || pWnd == nullptr;
+                pScMod->SetRefDialog( nId, bVis );
                 rReq.Ignore();
             }
             break;
diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx
index 46259a8f12a3..656f57b0e7d7 100644
--- a/sc/source/ui/view/tabvwsh4.cxx
+++ b/sc/source/ui/view/tabvwsh4.cxx
@@ -21,6 +21,7 @@
 
 #include <scitems.hxx>
 #include <editeng/eeitem.hxx>
+#include <formdata.hxx>
 
 #include <sfx2/app.hxx>
 #include <svx/dialogs.hrc>
@@ -1777,6 +1778,7 @@ ScTabViewShell::~ScTabViewShell()
     pPivotShell.reset();
     pAuditingShell.reset();
     pCurFrameLine.reset();
+    mpFormEditData.reset();
     mpInputHandler.reset();
     pPivotSource.reset();
     pDialogDPObject.reset();
diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx
index fbd9ca9564fd..acee56fe47a8 100644
--- a/sc/source/ui/view/tabvwsha.cxx
+++ b/sc/source/ui/view/tabvwsha.cxx
@@ -740,7 +740,7 @@ void ScTabViewShell::ExecuteSave( SfxRequest& rReq )
             // we will save the doc immediately afterwards, the modified state event
             // is clobbered. To avoid that, we notify all views immediately of the
             // modified state, apply the modification, then save the document.
-            ScInputHandler* pHdl = SC_MOD()->GetInputHdl();
+            ScInputHandler* pHdl = GetInputHandler();
             if (pHdl != nullptr && pHdl->GetModified())
                 SfxLokHelper::notifyAllViews(LOK_CALLBACK_STATE_CHANGED, ".uno:ModifiedStatus=true");
         }
diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx
index 939a7224615d..640309b5b1ed 100644
--- a/sc/source/ui/view/tabvwshc.cxx
+++ b/sc/source/ui/view/tabvwshc.cxx
@@ -59,6 +59,7 @@
 #include <condformatdlg.hxx>
 #include <xmlsourcedlg.hxx>
 #include <condformatdlgitem.hxx>
+#include <formdata.hxx>
 
 #include <RandomNumberGeneratorDialog.hxx>
 #include <SamplingDialog.hxx>
@@ -677,4 +678,14 @@ const OUString ScTabViewShell::DoAutoSum(bool& rRangeFinder, bool& rSubTotal, co
     return aFormula;
 }
 
+void ScTabViewShell::InitFormEditData()
+{
+    mpFormEditData.reset(new ScFormEditData);
+}
+
+void ScTabViewShell::ClearFormEditData()
+{
+    mpFormEditData.reset();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list