tdf#121540 crash deleting a form from form navigator
regression from
commit eec9f6c8b928de38dd9e683f46bfab00f3243048
Date: Mon Jun 4 15:01:43 2018 +0200
loplugin:useuniqueptr in FmEntryDataList
and rename the method to make the it's operation clearer
Change-Id: Ife366f02c3d8907c397345d825ef7d1721d8930c
Reviewed-on: https://gerrit.libreoffice.org/63694
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/svx/source/form/fmexpl.cxx b/svx/source/form/fmexpl.cxx
index 32f4f8d..76e4b85 100644
--- a/svx/source/form/fmexpl.cxx
+++ b/svx/source/form/fmexpl.cxx
@@ -132,12 +132,13 @@
}
void FmEntryDataList::remove( FmEntryData* pItem )
void FmEntryDataList::removeNoDelete( FmEntryData* pItem )
{
auto it = std::find_if(maEntryDataList.begin(), maEntryDataList.end(),
[&pItem](const std::unique_ptr<FmEntryData>& rEntryData) { return rEntryData.get() == pItem; });
if (it != maEntryDataList.end())
{
it->release();
maEntryDataList.erase( it );
return;
}
diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx
index 8e982de..c3f0aad 100644
--- a/svx/source/form/navigatortree.cxx
+++ b/svx/source/form/navigatortree.cxx
@@ -1044,9 +1044,9 @@
// remove from parent
if (pCurrentParentUserData)
pCurrentParentUserData->GetChildList()->remove( pCurrentUserData );
pCurrentParentUserData->GetChildList()->removeNoDelete( pCurrentUserData );
else
GetNavModel()->GetRootList()->remove( pCurrentUserData );
GetNavModel()->GetRootList()->removeNoDelete( pCurrentUserData );
// remove from container
sal_Int32 nIndex = getElementPos(xContainer, xCurrentChild);
diff --git a/svx/source/form/navigatortreemodel.cxx b/svx/source/form/navigatortreemodel.cxx
index 62ce8a3..c178c68 100644
--- a/svx/source/form/navigatortreemodel.cxx
+++ b/svx/source/form/navigatortreemodel.cxx
@@ -415,10 +415,10 @@
// remove from parent
if (pFolder)
pFolder->GetChildList()->remove( pEntry );
pFolder->GetChildList()->removeNoDelete( pEntry );
else
{
GetRootList()->remove( pEntry );
GetRootList()->removeNoDelete( pEntry );
// If root has no more form, reset CurForm at shell
if ( !GetRootList()->size() )
diff --git a/svx/source/inc/fmexpl.hxx b/svx/source/inc/fmexpl.hxx
index 4f26008f..6e751c2 100644
--- a/svx/source/inc/fmexpl.hxx
+++ b/svx/source/inc/fmexpl.hxx
@@ -197,7 +197,7 @@
{ return maEntryDataList.at(Index).get(); }
size_t size() const { return maEntryDataList.size(); }
void remove( FmEntryData* pItem );
void removeNoDelete( FmEntryData* pItem );
void insert( std::unique_ptr<FmEntryData> pItem, size_t Index );
void clear();
};