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);
|
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)
|
void show_and_select_dive(struct dive *dive)
|
||||||
{
|
{
|
||||||
GtkTreeSelection *selection;
|
GtkTreeSelection *selection;
|
||||||
|
|
@ -2869,26 +2882,12 @@ void show_and_select_dive(struct dive *dive)
|
||||||
return;
|
return;
|
||||||
iter = get_iter_from_idx(divenr);
|
iter = get_iter_from_idx(divenr);
|
||||||
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dive_list.tree_view));
|
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dive_list.tree_view));
|
||||||
gtk_tree_selection_unselect_all(selection);
|
|
||||||
for_each_dive(i, odive)
|
for_each_dive(i, odive)
|
||||||
odive->selected = FALSE;
|
odive->selected = FALSE;
|
||||||
amount_selected = 1;
|
amount_selected = 1;
|
||||||
|
selected_dive = divenr;
|
||||||
dive->selected = TRUE;
|
dive->selected = TRUE;
|
||||||
gtk_tree_selection_select_iter(selection, iter);
|
go_to_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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void select_next_dive(void)
|
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;
|
master = single_dive;
|
||||||
if (!master)
|
if (!master)
|
||||||
master = current_dive;
|
master = current_dive;
|
||||||
|
if (!master)
|
||||||
|
return 0;
|
||||||
/* See if we should use multi dive mode */
|
/* See if we should use multi dive mode */
|
||||||
multi = FALSE;
|
multi = FALSE;
|
||||||
if (!single_dive) {
|
if (!single_dive) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue