aboutsummaryrefslogtreecommitdiffstats
path: root/info.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2011-09-20 21:29:09 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2011-09-21 11:28:36 -0700
commitf459c2ec22839a4a208ea833bdb1e0b87a6799b4 (patch)
tree88c9a0b217c6e6e1975b91bd421845ccd31c2830 /info.c
parentb4c4a29a11ff82dacfe3a145fe4eedaae2341151 (diff)
downloadsubsurface-f459c2ec22839a4a208ea833bdb1e0b87a6799b4.tar.gz
Simplistic first attempt to get changes saved when quitting subsurface
Track whether things changed in the global dive_list So far this actually works if changing dive info (but only if dive selected was changed after the dive info was changed). We are not tracking changes to the cylinder information, yet. also remove the duplicate static dive_list Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'info.c')
-rw-r--r--info.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/info.c b/info.c
index 9e061970d..e79a80b38 100644
--- a/info.c
+++ b/info.c
@@ -33,30 +33,59 @@ static char *get_text(GtkTextBuffer *buffer)
return gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
}
+/* old is NULL or a valid string, new is a valid string
+ * NOTW: NULL and "" need to be treated as "unchanged" */
+static int text_changed(char *old, char *new)
+{
+ return ((old && strcmp(old,new)) ||
+ (!old && strcmp("",new)));
+}
+
void flush_dive_info_changes(struct dive *dive)
{
+ char *old_text;
+ int changed = 0;
+
if (!dive)
return;
if (location_changed) {
- g_free(dive->location);
+ old_text = dive->location;
dive->location = gtk_editable_get_chars(GTK_EDITABLE(location), 0, -1);
+ if (text_changed(old_text,dive->location))
+ changed = 1;
+ if (old_text)
+ g_free(old_text);
}
if (divemaster_changed) {
- g_free(dive->divemaster);
+ old_text = dive->divemaster;
dive->divemaster = gtk_editable_get_chars(GTK_EDITABLE(divemaster), 0, -1);
+ if (text_changed(old_text,dive->divemaster))
+ changed = 1;
+ if (old_text)
+ g_free(old_text);
}
if (buddy_changed) {
- g_free(dive->buddy);
+ old_text = dive->buddy;
dive->buddy = gtk_editable_get_chars(GTK_EDITABLE(buddy), 0, -1);
+ if (text_changed(old_text,dive->buddy))
+ changed = 1;
+ if (old_text)
+ g_free(old_text);
}
if (notes_changed) {
- g_free(dive->notes);
+ old_text = dive->notes;
dive->notes = get_text(notes);
+ if (text_changed(old_text,dive->notes))
+ changed = 1;
+ if (old_text)
+ g_free(old_text);
}
+ if (changed)
+ mark_divelist_changed(TRUE);
}
#define SET_TEXT_ENTRY(x) \