2008-06-04 [colin] 3.4.0cvs82
[claws.git] / src / messageview.c
index c146067978980ee16b14433073d0eb59f2e43d42..c9cf88c1a56a5edfb9c8c1cfd0491a8b2a0754e8 100644 (file)
@@ -495,7 +495,7 @@ static void messageview_add_toolbar(MessageView *msgview, GtkWidget *window)
        GtkWidget *handlebox;
        GtkWidget *vbox;
        GtkWidget *menubar;
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
        GtkWidget *statusbar = NULL;
 #endif
        guint n_menu_entries;
@@ -525,12 +525,17 @@ static void messageview_add_toolbar(MessageView *msgview, GtkWidget *window)
 #else
        msgview->toolbar = toolbar_create(TOOLBAR_MSGVIEW, handlebox,
                                          (gpointer)msgview);
+#ifndef GENERIC_UMPC
        statusbar = gtk_statusbar_new();
        gtk_widget_show(statusbar);
        gtk_box_pack_end(GTK_BOX(vbox), statusbar, FALSE, FALSE, 0);
        msgview->statusbar = statusbar;
        msgview->statusbar_cid = gtk_statusbar_get_context_id
                (GTK_STATUSBAR(statusbar), "Message View");
+#else
+       msgview->statusbar = NULL;
+       msgview->statusbar_cid = 0;
+#endif
 #endif
 
 
@@ -1104,7 +1109,7 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
        }
        mimeview_show_message(messageview->mimeview, mimeinfo, file);
        
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
        messageview_set_position(messageview, 0);
 #endif
 
@@ -1149,6 +1154,54 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
                        && (mimeinfo->type != MIMETYPE_MULTIPART || 
            strcasecmp(mimeinfo->subtype, "signed"))) {
                if (strcasecmp(mimeinfo->subtype, "html")) {
+                       MimeInfo *saved_mimeinfo = mimeinfo;
+                       MimeInfo *alt_parent = mimeinfo;
+
+                       /* if multipart/{related,mixed} part, look inside for a multipart/alternative child */
+                       if (prefs_common.promote_html_part &&
+                           mimeinfo->type == MIMETYPE_MULTIPART &&
+                           (!strcasecmp(mimeinfo->subtype, "related") ||
+                            !strcasecmp(mimeinfo->subtype, "mixed"))) {
+                               for (; mimeinfo; mimeinfo = procmime_mimeinfo_next(mimeinfo)) {
+                                       if (mimeinfo->node->parent != saved_mimeinfo->node) {
+                                               /* only consider children of the 
+                                                * multipart/{related,mixed} part */
+                                               continue;
+                                       }
+                                       if (mimeinfo->type == MIMETYPE_MULTIPART && 
+                                           !strcasecmp(mimeinfo->subtype, "alternative")) {
+                                               /* we got an alternative part */
+                                               alt_parent = mimeinfo;
+                                               break;
+                                       }
+                               }
+                       }
+
+                       /* if we now have a multipart/alternative part (possibly inside a
+                        * multipart/{related,mixed} part, look for an HTML part inside */
+                       if (prefs_common.promote_html_part && mimeinfo && 
+                           mimeinfo->type == MIMETYPE_MULTIPART &&
+                           !strcasecmp(mimeinfo->subtype, "alternative")) {
+                               for (; mimeinfo; mimeinfo = procmime_mimeinfo_next(mimeinfo)) {
+                                       if (mimeinfo->node->parent != alt_parent->node) {
+                                               /* only consider children of the 
+                                                * multipart/alternative part, so as
+                                                * not to show html attachments */
+                                               continue;
+                                       }
+                                       if (mimeinfo->type == MIMETYPE_TEXT && 
+                                           !strcasecmp(mimeinfo->subtype, "html")) {
+                                               /* we got it */
+                                               mimeview_select_mimepart_icon(messageview->mimeview, mimeinfo);
+                                               goto done;
+                                       }
+                               }
+                       }
+                       
+                       /* if we didn't find anything, go back to start */
+                       if (!mimeinfo) 
+                               mimeinfo = saved_mimeinfo;
+
                        mimeview_show_part(messageview->mimeview,mimeinfo);
                        goto done;
                } else if (prefs_common.invoke_plugin_on_html) {
@@ -1294,7 +1347,7 @@ void messageview_delete(MessageView *msgview)
                        /* NOTE: does not update to next message in summaryview */
                }
        }
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
        if (msgview->window && !prefs_common.always_show_msg) {
                messageview_destroy(msgview);
        }
