]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Fix single-dive editing oddity
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Aug 2012 22:37:38 +0000 (15:37 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Aug 2012 22:37:38 +0000 (15:37 -0700)
The multi-dive case does fine, but the single-dive case (used when
adding a dive, for example) was somewhat confused between the dive index
(which is the location in the dive array) and the dive number.

Fix this by just passing the dive pointer instead (where NULL means to
use the current dive selection).

Reported-by: Jacco van Koll <jacco.van.koll@gmail.com>
Root-caused-by: Dirk Hohndel <dirk@hohndel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
dive.h
divelist.c
info.c

diff --git a/dive.h b/dive.h
index cc27ab861d8622d3482799a45b773c53a791ef48..7ceab643ad2f1a4ced9661867266ca1ee6ffce06 100644 (file)
--- a/dive.h
+++ b/dive.h
@@ -355,7 +355,7 @@ extern void evn_foreach(void (*callback)(const char *, int *, void *), void *dat
 
 extern int add_new_dive(struct dive *dive);
 extern int edit_dive_info(struct dive *dive);
-extern int edit_multi_dive_info(int idx);
+extern int edit_multi_dive_info(struct dive *single_dive);
 extern void dive_list_update_dives(void);
 extern void flush_divelist(struct dive *dive);
 
index ef34b065c667ccd2f0fd4b533310c2ba50273888..3fd53ffa5309e1f5a65a98241d421209627417fb 100644 (file)
@@ -1108,7 +1108,7 @@ void add_dive_cb(GtkWidget *menuitem, gpointer data)
 
 void edit_dive_cb(GtkWidget *menuitem, gpointer data)
 {
-       edit_multi_dive_info(-1);
+       edit_multi_dive_info(NULL);
 }
 
 static void expand_all_cb(GtkWidget *menuitem, GtkTreeView *tree_view)
diff --git a/info.c b/info.c
index 468f35772365163be535d1da558b8a299c1336b6..242e4b24d5823bfb580c23e86af974316fabbaeb 100644 (file)
--- a/info.c
+++ b/info.c
@@ -166,7 +166,7 @@ static int delete_dive_info(struct dive *dive)
 
 static void info_menu_edit_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
-       edit_multi_dive_info(-1);
+       edit_multi_dive_info(NULL);
 }
 
 static void info_menu_delete_cb(GtkMenuItem *menuitem, gpointer user_data)
@@ -490,7 +490,7 @@ void update_equipment_data(struct dive *dive, struct dive *master)
 }
 
 /* A negative index means "all selected" */
-int edit_multi_dive_info(int index)
+int edit_multi_dive_info(struct dive *single_dive)
 {
        int success;
        GtkWidget *dialog, *vbox;
@@ -505,17 +505,17 @@ int edit_multi_dive_info(int index)
                NULL);
 
        vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
-       master = get_dive(index);
+       master = single_dive;
        if (!master)
                master = current_dive;
-       dive_info_widget(vbox, master, &info, index < 0);
+       dive_info_widget(vbox, master, &info, !single_dive);
        show_dive_equipment(master, W_IDX_SECONDARY);
        save_equipment_data(master);
        gtk_widget_show_all(dialog);
        success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT;
        if (success) {
                /* Update the non-current selected dives first */
-               if (index < 0) {
+               if (!single_dive) {
                        int i;
                        struct dive *dive;
 
@@ -544,12 +544,9 @@ int edit_multi_dive_info(int index)
 
 int edit_dive_info(struct dive *dive)
 {
-       int idx;
-
        if (!dive)
                return 0;
-       idx = dive->number;
-       return edit_multi_dive_info(idx);
+       return edit_multi_dive_info(dive);
 }
 
 static GtkWidget *frame_box(GtkWidget *vbox, const char *fmt, ...)