mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Mobile: replace model-reset by row-addition in DiveListModel::reload()
Owing to apparent QML breakage, a model-reset leads to the DiveDetail page being reloaded for every dive in the list(!). Therefore, add rows instead. This leads to extremely subtle code, as it is now imperative that the model has been properly cleared beforehand. Nevertheless, for now we have to do this to fix a severe performance regression. Fixes #2295 Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
649ac1f83a
commit
eecca6aab0
3 changed files with 13 additions and 5 deletions
|
@ -73,7 +73,7 @@ int DiveListSortModel::getIdxForId(int id)
|
|||
void DiveListSortModel::reload()
|
||||
{
|
||||
DiveListModel *mySourceModel = qobject_cast<DiveListModel *>(sourceModel());
|
||||
mySourceModel->reload();
|
||||
mySourceModel->resetInternalData();
|
||||
}
|
||||
|
||||
// In QtQuick ListView, section headings can only be strings. To identify dives
|
||||
|
@ -180,8 +180,16 @@ void DiveListModel::clear()
|
|||
|
||||
void DiveListModel::reload()
|
||||
{
|
||||
beginResetModel();
|
||||
endResetModel();
|
||||
// Note: instead of doing a (logical) beginResetModel()/endResetModel(),
|
||||
// we add the rows (if any). The reason is that a beginResetModel()/endResetModel()
|
||||
// pair resulted in the DiveDetailsPage being renedered for *every* dive in
|
||||
// the list. It is unclear whether this is a Qt-bug or intended insanity.
|
||||
// Therefore, this function must only be called after having called clear().
|
||||
// Otherwise the model will become inconsistent!
|
||||
if (dive_table.nr > 0) {
|
||||
beginInsertRows(QModelIndex(), 0, dive_table.nr - 1);
|
||||
endInsertRows();
|
||||
}
|
||||
}
|
||||
|
||||
void DiveListModel::resetInternalData()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue