sw/source/core/fields/reffld.cxx | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-)
New commits: commit 4925acf5648438589bca74f3dbfc2fc5fc9f61ab Author: Cédric Bosdonnat <cedric.bosdonnat....@free.fr> Date: Mon Jan 30 11:35:42 2012 +0100 fdo#35669: more robust references merging (cherry picked from commit 458d56d9b35f2ecb2eea2589737079390b10ee26) Signed-off-by: Michael Stahl <mst...@redhat.com> Signed-off-by: Noel Power <nopo...@suse.com> Signed-off-by: Petr Mladek <pmla...@suse.cz> diff --git a/sw/source/core/fields/reffld.cxx b/sw/source/core/fields/reffld.cxx index c15c542..eca22ba 100644 --- a/sw/source/core/fields/reffld.cxx +++ b/sw/source/core/fields/reffld.cxx @@ -974,11 +974,13 @@ void _RefIdsMap::Init( SwDoc& rDoc, SwDoc& rDestDoc, sal_Bool bField ) GetFieldIdsFromDoc( rDoc, aDstIds ); // Define the mappings now - sal_uInt16 nMaxDstId = *aIds.end(); + sal_uInt16 nMaxDstId = -1; + if ( !aIds.empty() ) + nMaxDstId = *aIds.rbegin(); // Map all the src fields to their value + nMaxDstId for ( std::set<sal_uInt16>::iterator pIt = aDstIds.begin(); pIt != aDstIds.end(); ++pIt ) - AddId( nMaxDstId++, *pIt ); + AddId( ++nMaxDstId, *pIt ); // Change the Sequence number of all the SetExp fields in the destination document SwFieldType* pType = rDoc.GetFldType( RES_SETEXPFLD, aName, false ); commit 4632a18dae5e1770aa1da4ac55719a09c1ae461b Author: Cédric Bosdonnat <cedric.bosdonnat....@free.fr> Date: Thu Jan 26 15:30:01 2012 +0100 fdo#35669: properly merge ref fields in master documents (cherry picked from commit 5e51960dede5015b862df05b7b16f02884647889) Signed-off-by: Michael Stahl <mst...@redhat.com> Signed-off-by: Noel Power <nopo...@suse.com> Signed-off-by: Petr Mladek <pmla...@suse.cz> diff --git a/sw/source/core/fields/reffld.cxx b/sw/source/core/fields/reffld.cxx index 98111d0..c15c542 100644 --- a/sw/source/core/fields/reffld.cxx +++ b/sw/source/core/fields/reffld.cxx @@ -972,6 +972,26 @@ void _RefIdsMap::Init( SwDoc& rDoc, SwDoc& rDestDoc, sal_Bool bField ) { GetFieldIdsFromDoc( rDestDoc, aIds ); GetFieldIdsFromDoc( rDoc, aDstIds ); + + // Define the mappings now + sal_uInt16 nMaxDstId = *aIds.end(); + + // Map all the src fields to their value + nMaxDstId + for ( std::set<sal_uInt16>::iterator pIt = aDstIds.begin(); pIt != aDstIds.end(); ++pIt ) + AddId( nMaxDstId++, *pIt ); + + // Change the Sequence number of all the SetExp fields in the destination document + SwFieldType* pType = rDoc.GetFldType( RES_SETEXPFLD, aName, false ); + if( pType ) + { + SwIterator<SwFmtFld,SwFieldType> aIter( *pType ); + for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() ) + if( pF->GetTxtFld() ) + { + sal_uInt16 n = ((SwSetExpField*)pF->GetFld())->GetSeqNumber( ); + ((SwSetExpField*)pF->GetFld())->SetSeqNumber( sequencedIds[ n ] ); + } + } } else { @@ -1030,21 +1050,8 @@ void _RefIdsMap::Check( SwDoc& rDoc, SwDoc& rDestDoc, SwGetRefField& rFld, AddId( n, nSeqNo ); rFld.SetSeqNo( n ); - // und noch die Felder oder Fuss-/EndNote auf die neue - // Id umsetzen - if( bField ) - { - SwFieldType* pType = rDoc.GetFldType( RES_SETEXPFLD, aName, false ); - if( pType ) - { - SwIterator<SwFmtFld,SwFieldType> aIter( *pType ); - for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() ) - if( pF->GetTxtFld() && nSeqNo == - ((SwSetExpField*)pF->GetFld())->GetSeqNumber() ) - ((SwSetExpField*)pF->GetFld())->SetSeqNumber( n ); - } - } - else + // und noch die Fuss-/EndNote auf die neue Id umsetzen + if( !bField ) { SwTxtFtn* pFtnIdx; for( sal_uInt16 i = 0, nCnt = rDoc.GetFtnIdxs().Count(); i < nCnt; ++i )
_______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits