diff options
author | Jim Raykowski <raykowj@gmail.com> | 2020-08-27 16:44:36 -0800 |
---|---|---|
committer | Jim Raykowski <raykowj@gmail.com> | 2020-09-03 09:14:05 +0200 |
commit | 09e35aafccf2792c7a25e4d8a896b69f0ab47e04 (patch) | |
tree | 3baab5ec386783b7b173090c074f45b74bd5d4cc /sw | |
parent | f51aaf80002c74af78c8934a3dff4938e1f55acd (diff) |
tdf#136212 Fix Writer Navigator blink jump
when table, frame, image, OLE and draw objects are hidden
This patch fixes Writer Navigator blinking and scrolling back to
highlighted entry when table, frame, image, OLE and draw objects are
hidden by using checkVisiblityChanged function approach used by
SwContentType::FillMemberList ContentTypeId::REGION case.
For detailed explanation see commit
f5f6781acb292783033caea0147ff98490c78d89 and tdf#118322 Avoid blinking in
Explorer for 'Section' part
Change-Id: Ia119b7153394e09d8ae226a5a0c2f4d6d1d2838a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101515
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj@gmail.com>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/uibase/utlui/content.cxx | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index cf7329ee267f..36cf1449881c 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -571,7 +571,6 @@ void SwContentType::FillMemberList(bool* pbLevelOrVisibilityChanged) } break; - case ContentTypeId::TABLE : { const size_t nCount = m_pWrtShell->GetTableFrameFormatCount(true); @@ -590,10 +589,18 @@ void SwContentType::FillMemberList(bool* pbLevelOrVisibilityChanged) pCnt->SetInvisible(); m_pMember->insert(std::unique_ptr<SwContent>(pCnt)); + } - if(nOldMemberCount > i && - (*pOldMember)[i]->IsInvisible() != pCnt->IsInvisible()) - *pbLevelOrVisibilityChanged = true; + if (nullptr != pbLevelOrVisibilityChanged) + { + assert(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( + *pOldMember, + *m_pMember); } } break; @@ -635,9 +642,18 @@ void SwContentType::FillMemberList(bool* pbLevelOrVisibilityChanged) !aAskItem.pObject ) // not visible pCnt->SetInvisible(); m_pMember->insert(std::unique_ptr<SwContent>(pCnt)); - if (nOldMemberCount > i && - (*pOldMember)[i]->IsInvisible() != pCnt->IsInvisible()) - *pbLevelOrVisibilityChanged = true; + } + + if(nullptr != pbLevelOrVisibilityChanged) + { + assert(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( + *pOldMember, + *m_pMember); } } break; @@ -803,11 +819,20 @@ void SwContentType::FillMemberList(bool* pbLevelOrVisibilityChanged) pCnt->SetInvisible(); m_pMember->insert(std::unique_ptr<SwContent>(pCnt)); m_nMemberCount++; - if (nOldMemberCount > i && - (*pOldMember)[i]->IsInvisible() != pCnt->IsInvisible() ) - *pbLevelOrVisibilityChanged = true; } } + + if (nullptr != pbLevelOrVisibilityChanged) + { + assert(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( + *pOldMember, + *m_pMember); + } } } break; |