diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-05-03 22:17:03 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-05-11 12:06:19 -0700 |
commit | 403206ca06cf87d64b75cafa8629956ea7cf282b (patch) | |
tree | 59a1d29131fe43ff369a38c0c95178070e892c45 | |
parent | 8eb586d1d4b5de9433239cda9a9462ba5a250058 (diff) | |
download | subsurface-403206ca06cf87d64b75cafa8629956ea7cf282b.tar.gz |
Selection: automatically unselect old selection in selectDives()
DiveListView::selectDives() would only select new dives but not clear
the old selection. Thus, callers would have to clear the selection
first. That would lead to two selection-changed signals.
Move the unselectDives() call into DiveListView::selectDives().
The DiveListView has an internal flag to prevent double signals.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r-- | desktop-widgets/divelistview.cpp | 11 | ||||
-rw-r--r-- | desktop-widgets/mapwidget.cpp | 6 |
2 files changed, 8 insertions, 9 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index 86da4ba1a..c98338061 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -277,9 +277,7 @@ void DiveListView::restoreSelection() return; selectionSaved = false; - dontEmitDiveChangedSignal = true; - unselectDives(); - dontEmitDiveChangedSignal = false; + QList<int> divesToSelect; Q_FOREACH (dive_trip_t *trip, selectedDives.keys()) { QList<int> divesOnTrip = getDivesInTrip(trip); QList<int> selectedDivesOnTrip = selectedDives.values(trip); @@ -289,8 +287,9 @@ void DiveListView::restoreSelection() selectTrip(trip); selectedDivesOnTrip.removeAll(-1); } - selectDives(selectedDivesOnTrip); + divesToSelect += selectedDivesOnTrip; } + selectDives(divesToSelect); } // This is a bit ugly: we hook directly into the tripChanged signal to @@ -417,6 +416,10 @@ void DiveListView::selectDives(const QList<int> &newDiveSelection) return; dontEmitDiveChangedSignal = true; + + // First, clear the old selection + unselectDives(); + // select the dives, highest index first - this way the oldest of the dives // becomes the selected_dive that we scroll to QList<int> sortedSelection = newDiveSelection; diff --git a/desktop-widgets/mapwidget.cpp b/desktop-widgets/mapwidget.cpp index 81f9f9419..11e6425b1 100644 --- a/desktop-widgets/mapwidget.cpp +++ b/desktop-widgets/mapwidget.cpp @@ -105,11 +105,7 @@ void MapWidget::prepareForGetDiveCoordinates(struct dive_site *ds) void MapWidget::selectedDivesChanged(const QList<int> &list) { CHECK_IS_READY_RETURN_VOID(); - skipReload = true; - MainWindow::instance()->diveList->unselectDives(); - if (!list.empty()) - MainWindow::instance()->diveList->selectDives(list); - skipReload = false; + MainWindow::instance()->diveList->selectDives(list); } void MapWidget::coordinatesChanged(struct dive_site *ds, const location_t &location) |