[Libreoffice-commits] core.git: Branch 'libreoffice-4-3' - sw/source

Caolán McNamara caolanm at redhat.com
Fri Feb 6 07:01:30 PST 2015


 sw/source/core/txtnode/ndtxt.cxx |   28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

New commits:
commit 6aa163f33d48326905f47e1f37ea26f992f4235f
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Jan 30 10:13:04 2015 +0000

    Resolves: tdf#82942 updating field contents with incorrect attribute positions
    
    Updating a SwTxtInputFld requires expanding the contents of the node.
    
    Expanding the contents of the node requires all the positions of fields in the
    node to be correct in order to expand them to the right place.
    
    So on updating a SwTxtNode wait until all the attributes positions are adjusted
    to be correct before expanding the SwTxtInputFlds in that node
    
    (cherry picked from commit 95f4b2f4a6dfe47842336116d94edd175a6da960)
    
    Conflicts:
    	sw/source/core/txtnode/ndtxt.cxx
    
    Change-Id: I76500239a103e56be412707a708a303a58236070
    Reviewed-on: https://gerrit.libreoffice.org/14254
    Tested-by: Michael Stahl <mstahl at redhat.com>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index 0c1d094..615f271 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


More information about the Libreoffice-commits mailing list