Fix crash on removing bookmarks

This commit is contained in:
Nyall Dawson 2019-09-04 18:57:31 +10:00
parent 6ec919e67c
commit 282d88b43f
2 changed files with 14 additions and 2 deletions

View File

@ -230,10 +230,14 @@ bool QgsBookmarkManagerModel::removeRows( int row, int count, const QModelIndex
{
beginRemoveRows( parent, row, row + count );
QList< QgsBookmark > bookmarks = mManager->bookmarks();
QList< QgsBookmark > appBookmarks = mManager->bookmarks();
QList< QgsBookmark > projectBookmarks = mProjectManager->bookmarks();
for ( int r = row + count - 1; r >= row; --r )
{
mManager->removeBookmark( bookmarks.at( r ).id() );
if ( r >= appBookmarks.count() )
mProjectManager->removeBookmark( projectBookmarks.at( r - appBookmarks.size() ).id() );
else
mManager->removeBookmark( appBookmarks.at( r ).id() );
}
endRemoveRows();
return true;

View File

@ -235,6 +235,14 @@ class TestQgsBookmarkManagerModel(unittest.TestCase):
self.assertEqual([b.name() for b in app_manager.bookmarks()], ['new name', 'new name 2'])
self.assertFalse(model.setData(model.index(1, 7), Qt.Unchecked, Qt.CheckStateRole))
# remove rows
model.removeRows(0, 1)
self.assertEqual([b.name() for b in project_manager.bookmarks()], ['b2'])
self.assertEqual([b.name() for b in app_manager.bookmarks()], ['new name 2'])
model.removeRows(0, 2)
self.assertEqual([b.name() for b in project_manager.bookmarks()], [])
self.assertEqual([b.name() for b in app_manager.bookmarks()], [])
if __name__ == '__main__':
unittest.main()