diff options
-rw-r--r-- | qt-ui/maintab.cpp | 18 |
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(); |