sw/inc/deletelistener.hxx | 92 +++++++++++++++++++++++++++++++++++++++ sw/source/filter/ww8/ww8par2.cxx | 66 --------------------------- 2 files changed, 94 insertions(+), 64 deletions(-)
New commits: commit c19c582913c678cb88d97f908bb749072e6bd340 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sat Mar 26 21:50:49 2022 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Sun Mar 27 13:57:05 2022 +0200 move DeleteListener contraptions to toplevel writer includes Change-Id: Ifa1e75b62da4174f27fca52eb86559cd6a381513 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132141 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/sw/inc/deletelistener.hxx b/sw/inc/deletelistener.hxx new file mode 100644 index 000000000000..2b212e418fef --- /dev/null +++ b/sw/inc/deletelistener.hxx @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <svl/listener.hxx> +#include <svl/lstner.hxx> +#include "calbck.hxx" + +class SwDeleteListener final : public SwClient +{ +private: + SwModify* m_pModify; + + virtual void SwClientNotify(const SwModify&, const SfxHint& rHint) override + { + if (rHint.GetId() != SfxHintId::SwLegacyModify) + return; + auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint); + if (pLegacy->GetWhich() == RES_OBJECTDYING) + { + m_pModify->Remove(this); + m_pModify = nullptr; + } + } + +public: + SwDeleteListener(SwModify& rModify) + : m_pModify(&rModify) + { + m_pModify->Add(this); + } + + bool WasDeleted() const { return !m_pModify; } + + virtual ~SwDeleteListener() override + { + if (!m_pModify) + return; + m_pModify->Remove(this); + } +}; + +class SvtDeleteListener final : public SvtListener +{ +private: + bool bObjectDeleted; + +public: + explicit SvtDeleteListener(SvtBroadcaster& rNotifier) + : bObjectDeleted(false) + { + StartListening(rNotifier); + } + + virtual void Notify(const SfxHint& rHint) override + { + if (rHint.GetId() == SfxHintId::Dying) + bObjectDeleted = true; + } + + bool WasDeleted() const { return bObjectDeleted; } +}; + +class SfxDeleteListener final : public SfxListener +{ +private: + bool bObjectDeleted; + +public: + explicit SfxDeleteListener(SfxBroadcaster& rNotifier) + : bObjectDeleted(false) + { + StartListening(rNotifier); + } + + virtual void Notify(SfxBroadcaster& /*rBC*/, const SfxHint& rHint) override + { + if (rHint.GetId() == SfxHintId::Dying) + bObjectDeleted = true; + } + + bool WasDeleted() const { return bObjectDeleted; } +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx index e500e254da40..f74d8946e84f 100644 --- a/sw/source/filter/ww8/ww8par2.cxx +++ b/sw/source/filter/ww8/ww8par2.cxx @@ -39,6 +39,7 @@ #include <editeng/pgrditem.hxx> #include <msfilter.hxx> #include <pam.hxx> +#include <deletelistener.hxx> #include <doc.hxx> #include <IDocumentStylePoolAccess.hxx> #include <docary.hxx> @@ -167,69 +168,6 @@ sal_uInt32 wwSectionManager::GetWWPageTopMargin() const return !maSegments.empty() ? maSegments.back().maSep.dyaTop : 0; } -namespace -{ - class SvtDeleteListener final : public SvtListener - { - private: - bool bObjectDeleted; - public: - explicit SvtDeleteListener(SvtBroadcaster& rNotifier) - : bObjectDeleted(false) - { - StartListening(rNotifier); - } - - virtual void Notify(const SfxHint& rHint) override - { - if (rHint.GetId() == SfxHintId::Dying) - bObjectDeleted = true; - } - - bool WasDeleted() const - { - return bObjectDeleted; - } - }; - - class SwDeleteListener final : public SwClient - { - private: - SwModify* m_pModify; - - virtual void SwClientNotify(const SwModify&, const SfxHint& rHint) override - { - if (rHint.GetId() != SfxHintId::SwLegacyModify) - return; - auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint); - if (pLegacy->GetWhich() == RES_OBJECTDYING) - { - m_pModify->Remove(this); - m_pModify = nullptr; - } - } - - public: - SwDeleteListener(SwModify* pModify) - : m_pModify(pModify) - { - m_pModify->Add(this); - } - - bool WasDeleted() const - { - return !m_pModify; - } - - virtual ~SwDeleteListener() override - { - if (!m_pModify) - return; - m_pModify->Remove(this); - } - }; -} - sal_uInt16 SwWW8ImplReader::End_Footnote() { /* @@ -2827,7 +2765,7 @@ void WW8TabDesc::FinishSwTable() m_pIo->m_pLastAnchorPos.reset(); SwTableNode* pTableNode = m_pTable->GetTableNode(); - SwDeleteListener aListener(pTableNode); + SwDeleteListener aListener(*pTableNode); m_pIo->m_xRedlineStack = std::move(mxOldRedlineStack); if (xLastAnchorCursor)