don't use Subject for unknown part name
[claws.git] / src / mimeview.c
index 24e9cb1c4d7cb23f540d96c22bde928d5d8a5d9d..2d76d813b8f25c6781c830b9dc5f2910a0d80154 100644 (file)
@@ -616,6 +616,61 @@ void mimeview_clear(MimeView *mimeview)
        icon_list_clear(mimeview);
 }
 
+static void check_signature_cb(GtkWidget *widget, gpointer user_data);
+
+static void update_signature_noticeview(MimeView *mimeview, MimeInfo *mimeinfo)
+{
+       if (privacy_mimeinfo_is_signed(mimeinfo)) {
+               gchar *text = NULL, *button_text = NULL;
+               GtkSignalFunc func = NULL;
+               StockPixmap icon;
+               
+               switch (privacy_mimeinfo_get_sig_status(mimeinfo)) {
+               case SIGNATURE_UNCHECKED:
+                       button_text = _("Check");
+                       func = check_signature_cb;
+                       icon = STOCK_PIXMAP_PRIVACY_SIGNED;
+                       break;
+               case SIGNATURE_OK:
+                       icon = STOCK_PIXMAP_PRIVACY_PASSED;
+                       break;
+               case SIGNATURE_WARN:
+                       icon = STOCK_PIXMAP_PRIVACY_WARN;
+                       break;
+               case SIGNATURE_INVALID:
+                       icon = STOCK_PIXMAP_PRIVACY_FAILED;
+                       break;
+               case SIGNATURE_CHECK_FAILED:
+                       button_text = _("Check again");
+                       func = check_signature_cb;
+                       icon = STOCK_PIXMAP_PRIVACY_UNKNOWN;
+               default:
+                       break;
+               }
+               text = privacy_mimeinfo_sig_info_short(mimeinfo);
+               noticeview_set_text(mimeview->siginfoview, text);
+               g_free(text);
+               noticeview_set_button_text(mimeview->siginfoview, button_text);
+               noticeview_set_button_press_callback(
+                       mimeview->siginfoview,
+                       func,
+                       (gpointer) mimeview);
+               noticeview_set_icon(mimeview->siginfoview, icon);
+               noticeview_show(mimeview->siginfoview);
+       } else {
+               noticeview_hide(mimeview->siginfoview);
+       }
+}
+
+static void check_signature_cb(GtkWidget *widget, gpointer user_data)
+{
+       MimeView *mimeview = (MimeView *) user_data;
+       MimeInfo *mimeinfo = mimeview_get_selected_part(mimeview);
+       
+       privacy_mimeinfo_check_signature(mimeinfo);
+       update_signature_noticeview(mimeview, mimeinfo);
+}
+
 static void mimeview_selected(GtkCTree *ctree, GtkCTreeNode *node, gint column,
                              MimeView *mimeview)
 {
@@ -637,12 +692,7 @@ static void mimeview_selected(GtkCTree *ctree, GtkCTreeNode *node, gint column,
        
        mimeview->textview->default_text = FALSE;
 
-       if (privacy_mimeinfo_is_signed(partinfo)) {
-               noticeview_set_text(mimeview->siginfoview, "Signed Part");
-               noticeview_show(mimeview->siginfoview);
-       } else {
-               noticeview_hide(mimeview->siginfoview);
-       }
+       update_signature_noticeview(mimeview, partinfo);
 
        if (!mimeview_show_part(mimeview, partinfo)) {
                switch (partinfo->type) {
@@ -956,6 +1006,7 @@ static void mimeview_save_as(MimeView *mimeview)
        gchar *defname = NULL;
        MimeInfo *partinfo;
        gchar *res;
+       const gchar *partname = NULL;
 
        if (!mimeview->opened) return;
        if (!mimeview->file) return;
@@ -969,11 +1020,9 @@ static void mimeview_save_as(MimeView *mimeview)
                                    "pop_partinfo", NULL);
        }                        
        g_return_if_fail(partinfo != NULL);
-
-       if (partinfo->filename)
-               defname = partinfo->filename;
-       else if (partinfo->name) {
-               Xstrdup_a(defname, partinfo->name, return);
+       
+       if (partname = procmime_mimeinfo_get_parameter(partinfo, "name")) {
+               Xstrdup_a(defname, partname, return);
                subst_for_filename(defname);
        }
 
@@ -1333,10 +1382,7 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo)
                stockp = STOCK_PIXMAP_MIME_MESSAGE;
                break;
        case MIMETYPE_APPLICATION:
-               if (mimeinfo->subtype && !g_strcasecmp(mimeinfo->subtype, "octet-stream"))
-                       stockp = STOCK_PIXMAP_MIME_APPLICATION_OCTET_STREAM;
-               else
-                       stockp = STOCK_PIXMAP_MIME_APPLICATION;
+               stockp = STOCK_PIXMAP_MIME_APPLICATION;
                break;
        case MIMETYPE_IMAGE:
                stockp = STOCK_PIXMAP_MIME_IMAGE;