sync with 0.8.5cvs17
[claws.git] / src / textview.c
index ba03b07e0f72d8fd3323904228134e543d7c9e40..309633efaaa0da283f991907a8ba565a2bb5666a 100644 (file)
 #include "addressbook.h"
 #include "displayheader.h"
 #include "account.h"
-
-#define FONT_LOAD(font, s) \
-{ \
-       gchar *fontstr, *p; \
- \
-       Xstrdup_a(fontstr, s, ); \
-       if ((p = strchr(fontstr, ',')) != NULL) *p = '\0'; \
-       font = gdk_font_load(fontstr); \
-       if (!font) \
-               g_warning("Couldn't load the font '%s'\n", fontstr); \
-}
+#include "mimeview.h"
 
 typedef struct _RemoteURI      RemoteURI;
 
@@ -78,6 +68,13 @@ static GdkColor quote_colors[3] = {
        {(gulong)0, (gushort)0, (gushort)0, (gushort)0}
 };
 
+static GdkColor signature_color = {
+       (gulong)0,
+       (gushort)0x7fff,
+       (gushort)0x7fff,
+       (gushort)0x7fff
+};
+       
 static GdkColor uri_color = {
        (gulong)0,
        (gushort)0,
@@ -168,7 +165,7 @@ TextView *textview_create(void)
        GtkWidget *text_sb;
        GtkWidget *text_mb;
 
-       debug_print(_("Creating text view...\n"));
+       debug_print("Creating text view...\n");
        textview = g_new0(TextView, 1);
 
        scrolledwin_sb = gtk_scrolled_window_new(NULL, NULL);
@@ -195,7 +192,7 @@ TextView *textview_create(void)
                GtkStyle *style;
                GdkFont *font;
 
-               FONT_LOAD(font, prefs_common.normalfont);
+               font = gtkut_font_load_from_fontset(prefs_common.normalfont);
                if (font) {
                        style = gtk_style_copy(text_sb->style);
                        gdk_font_unref(style->font);
@@ -288,9 +285,11 @@ void textview_update_message_colors(void)
                                               &quote_colors[2]);
                gtkut_convert_int_to_gdk_color(prefs_common.uri_col,
                                               &uri_color);
+               gtkut_convert_int_to_gdk_color(prefs_common.signature_col,
+                                              &signature_color);
        } else {
                quote_colors[0] = quote_colors[1] = quote_colors[2] = 
-                       uri_color = emphasis_color = black;
+                       uri_color = emphasis_color = signature_color = black;
        }
 }
 
@@ -493,6 +492,22 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
                g_snprintf(buf, sizeof(buf), "\n[%s (%d bytes)]\n",
                           mimeinfo->content_type, mimeinfo->size);
 
+#if USE_GPGME
+       if (mimeinfo->sigstatus && !mimeinfo->sigstatus_full) {
+               gchar *tmp;
+               /* use standard font */
+               gpointer oldfont = textview->msgfont;
+               textview->msgfont = NULL;
+
+               tmp = g_strconcat("pgp: ", _("Check signature"), NULL);
+               textview_write_link(textview, tmp, buf, NULL);
+               
+               /* put things back */
+               textview->msgfont = (GdkFont *)oldfont;
+               oldfont = NULL;
+               g_free(tmp);
+       } else
+#endif
        if (mimeinfo->mime_type != MIME_TEXT &&
            mimeinfo->mime_type != MIME_TEXT_HTML &&
            mimeinfo->mime_type != MIME_TEXT_ENRICHED) {
@@ -502,7 +517,7 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
                    mimeinfo->parent &&
                    mimeinfo->parent->children != mimeinfo)
                        gtk_stext_insert(text, NULL, NULL, NULL, buf, -1);
-               else
+               else if (prefs_common.display_header)
                        gtk_stext_insert(text, NULL, NULL, NULL, "\n", 1);
                if (prefs_common.force_charset)
                        charset = prefs_common.force_charset;
