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();