diff --git a/CHANGELOG.md b/CHANGELOG.md index e2dce6425..70f19c881 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -- update filter status when loading file [#2961] + --- * Always add new entries at the very top of this file above other existing entries and this note. diff --git a/ReleaseNotes/ReleaseNotes.txt b/ReleaseNotes/ReleaseNotes.txt index 7a888ee1c..5ea95ae60 100644 --- a/ReleaseNotes/ReleaseNotes.txt +++ b/ReleaseNotes/ReleaseNotes.txt @@ -10,6 +10,8 @@ New in _Subsurface_ 4.9.7 - profile: improve resolution in printing and export - core: fix renumbering of imported dives [#2731] - core: fix broken merging of dives with multiple cylinders +- core: make sure current dive is always selected [#2961] +- core: update filter status when loading dive list [#2961] - bluetooth/rfcomm: fix broken classic BT downloads on Linux and Windows; macOS is still broken - media: read timestamp from mvhd atom of QuickTime/MP4 style videos - planner: properly initialize salinity diff --git a/core/selection.cpp b/core/selection.cpp index d6267c78a..4912735b2 100644 --- a/core/selection.cpp +++ b/core/selection.cpp @@ -119,7 +119,10 @@ extern "C" void dump_selection(void) // or a newly selected dive. In both cases, try to select the // dive that is newer that is newer than the given date. // This mimics the old behavior when the current dive changed. -static void setClosestCurrentDive(timestamp_t when, const std::vector &selection) +// If a current dive outside of the selection was set, add +// it to the list of selected dives, so that we never end up +// in a situation where we display a non-selected dive. +static void setClosestCurrentDive(timestamp_t when, const std::vector &selection, QVector &divesToSelect) { // Start from back until we get the first dive that is before // the supposed-to-be selected dive. (Note: this mimics the @@ -144,6 +147,8 @@ static void setClosestCurrentDive(timestamp_t when, const std::vector &s // return null, but that just means unsetting the current dive (as no // dive is visible anyway). current_dive = find_next_visible_dive(when); + if (current_dive) + divesToSelect.push_back(current_dive); } // Reset the selection to the dives of the "selection" vector and send the appropriate signals. @@ -194,7 +199,7 @@ void setSelection(const std::vector &selection, dive *currentDive) current_dive = currentDive; if (current_dive && !currentDive->selected) { // Current not visible -> find a different dive. - setClosestCurrentDive(currentDive->when, selection); + setClosestCurrentDive(currentDive->when, selection, divesToSelect); } // Send the new selection