From: Arne Zellentin Date: Thu, 22 Jun 2006 17:57:48 +0000 (+0000) Subject: * added support for mailto: links in messages: when clicked, they open an new editor... X-Git-Tag: git_migration_finished~4535 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=a44e490ef9edfc55bbdcf1c7d7cfbc2698f59e1e * added support for mailto: links in messages: when clicked, they open an new editor window. pmo-trunk-r336 --- diff --git a/src/gtk-glade/modest-ui-main-view.c b/src/gtk-glade/modest-ui-main-view.c index 45a5a49..631c0cb 100644 --- a/src/gtk-glade/modest-ui-main-view.c +++ b/src/gtk-glade/modest-ui-main-view.c @@ -152,6 +152,8 @@ modest_ui_show_main_window (ModestUI *modest_ui) g_warning ("failed to create message view"); return FALSE; } + g_signal_connect(G_OBJECT(message_view), "on_mailto_clicked", + G_CALLBACK(ui_on_mailto_clicked), modest_ui); mail_paned = glade_xml_get_widget (priv->glade_xml, "mail_paned"); gtk_paned_add2 (GTK_PANED(mail_paned), message_view); diff --git a/src/gtk-glade/modest-ui-message-editor.c b/src/gtk-glade/modest-ui-message-editor.c index bf1b630..9a7feab 100644 --- a/src/gtk-glade/modest-ui-message-editor.c +++ b/src/gtk-glade/modest-ui-message-editor.c @@ -332,6 +332,14 @@ on_new_mail_clicked (GtkWidget *widget, gpointer user_data) new_editor_with_presets(modest_ui, "", "", "", "", "", NULL); } +void +ui_on_mailto_clicked (GtkWidget *widget, const gchar *uri, gpointer user_data) +{ + ModestUI *modest_ui = (ModestUI *) user_data; + + new_editor_with_presets(modest_ui, uri, "", "", "", "", NULL); +} + void quoted_send_msg (ModestUI *modest_ui, quoted_send_type qstype) diff --git a/src/gtk-glade/modest-ui-message-editor.h b/src/gtk-glade/modest-ui-message-editor.h index 39ca412..c003927 100644 --- a/src/gtk-glade/modest-ui-message-editor.h +++ b/src/gtk-glade/modest-ui-message-editor.h @@ -28,4 +28,5 @@ void quoted_send_msg (ModestUI *modest_ui, quoted_send_type qstype); */ void on_new_mail_clicked (GtkWidget *widget, gpointer user_data); +void ui_on_mailto_clicked (GtkWidget *widget, const gchar * uri, gpointer user_data); #endif /* _MODEST_UI_MESSAGE_EDITOR_H */ diff --git a/src/hildon/modest-ui-main-view.c b/src/hildon/modest-ui-main-view.c index 60b5133..508e56a 100644 --- a/src/hildon/modest-ui-main-view.c +++ b/src/hildon/modest-ui-main-view.c @@ -155,7 +155,9 @@ modest_ui_show_main_window (ModestUI *modest_ui) g_warning ("failed to create message view"); return FALSE; } - + g_signal_connect(G_OBJECT(message_view), "on_mailto_clicked", + G_CALLBACK(ui_on_mailto_clicked), modest_ui); + mail_paned = glade_xml_get_widget (priv->glade_xml, "mail_paned"); gtk_paned_add2 (GTK_PANED(mail_paned), message_view); diff --git a/src/hildon/modest-ui-message-editor.c b/src/hildon/modest-ui-message-editor.c index 81a1a76..9a7feab 100644 --- a/src/hildon/modest-ui-message-editor.c +++ b/src/hildon/modest-ui-message-editor.c @@ -332,6 +332,14 @@ on_new_mail_clicked (GtkWidget *widget, gpointer user_data) new_editor_with_presets(modest_ui, "", "", "", "", "", NULL); } +void +ui_on_mailto_clicked (GtkWidget *widget, const gchar *uri, gpointer user_data) +{ + ModestUI *modest_ui = (ModestUI *) user_data; + + new_editor_with_presets(modest_ui, uri, "", "", "", "", NULL); +} + void quoted_send_msg (ModestUI *modest_ui, quoted_send_type qstype) @@ -532,7 +540,7 @@ on_send_button_clicked (GtkWidget *widget, ModestEditorWindow *modest_editwin) body, attachments); - modest_editor_window_set_attachments(modest_editwin, NULL); + modest_editor_window_set_attachments(modest_editwin, NULL); /* This unrefs them, too. */ g_free (body); g_object_unref (G_OBJECT(actions)); diff --git a/src/hildon/modest-ui-message-editor.h b/src/hildon/modest-ui-message-editor.h index 39ca412..c003927 100644 --- a/src/hildon/modest-ui-message-editor.h +++ b/src/hildon/modest-ui-message-editor.h @@ -28,4 +28,5 @@ void quoted_send_msg (ModestUI *modest_ui, quoted_send_type qstype); */ void on_new_mail_clicked (GtkWidget *widget, gpointer user_data); +void ui_on_mailto_clicked (GtkWidget *widget, const gchar * uri, gpointer user_data); #endif /* _MODEST_UI_MESSAGE_EDITOR_H */ diff --git a/src/modest-tny-msg-view.c b/src/modest-tny-msg-view.c index 13ece7a..dc44178 100644 --- a/src/modest-tny-msg-view.c +++ b/src/modest-tny-msg-view.c @@ -33,6 +33,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 +64,7 @@ struct _UrlMatchPattern { /* list my signals */ enum { - /* MY_SIGNAL_1, */ + MAILTO_CLICKED_SIGNAL, /* MY_SIGNAL_2, */ LAST_SIGNAL }; @@ -81,7 +82,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 +117,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 @@ -182,8 +192,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; diff --git a/src/modest-tny-msg-view.h b/src/modest-tny-msg-view.h index 80b5dae..b8ad268 100644 --- a/src/modest-tny-msg-view.h +++ b/src/modest-tny-msg-view.h @@ -31,6 +31,7 @@ struct _ModestTnyMsgView { struct _ModestTnyMsgViewClass { GtkScrolledWindowClass parent_class; + void (*mailto_clicked) (GtkWidget *widget, gpointer user_data); };