sw/qa/uitest/navigator/tdf137274.py |    4 +++
 sw/source/uibase/inc/content.hxx    |    2 -
 sw/source/uibase/utlui/content.cxx  |   37 ++++++++++++++++++------------------
 3 files changed, 24 insertions(+), 19 deletions(-)

New commits:
commit a2ee79c90a6d158e642ad1ac404e5ccd87d27f76
Author:     Jim Raykowski <rayk...@gmail.com>
AuthorDate: Wed Feb 2 18:15:12 2022 -0900
Commit:     Jim Raykowski <rayk...@gmail.com>
CommitDate: Thu Feb 10 07:37:08 2022 +0100

    SwNavigator: test if member count has changed
    
    In the HasContentChanged function, make the comment "FillMemberList
    tests if member count in old member array equals member count in new
    member array" honest.
    
    Change-Id: I88ee65bb4ed0c56930b8d5ee968ed6c5abb8d841
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129393
    Tested-by: Jenkins
    Reviewed-by: Jim Raykowski <rayk...@gmail.com>

diff --git a/sw/qa/uitest/navigator/tdf137274.py 
b/sw/qa/uitest/navigator/tdf137274.py
index 72044f2cc398..a25f449abe9b 100644
--- a/sw/qa/uitest/navigator/tdf137274.py
+++ b/sw/qa/uitest/navigator/tdf137274.py
@@ -52,6 +52,10 @@ class tdf137274(UITestCase):
             # wait until the second comment is available
             self.ui_test.wait_until_child_is_available('Comment2')
 
+            # xComments needs reassigned after content tree change
+            xComments = xContentTree.getChild('10')
+            self.assertEqual('Comments', get_state_as_dict(xComments)['Text'])
+
             xComments.executeAction("EXPAND", tuple())
 
             # Without the fix in place, this test would have failed with 
AssertionError: 2 != 0
diff --git a/sw/source/uibase/inc/content.hxx b/sw/source/uibase/inc/content.hxx
index dd60c0fae9c5..cb3e1030e8f5 100644
--- a/sw/source/uibase/inc/content.hxx
+++ b/sw/source/uibase/inc/content.hxx
@@ -189,7 +189,7 @@ public:
         virtual ~SwContentType() override;
 
         /** Fill the List of contents */
-        void                FillMemberList(bool* pbLevelChanged = nullptr);
+        void                FillMemberList(bool* pbContentChanged = nullptr);
         size_t              GetMemberCount() const
                                 {return m_nMemberCount;};
         ContentTypeId       GetType() const {return m_nContentType;}
diff --git a/sw/source/uibase/utlui/content.cxx 
b/sw/source/uibase/utlui/content.cxx
index 33ad46f3011c..47daebc48613 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -433,17 +433,17 @@ void SwContentType::Invalidate()
     m_bDataValid = false;
 }
 
-void SwContentType::FillMemberList(bool* pbLevelOrVisibilityChanged)
+void SwContentType::FillMemberList(bool* pbContentChanged)
 {
     std::unique_ptr<SwContentArr> pOldMember;
     size_t nOldMemberCount = 0;
     SwPtrMsgPoolItem aAskItem( RES_CONTENT_VISIBLE, nullptr );
-    if(m_pMember && pbLevelOrVisibilityChanged)
+    if(m_pMember && pbContentChanged)
     {
         pOldMember = std::move(m_pMember);
         nOldMemberCount = pOldMember->size();
         m_pMember.reset( new SwContentArr );
-        *pbLevelOrVisibilityChanged = false;
+        *pbContentChanged = false;
     }
     else if(!m_pMember)
         m_pMember.reset( new SwContentArr );
@@ -475,11 +475,11 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
 
             // need to check level and equal entry number after creation due 
to possible outline
             // nodes in frames, headers, footers
-            if (pOldMember && nullptr != pbLevelOrVisibilityChanged)
+            if (pOldMember)
             {
                 if (pOldMember->size() != m_pMember->size())
                 {
-                    *pbLevelOrVisibilityChanged = true;
+                    *pbContentChanged = true;
                     break;
                 }
                 for (size_t i = 0; i < pOldMember->size(); i++)
@@ -487,7 +487,7 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
                     if 
(static_cast<SwOutlineContent*>((*pOldMember)[i].get())->GetOutlineLevel() !=
                             
static_cast<SwOutlineContent*>((*m_pMember)[i].get())->GetOutlineLevel())
                     {
-                        *pbLevelOrVisibilityChanged = true;
+                        *pbContentChanged = true;
                         break;
                     }
                 }
@@ -518,13 +518,13 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
                 m_pMember->insert(std::move(pCnt));
             }
 
