Index: plug-ins/common/png.c
===================================================================
RCS file: /cvs/gnome/gimp/plug-ins/common/png.c,v
retrieving revision 1.132
diff -u -r1.132 png.c
--- plug-ins/common/png.c	24 Oct 2005 15:09:49 -0000	1.132
+++ plug-ins/common/png.c	21 Nov 2005 23:54:15 -0000
@@ -1692,16 +1692,45 @@
 #endif /* PNG_LIBPNG_VER > 99 */
 }
 
+static void
+png_comment_changed (GtkTextBuffer *buffer,
+                     gpointer       data)
+{
+  gchar        *comment;
+  gint32        image_ID;
+  GtkTextIter   start, end;
+  GimpParasite *parasite;
+
+  image_ID = GPOINTER_TO_INT (data);
+  gimp_image_parasite_detach (image_ID, "gimp-comment");
+
+  gtk_text_buffer_get_bounds (buffer, &start, &end);
+  comment =  gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+  if (comment && strlen (comment))
+    {
+      parasite = gimp_parasite_new ("gimp-comment",
+                                    GIMP_PARASITE_PERSISTENT,
+                                    strlen (comment) + 1,
+                                    comment);
+      gimp_image_parasite_attach (image_ID, parasite);
+      gimp_parasite_free (parasite);
+    }
+}
+
 static gboolean
 save_dialog (gint32    image_ID,
              gboolean  alpha)
 {
-  PngSaveGui    pg;
-  GtkWidget    *dialog;
-  GtkWidget    *table;
-  GtkWidget    *toggle;
-  GtkObject    *scale;
-  GimpParasite *parasite;
+  PngSaveGui     pg;
+  GtkWidget     *dialog;
+  GtkWidget     *table;
+  GtkWidget     *toggle;
+  GtkObject     *scale;
+  GimpParasite  *parasite;
+  GtkWidget     *scrolled_window;
+  GtkTextBuffer *buffer;
+  GtkWidget     *text_view;
 
   dialog = gimp_dialog_new (_("Save as PNG"), PLUG_IN_BINARY,
                             NULL, 0,
@@ -1730,7 +1759,7 @@
                     G_CALLBACK (gtk_main_quit),
                     NULL);
 
-  table = gtk_table_new (9, 3, FALSE);
+  table = gtk_table_new (10, 3, FALSE);
   gtk_table_set_col_spacings (GTK_TABLE (table), 6);
   gtk_table_set_row_spacings (GTK_TABLE (table), 6);
   gtk_container_set_border_width (GTK_CONTAINER (table), 12);
@@ -1801,14 +1830,39 @@
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
                                 pngvals.comment && parasite != NULL);
   gtk_widget_set_sensitive (toggle, parasite != NULL);
-  gimp_parasite_free (parasite);
 
   g_signal_connect (toggle, "toggled",
                     G_CALLBACK (gimp_toggle_button_update), &pngvals.comment);
+  if (parasite)
+    {
+      gchar *comment = g_strndup (gimp_parasite_data (parasite),
+                                                gimp_parasite_data_size (parasite));
+      scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+      gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
+                                           GTK_SHADOW_IN);
+      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+                                      GTK_POLICY_AUTOMATIC,
+                                     GTK_POLICY_AUTOMATIC);
+      gtk_widget_set_size_request (scrolled_window, 250, 50);
+      gtk_table_attach (GTK_TABLE (table), scrolled_window, 0, 3, 7, 8, GTK_FILL, 0, 0, 0);
+      gtk_widget_show (scrolled_window);
+
+      text_view = gtk_text_view_new ();
+      gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
+      gtk_widget_show (text_view);
+
+      buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
+      gtk_text_buffer_set_text (buffer, comment, strlen (comment));
+      g_signal_connect (buffer, "changed",
+                        G_CALLBACK (png_comment_changed),
+                        GINT_TO_POINTER (image_ID));
+    }
+
+  gimp_parasite_free (parasite);
 
   pg.save_transp_pixels = toggle =
     gtk_check_button_new_with_mnemonic (_("Save color _values from transparent pixels"));
-  gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 7, 8, GTK_FILL, 0, 0, 0);
+  gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 8, 9, GTK_FILL, 0, 0, 0);
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
                                 alpha && pngvals.save_transp_pixels);
   gtk_widget_set_sensitive (toggle, alpha);
@@ -1819,7 +1873,7 @@
                     &pngvals.save_transp_pixels);
 
   pg.compression_level = scale =
-    gimp_scale_entry_new (GTK_TABLE (table), 0, 8,
+    gimp_scale_entry_new (GTK_TABLE (table), 0, 9,
                           _("Co_mpression level:"),
                           SCALE_WIDTH, 0,
                           pngvals.compression_level,