@@ -1509,7 +1562,7 @@ static void messageview_show_partial_display_cb(NoticeView *noticeview, MessageV
 void messageview_show_partial_display(MessageView *messageview, MsgInfo *msginfo,
                                             size_t length)
 {
-       gchar *msg = g_strdup_printf(_("Show all %s."), to_human_readable(length));
+       gchar *msg = g_strdup_printf(_("Show all %s."), to_human_readable((goffset)length));
        noticeview_set_icon(messageview->noticeview, STOCK_PIXMAP_NOTICE_WARN);
        noticeview_set_text(messageview->noticeview, _("Only the first megabyte of text is shown."));
        noticeview_set_button_text(messageview->noticeview, msg);
@@ -1603,7 +1656,7 @@ static void partial_recv_show(NoticeView *noticeview, MsgInfo *msginfo)
                        text = g_strdup_printf(_("This message has been "
                                        "partially retrieved;\nit is %s."),
                                        to_human_readable(
-                                               (off_t)(msginfo->total_size)));
+                                               (goffset)(msginfo->total_size)));
                        button1 = _("Mark for download");
                        button2 = _("Mark for deletion");
                        button1_cb = partial_recv_dload_clicked;
@@ -1614,7 +1667,7 @@ static void partial_recv_show(NoticeView *noticeview, MsgInfo *msginfo)
                                        "partially retrieved;\nit is %s and "
                                        "will be downloaded."),
                                        to_human_readable(
-                                               (off_t)(msginfo->total_size)));
+                                               (goffset)(msginfo->total_size)));
                        button1 = _("Unmark");
                        button1_cb = partial_recv_unmark_clicked;
                        button2 = _("Mark for deletion");
@@ -1625,7 +1678,7 @@ static void partial_recv_show(NoticeView *noticeview, MsgInfo *msginfo)
                                        "partially retrieved;\nit is %s and "
                                        "will be deleted."),
                                        to_human_readable(
-                                               (off_t)(msginfo->total_size)));
+                                               (goffset)(msginfo->total_size)));
                        button1 = _("Mark for download");
                        button1_cb = partial_recv_dload_clicked;
                        button2 = _("Unmark");
@@ -1916,7 +1969,7 @@ static void prev_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -1941,7 +1994,7 @@ static void next_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -1966,7 +2019,7 @@ static void prev_unread_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -1991,7 +2044,7 @@ static void next_unread_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2016,7 +2069,7 @@ static void prev_new_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2041,7 +2094,7 @@ static void next_new_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2066,7 +2119,7 @@ static void prev_marked_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2091,7 +2144,7 @@ static void next_marked_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2116,7 +2169,7 @@ static void prev_labeled_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2141,7 +2194,7 @@ static void next_labeled_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2166,7 +2219,7 @@ static void last_read_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2191,7 +2244,7 @@ static void parent_cb(gpointer data, guint action, GtkWidget *widget)
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2216,7 +2269,7 @@ static void goto_unread_folder_cb(gpointer data, guint action, GtkWidget *widget
                return;
        }
        if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                if (msginfo)
@@ -2246,7 +2299,7 @@ static void goto_folder_cb(gpointer data, guint action, GtkWidget *widget)
                        return;
                }
                if (messageview->mainwin->summaryview->selected) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
                        MsgInfo * msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
                       
                        if (msginfo)