-            if (pOldMember && nullptr != pbLevelOrVisibilityChanged)
+            if (pOldMember)
             {
                 // need to check visibility (and equal entry number) after
                 // creation due to a sorted list being used here (before,
                 // entries with same index were compared already at creation
                 // time what worked before a sorted list was used)
-                *pbLevelOrVisibilityChanged = checkVisibilityChanged(
+                *pbContentChanged = checkVisibilityChanged(
                     *pOldMember,
                     *m_pMember);
             }
@@ -570,13 +570,13 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
                 m_pMember->insert(std::unique_ptr<SwContent>(pCnt));
             }
 
-            if (pOldMember && nullptr != pbLevelOrVisibilityChanged)
+            if (pOldMember)
             {
                 // need to check visibility (and equal entry number) after
                 // creation due to a sorted list being used here (before,
                 // entries with same index were compared already at creation
                 // time what worked before a sorted list was used)
-                *pbLevelOrVisibilityChanged = checkVisibilityChanged(
+                *pbContentChanged = checkVisibilityChanged(
                     *pOldMember,
                     *m_pMember);
             }
@@ -749,13 +749,13 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
                     m_pMember->insert(std::move(pCnt));
                 }
 
-                if (pOldMember && nullptr != pbLevelOrVisibilityChanged)
+                if (pOldMember)
                 {
                     // need to check visibility (and equal entry number) after
                     // creation due to a sorted list being used here (before,
                     // entries with same index were compared already at 
creation
                     // time what worked before a sorted list was used)
-                    *pbLevelOrVisibilityChanged = checkVisibilityChanged(
+                    *pbContentChanged = checkVisibilityChanged(
                         *pOldMember,
                         *m_pMember);
                 }
@@ -794,10 +794,9 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
 
                 m_pMember->insert( std::unique_ptr<SwContent>(pCnt) );
                 const size_t nPos = m_pMember->size() - 1;
-                if(nOldMemberCount > nPos &&
-                    (*pOldMember)[nPos]->IsInvisible()
-                            != pCnt->IsInvisible())
-                        *pbLevelOrVisibilityChanged = true;
+                if (pOldMember && !*pbContentChanged && nOldMemberCount > nPos 
&&
+                        (*pOldMember)[nPos]->IsInvisible() != 
pCnt->IsInvisible())
+                    *pbContentChanged = true;
             }
         }
         break;
@@ -854,13 +853,13 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
                     }
                 }
 
-                if (pOldMember && nullptr != pbLevelOrVisibilityChanged)
+                if (pOldMember)
                 {
                     // need to check visibility (and equal entry number) after
                     // creation due to a sorted list being used here (before,
                     // entries with same index were compared already at 
creation
                     // time what worked before a sorted list was used)
-                    *pbLevelOrVisibilityChanged = checkVisibilityChanged(
+                    *pbContentChanged = checkVisibilityChanged(
                         *pOldMember,
                         *m_pMember);
                 }
@@ -870,6 +869,8 @@ void SwContentType::FillMemberList(bool* 
pbLevelOrVisibilityChanged)
         default: break;
     }
     m_nMemberCount = m_pMember->size();
+    if (pOldMember && !*pbContentChanged && pOldMember->size() != 
m_nMemberCount)
+        *pbContentChanged = true;
 
     m_bDataValid = true;
 }

Reply via email to