summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--divelist.c42
-rw-r--r--divelist.h3
-rw-r--r--main.c1
3 files changed, 33 insertions, 13 deletions
diff --git a/divelist.c b/divelist.c
index d215fd236..9c1510664 100644
--- a/divelist.c
+++ b/divelist.c
@@ -232,23 +232,14 @@ static void get_sac(struct dive *dive, int *val, char **str)
*str = strdup(buffer);
}
-static gboolean set_one_dive(GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
+static void fill_one_dive(struct dive *dive,
+ GtkTreeModel *model,
+ GtkTreeIter *iter)
{
- GValue value = {0, };
- struct dive *dive;
int date, depth, duration, temp, nitrox, sac;
char *datestr, *depthstr, *durationstr, *tempstr, *nitroxstr, *sacstr;
char *location;
- /* Get the dive number */
- gtk_tree_model_get_value(model, iter, DIVE_INDEX, &value);
- dive = get_dive(g_value_get_int(&value));
- if (!dive)
- return TRUE;
-
get_date(dive, &date, &datestr);
get_depth(dive, &depth, &depthstr);
get_duration(dive, &duration, &durationstr);
@@ -273,8 +264,33 @@ static gboolean set_one_dive(GtkTreeModel *model,
DIVE_SACSTR, sacstr,
DIVE_SAC, sac,
-1);
+}
+
+static gboolean set_one_dive(GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ GValue value = {0, };
+ struct dive *dive;
+
+ /* Get the dive number */
+ gtk_tree_model_get_value(model, iter, DIVE_INDEX, &value);
+ dive = get_dive(g_value_get_int(&value));
+ if (!dive)
+ return TRUE;
+ if (data && dive != data)
+ return FALSE;
+
+ fill_one_dive(dive, model, iter);
+ return dive == data;
+}
+
+void flush_divelist(struct DiveList *dive_list, struct dive *dive)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL(dive_list->model);
- return FALSE;
+ gtk_tree_model_foreach(model, set_one_dive, dive);
}
void update_dive_list_units(struct DiveList *dive_list)
diff --git a/divelist.h b/divelist.h
index e0ab1137c..46598b14f 100644
--- a/divelist.h
+++ b/divelist.h
@@ -11,9 +11,12 @@ struct DiveList {
GtkTreeViewColumn *temperature, *nitrox, *sac;
};
+struct dive;
+
extern struct DiveList dive_list;
extern struct DiveList dive_list_create(void);
extern void dive_list_update_dives(struct DiveList);
extern void update_dive_list_units(struct DiveList *);
+extern void flush_divelist(struct DiveList *, struct dive *);
#endif
diff --git a/main.c b/main.c
index 7c7ec8c3e..f91663276 100644
--- a/main.c
+++ b/main.c
@@ -98,6 +98,7 @@ void update_dive(struct dive *new_dive)
if (old_dive) {
flush_dive_info_changes(old_dive);
flush_dive_equipment_changes(old_dive);
+ flush_divelist(&dive_list, old_dive);
}
if (new_dive) {
show_dive_info(new_dive);