- gtk_tree_model_get_value(model, &iter, DIVE_INDEX, &value);
- /* an index of -1 should mean select all dives from that day
- * ===> still needs to be implemented */
- selected_dive = g_value_get_int(&value);
+ gtk_tree_model_get(model, &iter, DIVE_INDEX, &selected_dive, -1);
+ /* a negative index means we picked a summary entry;
+ expand that entry and use first real child instead */
+ while (selected_dive < 0) {
+ GtkTreeIter parent;
+ GtkTreePath *tpath;
+ memcpy(&parent, &iter, sizeof(parent));
+ tpath = gtk_tree_model_get_path(model, &parent);
+ if (!gtk_tree_model_iter_children(model, &iter, &parent))
+ /* we should never have a parent without child */
+ return;
+ if(gtk_tree_view_row_expanded(GTK_TREE_VIEW(dive_list.tree_view), tpath))
+ gtk_tree_view_collapse_row(GTK_TREE_VIEW(dive_list.tree_view), tpath);
+ else
+ gtk_tree_view_expand_row(GTK_TREE_VIEW(dive_list.tree_view), tpath, FALSE);
+ gtk_tree_model_get(model, &iter, DIVE_INDEX, &selected_dive, -1);
+ }