mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Make sure that the planned dive is selected
With the changes to the selection logic the selected_dive variable didn't get updated at the end of planning a dive. With an empty dive list that could cause selected_dive to be -1 which would subsequently cause a SIGSEGV when trying to edit the newly created dive. With this commit we use the shared go_to_iter() function and also make sure that selected_dive is set correctly. Reported-by: Sergey Starosek <sergey.starosek@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
b93f2ec6c3
commit
de7d5b2d5b
2 changed files with 17 additions and 17 deletions
31
divelist.c
31
divelist.c
|
@ -2856,6 +2856,19 @@ static void scroll_to_selected(GtkTreeIter *iter)
|
|||
gtk_tree_path_free(treepath);
|
||||
}
|
||||
|
||||
static void go_to_iter(GtkTreeSelection *selection, GtkTreeIter *iter)
|
||||
{
|
||||
GtkTreePath *path;
|
||||
|
||||
scroll_to_selected(iter);
|
||||
gtk_tree_selection_unselect_all(selection);
|
||||
gtk_tree_selection_select_iter(selection, iter);
|
||||
|
||||
path = gtk_tree_model_get_path(GTK_TREE_MODEL(dive_list.model), iter);
|
||||
gtk_tree_view_set_cursor(GTK_TREE_VIEW(dive_list.tree_view), path, NULL, FALSE);
|
||||
gtk_tree_path_free(path);
|
||||
}
|
||||
|
||||
void show_and_select_dive(struct dive *dive)
|
||||
{
|
||||
GtkTreeSelection *selection;
|
||||
|
@ -2869,26 +2882,12 @@ void show_and_select_dive(struct dive *dive)
|
|||
return;
|
||||
iter = get_iter_from_idx(divenr);
|
||||
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dive_list.tree_view));
|
||||
gtk_tree_selection_unselect_all(selection);
|
||||
for_each_dive(i, odive)
|
||||
odive->selected = FALSE;
|
||||
amount_selected = 1;
|
||||
selected_dive = divenr;
|
||||
dive->selected = TRUE;
|
||||
gtk_tree_selection_select_iter(selection, iter);
|
||||
scroll_to_selected(iter);
|
||||
}
|
||||
|
||||
static void go_to_iter(GtkTreeSelection *selection, GtkTreeIter *iter)
|
||||
{
|
||||
GtkTreePath *path;
|
||||
|
||||
scroll_to_selected(iter);
|
||||
gtk_tree_selection_unselect_all(selection);
|
||||
gtk_tree_selection_select_iter(selection, iter);
|
||||
|
||||
path = gtk_tree_model_get_path(GTK_TREE_MODEL(dive_list.model), iter);
|
||||
gtk_tree_view_set_cursor(GTK_TREE_VIEW(dive_list.tree_view), path, NULL, FALSE);
|
||||
gtk_tree_path_free(path);
|
||||
go_to_iter(selection, iter);
|
||||
}
|
||||
|
||||
void select_next_dive(void)
|
||||
|
|
3
info.c
3
info.c
|
@ -906,7 +906,8 @@ int edit_multi_dive_info(struct dive *single_dive)
|
|||
master = single_dive;
|
||||
if (!master)
|
||||
master = current_dive;
|
||||
|
||||
if (!master)
|
||||
return 0;
|
||||
/* See if we should use multi dive mode */
|
||||
multi = FALSE;
|
||||
if (!single_dive) {
|
||||
|
|
Loading…
Add table
Reference in a new issue