[Gimp-developer] Fix for the mail plugin [was Re: Fix for the gif plugin.]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Sep 09, 2001 at 08:09:19PM +0200, Sven Neumann wrote:
> Hi,
> 
> David Odin <dindinx@xxxxxxxxxx> writes:
> 
> >   OK. I've attached a similar patch for the gif plugin. It does
> > basically the same thing as my patch for the jpeg plugin (replacing a
> > GtkText by a GtkTextView/GtkTextBuffer couple).
> > 
> >   I've two question about this plugin:
> >    - why gifload and gif are kept separated, when, for most image
> >      formats, the loader and the saver is in the same plugin?
> >    - the code of gif.c looks unmaintained, and rather dirty (lots of
> >      code commented out, define for "FACEHUGGERS", no real copyright
> >      notice, etc.) Who is the current maintainer?
> 
> as stated in PLUGIN_MAINTAINERS Adam D. Moss <adam@xxxxxxxx> maintains
> the gif plug-ins. He should be able to tell you why he chose two 
> separate plug-ins (licensing?!). Oh, and yes, Adam has this very special 
> british humour that makes his code fun to read...
> 
  Yes, Adam's code is fun to read. I particulary appreciated the joke
about the Facehuggers, since I'm a big fan of the Alien tetralogy. But
what about the commented out code? I really think the gif.c file need a
little clean up. What to you think, Adam?

  Anyway, you'll find a fix for the mail-plugin attached to this mail.
This fix restore the mail plugin to the state it was in the 1.2 release.
Nevertheless, I think it could be improved in some ways. For instance,
the mime type is deduced from the filename the user has to write. May be
we should provide a list of supported format in an optionmenu. I'll see
how this could be implemented.

  A part from this, I've noticed that the plugindetail and nlfilt are
still commented out in plugin-defs.pl.
  I don't know what nlfilt is supposed to do, but the UI seems to work
ok, and plugindetail works as it is supposed to work.
  Why are these two plugin disabled?

              Regards,

                         DindinX

-- 
dindinx@xxxxxxxxxx
Today is the tomorrow you worried about yesterday.
--- gimp/plug-ins/common/mail.c.orig	Tue Sep 11 22:48:03 2001
+++ gimp/plug-ins/common/mail.c	Tue Sep 11 23:14:51 2001
@@ -140,12 +140,12 @@
 				     gint32  run_mode);
 
 static gint   save_dialog          (void);
-static void   ok_callback          (GtkWidget *widget,
-				    gpointer   data);
-static void   mail_entry_callback  (GtkWidget *widget,
-				    gpointer   data);
-static void   mesg_body_callback   (GtkWidget *widget,
-				    gpointer   data);
+static void   ok_callback          (GtkWidget     *widget,
+				    gpointer       data);
+static void   mail_entry_callback  (GtkWidget     *widget,
+				    gpointer       data);
+static void   mesg_body_callback   (GtkTextBuffer *buffer,
+				    gpointer       data);
 
 static gint   valid_file     (gchar *filename);
 static void   create_headers (FILE  *mailpipe);
@@ -189,7 +189,7 @@
 			  if you prefer that as the default */
 };
 
-static gchar * mesg_body = "\0";
+static gchar * mesg_body = NULL;
 static gint    run_flag  = 0;
 
 MAIN ()
@@ -436,14 +436,14 @@
 static gint
 save_dialog (void)
 {
-  GtkWidget *dlg;
-  GtkWidget *entry;
-  GtkWidget *table;
-  GtkWidget *table2;
-  GtkWidget *label;
-  GtkWidget *vbox;
-  GtkWidget *text;
-  GtkWidget *vscrollbar;
+  GtkWidget     *dlg;
+  GtkWidget     *entry;
+  GtkWidget     *table;
+  GtkWidget     *label;
+  GtkWidget     *vbox;
+  GtkWidget     *scrolled_window;
+  GtkWidget     *text_view;
+  GtkTextBuffer *text_buffer;
 
   gchar      buffer[BUFFER_SIZE];
   gchar     *gump_from;
@@ -545,34 +545,30 @@
 		      &mail_info.filename);
 
   /* comment  */
-  table2 = gtk_table_new (2, 2, FALSE);
-  gtk_table_set_row_spacing (GTK_TABLE (table2), 0, 2);
-  gtk_table_set_col_spacing (GTK_TABLE (table2), 0, 2);
-
-  gtk_table_attach (GTK_TABLE (table), table2, 
-		    0, 2, 5, 6,
-		    GTK_EXPAND | GTK_FILL,
-		    GTK_EXPAND | GTK_FILL,
-		    0, 0);
-
-  text = gtk_text_new (NULL, NULL);
-  gtk_text_set_editable (GTK_TEXT (text), TRUE);
-  gtk_table_attach (GTK_TABLE (table2), text, 
-		    0, 1, 0, 1,
-		    GTK_EXPAND | GTK_FILL,
-		    GTK_EXPAND | GTK_FILL,
-		    0, 0);
-  gtk_widget_set_usize (text, 200, 100);
-  gtk_widget_show (text);
-  gtk_signal_connect (GTK_OBJECT (text), "changed",
-		      GTK_SIGNAL_FUNC (mesg_body_callback),
-		      mesg_body);
-  gtk_widget_show (table2);
-
-  vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj);
-  gtk_table_attach (GTK_TABLE (table2), vscrollbar, 1, 2, 0, 1,
-		    GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
-  gtk_widget_show (vscrollbar);
+  scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 4);
+  gtk_table_attach (GTK_TABLE (table), scrolled_window,
+                    0, 2, 5, 6,
+                    GTK_EXPAND | GTK_FILL,
+                    GTK_EXPAND | GTK_FILL,
+                    0, 0);
+  gtk_widget_show (scrolled_window);
+
+  text_buffer = gtk_text_buffer_new (NULL);
+
+  text_view = gtk_text_view_new_with_buffer (text_buffer);
+  gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), GTK_WRAP_WORD);
+  gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
+  gtk_widget_show (text_view);
+
+  g_object_unref (G_OBJECT (text_buffer));
+
+  g_signal_connect (G_OBJECT (text_buffer), "changed",
+                    G_CALLBACK (mesg_body_callback),
+		    NULL);
 
   /* Encapsulation label */
   label = gtk_label_new (_("Encapsulation:"));
@@ -724,11 +720,19 @@
 }
 
 static void 
-mesg_body_callback (GtkWidget *widget,
-		    gpointer   data)
+mesg_body_callback (GtkTextBuffer *buffer,
+		    gpointer       data)
 {
-  mesg_body = gtk_editable_get_chars (GTK_EDITABLE (widget), 0,
-				      gtk_text_get_length (GTK_TEXT (widget)));
+  GtkTextIter   start_iter;
+  GtkTextIter   end_iter;
+  gchar        *text;
+
+  gtk_text_buffer_get_bounds (buffer, &start_iter, &end_iter);
+  gtk_text_iter_backward_char (&end_iter);
+
+  if (mesg_body)
+    g_free (mesg_body);
+  mesg_body = gtk_text_buffer_get_text (buffer, &start_iter, &end_iter, FALSE);
 } 
 
 static void
@@ -757,7 +761,8 @@
     }
   fprintf (mailpipe, mail_info.comment);
   fprintf (mailpipe, "\n\n");
-  fprintf (mailpipe, mesg_body); 
+  if (mesg_body)
+    fprintf (mailpipe, mesg_body); 
   fprintf (mailpipe, "\n\n");
   if (mail_info.encapsulation == ENCAPSULATION_MIME )
     {

[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux