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; }