summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx28
1 files changed, 22 insertions, 6 deletions
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 0c1d094304b8..615f2712d2a1 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -839,6 +839,8 @@ void SwTxtNode::Update(
{
if ( bNegative )
{
+ std::vector<SwTxtInputFld*> aTxtInputFlds;
+
const sal_Int32 nChangeEnd = nChangePos + nChangeLen;
for ( sal_uInt16 n = 0; n < m_pSwpHints->Count(); ++n )
{
@@ -881,12 +883,18 @@ void SwTxtNode::Update(
{
SwTxtInputFld* pTxtInputFld = dynamic_cast<SwTxtInputFld*>(pHint);
if ( pTxtInputFld )
- {
- pTxtInputFld->UpdateFieldContent();
- }
+ aTxtInputFlds.push_back(pTxtInputFld);
}
}
+ //wait until all the attribute positions are correct
+ //before updating the field contents
+ for (std::vector<SwTxtInputFld*>::iterator aI = aTxtInputFlds.begin(); aI != aTxtInputFlds.end(); ++aI)
+ {
+ SwTxtInputFld* pTxtInputFld = *aI;
+ pTxtInputFld->UpdateFieldContent();
+ }
+
m_pSwpHints->MergePortions( *this );
}
else
@@ -896,6 +904,7 @@ void SwTxtNode::Update(
bool bMergePortionsNeeded = false;
const sal_uInt16 coArrSz =
static_cast<sal_uInt16>(RES_TXTATR_WITHEND_END) - static_cast<sal_uInt16>(RES_CHRATR_BEGIN);
+ std::vector<SwTxtInputFld*> aTxtInputFlds;
bool aDontExp[ coArrSz ];
memset( &aDontExp, 0, coArrSz * sizeof(bool) );
@@ -993,11 +1002,18 @@ void SwTxtNode::Update(
{
SwTxtInputFld* pTxtInputFld = dynamic_cast<SwTxtInputFld*>(pHint);
if ( pTxtInputFld )
- {
- pTxtInputFld->UpdateFieldContent();
- }
+ aTxtInputFlds.push_back(pTxtInputFld);
}
}
+
+ //wait until all the attribute positions are correct
+ //before updating the field contents
+ for (std::vector<SwTxtInputFld*>::iterator aI = aTxtInputFlds.begin(); aI != aTxtInputFlds.end(); ++aI)
+ {
+ SwTxtInputFld* pTxtInputFld = *aI;
+ pTxtInputFld->UpdateFieldContent();
+ }
+
if (bMergePortionsNeeded)
{
m_pSwpHints->MergePortions(*this); // does Resort too