BalsaMimeWidget * balsa_mime_widget_new_signature(BalsaMessage * bm, LibBalsaMessageBody * mime_body, const gchar * content_type, gpointer data) { BalsaMimeWidget *mw; g_return_val_if_fail(mime_body != NULL, NULL); g_return_val_if_fail(content_type != NULL, NULL); if (!mime_body->sig_info) return NULL; mw = g_object_new(BALSA_TYPE_MIME_WIDGET, NULL); mw->widget = balsa_mime_widget_signature_widget(mime_body, content_type); return mw; }
BalsaMimeWidget * balsa_mime_widget_new(BalsaMessage * bm, LibBalsaMessageBody * mime_body, gpointer data) { BalsaMimeWidget *mw = NULL; gchar *content_type; mime_delegate_t *delegate; g_return_val_if_fail(bm != NULL, NULL); g_return_val_if_fail(mime_body != NULL, NULL); /* determine the content type of the passed MIME body */ content_type = libbalsa_message_body_get_mime_type(mime_body); delegate = mime_delegate; while (delegate->handler && ((delegate->wildcard && g_ascii_strncasecmp(delegate->mime_type, content_type, strlen(delegate->mime_type))) || (!delegate->wildcard && g_ascii_strcasecmp(delegate->mime_type, content_type)))) delegate++; if (delegate->handler) mw = (delegate->handler) (bm, mime_body, content_type, data); /* fall back to default if no handler is present */ if (!mw) mw = balsa_mime_widget_new_unknown(bm, mime_body, content_type); if (mw) { if (mw->widget) { g_signal_connect(G_OBJECT(mw->widget), "focus_in_event", G_CALLBACK(balsa_mime_widget_limit_focus), (gpointer) bm); g_signal_connect(G_OBJECT(mw->widget), "focus_out_event", G_CALLBACK(balsa_mime_widget_unlimit_focus), (gpointer) bm); #ifdef HAVE_GPGME if (mime_body->sig_info && g_ascii_strcasecmp("application/pgp-signature", content_type) && g_ascii_strcasecmp("application/pkcs7-signature", content_type) && g_ascii_strcasecmp("application/x-pkcs7-signature", content_type)) { GtkWidget * signature = balsa_mime_widget_signature_widget(mime_body, content_type); mw->widget = balsa_mime_widget_crypto_frame(mime_body, mw->widget, mime_body->was_encrypted, FALSE, signature); } else if (mime_body->was_encrypted && g_ascii_strcasecmp("multipart/signed", content_type)) { mw->widget = balsa_mime_widget_crypto_frame(mime_body, mw->widget, TRUE, TRUE, NULL); } #endif g_object_ref_sink(mw->widget); if (GTK_IS_LAYOUT(mw->widget)) { GtkAdjustment *vadj; g_object_get(G_OBJECT(mw->widget), "vadjustment", &vadj, NULL); g_signal_connect(vadj, "changed", G_CALLBACK(vadj_change_cb), mw->widget); } gtk_widget_show_all(mw->widget); } } g_free(content_type); return mw; }