[Libreoffice-commits] core.git: sw/inc sw/source

Bjoern Michaelsen bjoern.michaelsen at libreoffice.org
Sun May 6 21:33:05 UTC 2018


 sw/inc/calbck.hxx                  |    9 ++++---
 sw/source/core/attr/calbck.cxx     |   46 ++++++++++++++++++++++++++++++++++++-
 sw/source/core/unocore/unoobj2.cxx |    2 -
 3 files changed, 51 insertions(+), 6 deletions(-)

New commits:
commit 36847ce41aae7c81ad7ca9d22a7215a640378929
Author: Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
Date:   Sun May 6 06:06:32 2018 +0200

    make SwDepend an implementation detail of sw::WriterMultiListener
    
    - ... and rename it to ListenerEntry
    
    Change-Id: Ie0f77f1d381da469899420f864995e1697e4c639
    Reviewed-on: https://gerrit.libreoffice.org/53909
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>

diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx
index c9d81f8df8f7..440a822b8a15 100644
--- a/sw/inc/calbck.hxx
+++ b/sw/inc/calbck.hxx
@@ -251,18 +251,19 @@ private:
 
 namespace sw
 {
+    class ListenerEntry;
     class SW_DLLPUBLIC WriterMultiListener final
     {
         #ifdef WNT
-            typedef std::shared_ptr<SwDepend> pointer_t;
+            typedef std::shared_ptr<ListenerEntry> pointer_t;
         #else
-            typedef std::unique_ptr<SwDepend> pointer_t;
+            typedef std::unique_ptr<ListenerEntry> pointer_t;
         #endif
         SwClient& m_rToTell;
         std::vector<pointer_t> m_vDepends;
         public:
-            WriterMultiListener(SwClient& rToTell)
-                : m_rToTell(rToTell) {}
+            WriterMultiListener(SwClient& rToTell);
+            ~WriterMultiListener();
             void StartListening(SwModify* pDepend);
             void EndListening(SwModify* pDepend);
             bool IsListeningTo(const SwModify* const pDepend);
diff --git a/sw/source/core/attr/calbck.cxx b/sw/source/core/attr/calbck.cxx
index ca75f06904df..e9774a10a716 100644
--- a/sw/source/core/attr/calbck.cxx
+++ b/sw/source/core/attr/calbck.cxx
@@ -25,6 +25,43 @@
 #include <tools/debug.hxx>
 #include <algorithm>
 
+namespace sw
+{
+    class ListenerEntry final : public SwClient
+    {
+        SwClient *m_pToTell;
+
+    public:
+        ListenerEntry(SwClient* pTellHim, SwModify * pDepend) : SwClient(pDepend), m_pToTell(pTellHim) {}
+        ListenerEntry(ListenerEntry&) = delete;
+
+        /** get Client information */
+        virtual bool GetInfo( SfxPoolItem& rInfo) const override
+            { return m_pToTell == nullptr || m_pToTell->GetInfo( rInfo ); }
+    private:
+        virtual void Modify( const SfxPoolItem* pOldValue, const SfxPoolItem *pNewValue ) override
+        {
+            SwClientNotify(*GetRegisteredIn(), sw::LegacyModifyHint(pOldValue, pNewValue));
+        }
+        virtual void SwClientNotify( const SwModify& rModify, const SfxHint& rHint ) override
+        {
+            if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+            {
+                if( pLegacyHint->m_pNew && pLegacyHint->m_pNew->Which() == RES_OBJECTDYING )
+                {
+                    auto pModifyChanged = CheckRegistration(pLegacyHint->m_pOld);
+                    if(pModifyChanged)
+                        m_pToTell->SwClientNotify(rModify, *pModifyChanged);
+                }
+                else if( m_pToTell )
+                    m_pToTell->ModifyNotification(pLegacyHint->m_pOld, pLegacyHint->m_pNew);
+            }
+            else if(m_pToTell)
+                m_pToTell->SwClientNotifyCall(rModify, rHint);
+        }
+    };
+}
+
 sw::LegacyModifyHint::~LegacyModifyHint() {}
 sw::ModifyChangedHint::~ModifyChangedHint() {}
 
@@ -296,10 +333,17 @@ void SwModify::CheckCaching( const sal_uInt16 nWhich )
     }
 }
 
+sw::WriterMultiListener::WriterMultiListener(SwClient& rToTell)
+    : m_rToTell(rToTell)
+{}
+
+sw::WriterMultiListener::~WriterMultiListener()
+{}
+
 void sw::WriterMultiListener::StartListening(SwModify* pDepend)
 {
     EndListening(nullptr);
-    m_vDepends.emplace_back(pointer_t( new SwDepend(&m_rToTell, pDepend)));
+    m_vDepends.emplace_back(pointer_t(new ListenerEntry(&m_rToTell, pDepend)));
 }
 
 
diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx
index 67bb83861cde..05854b1faf0f 100644
--- a/sw/source/core/unocore/unoobj2.cxx
+++ b/sw/source/core/unocore/unoobj2.cxx
@@ -1582,7 +1582,7 @@ struct SwXParaFrameEnumerationImpl final : public SwXParaFrameEnumeration
         }
         else
         {
-            // removing orphaned SwDepends
+            // removing orphaned Clients
             const auto iter = std::remove_if(m_vFrames.begin(), m_vFrames.end(),
                     [] (std::shared_ptr<sw::FrameClient>& rEntry) -> bool { return !rEntry->GetRegisteredIn(); });
             m_vFrames.erase(iter, m_vFrames.end());


More information about the Libreoffice-commits mailing list