From 99a875edae6c57fd6540818d3f0da994b135a068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Vr=C3=A1til?= Date: Tue, 26 Jun 2012 13:39:47 +0200 Subject: Bug #515004 - Allow toggling between text and HTML view of mail --- modules/prefer-plain/Makefile.am | 2 + .../e-mail-display-popup-prefer-plain.c | 380 +++++++++++++++++++++ .../e-mail-display-popup-prefer-plain.h | 30 ++ modules/prefer-plain/e-mail-parser-prefer-plain.c | 270 +++++++-------- .../prefer-plain/evolution-module-prefer-plain.c | 2 + 5 files changed, 534 insertions(+), 150 deletions(-) create mode 100644 modules/prefer-plain/e-mail-display-popup-prefer-plain.c create mode 100644 modules/prefer-plain/e-mail-display-popup-prefer-plain.h (limited to 'modules/prefer-plain') diff --git a/modules/prefer-plain/Makefile.am b/modules/prefer-plain/Makefile.am index e4e6b56d02..18cb7438e7 100644 --- a/modules/prefer-plain/Makefile.am +++ b/modules/prefer-plain/Makefile.am @@ -14,6 +14,8 @@ module_prefer_plain_la_CPPFLAGS = \ module_prefer_plain_la_SOURCES = \ e-mail-parser-prefer-plain.c \ e-mail-parser-prefer-plain.h \ + e-mail-display-popup-prefer-plain.c \ + e-mail-display-popup-prefer-plain.h \ evolution-module-prefer-plain.c module_prefer_plain_la_LIBADD = \ diff --git a/modules/prefer-plain/e-mail-display-popup-prefer-plain.c b/modules/prefer-plain/e-mail-display-popup-prefer-plain.c new file mode 100644 index 0000000000..75c74db71e --- /dev/null +++ b/modules/prefer-plain/e-mail-display-popup-prefer-plain.c @@ -0,0 +1,380 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "e-mail-display-popup-prefer-plain.h" +#include "mail/e-mail-display-popup-extension.h" +#include "mail/e-mail-display.h" +#include +#include +#include "mail/e-mail-browser.h" + +#include + +#include + +#define d(x) + +typedef struct _EMailDisplayPopupPreferPlain { + EExtension parent; + + WebKitDOMDocument *document; + gchar *text_plain_id; + gchar *text_html_id; + + GtkActionGroup *action_group; + +} EMailDisplayPopupPreferPlain; + +typedef struct _EMailDisplayPopupPreferPlainClass { + EExtensionClass parent_class; +} EMailDisplayPopupPreferPlainClass; + +#define E_MAIL_DISPLAY_POPUP_PREFER_PLAIN(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST \ + ((obj), e_mail_display_popup_prefer_plain_get_type(), EMailDisplayPopupPreferPlain)) + +GType e_mail_display_popup_prefer_plain_get_type (void); +static void e_mail_display_popup_extension_interface_init (EMailDisplayPopupExtensionInterface *iface); + +G_DEFINE_DYNAMIC_TYPE_EXTENDED ( + EMailDisplayPopupPreferPlain, + e_mail_display_popup_prefer_plain, + E_TYPE_EXTENSION, + 0, + G_IMPLEMENT_INTERFACE_DYNAMIC ( + E_TYPE_MAIL_DISPLAY_POPUP_EXTENSION, + e_mail_display_popup_extension_interface_init)); + +static const gchar *ui_webview = +"" +" " +" " +" " +" " +" " +" " +" " +" " +""; + +static const gchar *ui_reader = +"" +" " +" " +" " +" " +" " +" " +" " +" " +""; + + +static void +toggle_part (GtkAction *action, + EMailDisplayPopupExtension *extension) +{ + EMailDisplayPopupPreferPlain *pp_extension = (EMailDisplayPopupPreferPlain *) extension; + WebKitDOMDocument *doc = pp_extension->document; + WebKitDOMDOMWindow *window; + WebKitDOMElement *frame_element; + SoupURI *soup_uri; + GHashTable *query; + gchar *uri; + + uri = webkit_dom_document_get_document_uri (doc); + soup_uri = soup_uri_new (uri); + g_free (uri); + + query = soup_form_decode (soup_uri->query); + g_hash_table_replace (query, g_strdup ("part_id"), + pp_extension->text_html_id ? + pp_extension->text_html_id : + pp_extension->text_plain_id); + + soup_uri_set_query_from_form (soup_uri, query); + g_hash_table_destroy (query); + + uri = soup_uri_to_string (soup_uri, FALSE); + soup_uri_free (soup_uri); + + /* Get frame's window and from the window the actual