]> git.tdb.fi Git - ext/subsurface.git/blobdiff - info.c
Don't do individual 'gtk_widget_show()' calls
[ext/subsurface.git] / info.c
diff --git a/info.c b/info.c
index 9e061970d808ba14bb18d9c259de638781b0c0af..aa38c053ecaefd74482a0ee6d46c98fc6c3b7b89 100644 (file)
--- 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) \
@@ -122,7 +151,6 @@ static GtkTextBuffer *text_view(GtkWidget *box, const char *label)
        GtkWidget* scrolled_window = gtk_scrolled_window_new(0, 0);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
-       gtk_widget_show(scrolled_window);
 
        view = gtk_text_view_new();
        gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);