sw/inc/OnlineAccessibilityCheck.hxx | 4 ++-- sw/inc/node.hxx | 2 +- sw/source/core/docnode/node.cxx | 4 ++-- sw/source/core/layout/atrfrm.cxx | 10 ++++++++++ sw/source/core/txtnode/OnlineAccessibilityCheck.cxx | 9 ++++++--- sw/source/uibase/shells/drwbassh.cxx | 8 ++++++++ 6 files changed, 29 insertions(+), 8 deletions(-)
New commits: commit 069569e4a095f2fe42e94c2dad15356e2038727a Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Mon Aug 21 19:42:38 2023 +0200 Commit: Balazs Varga <balazs.varga.ext...@allotropia.de> CommitDate: Wed Aug 23 12:40:11 2023 +0200 tdf#156116 - A11Y - fix object name does not update in accessibility sidebar when we modify the name on the Navigator sidebar. Update the related accessibility issue after we modify the name on the sidebar. Change-Id: I8f4b8780ff1ffe7cfb86ff837c9579d6b785b832 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155904 Tested-by: Jenkins Reviewed-by: Balazs Varga <balazs.varga.ext...@allotropia.de> diff --git a/sw/inc/OnlineAccessibilityCheck.hxx b/sw/inc/OnlineAccessibilityCheck.hxx index 1055c7e67d53..1e320554f8fc 100644 --- a/sw/inc/OnlineAccessibilityCheck.hxx +++ b/sw/inc/OnlineAccessibilityCheck.hxx @@ -57,7 +57,7 @@ private: void runAccessibilityCheck(SwNode* pNode); void updateStatusbar(); - void updateNodeStatus(SwNode* pContentNode); + void updateNodeStatus(SwNode* pContentNode, bool bIssueObjectNameChanged = false); void initialCheck(); void lookForPreviousNodeAndUpdate(SwPosition const& rNewPos); void clearAccessibilityIssuesFromAllNodes(); @@ -66,7 +66,7 @@ private: public: OnlineAccessibilityCheck(SwDoc& rDocument); void update(SwPosition const& rNewPos); - void resetAndQueue(SwNode* pNode); + void resetAndQueue(SwNode* pNode, bool bIssueObjectNameChanged = false); void resetAndQueueDocumentLevel(); void updateCheckerActivity(); sal_Int32 getNumberOfAccessibilityIssues() { return m_nAccessibilityIssues; } diff --git a/sw/inc/node.hxx b/sw/inc/node.hxx index 84e466dfefa0..79d1a3792935 100644 --- a/sw/inc/node.hxx +++ b/sw/inc/node.hxx @@ -336,7 +336,7 @@ public: return m_aAccessibilityCheckStatus; } - void resetAndQueueAccessibilityCheck(); + void resetAndQueueAccessibilityCheck(bool bIssueObjectNameChanged = false); private: SwNode( const SwNode & rNodes ) = delete; diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx index 64a9e86137c5..4304b875c4d7 100644 --- a/sw/source/core/docnode/node.cxx +++ b/sw/source/core/docnode/node.cxx @@ -2179,9 +2179,9 @@ void SwNode::RemoveAnchoredFly(SwFrameFormat *const pFlyFormat) m_aAnchoredFlys.erase(it); } -void SwNode::resetAndQueueAccessibilityCheck() +void SwNode::resetAndQueueAccessibilityCheck(bool bIssueObjectNameChanged) { - GetDoc().getOnlineAccessibilityCheck()->resetAndQueue(this); + GetDoc().getOnlineAccessibilityCheck()->resetAndQueue(this, bIssueObjectNameChanged); } diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index 5a48a3965545..a272292be46b 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -2614,6 +2614,16 @@ void SwFrameFormat::SetFormatName( const OUString& rNewName, bool bBroadcast ) if (bBroadcast) { GetNotifier().Broadcast(aHint); } + + // update accessibility sidebar object name if we modify the object name on the navigator bar + if (!aHint.m_sOld.isEmpty() && aHint.m_sOld != aHint.m_sNew) + { + if (SwFlyFrame* pSFly = SwIterator<SwFlyFrame, SwFormat>(*this).First()) + { + if (SwNode* pSwNode = static_cast<SwNoTextFrame*>(pSFly->Lower())->GetNode()) + pSwNode->resetAndQueueAccessibilityCheck(true); + } + } } else SwFormat::SetFormatName( rNewName, bBroadcast ); diff --git a/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx b/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx index 025dba8c5f25..27d4d5d56f12 100644 --- a/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx +++ b/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx @@ -79,13 +79,16 @@ OnlineAccessibilityCheck::OnlineAccessibilityCheck(SwDoc& rDocument) { } -void OnlineAccessibilityCheck::updateNodeStatus(SwNode* pNode) +void OnlineAccessibilityCheck::updateNodeStatus(SwNode* pNode, bool bIssueObjectNameChanged) { if (!pNode->IsContentNode() && !pNode->IsTableNode()) return; m_nAccessibilityIssues = 0; + if (bIssueObjectNameChanged) + return; + auto it = m_aNodes.find(pNode); if (it == m_aNodes.end()) { @@ -291,7 +294,7 @@ void OnlineAccessibilityCheck::clearAccessibilityIssuesFromAllNodes() updateStatusbar(); } -void OnlineAccessibilityCheck::resetAndQueue(SwNode* pNode) +void OnlineAccessibilityCheck::resetAndQueue(SwNode* pNode, bool bIssueObjectNameChanged) { if (utl::ConfigManager::IsFuzzing()) return; @@ -304,7 +307,7 @@ void OnlineAccessibilityCheck::resetAndQueue(SwNode* pNode) pNode->getAccessibilityCheckStatus().reset(); m_aNodes.erase(pNode); runAccessibilityCheck(pNode); - updateNodeStatus(pNode); + updateNodeStatus(pNode, bIssueObjectNameChanged); updateStatusbar(); } diff --git a/sw/source/uibase/shells/drwbassh.cxx b/sw/source/uibase/shells/drwbassh.cxx index cbb8a9c7835f..a5a63a66343d 100644 --- a/sw/source/uibase/shells/drwbassh.cxx +++ b/sw/source/uibase/shells/drwbassh.cxx @@ -595,9 +595,17 @@ void SwDrawBaseShell::Execute(SfxRequest const &rReq) if(RET_OK == pDlg->Execute()) { + const OUString aOrigName = aName; pDlg->GetName(aName); pSelected->SetName(aName); pSh->SetModified(); + + // update accessibility sidebar object name if we modify the object name on the navigator bar + if (!aName.isEmpty() && aOrigName != aName) + { + if (SwNode* pSwNode = FindFrameFormat(pSelected)->GetAnchor().GetAnchorNode()) + pSwNode->resetAndQueueAccessibilityCheck(true); + } } }