sw/inc/OnlineAccessibilityCheck.hxx | 4 +- sw/source/core/txtnode/OnlineAccessibilityCheck.cxx | 32 +++++++++----------- 2 files changed, 17 insertions(+), 19 deletions(-)
New commits: commit 6f8bd9785c3f01ac711bfe0647dc7d02a68d45a8 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Wed Nov 16 17:59:31 2022 +0900 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Tue Nov 22 14:56:54 2022 +0100 sw: use WeakNodeContainer for m_pPreviousNode in OnlineA11yCheck Change-Id: Iae2158ff4de0cab4307379c48011d5b6ca844b13 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142821 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/sw/inc/OnlineAccessibilityCheck.hxx b/sw/inc/OnlineAccessibilityCheck.hxx index 8f52b73f35bd..0d9c65902905 100644 --- a/sw/inc/OnlineAccessibilityCheck.hxx +++ b/sw/inc/OnlineAccessibilityCheck.hxx @@ -41,14 +41,14 @@ public: SwNode* getNode(); }; -class OnlineAccessibilityCheck : public SvtListener +class OnlineAccessibilityCheck { private: std::map<SwNode*, std::unique_ptr<WeakNodeContainer>> m_aNodes; SwDoc& m_rDocument; sw::AccessibilityCheck m_aAccessibilityCheck; - SwNode* m_pPreviousNode; + std::unique_ptr<WeakNodeContainer> m_pPreviousNode; SwNodeOffset m_nPreviousNodeIndex; sal_Int32 m_nAccessibilityIssues; bool m_bInitialCheck; diff --git a/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx b/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx index 6c03293705f7..063c2d586e12 100644 --- a/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx +++ b/sw/source/core/txtnode/OnlineAccessibilityCheck.cxx @@ -35,12 +35,16 @@ WeakNodeContainer::WeakNodeContainer(SwNode* pNode) { if (m_pNode) { - auto* pBroadcast = dynamic_cast<sw::BroadcastingModify*>(pNode); + auto* pBroadcast = dynamic_cast<sw::BroadcastingModify*>(m_pNode); if (pBroadcast) { EndListeningAll(); StartListening(pBroadcast->GetNotifier()); } + else + { + m_pNode = nullptr; + } } } @@ -48,6 +52,8 @@ WeakNodeContainer::~WeakNodeContainer() { EndListeningAll(); } bool WeakNodeContainer::isAlive() { + if (!m_pNode) + return false; if (!HasBroadcaster()) m_pNode = nullptr; return m_pNode; @@ -63,7 +69,6 @@ SwNode* WeakNodeContainer::getNode() OnlineAccessibilityCheck::OnlineAccessibilityCheck(SwDoc& rDocument) : m_rDocument(rDocument) , m_aAccessibilityCheck(&m_rDocument) - , m_pPreviousNode(nullptr) , m_nPreviousNodeIndex(-1) , m_nAccessibilityIssues(0) , m_bInitialCheck(false) @@ -177,8 +182,7 @@ void OnlineAccessibilityCheck::updateCheckerActivity() if (bOnlineCheckStatus != m_bOnlineCheckStatus) { - EndListeningAll(); - m_pPreviousNode = nullptr; + m_pPreviousNode.reset(); m_nPreviousNodeIndex = SwNodeOffset(-1); m_bInitialCheck = false; // force initial check @@ -218,16 +222,14 @@ void OnlineAccessibilityCheck::lookForPreviousNodeAndUpdate(const SwPosition& rN if (!pCurrentNode->IsContentNode() && !pCurrentNode->IsTableNode()) return; - auto* pCurrentBroadcast = dynamic_cast<sw::BroadcastingModify*>(pCurrentNode); - if (!pCurrentBroadcast) + auto pCurrentWeak = std::make_unique<WeakNodeContainer>(pCurrentNode); + if (!pCurrentWeak->isAlive()) return; // Check if previous node was deleted - if (!HasBroadcaster()) + if (!m_pPreviousNode || !m_pPreviousNode->isAlive()) { - EndListeningAll(); - StartListening(pCurrentBroadcast->GetNotifier()); - m_pPreviousNode = pCurrentNode; + m_pPreviousNode = std::move(pCurrentWeak); m_nPreviousNodeIndex = nCurrenNodeIndex; return; } @@ -240,9 +242,7 @@ void OnlineAccessibilityCheck::lookForPreviousNodeAndUpdate(const SwPosition& rN if (m_nPreviousNodeIndex < SwNodeOffset(0) || m_nPreviousNodeIndex >= pCurrentNode->GetNodes().Count()) { - EndListeningAll(); - StartListening(pCurrentBroadcast->GetNotifier()); - m_pPreviousNode = pCurrentNode; + m_pPreviousNode = std::move(pCurrentWeak); m_nPreviousNodeIndex = nCurrenNodeIndex; return; } @@ -257,14 +257,12 @@ void OnlineAccessibilityCheck::lookForPreviousNodeAndUpdate(const SwPosition& rN updateStatusbar(); // Assign previous node and index - EndListeningAll(); - StartListening(pCurrentBroadcast->GetNotifier()); - m_pPreviousNode = pCurrentNode; + m_pPreviousNode = std::move(pCurrentWeak); m_nPreviousNodeIndex = nCurrenNodeIndex; } else { - m_pPreviousNode = nullptr; + m_pPreviousNode.reset(); m_nPreviousNodeIndex = SwNodeOffset(-1); } }