summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/maintab.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 9ff5e9f31..70a9dc3cf 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -671,24 +671,30 @@ void MainTab::acceptChanges()
int scrolledBy = MainWindow::instance()->dive_list()->verticalScrollBar()->sliderPosition();
resetPallete();
if (editMode == ADD || editMode == MANUALLY_ADDED_DIVE) {
+ // it's tricky to keep the right dive selected;
+ // first remember which one is selected in the current sort order
+ // and unselect all dives
+ int rememberSelected = selected_dive;
MainWindow::instance()->dive_list()->unselectDives();
- struct dive *d = get_dive(dive_table.nr - 1);
- // mark the dive as remembered (abusing the selected flag)
+ struct dive *d = get_dive(rememberSelected);
+ // mark the previously selected dive as remembered (abusing the selected flag)
// and then clear that flag out on the other side of the sort_table()
d->selected = true;
sort_table(&dive_table);
- int i = 0;
- for_each_dive(i, d) {
+ for_each_dive(rememberSelected, d) {
if (d->selected) {
d->selected = false;
break;
}
}
+ // refreshDisplay() will select the top dive if no dive was
+ // selected - but that may not be the right one, so select the one
+ // we remembered instead
+ MainWindow::instance()->dive_list()->selectDive(rememberSelected, true);
+
editMode = NONE;
MainWindow::instance()->refreshDisplay();
- MainWindow::instance()->dive_list()->selectDive(i, true);
MainWindow::instance()->graphics()->replot();
-
} else {
editMode = NONE;
MainWindow::instance()->dive_list()->rememberSelection();