diff options
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/divelistview.cpp | 8 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 11 |
2 files changed, 14 insertions, 5 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 117d02247..0d0d999f4 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -189,13 +189,19 @@ void DiveListView::selectTrip(dive_trip_t *trip) void DiveListView::unselectDives() { + // make sure we don't try to redraw the dives during the selection change + selected_dive = -1; + amount_selected = 0; + // clear the Qt selection selectionModel()->clearSelection(); // clearSelection should emit selectionChanged() but sometimes that // appears not to happen + // since we are unselecting all dives there is no need to use deselect_dive() - that + // would only cause pointless churn int i; struct dive *dive; for_each_dive(i, dive) { - deselect_dive(i); + dive->selected = false; } } diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 6bb6f14f8..f381d72d5 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -671,7 +671,10 @@ void MainTab::acceptChanges() struct dive *added_dive = clone_dive(&displayed_dive); record_dive(added_dive); addedId = added_dive->id; - // unselect everything as far as the UI is concerned - we'll fix that below + // unselect everything as far as the UI is concerned and select the new + // dive - we'll have to undo/redo this later after we resort the dive_table + // but we need the dive selected for the middle part of this function - this + // way we can reuse the code used for editing dives MainWindow::instance()->dive_list()->unselectDives(); selected_dive = get_divenr(added_dive); amount_selected = 1; @@ -779,12 +782,12 @@ void MainTab::acceptChanges() int scrolledBy = MainWindow::instance()->dive_list()->verticalScrollBar()->sliderPosition(); resetPallete(); if (editMode == ADD || editMode == MANUALLY_ADDED_DIVE) { - // now let's resort the dive list and make sure the newly added dive is still selected - selected_dive = -1; - amount_selected = 0; + // since a newly added dive could be in the middle of the dive_table we need + // to resort the dive list and make sure the newly added dive gets selected again sort_table(&dive_table); MainWindow::instance()->dive_list()->reload(DiveTripModel::CURRENT, true); int newDiveNr = get_divenr(get_dive_by_uniq_id(addedId)); + MainWindow::instance()->dive_list()->unselectDives(); MainWindow::instance()->dive_list()->selectDive(newDiveNr, true); editMode = NONE; MainWindow::instance()->refreshDisplay(); |