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

Caolán McNamara caolanm at redhat.com
Thu Jun 1 15:34:27 UTC 2017


 sw/inc/docary.hxx                             |    8 +++++---
 sw/source/core/doc/DocumentRedlineManager.cxx |    9 ++++++---
 sw/source/core/doc/docredln.cxx               |    6 +++---
 3 files changed, 14 insertions(+), 9 deletions(-)

New commits:
commit 58d57d666a7ea2044599d9ec47a29ff3c6b588a2
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu May 18 13:52:04 2017 +0100

    ofz: InsertWithValidRanges didn't report that it deleted its argument anymore
    
    since...
    
    commit ddd84d08c9bb6e00fbd9a73bd52a28688a8c1ba7
    Date:   Fri Jul 20 17:16:03 2012 +0200
    
        Convert SV_DECL_PTRARR_SORT_DEL(_SwRedlineTbl) to o3tl::sorted_vector
    
        Change-Id: Ie7edc6b32b373619d4c0ac154da93650743049cf
    
    otherwise that p = nullptr line at the end doesn't make sense
    
    Change-Id: Ibd5230beb87240cba4b3896dfa2217e25a4db697
    Reviewed-on: https://gerrit.libreoffice.org/37760
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/inc/docary.hxx b/sw/inc/docary.hxx
index de663f105075..424680b329c6 100644
--- a/sw/inc/docary.hxx
+++ b/sw/inc/docary.hxx
@@ -318,6 +318,8 @@ struct CompareSwRedlineTable
 // Notification type for notifying about redlines to LOK clients
 enum class RedlineNotification { Add, Remove, Modify };
 
+typedef SwRangeRedline* SwRangeRedlinePtr;
+
 class SwRedlineTable
 {
 public:
@@ -333,9 +335,9 @@ public:
     bool Contains(const SwRangeRedline* p) const { return maVector.find(const_cast<SwRangeRedline* const>(p)) != maVector.end(); }
     size_type GetPos(const SwRangeRedline* p) const;
 
-    bool Insert( SwRangeRedline* p );
-    bool Insert( SwRangeRedline* p, size_type& rInsPos );
-    bool InsertWithValidRanges( SwRangeRedline* p, size_type* pInsPos = nullptr );
+    bool Insert(SwRangeRedlinePtr& p);
+    bool Insert(SwRangeRedlinePtr& p, size_type& rInsPos);
+    bool InsertWithValidRanges(SwRangeRedlinePtr& p, size_type* pInsPos = nullptr);
 
     void Remove( size_type nPos );
     bool Remove( const SwRangeRedline* p );
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx
index 093bdc719228..90cc40202ab8 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -1228,9 +1228,10 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
                                 if( bCallDelete )
                                 {
                                     ::comphelper::FlagGuard g(m_isForbidCompressRedlines);
+                                    //Insert may delete pNewRedl, in which case it sets pNewRedl to nullptr
                                     mpRedlineTable->Insert( pNewRedl );
                                     m_rDoc.getIDocumentContentOperations().DeleteAndJoin( *pRedl );
-                                    if( !mpRedlineTable->Remove( pNewRedl ) )
+                                    if (pNewRedl && !mpRedlineTable->Remove(pNewRedl))
                                     {
                                         assert(false); // can't happen
                                         pNewRedl = nullptr;
@@ -1260,9 +1261,10 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
                                     // We insert temporarily so that pNew is
                                     // also dealt with when moving the indices.
                                     ::comphelper::FlagGuard g(m_isForbidCompressRedlines);
+                                    //Insert may delete pNewRedl, in which case it sets pNewRedl to nullptr
                                     mpRedlineTable->Insert( pNewRedl );
                                     m_rDoc.getIDocumentContentOperations().DeleteAndJoin( aPam );
-                                    if( !mpRedlineTable->Remove( pNewRedl ) )
+                                    if (pNewRedl && !mpRedlineTable->Remove(pNewRedl))
                                     {
                                         assert(false); // can't happen
                                         pNewRedl = nullptr;
@@ -1291,9 +1293,10 @@ bool DocumentRedlineManager::AppendRedline( SwRangeRedline* pNewRedl, bool bCall
                                     // We insert temporarily so that pNew is
                                     // also dealt with when moving the indices.
                                     ::comphelper::FlagGuard g(m_isForbidCompressRedlines);
+                                    //Insert may delete pNewRedl, in which case it sets pNewRedl to nullptr
                                     mpRedlineTable->Insert( pNewRedl );
                                     m_rDoc.getIDocumentContentOperations().DeleteAndJoin( aPam );
-                                    if( !mpRedlineTable->Remove( pNewRedl ) )
+                                    if (pNewRedl && !mpRedlineTable->Remove(pNewRedl))
                                     {
                                         assert(false); // can't happen
                                         pNewRedl = nullptr;
diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx
index 2a2272dc1fcf..709041ae486b 100644
--- a/sw/source/core/doc/docredln.cxx
+++ b/sw/source/core/doc/docredln.cxx
@@ -409,7 +409,7 @@ void SwRedlineTable::LOKRedlineNotification(RedlineNotification nType, SwRangeRe
     }
 }
 
-bool SwRedlineTable::Insert( SwRangeRedline* p )
+bool SwRedlineTable::Insert(SwRangeRedlinePtr& p)
 {
     if( p->HasValidRange() )
     {
@@ -422,7 +422,7 @@ bool SwRedlineTable::Insert( SwRangeRedline* p )
     return InsertWithValidRanges( p );
 }
 
-bool SwRedlineTable::Insert( SwRangeRedline* p, size_type& rP )
+bool SwRedlineTable::Insert(SwRangeRedlinePtr& p, size_type& rP)
 {
     if( p->HasValidRange() )
     {
@@ -434,7 +434,7 @@ bool SwRedlineTable::Insert( SwRangeRedline* p, size_type& rP )
     return InsertWithValidRanges( p, &rP );
 }
 
-bool SwRedlineTable::InsertWithValidRanges( SwRangeRedline* p, size_type* pInsPos )
+bool SwRedlineTable::InsertWithValidRanges(SwRangeRedlinePtr& p, size_type* pInsPos)
 {
     // Create valid "sub-ranges" from the Selection
     bool bAnyIns = false;


More information about the Libreoffice-commits mailing list