diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-21 12:28:20 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-21 12:28:20 -0700 |
commit | d94fb7ca6b4fc17dacd069522d7fad00aa69e088 (patch) | |
tree | 06afae13d3b894aa835b78af88d270aabd2c4c5f /info.c | |
parent | 51486040686592965bd7a70cf52767350cfde5f6 (diff) | |
parent | a817f4b547b4193d31154fd0ff7f5190ccae76a5 (diff) | |
download | subsurface-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.c | 37 |
1 files changed, 33 insertions, 4 deletions
@@ -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) \ |