sc/inc/tablink.hxx                |    6 ++---
 sc/source/core/data/documen3.cxx  |    2 -
 sc/source/ui/docshell/docsh6.cxx  |    2 -
 sc/source/ui/docshell/tablink.cxx |   43 +++++++++++++++-----------------------
 sc/source/ui/view/viewfun2.cxx    |    2 -
 5 files changed, 23 insertions(+), 32 deletions(-)

New commits:
commit c642ba4de2a8d3614f0b7c22b9c93a6cf507e78d
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Fri May 23 12:23:35 2025 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri May 23 21:09:37 2025 +0200

    ScTableLink: drop pImpl and pass ScDocShell by ref
    
    Change-Id: Icdfeb1e10692f6cff7b3d4e4c78b0becfcf3b183
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185713
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/inc/tablink.hxx b/sc/inc/tablink.hxx
index dae9e3f37485..3a9546217949 100644
--- a/sc/inc/tablink.hxx
+++ b/sc/inc/tablink.hxx
@@ -27,14 +27,14 @@
 #include <memory>
 
 class ScDocShell;
-struct TableLink_Impl;
 
 namespace weld { class Window; }
 
 class ScTableLink final : public ::sfx2::SvBaseLink, public ScRefreshTimer
 {
 private:
-    std::unique_ptr<TableLink_Impl> pImpl;
+    ScDocShell&            m_rDocSh;
+    Link<sfx2::SvBaseLink&,void> m_aEndEditLink;
     OUString aFileName;
     OUString aFilterName;
     OUString aOptions;
@@ -43,7 +43,7 @@ private:
     bool bAddUndo:1;
 
 public:
-    ScTableLink( ScDocShell* pDocSh, OUString aFile,
+    ScTableLink( ScDocShell& rDocSh, OUString aFile,
                     OUString aFilter, OUString aOpt, sal_Int32 
nRefreshDelaySeconds );
     virtual ~ScTableLink() override;
     virtual void Closed() override;
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 52529d721aaa..ced75f3cb4dc 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -613,7 +613,7 @@ bool ScDocument::LinkExternalTab( SCTAB& rTab, const 
OUString& aDocTab,
     SetLink( rTab, ScLinkMode::VALUE, aFileName, aFilterName, aOptions, 
aTabName, nRefreshDelay );
     if ( !bWasThere ) // Add link only once per source document
     {
-        ScTableLink* pLink = new ScTableLink( mpShell, aFileName, aFilterName, 
aOptions, nRefreshDelay );
+        ScTableLink* pLink = new ScTableLink( *mpShell, aFileName, 
aFilterName, aOptions, nRefreshDelay );
         pLink->SetInCreate( true );
         OUString aFilName = aFilterName;
         GetLinkManager()->InsertFileLink( *pLink, 
sfx2::SvBaseLinkObjectType::ClientFile, aFileName, &aFilName );
diff --git a/sc/source/ui/docshell/docsh6.cxx b/sc/source/ui/docshell/docsh6.cxx
index 8e57289a6706..23c86bcd089c 100644
--- a/sc/source/ui/docshell/docsh6.cxx
+++ b/sc/source/ui/docshell/docsh6.cxx
@@ -374,7 +374,7 @@ void ScDocShell::UpdateLinks()
 
         if (!bThere)
         {
-            ScTableLink* pLink = new ScTableLink( this, aDocName, aFltName, 
aOptions, nRefresh );
+            ScTableLink* pLink = new ScTableLink( *this, aDocName, aFltName, 
aOptions, nRefresh );
             pLink->SetInCreate(true);
             pLinkManager->InsertFileLink(*pLink, 
sfx2::SvBaseLinkObjectType::ClientFile, aDocName, &aFltName);
             pLink->Update();
diff --git a/sc/source/ui/docshell/tablink.cxx 
b/sc/source/ui/docshell/tablink.cxx
index fdf22a93dae1..4babed2103ed 100644
--- a/sc/source/ui/docshell/tablink.cxx
+++ b/sc/source/ui/docshell/tablink.cxx
@@ -53,20 +53,12 @@
 #include <formulaiter.hxx>
 #include <tokenarray.hxx>
 
-struct TableLink_Impl
-{
-    ScDocShell*            m_pDocSh;
-    Link<sfx2::SvBaseLink&,void> m_aEndEditLink;
-
-    TableLink_Impl() : m_pDocSh( nullptr ) {}
-};
-
-ScTableLink::ScTableLink(ScDocShell* pShell, OUString aFile,
+ScTableLink::ScTableLink(ScDocShell& rShell, OUString aFile,
                             OUString aFilter, OUString aOpt,
                             sal_Int32 nRefreshDelaySeconds ):
     
::sfx2::SvBaseLink(SfxLinkUpdateMode::ONCALL,SotClipboardFormatId::SIMPLE_FILE),
     ScRefreshTimer( nRefreshDelaySeconds ),
-    pImpl( new TableLink_Impl ),
+    m_rDocSh( rShell ),
     aFileName(std::move(aFile)),
     aFilterName(std::move(aFilter)),
     aOptions(std::move(aOpt)),
@@ -74,7 +66,6 @@ ScTableLink::ScTableLink(ScDocShell* pShell, OUString aFile,
     bInEdit( false ),
     bAddUndo( true )
 {
-    pImpl->m_pDocSh = pShell;
 }
 
 ScTableLink::~ScTableLink()
@@ -82,7 +73,7 @@ ScTableLink::~ScTableLink()
     // cancel connection
 
     StopRefreshTimer();
-    ScDocument& rDoc = pImpl->m_pDocSh->GetDocument();
+    ScDocument& rDoc = m_rDocSh.GetDocument();
     SCTAB nCount = rDoc.GetTableCount();
     for (SCTAB nTab=0; nTab<nCount; nTab++)
         if (rDoc.IsLinked(nTab) && aFileName == rDoc.GetLinkDoc(nTab))
@@ -91,7 +82,7 @@ ScTableLink::~ScTableLink()
 
 void ScTableLink::Edit(weld::Window* pParent, const Link<SvBaseLink&,void>& 
rEndEditHdl)
 {
-    pImpl->m_aEndEditLink = rEndEditHdl;
+    m_aEndEditLink = rEndEditHdl;
 
     bInEdit = true;
     SvBaseLink::Edit( pParent, LINK( this, ScTableLink, TableEndEditHdl ) );
@@ -100,7 +91,7 @@ void ScTableLink::Edit(weld::Window* pParent, const 
Link<SvBaseLink&,void>& rEnd
 ::sfx2::SvBaseLink::UpdateResult ScTableLink::DataChanged(
     const OUString&, const css::uno::Any& )
 {
-    sfx2::LinkManager* 
pLinkManager=pImpl->m_pDocSh->GetDocument().GetLinkManager();
+    sfx2::LinkManager* pLinkManager=m_rDocSh.GetDocument().GetLinkManager();
     if (pLinkManager!=nullptr)
     {
         OUString aFile, aFilter;
@@ -119,13 +110,13 @@ void ScTableLink::Edit(weld::Window* pParent, const 
Link<SvBaseLink&,void>& rEnd
 void ScTableLink::Closed()
 {
     // delete link: Undo
-    ScDocument& rDoc = pImpl->m_pDocSh->GetDocument();
+    ScDocument& rDoc = m_rDocSh.GetDocument();
     bool bUndo (rDoc.IsUndoEnabled());
 
     if (bAddUndo && bUndo)
     {
-        pImpl->m_pDocSh->GetUndoManager()->AddUndoAction(
-                std::make_unique<ScUndoRemoveLink>( *pImpl->m_pDocSh, 
aFileName ) );
+        m_rDocSh.GetUndoManager()->AddUndoAction(
+                std::make_unique<ScUndoRemoveLink>( m_rDocSh, aFileName ) );
 
         bAddUndo = false;   // only once
     }
@@ -137,7 +128,7 @@ void ScTableLink::Closed()
 
 bool ScTableLink::IsUsed() const
 {
-    return pImpl->m_pDocSh->GetDocument().HasLink( aFileName, aFilterName, 
aOptions );
+    return m_rDocSh.GetDocument().HasLink( aFileName, aFilterName, aOptions );
 }
 
 bool ScTableLink::Refresh(const OUString& rNewFile, const OUString& rNewFilter,
@@ -148,14 +139,14 @@ bool ScTableLink::Refresh(const OUString& rNewFile, const 
OUString& rNewFilter,
     if (rNewFile.isEmpty() || rNewFilter.isEmpty())
         return false;
 
-    OUString aNewUrl = ScGlobal::GetAbsDocName(rNewFile, pImpl->m_pDocSh);
+    OUString aNewUrl = ScGlobal::GetAbsDocName(rNewFile, &m_rDocSh);
     bool bNewUrlName = aFileName != aNewUrl;
 
-    std::shared_ptr<const SfxFilter> pFilter = 
pImpl->m_pDocSh->GetFactory().GetFilterContainer()->GetFilter4FilterName(rNewFilter);
+    std::shared_ptr<const SfxFilter> pFilter = 
m_rDocSh.GetFactory().GetFilterContainer()->GetFilter4FilterName(rNewFilter);
     if (!pFilter)
         return false;
 
-    ScDocument& rDoc = pImpl->m_pDocSh->GetDocument();
+    ScDocument& rDoc = m_rDocSh.GetDocument();
     rDoc.SetInLinkUpdate( true );
 
     bool bUndo(rDoc.IsUndoEnabled());
@@ -194,7 +185,7 @@ bool ScTableLink::Refresh(const OUString& rNewFile, const 
OUString& rNewFilter,
 
     //  copy tables
 
-    ScDocShellModificator aModificator( *pImpl->m_pDocSh );
+    ScDocShellModificator aModificator( m_rDocSh );
 
     bool bNotFound = false;
     ScDocument& rSrcDoc = pSrcShell->GetDocument();
@@ -362,12 +353,12 @@ bool ScTableLink::Refresh(const OUString& rNewFile, const 
OUString& rNewFilter,
     //  Undo
 
     if (bAddUndo && bUndo)
-        pImpl->m_pDocSh->GetUndoManager()->AddUndoAction(
-                    std::make_unique<ScUndoRefreshLink>( *pImpl->m_pDocSh, 
std::move(pUndoDoc) ) );
+        m_rDocSh.GetUndoManager()->AddUndoAction(
+                    std::make_unique<ScUndoRefreshLink>( m_rDocSh, 
std::move(pUndoDoc) ) );
 
     //  Paint (may be several tables)
 
-    pImpl->m_pDocSh->PostPaint( 
ScRange(0,0,0,rDoc.MaxCol(),rDoc.MaxRow(),MAXTAB),
+    m_rDocSh.PostPaint( ScRange(0,0,0,rDoc.MaxCol(),rDoc.MaxRow(),MAXTAB),
                                 PaintPartFlags::Grid | PaintPartFlags::Top | 
PaintPartFlags::Left | PaintPartFlags::Extras );
     aModificator.SetDocumentModified();
 
@@ -389,7 +380,7 @@ bool ScTableLink::Refresh(const OUString& rNewFile, const 
OUString& rNewFilter,
 
 IMPL_LINK( ScTableLink, TableEndEditHdl, ::sfx2::SvBaseLink&, rLink, void )
 {
-    pImpl->m_aEndEditLink.Call( rLink );
+    m_aEndEditLink.Call( rLink );
     bInEdit = false;
 }
 
diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx
index ca2aa6afc870..00e9bf90274b 100644
--- a/sc/source/ui/view/viewfun2.cxx
+++ b/sc/source/ui/view/viewfun2.cxx
@@ -2823,7 +2823,7 @@ void ScViewFunc::ImportTables( ScDocShell* pSrcShell,
 
         if (!bWasThere)         // Insert link only once per source document
         {
-            ScTableLink* pLink = new ScTableLink( pDocSh, aFileName, 
aFilterName, aOptions, nRefresh );
+            ScTableLink* pLink = new ScTableLink( *pDocSh, aFileName, 
aFilterName, aOptions, nRefresh );
             pLink->SetInCreate( true );
             pLinkManager->InsertFileLink( *pLink, 
sfx2::SvBaseLinkObjectType::ClientFile, aFileName, &aFilterName );
             pLink->Update();

Reply via email to