X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-msg-view.c;h=68e8ef5ef94f4dac08225759dbde43a74d0fccda;hp=923695fb10a69330581537fb0cda8e85ebf30608;hb=702b748360f6de61e0780c36a98065d19a495c83;hpb=296ba0d38c2ecb16c82d136d297d2eb995c891e2 diff --git a/src/modest-tny-msg-view.c b/src/modest-tny-msg-view.c index 923695f..68e8ef5 100644 --- a/src/modest-tny-msg-view.c +++ b/src/modest-tny-msg-view.c @@ -1,6 +1,34 @@ -/* modest-tny-msg-view.c */ +/* Copyright (c) 2006, Nokia Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Nokia Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ -/* insert (c)/licensing information) */ + +/* modest-tny-msg-view.c */ #include "modest-tny-msg-view.h" #include "modest-tny-stream-gtkhtml.h" @@ -33,6 +61,7 @@ static gchar *construct_virtual_filename_from_mime_part(TnyMsgMimePartIface *msg #define ATTACHMENT_ID_INLINE "attachment-inline" #define ATTACHMENT_ID_LINK "attachment-link" +#define PREFIX_LINK_EMAIL "mailto:" gint virtual_filename_get_pos(const gchar *filename); /* @@ -63,7 +92,7 @@ struct _UrlMatchPattern { /* list my signals */ enum { - /* MY_SIGNAL_1, */ + MAILTO_CLICKED_SIGNAL, /* MY_SIGNAL_2, */ LAST_SIGNAL }; @@ -81,7 +110,7 @@ struct _ModestTnyMsgViewPrivate { static GtkContainerClass *parent_class = NULL; /* uncomment the following if you have defined any signals */ -/* static guint signals[LAST_SIGNAL] = {0}; */ +static guint signals[LAST_SIGNAL] = {0}; GType modest_tny_msg_view_get_type (void) @@ -116,6 +145,15 @@ modest_tny_msg_view_class_init (ModestTnyMsgViewClass *klass) gobject_class->finalize = modest_tny_msg_view_finalize; g_type_class_add_private (gobject_class, sizeof(ModestTnyMsgViewPrivate)); + + signals[MAILTO_CLICKED_SIGNAL] = + g_signal_new ("on_mailto_clicked", + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(ModestTnyMsgViewClass, mailto_clicked), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING/*, 1, G_TYPE_POINTER*/); } static void @@ -168,8 +206,6 @@ modest_tny_msg_view_new (TnyMsgIface *msg, const gboolean show_attachments_inlin if (priv->gtkhtml) gtk_container_add (GTK_CONTAINER(obj), priv->gtkhtml); - else - g_error("argh1"); if (msg) modest_tny_msg_view_set_message (self, msg); @@ -184,8 +220,20 @@ static gboolean on_link_clicked (GtkWidget *widget, const gchar *uri, ModestTnyMsgView *msg_view) { - - if (g_str_has_prefix(uri, ATTACHMENT_ID_LINK)) { + if (g_str_has_prefix(uri, PREFIX_LINK_EMAIL)) { + gchar *s, *p; + /* skip over "mailto:" */ + s = g_strdup(uri + strlen(PREFIX_LINK_EMAIL)); + /* strip ?subject=... and the like */ + for (p = s; p[0]; p++) + if (p[0] == '?') { + p[0] = 0; + break; + } + g_signal_emit(msg_view, signals[MAILTO_CLICKED_SIGNAL], 0, s); + g_free(s); + return TRUE; + } else if (g_str_has_prefix(uri, ATTACHMENT_ID_LINK)) { /* save or open attachment */ g_message ("link-to-save: %s", uri); /* FIXME */ return TRUE; @@ -776,25 +824,19 @@ modest_tny_msg_view_set_message (ModestTnyMsgView *self, TnyMsgIface *msg) priv->msg = msg; fill_gtkhtml_with_txt (self, GTK_HTML(priv->gtkhtml), "", msg); - if (!msg) return; - body = modest_tny_msg_actions_find_body_part (msg, "text/html"); - if (body) { - set_html_message (self, body, msg); - return; - } - - body = modest_tny_msg_actions_find_body_part (msg, "text/plain"); + body = modest_tny_msg_actions_find_body_part (msg, TRUE); if (body) { - set_text_message (self, body, msg); + if (tny_msg_mime_part_iface_content_type_is (body, "text/html")) + set_html_message (self, body, msg); + else + set_text_message (self, body, msg); return; + } else { + /* nothing to show */ } - - /* hmmmmm */ - fill_gtkhtml_with_txt (self, GTK_HTML(priv->gtkhtml), - _("Unsupported message type"), msg); } void