@@ -606,7 +621,11 @@ static void textview_write_body(TextView *textview, MimeInfo *mimeinfo,
        conv = conv_code_converter_new(charset);
 
        tmpfp = procmime_decode_content(NULL, fp, mimeinfo);
+       
+       textview->is_in_signature = FALSE;
+
        if (tmpfp) {
+               
                if (mimeinfo->mime_type == MIME_TEXT_HTML)
                        textview_show_html(textview, tmpfp, conv);
                else if (mimeinfo->mime_type == MIME_TEXT_ENRICHED)
@@ -1079,6 +1098,11 @@ static void textview_write_line(TextView *textview, const gchar *str,
        else
                fg_color = &quote_colors[quotelevel];
 
+       if (prefs_common.enable_color && (strcmp(buf,"-- \n") == 0 || textview->is_in_signature)) {
+               fg_color = &signature_color;
+               textview->is_in_signature = TRUE;
+       }
+       
        if (prefs_common.head_space && spacingfont && buf[0] != '\n')
                gtk_stext_insert(text, spacingfont, NULL, NULL, " ", 1);
 
@@ -1194,11 +1218,11 @@ void textview_set_font(TextView *textview, const gchar *codeset)
                                text_sb_font->ascent = text_sb_font_orig_ascent;
                                text_sb_font->descent = text_sb_font_orig_descent;
                        }
-                       if (MB_CUR_MAX > 1) {
-                               FONT_LOAD(font, "-*-courier-medium-r-normal--14-*-*-*-*-*-iso8859-1");
-                       } else {
-                               FONT_LOAD(font, prefs_common.textfont);
-                       }
+                       if (MB_CUR_MAX > 1)
+                               font = gdk_font_load("-*-courier-medium-r-normal--14-*-*-*-*-*-iso8859-1");
+                       else
+                               font = gtkut_font_load_from_fontset
+                                       (prefs_common.textfont);
                        if (font && text_sb_font != font) {
                                if (text_sb_font)
                                        gdk_font_unref(text_sb_font);
@@ -1224,7 +1248,7 @@ void textview_set_font(TextView *textview, const gchar *codeset)
        }
 
        if (!textview->boldfont && prefs_common.boldfont)
-               FONT_LOAD(textview->boldfont, prefs_common.boldfont);
+               textview->boldfont = gtkut_font_load(prefs_common.boldfont);
        if (!spacingfont)
                spacingfont = gdk_font_load("-*-*-medium-r-normal--6-*");
 }
@@ -1308,7 +1332,6 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp)
        } else
                procheader_header_array_destroy(headers);
 
-
        return sorted_headers;
 }
 
@@ -1661,6 +1684,10 @@ static gint textview_key_pressed(GtkWidget *widget, GdkEventKey *event,
                textview_scroll_one_line(textview,
                                         (event->state & GDK_MOD1_MASK) != 0);
                break;
+       case GDK_Delete:
+               if (summaryview)
+                       summary_pass_key_press_event(summaryview, event);
+               break;
        case GDK_n:
        case GDK_N:
        case GDK_p:
@@ -1783,7 +1810,18 @@ static gint textview_button_released(GtkWidget *widget, GdkEventButton *event,
                                                }
                                                compose_new(account, uri->uri + 7, NULL);
                                        }
-                               } else {
+                               } else 
+#if USE_GPGME
+                               if (!g_strncasecmp(uri->uri, "pgp:", 4)) {
+                                       GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
+                                                               GTK_SCROLLED_WINDOW(textview->scrolledwin));
+                                       gfloat vpos = pos->value;
+                                       mimeview_check_signature(textview->messageview->mimeview);
+                                       /* scroll back where we were */
+                                       gtk_adjustment_set_value(pos, vpos);
+                               } else
+#endif
+                               {
                                        open_uri(uri->uri,
                                                 prefs_common.uri_cmd);
                                }