From e048b9607f8e245634ba6a299aa1a5fa184532be Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Wed, 12 Jan 2011 23:15:54 +0200 Subject: [PATCH] * improve mu-widgets; - support notes in mail body view - support cmd: pseudo urls in such views --- widgets/mu-msg-body-view.c | 42 ++++++++++++++++++++++++++++++++++---- widgets/mu-msg-body-view.h | 2 +- widgets/mu-msg-view.c | 16 ++++++++++++--- widgets/mu-msg-view.h | 1 + 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/widgets/mu-msg-body-view.c b/widgets/mu-msg-body-view.c index 93ec0293..a36d439c 100644 --- a/widgets/mu-msg-body-view.c +++ b/widgets/mu-msg-body-view.c @@ -35,9 +35,14 @@ enum { LAST_SIGNAL }; + struct _MuMsgBodyViewPrivate { WebKitWebSettings *_settings; MuMsg *_message; + + /* 'mu_mode' means some internal mode where cmd: urls are + * acceptable */ + gboolean _mu_mode; }; #define MU_MSG_BODY_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MU_TYPE_MSG_BODY_VIEW, \ @@ -110,10 +115,16 @@ on_navigation_requested (MuMsgBodyView *self, WebKitWebFrame *frame, const char* uri; uri = webkit_network_request_get_uri (request); - + + if (g_ascii_strncasecmp (uri, "cmd:", 4) == 0) { + if (self->_priv->_mu_mode) + g_printerr ("execute: '%s'\n", uri + 4); + return WEBKIT_NAVIGATION_RESPONSE_IGNORE; + } + if (!mu_util_is_local_file(uri)) mu_util_play (uri, FALSE, TRUE); - + return WEBKIT_NAVIGATION_RESPONSE_IGNORE; } @@ -127,6 +138,7 @@ on_resource_request_starting (MuMsgBodyView *self, WebKitWebFrame *frame, msg = self->_priv->_message; uri = webkit_network_request_get_uri (request); + if (g_ascii_strncasecmp (uri, "cid:", 4) == 0) { gchar *filepath; @@ -148,6 +160,7 @@ mu_msg_body_view_init (MuMsgBodyView *obj) obj->_priv = MU_MSG_BODY_VIEW_GET_PRIVATE(obj); obj->_priv->_message = NULL; + obj->_priv->_mu_mode = FALSE; obj->_priv->_settings = webkit_web_settings_new (); g_object_set (G_OBJECT(obj->_priv->_settings), @@ -224,9 +237,11 @@ mu_msg_body_view_set_message (MuMsgBodyView *self, MuMsg *msg) g_return_if_fail (self); - if (self->_priv->_message) + if (self->_priv->_message) { mu_msg_unref (self->_priv->_message); - + self->_priv->_message = NULL; + } + self->_priv->_message = msg ? mu_msg_ref (msg) : NULL; data = msg ? mu_msg_get_body_html (msg) : ""; @@ -234,4 +249,23 @@ mu_msg_body_view_set_message (MuMsgBodyView *self, MuMsg *msg) set_html (self, data); else set_text (self, mu_msg_get_body_text (msg)); + + self->_priv->_mu_mode = FALSE; +} + + +void +mu_msg_body_view_set_note (MuMsgBodyView *self, const gchar *html) +{ + g_return_if_fail (self); + g_return_if_fail (html); + + if (self->_priv->_message) { + mu_msg_unref (self->_priv->_message); + self->_priv->_message = NULL; + } + set_html (self, html); + + self->_priv->_mu_mode = TRUE; + } diff --git a/widgets/mu-msg-body-view.h b/widgets/mu-msg-body-view.h index 45dadd7a..2568b369 100644 --- a/widgets/mu-msg-body-view.h +++ b/widgets/mu-msg-body-view.h @@ -59,7 +59,7 @@ GType mu_msg_body_view_get_type (void) G_GNUC_CONST; GtkWidget* mu_msg_body_view_new (void); void mu_msg_body_view_set_message (MuMsgBodyView *self, MuMsg *msg); - +void mu_msg_body_view_set_note (MuMsgBodyView *self, const gchar *html); G_END_DECLS diff --git a/widgets/mu-msg-view.c b/widgets/mu-msg-view.c index 3d65d55e..7e1ae1f9 100644 --- a/widgets/mu-msg-view.c +++ b/widgets/mu-msg-view.c @@ -141,9 +141,6 @@ mu_msg_view_init (MuMsgView *self) gtk_box_pack_start (GTK_BOX(self), get_body_widget (self), TRUE, TRUE, 2); - - - } static void @@ -169,6 +166,7 @@ update_attachment_area (MuMsgView *self, MuMsg *msg) if (msg) attach_num = mu_msg_attach_view_set_message (MU_MSG_ATTACH_VIEW(self->_priv->_attach), msg); + if (attach_num > 0) gtk_widget_show_all (self->_priv->_attacharea); else @@ -189,3 +187,15 @@ mu_msg_view_set_message (MuMsgView *self, MuMsg *msg) update_attachment_area (self, msg); } + + +void +mu_msg_view_set_note (MuMsgView *self, const char *html) +{ + g_return_if_fail (MU_IS_MSG_VIEW(self)); + + mu_msg_header_view_set_message (MU_MSG_HEADER_VIEW(self->_priv->_headers), + NULL); + mu_msg_body_view_set_note (MU_MSG_BODY_VIEW(self->_priv->_body), + html); +} diff --git a/widgets/mu-msg-view.h b/widgets/mu-msg-view.h index e3581b6c..6d6e6f27 100644 --- a/widgets/mu-msg-view.h +++ b/widgets/mu-msg-view.h @@ -59,6 +59,7 @@ GType mu_msg_view_get_type (void) G_GNUC_CONST; GtkWidget* mu_msg_view_new (void); void mu_msg_view_set_message (MuMsgView *self, MuMsg *msg); +void mu_msg_view_set_note (MuMsgView *self, const char *html); G_END_DECLS