include/svx/svdedtv.hxx       |    2 +-
 svx/source/svdraw/svdedtv.cxx |   15 ++++++---------
 2 files changed, 7 insertions(+), 10 deletions(-)

New commits:
commit 1efb16454f813dce9dffc124b43a31e46a1b9e3f
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed May 3 16:59:51 2023 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Thu May 4 09:50:36 2023 +0200

    tdf#108889 ref count goes negative with 0 undo levels configured
    
    Change-Id: Ic28c3738f951af6e5371f88b4bb061a0aadf16e1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151332
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx
index 2ff56e71b17b..1cf9be6fdb9a 100644
--- a/include/svx/svdedtv.hxx
+++ b/include/svx/svdedtv.hxx
@@ -154,7 +154,7 @@ protected:
     // Removes all objects of the MarkList from their ObjLists including Undo.
     // The entries in rMark remain.
     // @return a list of objects that must be deleted after the outermost 
EndUndo
-    std::vector<SdrObject *> DeleteMarkedList(SdrMarkList const& rMark); // 
DeleteMarked -> DeleteMarkedList
+    std::vector<rtl::Reference<SdrObject>> DeleteMarkedList(SdrMarkList const& 
rMark); // DeleteMarked -> DeleteMarkedList
 
     // Check possibilities of all marked objects
     virtual void CheckPossibilities();
diff --git a/svx/source/svdraw/svdedtv.cxx b/svx/source/svdraw/svdedtv.cxx
index 96e61779e04b..27015e410e9d 100644
--- a/svx/source/svdraw/svdedtv.cxx
+++ b/svx/source/svdraw/svdedtv.cxx
@@ -712,9 +712,9 @@ void SdrEditView::ForceMarkedObjToAnotherPage()
     }
 }
 
-std::vector<SdrObject*> SdrEditView::DeleteMarkedList(SdrMarkList const& rMark)
+std::vector<rtl::Reference<SdrObject>> 
SdrEditView::DeleteMarkedList(SdrMarkList const& rMark)
 {
-    std::vector<SdrObject*> ret;
+    std::vector<rtl::Reference<SdrObject>> ret;
     if (rMark.GetMarkCount()!=0)
     {
         rMark.ForceSort();
@@ -761,13 +761,13 @@ std::vector<SdrObject*> 
SdrEditView::DeleteMarkedList(SdrMarkList const& rMark)
                     aUpdaters.push_back(new 
E3DModifySceneSnapRectUpdater(pObj));
                 }
 
-                pOL->RemoveObject(nOrdNum);
-
                 if( !bUndo )
                 {
-                    // tdf#108863 don't delete objects before EndUndo()
+                    // tdf#108863 and tdf#108889 don't delete objects before 
EndUndo()
                     ret.push_back(pObj);
                 }
+
+                pOL->RemoveObject(nOrdNum);
             }
 
             // fire scene updaters
@@ -865,10 +865,7 @@ void SdrEditView::DeleteMarkedObj()
         // original stuff: remove selected objects. Handle clear will
         // do something only once
         auto temp(DeleteMarkedList(GetMarkedObjectList()));
-        for (auto p : temp)
-        {
-            lazyDeleteObjects.push_back(p);
-        }
+        lazyDeleteObjects.insert(lazyDeleteObjects.end(), temp.begin(), 
temp.end());
         GetMarkedObjectListWriteAccess().Clear();
         maHdlList.Clear();
 

Reply via email to