diff options
-rw-r--r-- | mobile-widgets/qml/DiveList.qml | 3 | ||||
-rw-r--r-- | mobile-widgets/qmlmanager.cpp | 1 | ||||
-rw-r--r-- | qt-models/divelistmodel.cpp | 10 | ||||
-rw-r--r-- | qt-models/divelistmodel.h | 1 |
4 files changed, 13 insertions, 2 deletions
diff --git a/mobile-widgets/qml/DiveList.qml b/mobile-widgets/qml/DiveList.qml index 263820a46..5953c1f86 100644 --- a/mobile-widgets/qml/DiveList.qml +++ b/mobile-widgets/qml/DiveList.qml @@ -162,9 +162,8 @@ Kirigami.ScrollablePage { anchors.fill: parent enabled: parent.visible onClicked: { - parent.visible = false + deleteButtonVisible = false timer.stop() - detailsWindow.showDiveIndex(index) manager.deleteDive(dive.id) } } diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp index 296243f7e..91c73752c 100644 --- a/mobile-widgets/qmlmanager.cpp +++ b/mobile-widgets/qmlmanager.cpp @@ -1244,6 +1244,7 @@ void QMLManager::deleteDive(int id) } DiveListModel::instance()->removeDiveById(id); delete_single_dive(get_idx_by_uniq_id(id)); + DiveListModel::instance()->resetInternalData(); changesNeedSaving(); } diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp index b28bd58a3..b9fb99b1b 100644 --- a/qt-models/divelistmodel.cpp +++ b/qt-models/divelistmodel.cpp @@ -108,6 +108,16 @@ void DiveListModel::clear() } } +void DiveListModel::resetInternalData() +{ + // this is a hack. There is a long standing issue, that seems related to a + // sync problem between QML engine and underlying model data. It causes delete + // from divelist (on mobile) to crash. But not always. This function is part of + // an attempt to fix this. See commit. + beginResetModel(); + endResetModel(); +} + int DiveListModel::rowCount(const QModelIndex &) const { return m_dives.count(); diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h index 41bc9107c..3dc3d74e4 100644 --- a/qt-models/divelistmodel.h +++ b/qt-models/divelistmodel.h @@ -46,6 +46,7 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; QHash<int, QByteArray> roleNames() const; QString startAddDive(); + void resetInternalData(); Q_INVOKABLE DiveObjectHelper* at(int i); private: QList<DiveObjectHelper*> m_dives; |