Author: orw
Date: Mon Jun 16 08:40:28 2014
New Revision: 1602823
URL: http://svn.apache.org/r1602823
Log:
125055: follow-up of fix for issue 124338 - adjust condition to trigger sort of
bookmarks in order to avoid serious performance decrease
Kudos to Ariel for his analysis
Modified:
openoffice/trunk/main/sw/source/core/txtnode/ndtxt.cxx
Modified: openoffice/trunk/main/sw/source/core/txtnode/ndtxt.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/txtnode/ndtxt.cxx?rev=1602823&r1=1602822&r2=1602823&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/txtnode/ndtxt.cxx (original)
+++ openoffice/trunk/main/sw/source/core/txtnode/ndtxt.cxx Mon Jun 16 08:40:28
2014
@@ -1080,6 +1080,8 @@ void SwTxtNode::Update(
// Bookmarks must never grow to either side, when editing (directly)
to the left or right (#i29942#)!
// And a bookmark with same start and end must remain to the left of
the inserted text (used in XML import).
{
+ bool bAtLeastOneBookmarkMoved = false;
+ bool bAtLeastOneExpandedBookmarkAtInsertionPosition = false;
const IDocumentMarkAccess* const pMarkAccess =
getIDocumentMarkAccess();
for ( IDocumentMarkAccess::const_iterator_t ppMark =
pMarkAccess->getAllMarksBegin();
ppMark != pMarkAccess->getAllMarksEnd();
@@ -1087,14 +1089,28 @@ void SwTxtNode::Update(
{
const ::sw::mark::IMark* const pMark = ppMark->get();
const SwPosition* pEnd = &pMark->GetMarkEnd();
- SwIndex & rIdx = const_cast<SwIndex&>(pEnd->nContent);
+ SwIndex & rEndIdx = const_cast<SwIndex&>(pEnd->nContent);
if( this == &pEnd->nNode.GetNode() &&
- rPos.GetIndex() == rIdx.GetIndex() )
+ rPos.GetIndex() == rEndIdx.GetIndex() )
{
- rIdx.Assign( &aTmpIdxReg, rIdx.GetIndex() );
- bSortMarks = true;
+ rEndIdx.Assign( &aTmpIdxReg, rEndIdx.GetIndex() );
+ bAtLeastOneBookmarkMoved = true;
+ }
+ else if ( !bAtLeastOneExpandedBookmarkAtInsertionPosition )
+ {
+ if ( pMark->IsExpanded() )
+ {
+ const SwPosition* pStart = &pMark->GetMarkStart();
+ if ( this == &pStart->nNode.GetNode()
+ && rPos.GetIndex() == pStart->nContent.GetIndex()
)
+ {
+ bAtLeastOneExpandedBookmarkAtInsertionPosition =
true;
+ }
+ }
}
}
+
+ bSortMarks = bAtLeastOneBookmarkMoved &&
bAtLeastOneExpandedBookmarkAtInsertionPosition;
}
}