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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Feb 26 19:12:04 UTC 2019


 sw/inc/unoredline.hxx                  |   32 +++++++++++++++++++-------------
 sw/source/core/unocore/unoredline.cxx  |   12 +++++++-----
 sw/source/core/unocore/unoredlines.cxx |   20 ++++++--------------
 3 files changed, 32 insertions(+), 32 deletions(-)

New commits:
commit b3394345c900548f1b4c91246d3188aa04e30e8c
Author:     Bjoern Michaelsen <bjoern.michaelsen at libreoffice.org>
AuthorDate: Mon Feb 25 21:11:37 2019 +0100
Commit:     Björn Michaelsen <bjoern.michaelsen at libreoffice.org>
CommitDate: Tue Feb 26 20:11:39 2019 +0100

    UNO redline: uno SvtListener instead of SwClient
    
    Change-Id: Ic580df179c6aa1dedc866cf0882c124d5b13fcb3
    Reviewed-on: https://gerrit.libreoffice.org/68360
    Tested-by: Jenkins
    Reviewed-by: Björn Michaelsen <bjoern.michaelsen at libreoffice.org>

diff --git a/sw/inc/unoredline.hxx b/sw/inc/unoredline.hxx
index ffed204d15f3..ac2b658b5a8f 100644
--- a/sw/inc/unoredline.hxx
+++ b/sw/inc/unoredline.hxx
@@ -19,6 +19,7 @@
 #ifndef INCLUDED_SW_INC_UNOREDLINE_HXX
 #define INCLUDED_SW_INC_UNOREDLINE_HXX
 
+#include <svl/listener.hxx>
 #include "unotext.hxx"
 #include "ndindex.hxx"
 
@@ -59,16 +60,12 @@ public:
     virtual sal_Bool SAL_CALL hasElements(  ) override;
 };
 
-typedef
-cppu::WeakImplHelper
-<
-    css::container::XEnumerationAccess
->
-SwXRedlineBaseClass;
-class SwXRedline :
-        public SwXRedlineBaseClass,
-        public SwXText,
-        public SwClient
+typedef cppu::WeakImplHelper<css::container::XEnumerationAccess> SwXRedlineBaseClass;
+
+class SwXRedline
+    : public SwXRedlineBaseClass
+    , public SwXText
+    , public SvtListener
 {
     SwDoc*      pDoc;
     SwRangeRedline*  pRedline;
@@ -105,10 +102,19 @@ public:
     virtual sal_Bool SAL_CALL hasElements(  ) override;
 
     const SwRangeRedline*    GetRedline() const {return pRedline;}
-protected:
-    //SwClient
-    virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) override;
+    virtual void Notify( const SfxHint& ) override;
 };
+
+namespace sw
+{
+    struct SW_DLLPUBLIC FindRedlineHint final: SfxHint
+    {
+        const SwRangeRedline& m_rRedline;
+        SwXRedline** m_ppXRedline;
+        FindRedlineHint(const SwRangeRedline& rRedline, SwXRedline** ppXRedline) : m_rRedline(rRedline), m_ppXRedline(ppXRedline) {}
+    };
+}
+
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/unocore/unoredline.cxx b/sw/source/core/unocore/unoredline.cxx
index 281a010690a4..c5492af982dd 100644
--- a/sw/source/core/unocore/unoredline.cxx
+++ b/sw/source/core/unocore/unoredline.cxx
@@ -348,7 +348,7 @@ SwXRedline::SwXRedline(SwRangeRedline& rRedline, SwDoc& rDoc) :
     pDoc(&rDoc),
     pRedline(&rRedline)
 {
-    pDoc->getIDocumentStylePoolAccess().GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this);
+    StartListening(pDoc->getIDocumentStylePoolAccess().GetPageDescFromPool(RES_POOLPAGE_STANDARD)->GetNotifier());
 }
 
 SwXRedline::~SwXRedline()
@@ -491,13 +491,15 @@ void SwXRedline::removeVetoableChangeListener(
 {
 }
 
-void SwXRedline::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew)
+void SwXRedline::Notify( const SfxHint& rHint )
 {
-    ClientModify(this, pOld, pNew);
-    if(!GetRegisteredIn())
-      {
+    if(rHint.GetId() == SfxHintId::Dying)
+    {
         pDoc = nullptr;
         pRedline = nullptr;
+    } else if(auto pHint = dynamic_cast<const sw::FindRedlineHint*>(&rHint)) {
+        if(!*pHint->m_ppXRedline && &pHint->m_rRedline == GetRedline())
+            *pHint->m_ppXRedline = this;
     }
 }
 
diff --git a/sw/source/core/unocore/unoredlines.cxx b/sw/source/core/unocore/unoredlines.cxx
index 3012bffc071d..5776064cd7a9 100644
--- a/sw/source/core/unocore/unoredlines.cxx
+++ b/sw/source/core/unocore/unoredlines.cxx
@@ -105,20 +105,12 @@ uno::Sequence< OUString > SwXRedlines::getSupportedServiceNames()
     return uno::Sequence< OUString >();
 }
 
-beans::XPropertySet*    SwXRedlines::GetObject( SwRangeRedline& rRedline, SwDoc& rDoc )
-{
-    SwPageDesc* pStdDesc = rDoc.getIDocumentStylePoolAccess().GetPageDescFromPool(RES_POOLPAGE_STANDARD);
-    SwIterator<SwXRedline,SwPageDesc> aIter(*pStdDesc);
-    SwXRedline* pxRedline = aIter.First();
-    while(pxRedline)
-    {
-        if(pxRedline->GetRedline() == &rRedline)
-            break;
-        pxRedline = aIter.Next();
-    }
-    if( !pxRedline )
-        pxRedline = new SwXRedline(rRedline, rDoc);
-    return pxRedline;
+beans::XPropertySet* SwXRedlines::GetObject( SwRangeRedline& rRedline, SwDoc& rDoc )
+{
+    SwXRedline* pXRedline(nullptr);
+    sw::FindRedlineHint aHint(rRedline, &pXRedline);
+    rDoc.getIDocumentStylePoolAccess().GetPageDescFromPool(RES_POOLPAGE_STANDARD)->GetNotifier().Broadcast(aHint);
+    return pXRedline ? pXRedline : new SwXRedline(rRedline, rDoc);
 }
 
 SwXRedlineEnumeration::SwXRedlineEnumeration(SwDoc& rDoc) :


More information about the Libreoffice-commits mailing list