[Libreoffice-commits] core.git: Branch 'libreoffice-7-0' - sw/inc sw/source
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Mon Nov 2 09:17:24 UTC 2020
sw/inc/tox.hxx | 4 +++-
sw/source/core/doc/docnew.cxx | 16 ++++++++--------
sw/source/core/doc/doctxm.cxx | 2 +-
sw/source/core/inc/rolbck.hxx | 1 +
sw/source/core/tox/tox.cxx | 8 +++++---
sw/source/core/txtnode/atrtox.cxx | 2 +-
sw/source/core/txtnode/thints.cxx | 17 ++++++++++++++++-
sw/source/core/undo/rolbck.cxx | 27 +++++++++++++++++----------
sw/source/core/unocore/unoidx.cxx | 4 ++--
sw/source/uibase/index/toxmgr.cxx | 2 +-
10 files changed, 55 insertions(+), 28 deletions(-)
New commits:
commit 3faa7a5efad3c0532446c2e576464570d7110179
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed Oct 28 10:22:58 2020 +0000
Commit: Michael Stahl <michael.stahl at cib.de>
CommitDate: Mon Nov 2 10:16:49 2020 +0100
tdf#98868 re-register cloned TOXMark if the dest doc is different
if the SwTOXType is from a different document that the target, re-register the
TOXMark against a matching SwTOXType from the target document instead
includes #1
Related: tdf#98868 split out reusable hunk as function
Change-Id: I7e410ba55f94e87c007acbe1887a022948ef354f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104925
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
(cherry picked from commit 496771a6466d6a48f0bcbd8976df24308e052f38)
includes #1
Related: tdf#98868 add SwDoc& member to SwTOXType
Change-Id: Ic1dc600e75cb4f6a7a0aa86714a87e3ec5658cb0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104926
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
(cherry picked from commit 60b1f8f6ef715ee4cb282215375188c1511ad6d6)
Change-Id: Ib9e5a2c437a7510712a10f41c551f0813a8323db
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104910
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl at cib.de>
(cherry picked from commit fd9c47eda58dda5e61850e9b9f6de0f38d221b4a)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105072
diff --git a/sw/inc/tox.hxx b/sw/inc/tox.hxx
index 7787d432d01b..24bee485f4b0 100644
--- a/sw/inc/tox.hxx
+++ b/sw/inc/tox.hxx
@@ -148,15 +148,17 @@ public:
class SwTOXType final: public sw::BroadcastingModify
{
public:
- SwTOXType(TOXTypes eTyp, const OUString& aName);
+ SwTOXType(SwDoc& rDoc, TOXTypes eTyp, const OUString& rName);
// @@@ public copy ctor, but no copy assignment?
SwTOXType(const SwTOXType& rCopy);
inline const OUString& GetTypeName() const;
inline TOXTypes GetType() const;
+ SwDoc& GetDoc() const { return m_rDoc; }
private:
+ SwDoc& m_rDoc;
OUString m_aName;
TOXTypes m_eType;
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx
index e4f38b44bbb0..358887b21585 100644
--- a/sw/source/core/doc/docnew.cxx
+++ b/sw/source/core/doc/docnew.cxx
@@ -797,21 +797,21 @@ SwDoc::GetXmlIdRegistry()
void SwDoc::InitTOXTypes()
{
ShellResource* pShellRes = SwViewShell::GetShellRes();
- SwTOXType * pNew = new SwTOXType(TOX_CONTENT, pShellRes->aTOXContentName );
+ SwTOXType* pNew = new SwTOXType(*this, TOX_CONTENT, pShellRes->aTOXContentName);
mpTOXTypes->emplace_back( pNew );
- pNew = new SwTOXType(TOX_INDEX, pShellRes->aTOXIndexName );
+ pNew = new SwTOXType(*this, TOX_INDEX, pShellRes->aTOXIndexName);
mpTOXTypes->emplace_back( pNew );
- pNew = new SwTOXType(TOX_USER, pShellRes->aTOXUserName );
+ pNew = new SwTOXType(*this, TOX_USER, pShellRes->aTOXUserName);
mpTOXTypes->emplace_back( pNew );
- pNew = new SwTOXType(TOX_ILLUSTRATIONS, pShellRes->aTOXIllustrationsName );
+ pNew = new SwTOXType(*this, TOX_ILLUSTRATIONS, pShellRes->aTOXIllustrationsName);
mpTOXTypes->emplace_back( pNew );
- pNew = new SwTOXType(TOX_OBJECTS, pShellRes->aTOXObjectsName );
+ pNew = new SwTOXType(*this, TOX_OBJECTS, pShellRes->aTOXObjectsName);
mpTOXTypes->emplace_back( pNew );
- pNew = new SwTOXType(TOX_TABLES, pShellRes->aTOXTablesName );
+ pNew = new SwTOXType(*this, TOX_TABLES, pShellRes->aTOXTablesName);
mpTOXTypes->emplace_back( pNew );
- pNew = new SwTOXType(TOX_AUTHORITIES, pShellRes->aTOXAuthoritiesName );
+ pNew = new SwTOXType(*this, TOX_AUTHORITIES, pShellRes->aTOXAuthoritiesName);
mpTOXTypes->emplace_back( pNew );
- pNew = new SwTOXType(TOX_CITATION, pShellRes->aTOXCitationName );
+ pNew = new SwTOXType(*this, TOX_CITATION, pShellRes->aTOXCitationName);
mpTOXTypes->emplace_back( pNew );
}
diff --git a/sw/source/core/doc/doctxm.cxx b/sw/source/core/doc/doctxm.cxx
index 83a38236c04d..7ca7103ffbf9 100644
--- a/sw/source/core/doc/doctxm.cxx
+++ b/sw/source/core/doc/doctxm.cxx
@@ -628,7 +628,7 @@ const SwTOXType* SwDoc::GetTOXType( TOXTypes eTyp, sal_uInt16 nId ) const
const SwTOXType* SwDoc::InsertTOXType( const SwTOXType& rTyp )
{
- SwTOXType * pNew = new SwTOXType( rTyp );
+ SwTOXType * pNew = new SwTOXType(rTyp);
mpTOXTypes->emplace_back( pNew );
return pNew;
}
diff --git a/sw/source/core/inc/rolbck.hxx b/sw/source/core/inc/rolbck.hxx
index f473ad63b753..d6cec5075284 100644
--- a/sw/source/core/inc/rolbck.hxx
+++ b/sw/source/core/inc/rolbck.hxx
@@ -174,6 +174,7 @@ public:
virtual void SetInDoc( SwDoc* pDoc, bool bTmpSet ) override;
bool IsEqual( const SwTOXMark& rCmp ) const;
+ static SwTOXType* GetSwTOXType(SwDoc& rDoc, TOXTypes eTOXTypes, const OUString& rTOXName);
};
class SwHistoryResetText : public SwHistoryHint
diff --git a/sw/source/core/tox/tox.cxx b/sw/source/core/tox/tox.cxx
index 10d42cc89a60..92b3bddccd32 100644
--- a/sw/source/core/tox/tox.cxx
+++ b/sw/source/core/tox/tox.cxx
@@ -194,13 +194,15 @@ void SwTOXMark::InsertTOXMarks( SwTOXMarks& aMarks, const SwTOXType& rType )
}
// Manage types of TOX
-SwTOXType::SwTOXType(TOXTypes eTyp, const OUString& rName)
- : m_aName(rName)
+SwTOXType::SwTOXType(SwDoc& rDoc, TOXTypes eTyp, const OUString& rName)
+ : m_rDoc(rDoc)
+ , m_aName(rName)
, m_eType(eTyp)
{ }
SwTOXType::SwTOXType(const SwTOXType& rCopy)
- : m_aName(rCopy.m_aName)
+ : m_rDoc(rCopy.m_rDoc)
+ , m_aName(rCopy.m_aName)
, m_eType(rCopy.m_eType)
{
if (auto pRegister = const_cast<SwTOXType&>(rCopy).GetRegisteredIn())
diff --git a/sw/source/core/txtnode/atrtox.cxx b/sw/source/core/txtnode/atrtox.cxx
index 613956be9979..de3a782d2cf9 100644
--- a/sw/source/core/txtnode/atrtox.cxx
+++ b/sw/source/core/txtnode/atrtox.cxx
@@ -79,7 +79,7 @@ void SwTextTOXMark::CopyTOXMark( SwDoc* pDoc )
// if the requested tox type does not exist, create it
if(!pType)
{
- pDoc->InsertTOXType( SwTOXType( eType, rNm ) );
+ pDoc->InsertTOXType( SwTOXType( *pDoc, eType, rNm ) );
pType = pDoc->GetTOXType(eType, 0);
}
diff --git a/sw/source/core/txtnode/thints.cxx b/sw/source/core/txtnode/thints.cxx
index 711e29dda0d9..f31e39713ece 100644
--- a/sw/source/core/txtnode/thints.cxx
+++ b/sw/source/core/txtnode/thints.cxx
@@ -1113,8 +1113,23 @@ SwTextAttr* MakeTextAttr(
: new SwTextRefMark( static_cast<SwFormatRefMark&>(rNew), nStt, &nEnd );
break;
case RES_TXTATR_TOXMARK:
- pNew = new SwTextTOXMark( static_cast<SwTOXMark&>(rNew), nStt, &nEnd );
+ {
+ SwTOXMark& rMark = static_cast<SwTOXMark&>(rNew);
+
+ // tdf#98868 if the SwTOXType is from a different document that the
+ // target, re-register the TOXMark against a matching SwTOXType from
+ // the target document instead
+ const SwTOXType* pTOXType = rMark.GetTOXType();
+ if (pTOXType && &pTOXType->GetDoc() != &rDoc)
+ {
+ SwTOXType* pToxType = SwHistorySetTOXMark::GetSwTOXType(rDoc, pTOXType->GetType(),
+ pTOXType->GetTypeName());
+ rMark.RegisterToTOXType(*pToxType);
+ }
+
+ pNew = new SwTextTOXMark(rMark, nStt, &nEnd);
break;
+ }
case RES_TXTATR_CJK_RUBY:
pNew = new SwTextRuby( static_cast<SwFormatRuby&>(rNew), nStt, nEnd );
break;
diff --git a/sw/source/core/undo/rolbck.cxx b/sw/source/core/undo/rolbck.cxx
index ceac742f9bbc..206ad93434a2 100644
--- a/sw/source/core/undo/rolbck.cxx
+++ b/sw/source/core/undo/rolbck.cxx
@@ -348,20 +348,15 @@ SwHistorySetTOXMark::SwHistorySetTOXMark( const SwTextTOXMark* pTextHt, sal_uLon
m_TOXMark.EndListeningAll();
}
-void SwHistorySetTOXMark::SetInDoc( SwDoc* pDoc, bool )
+SwTOXType* SwHistorySetTOXMark::GetSwTOXType(SwDoc& rDoc, TOXTypes eTOXTypes, const OUString& rTOXName)
{
- SwTextNode * pTextNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTextNode();
- OSL_ENSURE( pTextNd, "SwHistorySetTOXMark: no TextNode" );
- if ( !pTextNd )
- return;
-
// search for respective TOX type
- const sal_uInt16 nCnt = pDoc->GetTOXTypeCount( m_eTOXTypes );
+ const sal_uInt16 nCnt = rDoc.GetTOXTypeCount(eTOXTypes);
SwTOXType* pToxType = nullptr;
for ( sal_uInt16 n = 0; n < nCnt; ++n )
{
- pToxType = const_cast<SwTOXType*>(pDoc->GetTOXType( m_eTOXTypes, n ));
- if ( pToxType->GetTypeName() == m_TOXName )
+ pToxType = const_cast<SwTOXType*>(rDoc.GetTOXType(eTOXTypes, n));
+ if (pToxType->GetTypeName() == rTOXName)
break;
pToxType = nullptr;
}
@@ -369,9 +364,21 @@ void SwHistorySetTOXMark::SetInDoc( SwDoc* pDoc, bool )
if ( !pToxType ) // TOX type not found, create new
{
pToxType = const_cast<SwTOXType*>(
- pDoc->InsertTOXType( SwTOXType( m_eTOXTypes, m_TOXName )));
+ rDoc.InsertTOXType(SwTOXType(rDoc, eTOXTypes, rTOXName)));
}
+ return pToxType;
+}
+
+void SwHistorySetTOXMark::SetInDoc( SwDoc* pDoc, bool )
+{
+ SwTextNode * pTextNd = pDoc->GetNodes()[ m_nNodeIndex ]->GetTextNode();
+ OSL_ENSURE( pTextNd, "SwHistorySetTOXMark: no TextNode" );
+ if ( !pTextNd )
+ return;
+
+ SwTOXType* pToxType = GetSwTOXType(*pDoc, m_eTOXTypes, m_TOXName);
+
SwTOXMark aNew( m_TOXMark );
aNew.RegisterToTOXType( *pToxType );
diff --git a/sw/source/core/unocore/unoidx.cxx b/sw/source/core/unocore/unoidx.cxx
index 82e42e167ce9..873058e98af7 100644
--- a/sw/source/core/unocore/unoidx.cxx
+++ b/sw/source/core/unocore/unoidx.cxx
@@ -112,7 +112,7 @@ lcl_ReAssignTOXType(SwDoc* pDoc, SwTOXBase& rTOXBase, const OUString& rNewName)
}
if(!pNewType)
{
- SwTOXType aNewType(TOX_USER, rNewName);
+ SwTOXType aNewType(*pDoc, TOX_USER, rNewName);
pNewType = pDoc->InsertTOXType( aNewType );
}
@@ -1813,7 +1813,7 @@ SwXDocumentIndexMark::attach(
}
if (!pTOXType)
{
- SwTOXType aUserType(TOX_USER, m_pImpl->m_sUserIndexName);
+ SwTOXType aUserType(*pDoc, TOX_USER, m_pImpl->m_sUserIndexName);
pTOXType = pDoc->InsertTOXType(aUserType);
}
}
diff --git a/sw/source/uibase/index/toxmgr.cxx b/sw/source/uibase/index/toxmgr.cxx
index 53223fc91ff1..4e7e65f9c4d0 100644
--- a/sw/source/uibase/index/toxmgr.cxx
+++ b/sw/source/uibase/index/toxmgr.cxx
@@ -227,7 +227,7 @@ sal_uInt16 SwTOXMgr::GetUserTypeID(const OUString& rStr)
if(pTmp && pTmp->GetTypeName() == rStr)
return i;
}
- SwTOXType aUserType(TOX_USER, rStr);
+ SwTOXType aUserType(*pSh->GetDoc(), TOX_USER, rStr);
pSh->InsertTOXType(aUserType);
return nSize;
}
More information about the Libreoffice-commits
mailing list