[pan2: 52/68] Add support for Face header.



commit a390304594b4145e7ecc42911c10c970fa7226d5
Author: K. Haley <haleykd users sf net>
Date:   Wed Aug 18 16:41:23 2010 -0600

    Add support for Face header.

 pan/gui/body-pane.cc |   27 ++++++++++++++++++++++++---
 pan/gui/body-pane.h  |    1 +
 2 files changed, 25 insertions(+), 3 deletions(-)
---
diff --git a/pan/gui/body-pane.cc b/pan/gui/body-pane.cc
index 6090f3a..19b9b69 100644
--- a/pan/gui/body-pane.cc
+++ b/pan/gui/body-pane.cc
@@ -27,6 +27,7 @@ extern "C" {
   #include <gdk/gdkkeysyms.h>
   #include <gmime/gmime.h>
 }
+#include <gdk-pixbuf/gdk-pixbuf.h>
 #include <pan/general/debug.h>
 #include <pan/general/log.h>
 #include <pan/general/macros.h>
@@ -1062,13 +1063,30 @@ BodyPane :: set_text_from_message (GMimeMessage * message)
   gtk_label_set_width_chars (GTK_LABEL(_headers), (int)w);
 
   // set the x-face...
-  GdkPixmap *pixmap = NULL;
   const char * pch = message ? g_mime_object_get_header ((GMimeObject *) message, "X-Face") : 0;
   if (pch && _xface->window)
+  {
+    GdkPixmap *pixmap = NULL;
     pixmap = pan_gdk_pixmap_create_from_x_face (_xface->window, pch);
-  gtk_image_set_from_pixmap (GTK_IMAGE(_xface), pixmap, NULL);
-  if (pixmap)
+    gtk_image_set_from_pixmap (GTK_IMAGE(_xface), pixmap, NULL);
+    gtk_image_set_from_pixmap (GTK_IMAGE(_face), pixmap, NULL);
     g_object_unref (pixmap);
+  }
+  // set the face
+  pch = message ? g_mime_object_get_header ((GMimeObject *) message, "Face") : 0;
+  if (pch && _face->window)
+  {
+    GMimeEncoding dec;
+    g_mime_encoding_init_decode(&dec, GMIME_CONTENT_ENCODING_BASE64);
+    guchar buf[1024];
+    int len = g_mime_encoding_step(&dec, pch, strlen(pch), (char*)buf);
+    GdkPixbufLoader *pl = gdk_pixbuf_loader_new_with_type( "png", NULL);
+    gdk_pixbuf_loader_write(pl, buf, len, NULL);
+    gdk_pixbuf_loader_close(pl, NULL);
+    GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf(pl);
+    gtk_image_set_from_pixbuf (GTK_IMAGE(_face), pixbuf);
+    g_object_unref(pl);
+  }
 
   // set the terse headers...
   s.clear ();
@@ -1368,6 +1386,9 @@ BodyPane :: BodyPane (Data& data, ArticleCache& cache, Prefs& prefs):
   w = _xface = gtk_image_new ();
   gtk_widget_set_size_request (w, 48, 48);
   gtk_box_pack_start (GTK_BOX(hbox), w, false, false, PAD_SMALL);
+  w = _face = gtk_image_new ();
+  gtk_widget_set_size_request (w, 48, 48);
+  gtk_box_pack_start (GTK_BOX(hbox), w, false, false, PAD_SMALL);
   gtk_widget_show_all (_verbose);
 
   // setup
diff --git a/pan/gui/body-pane.h b/pan/gui/body-pane.h
index be878aa..1e73437 100644
--- a/pan/gui/body-pane.h
+++ b/pan/gui/body-pane.h
@@ -107,6 +107,7 @@ namespace pan
       GtkWidget * _verbose;
       GtkWidget * _headers;
       GtkWidget * _xface;
+      GtkWidget * _face;
       GtkTextBuffer * _buffer;
       GtkWidget * _root;
       GtkWidget * _text;



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