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>
This commit is contained in:
Dirk Hohndel 2011-09-20 21:29:09 -07:00
parent b4c4a29a11
commit f459c2ec22
4 changed files with 73 additions and 12 deletions

37
info.c
View file

@ -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) \