summaryrefslogtreecommitdiffstats
path: root/info.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-21 12:28:20 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-21 12:28:20 -0700
commitd94fb7ca6b4fc17dacd069522d7fad00aa69e088 (patch)
tree06afae13d3b894aa835b78af88d270aabd2c4c5f /info.c
parent51486040686592965bd7a70cf52767350cfde5f6 (diff)
parenta817f4b547b4193d31154fd0ff7f5190ccae76a5 (diff)
downloadsubsurface-d94fb7ca6b4fc17dacd069522d7fad00aa69e088.tar.gz
Merge branch 'quit-handling' of git://github.com/dirkhh/subsurface
* 'quit-handling' of git://github.com/dirkhh/subsurface: Use the last (or only) filename on command line as default for saving Show the "save changes" dialog before the main window is destroyed Check for changes at regular 'quit' events as well Catch changes to the info of the current dive when quitting Tracking changes to tanks is trivial Simplistic first attempt to get changes saved when quitting subsurface
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) \