diff options
author | Milan Crha <mcrha@redhat.com> | 2013-01-19 01:34:56 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2013-01-19 01:34:56 +0800 |
commit | 722a27e8507541e64ca2a436a7f10069b9e01223 (patch) | |
tree | eefaf16cd84524a8c3ee68ad4edd5937b8a16f1d /mail | |
parent | 590b4711b78b94cac68a6c52e09a62628b5648d8 (diff) | |
download | gsoc2013-evolution-722a27e8507541e64ca2a436a7f10069b9e01223.tar.gz gsoc2013-evolution-722a27e8507541e64ca2a436a7f10069b9e01223.tar.zst gsoc2013-evolution-722a27e8507541e64ca2a436a7f10069b9e01223.zip |
Bug #692005 - Changing character encoding doesn't work
Diffstat (limited to 'mail')
-rw-r--r-- | mail/e-mail-display.c | 52 | ||||
-rw-r--r-- | mail/e-mail-display.h | 2 | ||||
-rw-r--r-- | mail/e-mail-printer.c | 24 | ||||
-rw-r--r-- | mail/e-mail-printer.h | 2 | ||||
-rw-r--r-- | mail/e-mail-reader-utils.c | 7 | ||||
-rw-r--r-- | mail/e-mail-request.c | 9 | ||||
-rw-r--r-- | mail/em-composer-utils.c | 2 | ||||
-rw-r--r-- | mail/em-utils.c | 4 |
8 files changed, 92 insertions, 10 deletions
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c index 3181a90c27..f2a3035d0a 100644 --- a/mail/e-mail-display.c +++ b/mail/e-mail-display.c @@ -76,6 +76,7 @@ enum { PROP_PART_LIST, PROP_HEADERS_COLLAPSABLE, PROP_HEADERS_COLLAPSED, + PROP_FORMATTER }; static CamelDataCache *emd_global_http_cache = NULL; @@ -1282,6 +1283,11 @@ mail_display_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_FORMATTER: + g_value_set_object ( + value, e_mail_display_get_formatter ( + E_MAIL_DISPLAY (object))); + return; case PROP_PART_LIST: g_value_set_pointer ( value, e_mail_display_get_parts_list ( @@ -1488,6 +1494,16 @@ e_mail_display_class_init (EMailDisplayClass *class) g_object_class_install_property ( object_class, + PROP_FORMATTER, + g_param_spec_pointer ( + "formatter", + "Mail Formatter", + NULL, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property ( + object_class, PROP_PART_LIST, g_param_spec_pointer ( "part-list", @@ -1703,6 +1719,14 @@ e_mail_display_set_mode (EMailDisplay *display, g_object_notify (G_OBJECT (display), "mode"); } +EMailFormatter * +e_mail_display_get_formatter (EMailDisplay *display) +{ + g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL); + + return display->priv->formatter; +} + EMailPartList * e_mail_display_get_parts_list (EMailDisplay *display) { @@ -1788,6 +1812,7 @@ e_mail_display_load (EMailDisplay *display, EMailPartList *part_list; CamelFolder *folder; const gchar *message_uid; + const gchar *default_charset, *charset; gchar *uri; g_return_if_fail (E_IS_MAIL_DISPLAY (display)); @@ -1802,14 +1827,21 @@ e_mail_display_load (EMailDisplay *display, folder = e_mail_part_list_get_folder (part_list); message_uid = e_mail_part_list_get_message_uid (part_list); + default_charset = e_mail_formatter_get_default_charset (display->priv->formatter); + charset = e_mail_formatter_get_charset (display->priv->formatter); + + if (!default_charset) + default_charset = ""; + if (!charset) + charset = ""; uri = e_mail_part_build_uri ( folder, message_uid, "mode", G_TYPE_INT, display->priv->mode, - "headers_collapsable", G_TYPE_BOOLEAN, - display->priv->headers_collapsable, - "headers_collapsed", G_TYPE_BOOLEAN, - display->priv->headers_collapsed, + "headers_collapsable", G_TYPE_BOOLEAN, display->priv->headers_collapsable, + "headers_collapsed", G_TYPE_BOOLEAN, display->priv->headers_collapsed, + "formatter_default_charset", G_TYPE_STRING, default_charset, + "formatter_charset", G_TYPE_STRING, charset, NULL); e_web_view_load_uri (E_WEB_VIEW (display), uri); @@ -1825,6 +1857,7 @@ do_reload_display (EMailDisplay *display) GHashTable *table; SoupURI *soup_uri; gchar *mode, *collapsable, *collapsed; + const gchar *default_charset, *charset; web_view = E_WEB_VIEW (display); uri = (gchar *) e_web_view_get_uri (web_view); @@ -1844,6 +1877,13 @@ do_reload_display (EMailDisplay *display) mode = g_strdup_printf ("%d", display->priv->mode); collapsable = g_strdup_printf ("%d", display->priv->headers_collapsable); collapsed = g_strdup_printf ("%d", display->priv->headers_collapsed); + default_charset = e_mail_formatter_get_default_charset (display->priv->formatter); + charset = e_mail_formatter_get_charset (display->priv->formatter); + + if (!default_charset) + default_charset = ""; + if (!charset) + charset = ""; table = soup_form_decode (soup_uri->query); g_hash_table_replace ( @@ -1852,6 +1892,10 @@ do_reload_display (EMailDisplay *display) table, g_strdup ("headers_collapsable"), collapsable); g_hash_table_replace ( table, g_strdup ("headers_collapsed"), collapsed); + g_hash_table_replace ( + table, g_strdup ("formatter_default_charset"), g_strdup (default_charset)); + g_hash_table_replace ( + table, g_strdup ("formatter_charset"), g_strdup (charset)); query = soup_form_encode_hash (table); diff --git a/mail/e-mail-display.h b/mail/e-mail-display.h index 7bf4aeed74..1acae83c8d 100644 --- a/mail/e-mail-display.h +++ b/mail/e-mail-display.h @@ -67,6 +67,8 @@ void e_mail_display_set_mode (EMailDisplay *display, EMailFormatterMode mode); EMailFormatterMode e_mail_display_get_mode (EMailDisplay *display); +EMailFormatter * e_mail_display_get_formatter (EMailDisplay *display); + EMailPartList * e_mail_display_get_parts_list (EMailDisplay *display); void e_mail_display_set_parts_list (EMailDisplay *display, diff --git a/mail/e-mail-printer.c b/mail/e-mail-printer.c index 2f7e1366b4..8da529f1b1 100644 --- a/mail/e-mail-printer.c +++ b/mail/e-mail-printer.c @@ -198,25 +198,38 @@ emp_start_printing (GObject *object, } static void -emp_run_print_operation (EMailPrinter *emp) +emp_run_print_operation (EMailPrinter *emp, + EMailFormatter *formatter) { EMailPartList *part_list; CamelFolder *folder; const gchar *message_uid; + const gchar *default_charset, *charset; gchar *mail_uri; part_list = emp->priv->parts_list; folder = e_mail_part_list_get_folder (part_list); message_uid = e_mail_part_list_get_message_uid (part_list); + default_charset = formatter ? e_mail_formatter_get_default_charset (formatter) : NULL; + charset = formatter ? e_mail_formatter_get_charset (formatter) : NULL; + + if (!default_charset) + default_charset = ""; + if (!charset) + charset = ""; mail_uri = e_mail_part_build_uri ( folder, message_uid, "__evo-load-image", G_TYPE_BOOLEAN, TRUE, "mode", G_TYPE_INT, E_MAIL_FORMATTER_MODE_PRINTING, + "formatter_default_charset", G_TYPE_STRING, default_charset, + "formatter_charset", G_TYPE_STRING, charset, NULL); /* Print_layout is a special EMPart created by EMFormatHTMLPrint */ if (emp->priv->webview == NULL) { + EMailFormatter *emp_formatter; + emp->priv->webview = g_object_new ( E_TYPE_MAIL_DISPLAY, "mode", E_MAIL_FORMATTER_MODE_PRINTING, NULL); @@ -224,6 +237,12 @@ emp_run_print_operation (EMailPrinter *emp) e_mail_display_set_force_load_images ( E_MAIL_DISPLAY (emp->priv->webview), TRUE); + emp_formatter = e_mail_display_get_formatter (E_MAIL_DISPLAY (emp->priv->webview)); + if (default_charset && *default_charset) + e_mail_formatter_set_default_charset (emp_formatter, default_charset); + if (charset && *charset) + e_mail_formatter_set_charset (emp_formatter, charset); + g_object_ref_sink (emp->priv->webview); g_signal_connect ( emp->priv->webview, "notify::load-status", @@ -831,6 +850,7 @@ e_mail_printer_new (EMailPartList *source) void e_mail_printer_print (EMailPrinter *emp, GtkPrintOperationAction action, + EMailFormatter *formatter, GCancellable *cancellable) { g_return_if_fail (E_IS_MAIL_PRINTER (emp)); @@ -857,7 +877,7 @@ e_mail_printer_print (EMailPrinter *emp, cancellable, "cancelled", G_CALLBACK (gtk_print_operation_cancel), emp->priv->operation); - emp_run_print_operation (emp); + emp_run_print_operation (emp, formatter); } const gchar * diff --git a/mail/e-mail-printer.h b/mail/e-mail-printer.h index c177bfe253..01c32f3754 100644 --- a/mail/e-mail-printer.h +++ b/mail/e-mail-printer.h @@ -21,6 +21,7 @@ #define E_MAIL_PRINTER_H #include <em-format/e-mail-part-list.h> +#include <em-format/e-mail-formatter.h> /* Standard GObject macros */ #define E_TYPE_MAIL_PRINTER \ @@ -67,6 +68,7 @@ EMailPrinter * e_mail_printer_new (EMailPartList *source); void e_mail_printer_print (EMailPrinter *printer, GtkPrintOperationAction action, + EMailFormatter *formatter, GCancellable *cancellable); void e_mail_printer_set_export_filename diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c index cce0046658..11ac330e3a 100644 --- a/mail/e-mail-reader-utils.c +++ b/mail/e-mail-reader-utils.c @@ -951,6 +951,7 @@ mail_reader_do_print_message (GObject *object, gpointer user_data) { EMailReader *reader = E_MAIL_READER (object); + EMailDisplay *mail_display; EActivity *activity; GCancellable *cancellable; EMailPrinter *printer; @@ -969,7 +970,11 @@ mail_reader_do_print_message (GObject *object, printer, "done", G_CALLBACK (printing_done_cb), activity); - e_mail_printer_print (printer, context->action, cancellable); + mail_display = e_mail_reader_get_mail_display (reader); + + e_mail_printer_print (printer, context->action, + e_mail_display_get_formatter (mail_display), + cancellable); free_message_printing_context (context); } diff --git a/mail/e-mail-request.c b/mail/e-mail-request.c index 000a0b0516..c3f0b8552d 100644 --- a/mail/e-mail-request.c +++ b/mail/e-mail-request.c @@ -71,6 +71,7 @@ handle_mail_request (GSimpleAsyncResult *res, GByteArray *ba; gchar *part_id; gchar *val; + const gchar *default_charset, *charset; EMailFormatterContext context = { 0 }; @@ -99,6 +100,9 @@ handle_mail_request (GSimpleAsyncResult *res, if (val) context.mode = atoi (val); + default_charset = g_hash_table_lookup (request->priv->uri_query, "formatter_default_charset"); + charset = g_hash_table_lookup (request->priv->uri_query, "formatter_charset"); + context.part_list = g_object_ref (part_list); context.uri = request->priv->full_uri; @@ -107,6 +111,11 @@ handle_mail_request (GSimpleAsyncResult *res, else formatter = e_mail_formatter_new (); + if (default_charset && *default_charset) + e_mail_formatter_set_default_charset (formatter, default_charset); + if (charset && *charset) + e_mail_formatter_set_charset (formatter, charset); + part_id = g_hash_table_lookup (request->priv->uri_query, "part_id"); if (part_id) { EMailPart *part; diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c index 204188f4e4..9962101f49 100644 --- a/mail/em-composer-utils.c +++ b/mail/em-composer-utils.c @@ -974,7 +974,7 @@ em_utils_composer_print_cb (EMsgComposer *composer, emp, "done", G_CALLBACK (composer_print_done_cb), NULL); - e_mail_printer_print (emp, action, NULL); + e_mail_printer_print (emp, action, NULL, NULL); g_object_unref (parts); } diff --git a/mail/em-utils.c b/mail/em-utils.c index fc6568d1ea..b0dc4ba509 100644 --- a/mail/em-utils.c +++ b/mail/em-utils.c @@ -622,7 +622,7 @@ do_print_msg_to_file (GObject *source, printer, "done", G_CALLBACK (g_object_unref), printer); - e_mail_printer_print (printer, GTK_PRINT_OPERATION_ACTION_EXPORT, NULL); + e_mail_printer_print (printer, GTK_PRINT_OPERATION_ACTION_EXPORT, NULL, NULL); g_object_unref (parser); } @@ -1143,7 +1143,7 @@ em_utils_selection_set_urilist (GtkSelectionData *data, } /** - * em_utils_selection_set_urilist: + * em_utils_selection_get_urilist: * @data: * @folder: * @uids: |