]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Make the cylinder 'delete' action actually delete the cylinder info
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 2 Oct 2011 23:58:53 +0000 (16:58 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 2 Oct 2011 23:58:53 +0000 (16:58 -0700)
It used to just update the cylinder list widget data, not the actual
dive information.

It still needs an "accept or cancel" dialog, I suspect.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
equipment.c

index 7c70c6bf288129b80ff4247077cf258da13c7d1d..d237b1b32f8bc60f82933ba8ac90fff3331d5b50 100644 (file)
@@ -524,10 +524,12 @@ static void add_cb(GtkButton *button, gpointer data)
 
 static void del_cb(GtkButton *button, gpointer data)
 {
-       int index;
+       int index, nr;
        GtkTreeIter iter;
        GtkListStore *model = cylinder_list.model;
        GtkTreeSelection *selection;
+       struct dive *dive;
+       cylinder_t *cyl;
 
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cylinder_list.tree_view));
 
@@ -536,6 +538,13 @@ static void del_cb(GtkButton *button, gpointer data)
                return;
 
        gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CYL_INDEX, &index, -1);
+
+       dive = current_dive;
+       if (!dive)
+               return;
+       cyl = dive->cylinder + index;
+       nr = cylinder_list.max_index - index - 1;
+
        if (gtk_list_store_remove(model, &iter)) {
                do {
                        gtk_list_store_set(model, &iter, CYL_INDEX, index, -1);
@@ -544,6 +553,12 @@ static void del_cb(GtkButton *button, gpointer data)
        }
 
        cylinder_list.max_index--;
+       memmove(cyl, cyl+1, nr*sizeof(*cyl));
+       memset(cyl+nr, 0, sizeof(*cyl));
+
+       mark_divelist_changed(TRUE);
+       flush_divelist(dive);
+
        gtk_widget_set_sensitive(cylinder_list.edit, 0);
        gtk_widget_set_sensitive(cylinder_list.del, 0);
        gtk_widget_set_sensitive(cylinder_list.add, 1);