summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-01-18 15:38:07 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-01-21 07:34:09 +0100
commit3b16e997f69efe2e3f6cdf64fe8fb2727b6ebaa7 (patch)
treea0d65d6b892ea39d0da8992cbab6bda579e19cdf
parentuse comphelper::containerToSequence in OGenericUnoController (diff)
downloadcore-3b16e997f69efe2e3f6cdf64fe8fb2727b6ebaa7.tar.gz
core-3b16e997f69efe2e3f6cdf64fe8fb2727b6ebaa7.zip
cleanup SwAuthEntry manual ref-counting
And remove the "handle" nonsense and just pass plain honest pointers to a real type around Change-Id: Ic49443f5f8b20890d8335088331fff81585e8981 Reviewed-on: https://gerrit.libreoffice.org/66615 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/inc/authfld.hxx46
-rw-r--r--sw/source/core/fields/authfld.cxx145
-rw-r--r--sw/source/core/tox/txmsrt.cxx4
-rw-r--r--sw/source/ui/index/swuiidxmrk.cxx9
-rw-r--r--sw/source/uibase/fldui/fldmgr.cxx8
5 files changed, 72 insertions, 140 deletions
diff --git a/sw/inc/authfld.hxx b/sw/inc/authfld.hxx
index 72837f765c65..e03cc4252f1c 100644
--- a/sw/inc/authfld.hxx
+++ b/sw/inc/authfld.hxx
@@ -22,27 +22,24 @@
#include "swdllapi.h"
#include "fldbas.hxx"
#include "toxe.hxx"
+#include <rtl/ref.hxx>
#include <sal/log.hxx>
+#include <salhelper/simplereferenceobject.hxx>
#include <memory>
#include <vector>
-class SwAuthEntry
+class SwAuthEntry : public salhelper::SimpleReferenceObject
{
OUString aAuthFields[AUTH_FIELD_END];
- sal_uInt16 nRefCount;
public:
- SwAuthEntry() : nRefCount(0){}
+ SwAuthEntry() = default;
SwAuthEntry( const SwAuthEntry& rCopy );
bool operator==(const SwAuthEntry& rComp);
inline OUString const & GetAuthorField(ToxAuthorityField ePos) const;
inline void SetAuthorField(ToxAuthorityField ePos,
const OUString& rField);
-
- void AddRef() { ++nRefCount; }
- void RemoveRef() { --nRefCount; }
- sal_uInt16 GetRefCount() { return nRefCount; }
};
struct SwTOXSortKey
@@ -55,19 +52,19 @@ struct SwTOXSortKey
};
typedef std::vector<SwTOXSortKey> SortKeyArr;
-typedef std::vector<std::unique_ptr<SwAuthEntry>> SwAuthDataArr;
+typedef std::vector<rtl::Reference<SwAuthEntry>> SwAuthDataArr;
class SW_DLLPUBLIC SwAuthorityFieldType : public SwFieldType
{
SwDoc* m_pDoc;
SwAuthDataArr m_DataArr;
- std::vector<sal_IntPtr> m_SequArr;
- std::vector<sal_IntPtr> m_SequArrRLHidden; ///< hidden redlines
+ std::vector<SwAuthEntry*> m_SequArr;
+ std::vector<SwAuthEntry*> m_SequArrRLHidden; ///< hidden redlines
SortKeyArr m_SortKeyArr;
sal_Unicode m_cPrefix;
sal_Unicode m_cSuffix;
- bool m_bIsSequence :1;
- bool m_bSortByDocument :1;
+ bool m_bIsSequence :1;
+ bool m_bSortByDocument :1;
LanguageType m_eLanguage;
OUString m_sSortAlgorithm;
@@ -83,30 +80,27 @@ public:
virtual void QueryValue( css::uno::Any& rVal, sal_uInt16 nWhichId ) const override;
virtual void PutValue( const css::uno::Any& rVal, sal_uInt16 nWhichId ) override;
- void SetDoc(SwDoc* pNewDoc) { m_pDoc = pNewDoc; }
+ void SetDoc(SwDoc* pNewDoc) { m_pDoc = pNewDoc; }
SwDoc* GetDoc(){ return m_pDoc; }
- void RemoveField(sal_IntPtr nHandle);
- sal_IntPtr AddField(const OUString& rFieldContents);
- void AddField(sal_IntPtr nHandle);
+ void RemoveField(const SwAuthEntry* nHandle);
+ SwAuthEntry* AddField(const OUString& rFieldContents);
void DelSequenceArray()
{
m_SequArr.clear();
m_SequArrRLHidden.clear();
}
- const SwAuthEntry* GetEntryByHandle(sal_IntPtr nHandle) const;
-
void GetAllEntryIdentifiers( std::vector<OUString>& rToFill ) const;
- const SwAuthEntry* GetEntryByIdentifier(const OUString& rIdentifier) const;
+ SwAuthEntry* GetEntryByIdentifier(const OUString& rIdentifier) const;
bool ChangeEntryContent(const SwAuthEntry* pNewEntry);
// import interface
sal_uInt16 AppendField(const SwAuthEntry& rInsert);
- sal_IntPtr GetHandle(sal_uInt16 nPos);
+ SwAuthEntry* GetFieldByPos(sal_uInt16 nPos);
- sal_uInt16 GetSequencePos(sal_IntPtr nHandle, SwRootFrame const* pLayout);
+ sal_uInt16 GetSequencePos(const SwAuthEntry* pAuthEntry, SwRootFrame const* pLayout);
- bool IsSequence() const {return m_bIsSequence;}
+ bool IsSequence() const {return m_bIsSequence;}
void SetSequence(bool bSet)
{
DelSequenceArray();
@@ -121,7 +115,7 @@ public:
sal_Unicode GetPrefix() const { return m_cPrefix;}
sal_Unicode GetSuffix() const { return m_cSuffix;}
- bool IsSortByDocument() const {return m_bSortByDocument;}
+ bool IsSortByDocument() const {return m_bSortByDocument;}
void SetSortByDocument(bool bSet)
{
DelSequenceArray();
@@ -154,7 +148,7 @@ public:
*/
class SwAuthorityField : public SwField
{
- sal_IntPtr m_nHandle;
+ rtl::Reference<SwAuthEntry> m_xAuthEntry;
mutable sal_IntPtr m_nTempSequencePos;
mutable sal_IntPtr m_nTempSequencePosRLHidden; ///< hidden redlines
@@ -169,7 +163,7 @@ public:
SW_DLLPUBLIC OUString ExpandCitation(ToxAuthorityField eField, SwRootFrame const* pLayout) const;
SwAuthorityField(SwAuthorityFieldType* pType, const OUString& rFieldContents);
- SwAuthorityField(SwAuthorityFieldType* pType, sal_IntPtr nHandle);
+ SwAuthorityField(SwAuthorityFieldType* pType, SwAuthEntry* pAuthEntry);
virtual ~SwAuthorityField() override;
OUString GetFieldText(ToxAuthorityField eField) const;
@@ -180,7 +174,7 @@ public:
virtual bool QueryValue( css::uno::Any& rVal, sal_uInt16 nWhichId ) const override;
virtual bool PutValue( const css::uno::Any& rVal, sal_uInt16 nWhichId ) override;
- sal_IntPtr GetHandle() const { return m_nHandle; }
+ SwAuthEntry* GetAuthEntry() const { return m_xAuthEntry.get(); }
virtual OUString GetDescription() const override;
};
diff --git a/sw/source/core/fields/authfld.cxx b/sw/source/core/fields/authfld.cxx
index 1f4a64b7ac2a..705ca88136a6 100644
--- a/sw/source/core/fields/authfld.cxx
+++ b/sw/source/core/fields/authfld.cxx
@@ -51,7 +51,6 @@ using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::lang;
SwAuthEntry::SwAuthEntry(const SwAuthEntry& rCopy)
- : nRefCount(0)
{
for(int i = 0; i < AUTH_FIELD_END; ++i)
aAuthFields[i] = rCopy.aAuthFields[i];
@@ -85,31 +84,24 @@ SwFieldType* SwAuthorityFieldType::Copy() const
return new SwAuthorityFieldType(m_pDoc);
}
-void SwAuthorityFieldType::RemoveField(sal_IntPtr nHandle)
+void SwAuthorityFieldType::RemoveField(const SwAuthEntry* nHandle)
{
for(SwAuthDataArr::size_type j = 0; j < m_DataArr.size(); ++j)
{
- SwAuthEntry* pTemp = m_DataArr[j].get();
- sal_IntPtr nRet = reinterpret_cast<sal_IntPtr>(static_cast<void*>(pTemp));
- if(nRet == nHandle)
+ if(m_DataArr[j].get() == nHandle)
{
- pTemp->RemoveRef();
- if(!pTemp->GetRefCount())
- {
- m_DataArr.erase(m_DataArr.begin() + j);
- //re-generate positions of the fields
- DelSequenceArray();
- }
+ m_DataArr.erase(m_DataArr.begin() + j);
+ //re-generate positions of the fields
+ DelSequenceArray();
return;
}
}
OSL_FAIL("Field unknown" );
}
-sal_IntPtr SwAuthorityFieldType::AddField(const OUString& rFieldContents)
+SwAuthEntry* SwAuthorityFieldType::AddField(const OUString& rFieldContents)
{
- sal_IntPtr nRet = 0;
- std::unique_ptr<SwAuthEntry> pEntry(new SwAuthEntry);
+ rtl::Reference<SwAuthEntry> pEntry(new SwAuthEntry);
for( sal_Int32 i = 0; i < AUTH_FIELD_END; ++i )
pEntry->SetAuthorField( static_cast<ToxAuthorityField>(i),
rFieldContents.getToken( i, TOX_STYLE_DELIMITER ));
@@ -118,50 +110,15 @@ sal_IntPtr SwAuthorityFieldType::AddField(const OUString& rFieldContents)
{
if (*rpTemp == *pEntry)
{
- nRet = reinterpret_cast<sal_IntPtr>(static_cast<void*>(rpTemp.get()));
- rpTemp->AddRef();
- return nRet;
+ return rpTemp.get();
}
}
//if it is a new Entry - insert
- nRet = reinterpret_cast<sal_IntPtr>(static_cast<void*>(pEntry.get()));
- // FIXME: what is this ref-counting madness on a object owned by the container?
- pEntry->AddRef();
m_DataArr.push_back(std::move(pEntry));
//re-generate positions of the fields
DelSequenceArray();
- return nRet;
-}
-
-void SwAuthorityFieldType::AddField(sal_IntPtr nHandle)
-{
- for (auto &rpTemp : m_DataArr)
- {
- sal_IntPtr nTmp = reinterpret_cast<sal_IntPtr>(static_cast<void*>(rpTemp.get()));
- if( nTmp == nHandle )
- {
- rpTemp->AddRef();
- //re-generate positions of the fields
- DelSequenceArray();
- return;
- }
- }
- OSL_FAIL("SwAuthorityFieldType::AddField(sal_IntPtr) failed");
-}
-
-const SwAuthEntry* SwAuthorityFieldType::GetEntryByHandle(sal_IntPtr nHandle) const
-{
- for (auto &rpTemp : m_DataArr)
- {
- sal_IntPtr nTmp = reinterpret_cast<sal_IntPtr>(static_cast<void const *>(rpTemp.get()));
- if( nTmp == nHandle )
- {
- return rpTemp.get();
- }
- }
- OSL_FAIL( "invalid Handle" );
- return nullptr;
+ return m_DataArr.back().get();
}
void SwAuthorityFieldType::GetAllEntryIdentifiers(
@@ -173,7 +130,7 @@ void SwAuthorityFieldType::GetAllEntryIdentifiers(
}
}
-const SwAuthEntry* SwAuthorityFieldType::GetEntryByIdentifier(
+SwAuthEntry* SwAuthorityFieldType::GetEntryByIdentifier(
const OUString& rIdentifier)const
{
for (const auto &rpTemp : m_DataArr)
@@ -209,30 +166,21 @@ sal_uInt16 SwAuthorityFieldType::AppendField( const SwAuthEntry& rInsert )
{
for( SwAuthDataArr::size_type nRet = 0; nRet < m_DataArr.size(); ++nRet )
{
- SwAuthEntry* pTemp = m_DataArr[ nRet ].get();
- if( *pTemp == rInsert )
- {
- //ref count unchanged
+ if( *m_DataArr[ nRet ] == rInsert )
return nRet;
- }
}
//if it is a new Entry - insert
- m_DataArr.push_back(o3tl::make_unique<SwAuthEntry>(rInsert));
+ m_DataArr.push_back(new SwAuthEntry(rInsert));
return m_DataArr.size()-1;
}
-sal_IntPtr SwAuthorityFieldType::GetHandle(sal_uInt16 nPos)
+SwAuthEntry* SwAuthorityFieldType::GetFieldByPos(sal_uInt16 nPos)
{
- if( nPos < m_DataArr.size() )
- {
- SwAuthEntry* pTemp = m_DataArr[nPos].get();
- return reinterpret_cast<sal_IntPtr>(static_cast<void*>(pTemp));
- }
- return 0;
+ return m_DataArr[nPos].get();
}
-sal_uInt16 SwAuthorityFieldType::GetSequencePos(sal_IntPtr nHandle,
+sal_uInt16 SwAuthorityFieldType::GetSequencePos(const SwAuthEntry* pAuthEntry,
SwRootFrame const*const pLayout)
{
//find the field in a sorted array of handles,
@@ -258,7 +206,7 @@ sal_uInt16 SwAuthorityFieldType::GetSequencePos(sal_IntPtr nHandle,
if(!pTextField || !pTextField->GetpTextNode())
{
#if OSL_DEBUG_LEVEL > 0
- if(nHandle == static_cast<SwAuthorityField*>(pFormatField->GetField())->GetHandle())
+ if(pAuthEntry == static_cast<SwAuthorityField*>(pFormatField->GetField())->GetAuthEntry())
bCurrentFieldWithoutTextNode = true;
#endif
continue;
@@ -326,20 +274,20 @@ sal_uInt16 SwAuthorityFieldType::GetSequencePos(sal_IntPtr nHandle,
{
SwFormatField& rFormatField = static_cast<SwTOXAuthority&>(*pBase).GetFieldFormat();
SwAuthorityField* pAField = static_cast<SwAuthorityField*>(rFormatField.GetField());
- m_SequArr.push_back(pAField->GetHandle());
+ m_SequArr.push_back(pAField->GetAuthEntry());
}
for (auto & pBase : aSortArrRLHidden)
{
SwFormatField& rFormatField = static_cast<SwTOXAuthority&>(*pBase).GetFieldFormat();
SwAuthorityField* pAField = static_cast<SwAuthorityField*>(rFormatField.GetField());
- m_SequArrRLHidden.push_back(pAField->GetHandle());
+ m_SequArrRLHidden.push_back(pAField->GetAuthEntry());
}
}
//find nHandle
auto const& rSequArr(pLayout && pLayout->IsHideRedlines() ? m_SequArrRLHidden : m_SequArr);
for (std::vector<sal_IntPtr>::size_type i = 0; i < rSequArr.size(); ++i)
{
- if (rSequArr[i] == nHandle)
+ if (rSequArr[i] == pAuthEntry)
{
return i + 1;
}
@@ -516,22 +464,21 @@ SwAuthorityField::SwAuthorityField( SwAuthorityFieldType* pInitType,
, m_nTempSequencePos( -1 )
, m_nTempSequencePosRLHidden( -1 )
{
- m_nHandle = pInitType->AddField( rFieldContents );
+ m_xAuthEntry = pInitType->AddField( rFieldContents );
}
SwAuthorityField::SwAuthorityField( SwAuthorityFieldType* pInitType,
- sal_IntPtr nSetHandle )
+ SwAuthEntry* pAuthEntry )
: SwField( pInitType )
- , m_nHandle( nSetHandle )
+ , m_xAuthEntry( pAuthEntry )
, m_nTempSequencePos( -1 )
, m_nTempSequencePosRLHidden( -1 )
{
- pInitType->AddField( m_nHandle );
}
SwAuthorityField::~SwAuthorityField()
{
- static_cast<SwAuthorityFieldType* >(GetTyp())->RemoveField(m_nHandle);
+ static_cast<SwAuthorityFieldType* >(GetTyp())->RemoveField(m_xAuthEntry.get());
}
OUString SwAuthorityField::ExpandImpl(SwRootFrame const*const pLayout) const
@@ -552,16 +499,15 @@ OUString SwAuthorityField::ConditionalExpandAuthIdentifier(
sal_IntPtr & rnTempSequencePos(pLayout && pLayout->IsHideRedlines()
? m_nTempSequencePosRLHidden : m_nTempSequencePos);
if(!pAuthType->GetDoc()->getIDocumentFieldsAccess().IsExpFieldsLocked())
- rnTempSequencePos = pAuthType->GetSequencePos(m_nHandle, pLayout);
+ rnTempSequencePos = pAuthType->GetSequencePos(m_xAuthEntry.get(), pLayout);
if (0 <= rnTempSequencePos)
sRet += OUString::number(rnTempSequencePos);
}
else
{
- const SwAuthEntry* pEntry = pAuthType->GetEntryByHandle(m_nHandle);
//TODO: Expand to: identifier, number sequence, ...
- if(pEntry)
- sRet += pEntry->GetAuthorField(AUTH_FIELD_IDENTIFIER);
+ if(m_xAuthEntry)
+ sRet += m_xAuthEntry->GetAuthorField(AUTH_FIELD_IDENTIFIER);
}
if(pAuthType->GetSuffix())
sRet += OUStringLiteral1(pAuthType->GetSuffix());
@@ -579,16 +525,15 @@ OUString SwAuthorityField::ExpandCitation(ToxAuthorityField eField,
sal_IntPtr & rnTempSequencePos(pLayout && pLayout->IsHideRedlines()
? m_nTempSequencePosRLHidden : m_nTempSequencePos);
if(!pAuthType->GetDoc()->getIDocumentFieldsAccess().IsExpFieldsLocked())
- rnTempSequencePos = pAuthType->GetSequencePos(m_nHandle, pLayout);
+ rnTempSequencePos = pAuthType->GetSequencePos(m_xAuthEntry.get(), pLayout);
if (0 <= rnTempSequencePos)
sRet += OUString::number(rnTempSequencePos);
}
else
{
- const SwAuthEntry* pEntry = pAuthType->GetEntryByHandle(m_nHandle);
//TODO: Expand to: identifier, number sequence, ...
- if(pEntry)
- sRet += pEntry->GetAuthorField(eField);
+ if(m_xAuthEntry)
+ sRet += m_xAuthEntry->GetAuthorField(eField);
}
return sRet;
}
@@ -596,21 +541,19 @@ OUString SwAuthorityField::ExpandCitation(ToxAuthorityField eField,
std::unique_ptr<SwField> SwAuthorityField::Copy() const
{
SwAuthorityFieldType* pAuthType = static_cast<SwAuthorityFieldType*>(GetTyp());
- return o3tl::make_unique<SwAuthorityField>(pAuthType, m_nHandle);
+ return o3tl::make_unique<SwAuthorityField>(pAuthType, m_xAuthEntry.get());
}
OUString SwAuthorityField::GetFieldText(ToxAuthorityField eField) const
{
- SwAuthorityFieldType* pAuthType = static_cast<SwAuthorityFieldType*>(GetTyp());
- const SwAuthEntry* pEntry = pAuthType->GetEntryByHandle( m_nHandle );
- return pEntry->GetAuthorField( eField );
+ return m_xAuthEntry->GetAuthorField( eField );
}
-void SwAuthorityField::SetPar1(const OUString& rStr)
+void SwAuthorityField::SetPar1(const OUString& rStr)
{
SwAuthorityFieldType* pInitType = static_cast<SwAuthorityFieldType* >(GetTyp());
- pInitType->RemoveField(m_nHandle);
- m_nHandle = pInitType->AddField(rStr);
+ pInitType->RemoveField(m_xAuthEntry.get());
+ m_xAuthEntry = pInitType->AddField(rStr);
}
OUString SwAuthorityField::GetDescription() const
@@ -657,15 +600,14 @@ bool SwAuthorityField::QueryValue( Any& rAny, sal_uInt16 /*nWhichId*/ ) const
{
if(!GetTyp())
return false;
- const SwAuthEntry* pAuthEntry = static_cast<SwAuthorityFieldType*>(GetTyp())->GetEntryByHandle(m_nHandle);
- if(!pAuthEntry)
+ if(!m_xAuthEntry)
return false;
Sequence <PropertyValue> aRet(AUTH_FIELD_END);
PropertyValue* pValues = aRet.getArray();
for(int i = 0; i < AUTH_FIELD_END; ++i)
{
pValues[i].Name = OUString::createFromAscii(aFieldNames[i]);
- const OUString& sField = pAuthEntry->GetAuthorField(static_cast<ToxAuthorityField>(i));
+ const OUString& sField = m_xAuthEntry->GetAuthorField(static_cast<ToxAuthorityField>(i));
if(i == AUTH_FIELD_AUTHORITY_TYPE)
pValues[i].Value <<= sal_Int16(sField.toInt32());
else
@@ -686,7 +628,7 @@ static sal_Int32 lcl_Find(const OUString& rFieldName)
bool SwAuthorityField::PutValue( const Any& rAny, sal_uInt16 /*nWhichId*/ )
{
- if(!GetTyp() || !static_cast<SwAuthorityFieldType*>(GetTyp())->GetEntryByHandle(m_nHandle))
+ if(!GetTyp() || !m_xAuthEntry)
return false;
Sequence <PropertyValue> aParam;
@@ -715,8 +657,8 @@ bool SwAuthorityField::PutValue( const Any& rAny, sal_uInt16 /*nWhichId*/ )
}
}
- static_cast<SwAuthorityFieldType*>(GetTyp())->RemoveField(m_nHandle);
- m_nHandle = static_cast<SwAuthorityFieldType*>(GetTyp())->AddField(sToSet);
+ static_cast<SwAuthorityFieldType*>(GetTyp())->RemoveField(m_xAuthEntry.get());
+ m_xAuthEntry = static_cast<SwAuthorityFieldType*>(GetTyp())->AddField(sToSet);
/* FIXME: it is weird that we always return false here */
return false;
@@ -728,12 +670,9 @@ SwFieldType* SwAuthorityField::ChgTyp( SwFieldType* pFieldTyp )
* pDstTyp = static_cast<SwAuthorityFieldType*>(pFieldTyp);
if( pSrcTyp != pDstTyp )
{
-
- const SwAuthEntry* pEntry = pSrcTyp->GetEntryByHandle( m_nHandle );
- sal_uInt16 nHdlPos = pDstTyp->AppendField( *pEntry );
- pSrcTyp->RemoveField( m_nHandle );
- m_nHandle = pDstTyp->GetHandle( nHdlPos );
- pDstTyp->AddField( m_nHandle );
+ const SwAuthEntry* pSrcEntry = m_xAuthEntry.get();
+ pDstTyp->AppendField( *pSrcEntry );
+ pSrcTyp->RemoveField( pSrcEntry );
SwField::ChgTyp( pFieldTyp );
}
return pSrcTyp;
diff --git a/sw/source/core/tox/txmsrt.cxx b/sw/source/core/tox/txmsrt.cxx
index 61ec0aad10f0..78391110d16d 100644
--- a/sw/source/core/tox/txmsrt.cxx
+++ b/sw/source/core/tox/txmsrt.cxx
@@ -815,8 +815,8 @@ void SwTOXAuthority::FillText( SwTextNode& rNd,
bool SwTOXAuthority::equivalent(const SwTOXSortTabBase& rCmp)
{
return nType == rCmp.nType &&
- static_cast<SwAuthorityField*>(m_rField.GetField())->GetHandle() ==
- static_cast<SwAuthorityField*>(static_cast<const SwTOXAuthority&>(rCmp).m_rField.GetField())->GetHandle();
+ static_cast<SwAuthorityField*>(m_rField.GetField())->GetAuthEntry() ==
+ static_cast<SwAuthorityField*>(static_cast<const SwTOXAuthority&>(rCmp).m_rField.GetField())->GetAuthEntry();
}
bool SwTOXAuthority::sort_lt(const SwTOXSortTabBase& rBase)
diff --git a/sw/source/ui/index/swuiidxmrk.cxx b/sw/source/ui/index/swuiidxmrk.cxx
index dd0676bc0818..5929635026fb 100644
--- a/sw/source/ui/index/swuiidxmrk.cxx
+++ b/sw/source/ui/index/swuiidxmrk.cxx
@@ -1225,10 +1225,10 @@ IMPL_LINK_NOARG(SwAuthorMarkPane, InsertHdl, weld::Button&, void)
{
if(bDifferent)
{
- SwAuthEntry aNewData;
+ rtl::Reference<SwAuthEntry> xNewData(new SwAuthEntry);
for(int i = 0; i < AUTH_FIELD_END; i++)
- aNewData.SetAuthorField(static_cast<ToxAuthorityField>(i), m_sFields[i]);
- pSh->ChangeAuthorityData(&aNewData);
+ xNewData->SetAuthorField(static_cast<ToxAuthorityField>(i), m_sFields[i]);
+ pSh->ChangeAuthorityData(xNewData.get());
}
SwInsertField_Data aData(TYP_AUTHORITY, 0, sFields.makeStringAndClear(), OUString(), 0 );
aMgr.InsertField( aData );
@@ -1417,8 +1417,7 @@ void SwAuthorMarkPane::InitControls()
if(bNewEntry || !pField || pField->GetTyp()->Which() != SwFieldIds::TableOfAuthorities)
return;
- const SwAuthEntry* pEntry = static_cast<SwAuthorityFieldType*>(pField->GetTyp())->
- GetEntryByHandle(static_cast<SwAuthorityField*>(pField)->GetHandle());
+ const SwAuthEntry* pEntry = static_cast<SwAuthorityField*>(pField)->GetAuthEntry();
OSL_ENSURE(pEntry, "No authority entry found");
if(!pEntry)
diff --git a/sw/source/uibase/fldui/fldmgr.cxx b/sw/source/uibase/fldui/fldmgr.cxx
index b25e57b13f39..e54397e9c3f5 100644
--- a/sw/source/uibase/fldui/fldmgr.cxx
+++ b/sw/source/uibase/fldui/fldmgr.cxx
@@ -1653,17 +1653,17 @@ void SwFieldMgr::UpdateCurField(sal_uInt32 nFormat,
//#i99069# changes to a bibliography field should change the field type
SwAuthorityField* pAuthorityField = static_cast<SwAuthorityField*>(pTmpField.get());
SwAuthorityFieldType* pAuthorityType = static_cast<SwAuthorityFieldType*>(pType);
- SwAuthEntry aTempEntry;
+ rtl::Reference<SwAuthEntry> xTempEntry(new SwAuthEntry);
for( sal_uInt16 i = 0; i < AUTH_FIELD_END; ++i )
- aTempEntry.SetAuthorField( static_cast<ToxAuthorityField>(i),
+ xTempEntry->SetAuthorField( static_cast<ToxAuthorityField>(i),
rPar1.getToken( i, TOX_STYLE_DELIMITER ));
- if( pAuthorityType->ChangeEntryContent( &aTempEntry ) )
+ if( pAuthorityType->ChangeEntryContent( xTempEntry.get() ) )
{
pType->UpdateFields();
pSh->SetModified();
}
- if( aTempEntry.GetAuthorField( AUTH_FIELD_IDENTIFIER ) ==
+ if( xTempEntry->GetAuthorField( AUTH_FIELD_IDENTIFIER ) ==
pAuthorityField->GetFieldText( AUTH_FIELD_IDENTIFIER ) )
bSetPar1 = false; //otherwise it's a new or changed entry, the field needs to be updated
bSetPar2 = false;