diff --git a/src/mu-cmd.c b/src/mu-cmd.c
index be364f89..5b5e428b 100644
--- a/src/mu-cmd.c
+++ b/src/mu-cmd.c
@@ -30,12 +30,39 @@
#include "mu-str.h"
#include "mu-maildir.h"
+static gboolean
+save_part (MuMsg *msg, const char *targetdir, guint partidx, gboolean overwrite,
+ gboolean play)
+{
+ gchar *filepath;
+
+ filepath = mu_msg_part_filepath (msg, targetdir, partidx);
+ if (!filepath) {
+ g_warning ("%s: failed to get filepath", __FUNCTION__);
+ return FALSE;
+ }
+
+ if (!mu_msg_part_save (msg, filepath, partidx, overwrite, FALSE)) {
+ g_warning ("%s: failed to save MIME-part %d at %s",
+ __FUNCTION__, partidx, filepath);
+ g_free (filepath);
+ return FALSE;
+ }
+
+ if (play)
+ mu_util_play (filepath);
+
+ return TRUE;
+}
+
+
+
static gboolean
save_numbered_parts (MuMsg *msg, MuConfig *opts)
{
gboolean rv;
char **parts, **cur;
-
+
parts = g_strsplit (opts->parts, ",", 0);
for (rv = TRUE, cur = parts; cur && *cur; ++cur) {
@@ -43,7 +70,7 @@ save_numbered_parts (MuMsg *msg, MuConfig *opts)
unsigned idx;
int i;
char *endptr;
-
+
idx = (unsigned)(i = strtol (*cur, &endptr, 10));
if (i < 0 || *cur == endptr) {
g_warning ("invalid MIME-part index '%s'", *cur);
@@ -51,21 +78,19 @@ save_numbered_parts (MuMsg *msg, MuConfig *opts)
break;
}
- if (!mu_msg_mime_part_save
- (msg, idx, opts->targetdir, opts->overwrite, opts->play)) {
- g_warning ("failed to save MIME-part %d", idx);
- rv = FALSE;
+ rv = save_part (msg, opts->targetdir, idx, opts->overwrite,
+ opts->play);
+ if (!rv) {
+ g_warning ("failed to save MIME-part %d", idx);
break;
- }
+ }
}
g_strfreev (parts);
-
return rv;
}
struct _SaveData {
- MuMsg *msg;
gboolean attachments_only;
gboolean result;
guint saved_num;
@@ -77,7 +102,7 @@ typedef struct _SaveData SaveData;
static void
-save_part_if (MuMsgPart *part, SaveData *sd)
+save_part_if (MuMsg *msg, MuMsgPart *part, SaveData *sd)
{
/* something went wrong somewhere; stop */
if (!sd->result)
@@ -97,8 +122,8 @@ save_part_if (MuMsgPart *part, SaveData *sd)
g_ascii_strcasecmp (part->type, "multipart") == 0)
return;
- sd->result = mu_msg_mime_part_save (sd->msg, part->index,
- sd->targetdir, sd->overwrite, sd->play);
+ sd->result = mu_msg_part_save (msg, sd->targetdir, part->index,
+ sd->overwrite, sd->play);
if (!sd->result)
g_warning ("failed to save MIME-part %u", part->index);
else
@@ -112,7 +137,6 @@ save_certain_parts (MuMsg *msg, gboolean attachments_only,
{
SaveData sd;
- sd.msg = msg;
sd.result = TRUE;
sd.saved_num = 0;
sd.attachments_only = attachments_only;
@@ -120,9 +144,9 @@ save_certain_parts (MuMsg *msg, gboolean attachments_only,
sd.targetdir = targetdir;
sd.play = play;
- mu_msg_msg_part_foreach (msg,
- (MuMsgPartForeachFunc)save_part_if,
- &sd);
+ mu_msg_part_foreach (msg,
+ (MuMsgPartForeachFunc)save_part_if,
+ &sd);
if (sd.saved_num == 0) {
g_warning ("no %s extracted from this message",
@@ -173,7 +197,7 @@ save_parts (const char *path, MuConfig *opts)
static void
-each_part_show (MuMsgPart *part, gpointer user_data)
+each_part_show (MuMsg *msg, MuMsgPart *part, gpointer user_data)
{
g_print (" %u %s %s/%s [%s]\n",
part->index,
@@ -199,7 +223,7 @@ show_parts (const char* path, MuConfig *opts)
}
g_print ("MIME-parts in this message:\n");
- mu_msg_msg_part_foreach (msg, each_part_show, NULL);
+ mu_msg_part_foreach (msg, each_part_show, NULL);
mu_msg_unref (msg);
return TRUE;
diff --git a/toys/mug2/mug-msg-view.c b/toys/mug2/mug-msg-view.c
index ce5288ba..d52198cb 100644
--- a/toys/mug2/mug-msg-view.c
+++ b/toys/mug2/mug-msg-view.c
@@ -38,47 +38,9 @@ enum {
LAST_SIGNAL
};
-enum _HeaderRow {
- HEADER_ROW_FROM,
- HEADER_ROW_TO,
- HEADER_ROW_SUBJECT,
- HEADER_ROW_CC,
- HEADER_ROW_DATE,
- HEADER_ROW_PATH,
- HEADER_ROW_MSGID,
- HEADER_ROW_SIZE,
- HEADER_ROW_NUM
-};
-typedef enum _HeaderRow HeaderRow;
-
-struct _HeaderInfo {
- HeaderRow row;
- const char *title;
-};
-typedef struct _HeaderInfo HeaderInfo;
-
-static const HeaderInfo HEADER_INFO[] = {
- {HEADER_ROW_CC, "Cc"},
- {HEADER_ROW_SUBJECT, "Subject"},
- {HEADER_ROW_DATE, "Date"}
-};
-
-static const HeaderInfo HEADER_INFO_EXPANDER[] = {
- {HEADER_ROW_FROM, "From"},
- {HEADER_ROW_TO, "To"},
- {HEADER_ROW_PATH, "Path"},
- {HEADER_ROW_MSGID, "Message-Id"},
- {HEADER_ROW_SIZE, "Size"}
-};
typedef struct _MugMsgViewPrivate MugMsgViewPrivate;
struct _MugMsgViewPrivate {
-
- GtkWidget *_headers_area;
- GtkWidget *_tablemain, *_tableexpander;
- GtkWidget *_headervals[HEADER_ROW_NUM];
-
- GtkWidget *_expander_header, *_expander;
GtkWidget *_view;
};
#define MUG_MSG_VIEW_GET_PRIVATE(o)(G_TYPE_INSTANCE_GET_PRIVATE((o),MUG_TYPE_MSG_VIEW, MugMsgViewPrivate))
@@ -109,76 +71,6 @@ mug_msg_view_class_init (MugMsgViewClass * klass)
/* etc. */
}
-static GtkWidget *
-create_table (MugMsgViewPrivate * priv, const HeaderInfo * hinfo, guint num)
-{
- guint i;
- GtkWidget *table;
-
- table = gtk_table_new (num, 2, FALSE);
- gtk_table_set_col_spacings (GTK_TABLE (table), 5);
-
- for (i = 0; i < num; ++i) {
-
- char *str;
- GtkWidget *l, *al;
-
- l = gtk_label_new (NULL);
- gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
-
- gtk_label_set_justify (GTK_LABEL (l), GTK_JUSTIFY_LEFT);
- str = g_strdup_printf ("%s:", hinfo[i].title);
- gtk_label_set_markup (GTK_LABEL (l), str);
- g_free (str);
-
- al = gtk_alignment_new (0.0, 0.0, 0.0, 0.0);
- gtk_container_add (GTK_CONTAINER (al), l);
- gtk_table_attach (GTK_TABLE (table), al, 0, 1, i, i + 1,
- GTK_FILL, 0, 0, 0);
-
- l = priv->_headervals[hinfo[i].row] = gtk_label_new (NULL);
- al = gtk_alignment_new (0.0, 0.0, 0.0, 0.0);
- gtk_label_set_selectable (GTK_LABEL (l), TRUE);
-
- gtk_container_add (GTK_CONTAINER (al), l);
- gtk_label_set_justify (GTK_LABEL (l), GTK_JUSTIFY_LEFT);
- gtk_label_set_line_wrap_mode (GTK_LABEL (l),
- PANGO_WRAP_WORD_CHAR);
- gtk_label_set_line_wrap (GTK_LABEL (l), FALSE);
- gtk_table_attach (GTK_TABLE (table), al,
- 1, 2, i, i + 1, GTK_FILL, 0, 0, 0);
- }
-
- return table;
-}
-
-static GtkWidget *
-headers_area (MugMsgViewPrivate * priv)
-{
- GtkWidget *scrolled, *vbox;
-
- priv->_tablemain = create_table (priv, HEADER_INFO,
- G_N_ELEMENTS (HEADER_INFO));
- priv->_tableexpander = create_table
- (priv, HEADER_INFO_EXPANDER, G_N_ELEMENTS (HEADER_INFO_EXPANDER));
- priv->_expander = gtk_expander_new ("Details");
- gtk_container_add (GTK_CONTAINER (priv->_expander),
- priv->_tableexpander);
-
- vbox = gtk_vbox_new (FALSE, FALSE);
- gtk_box_pack_start (GTK_BOX (vbox), priv->_tablemain, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), priv->_expander, FALSE, FALSE, 0);
-
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled),
- vbox);
-
- return priv->_headers_area = scrolled;
-}
-
static void
mug_msg_view_init (MugMsgView * obj)
{
@@ -188,10 +80,6 @@ mug_msg_view_init (MugMsgView * obj)
priv = MUG_MSG_VIEW_GET_PRIVATE (obj);
priv->_view = mu_msg_view_new ();
- /* priv->_view = gtk_text_view_new (); */
- /* gtk_text_view_set_editable (GTK_TEXT_VIEW (priv->_view), FALSE); */
- /* gtk_text_view_set_left_margin (GTK_TEXT_VIEW (priv->_view), 10); */
- /* gtk_text_view_set_right_margin (GTK_TEXT_VIEW (priv->_view), 10); */
scrolled = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
@@ -200,8 +88,6 @@ mug_msg_view_init (MugMsgView * obj)
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled),
priv->_view);
- gtk_box_pack_start (GTK_BOX (obj), headers_area (priv), FALSE, FALSE,
- 0);
gtk_box_pack_start (GTK_BOX (obj), scrolled, TRUE, TRUE, 0);
}
@@ -219,39 +105,6 @@ mug_msg_view_new (void)
}
-static void
-fill_header (MugMsgViewPrivate * priv, MuMsg * msg)
-{
- int i;
-
- for (i = 0; i != HEADER_ROW_NUM; ++i) {
- const gchar *val;
- switch (i) {
- case HEADER_ROW_FROM: val = mu_msg_get_from (msg); break;
- case HEADER_ROW_TO: val = mu_msg_get_to (msg); break;
- case HEADER_ROW_SUBJECT: val = mu_msg_get_subject (msg); break;
- case HEADER_ROW_MSGID: val = mu_msg_get_msgid (msg);break;
- case HEADER_ROW_CC: val = mu_msg_get_cc (msg); break;
- case HEADER_ROW_PATH: val = mu_msg_get_path (msg); break;
- case HEADER_ROW_DATE:
- val = mu_str_date_s ("%c", mu_msg_get_date (msg));
- break;
- case HEADER_ROW_SIZE:
- val = mu_str_size_s (mu_msg_get_size (msg));
- break;
- default:
- val = NULL;
- }
-
- {
- gchar *str;
- str = g_markup_escape_text (val ? val : "", -1);
- gtk_label_set_markup
- (GTK_LABEL (priv->_headervals[i]), str);
- g_free (str);
- }
- }
-}
gboolean
mug_msg_view_set_msg (MugMsgView * self, const char *msgpath)
@@ -264,10 +117,13 @@ mug_msg_view_set_msg (MugMsgView * self, const char *msgpath)
if (!msgpath)
mu_msg_view_set_message (MU_MSG_VIEW(priv->_view), NULL);
else {
- MuMsg *msg = mu_msg_new (msgpath, NULL, NULL);
+ MuMsg *msg;
+
+ msg = mu_msg_new (msgpath, NULL, NULL);
mu_msg_view_set_message (MU_MSG_VIEW(priv->_view), msg);
- fill_header (priv, msg);
- mu_msg_unref (msg);
+
+ if (msg)
+ mu_msg_unref (msg);
}
return TRUE;
diff --git a/widgets/Makefile.am b/widgets/Makefile.am
index 3f202981..b65449aa 100644
--- a/widgets/Makefile.am
+++ b/widgets/Makefile.am
@@ -37,6 +37,8 @@ libmuwidgets_la_SOURCES= \
mu-msg-attach-view.h \
mu-msg-body-view.c \
mu-msg-body-view.h \
+ mu-msg-header-view.c \
+ mu-msg-header-view.h \
mu-msg-view.h \
mu-msg-view.c
diff --git a/widgets/mu-msg-attach-view.c b/widgets/mu-msg-attach-view.c
index b48b833f..d96ce312 100644
--- a/widgets/mu-msg-attach-view.c
+++ b/widgets/mu-msg-attach-view.c
@@ -129,7 +129,11 @@ mu_msg_attach_view_init (MuMsgAttachView *obj)
static void
mu_msg_attach_view_finalize (GObject *obj)
{
- mu_msg_unref (MU_MSG_ATTACH_VIEW(obj)->_priv->_msg);
+ MuMsg *msg;
+
+ msg = MU_MSG_ATTACH_VIEW(obj)->_priv->_msg;
+ if (msg)
+ mu_msg_unref (msg);
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
@@ -149,7 +153,7 @@ typedef struct _CBData CBData;
static void
-each_part (MuMsgPart *part, CBData *cbdata)
+each_part (MuMsg *msg, MuMsgPart *part, CBData *cbdata)
{
GtkTreeIter treeiter;
GdkPixbuf *pixbuf;
@@ -180,7 +184,7 @@ each_part (MuMsgPart *part, CBData *cbdata)
-1);
if (pixbuf)
g_object_unref (pixbuf);
-
+
++cbdata->count;
}
@@ -206,7 +210,7 @@ mu_msg_attach_view_set_message (MuMsgAttachView *self, MuMsg *msg)
cbdata.store = store;
cbdata.count = 0;
- mu_msg_msg_part_foreach (msg, (MuMsgPartForeachFunc)each_part, &cbdata);
+ mu_msg_part_foreach (msg, (MuMsgPartForeachFunc)each_part, &cbdata);
return cbdata.count;
}
diff --git a/widgets/mu-msg-body-view.c b/widgets/mu-msg-body-view.c
index 180bd5ff..691d5892 100644
--- a/widgets/mu-msg-body-view.c
+++ b/widgets/mu-msg-body-view.c
@@ -18,8 +18,8 @@
*/
#include
#include "mu-msg-body-view.h"
+#include
-/* include other impl specific header files */
/* 'private'/'protected' functions */
static void mu_msg_body_view_class_init (MuMsgBodyViewClass *klass);
@@ -35,6 +35,7 @@ enum {
struct _MuMsgBodyViewPrivate {
WebKitWebSettings *_settings;
+ MuMsg *_message;
};
#define MU_MSG_BODY_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
MU_TYPE_MSG_BODY_VIEW, \
@@ -66,11 +67,72 @@ mu_msg_body_view_class_init (MuMsgBodyViewClass *klass)
/* etc. */
}
+
+
+static char*
+save_file_for_cid (MuMsg *msg, const char* cid)
+{
+ gint idx;
+ gchar *filepath;
+ gboolean rv;
+
+ g_return_val_if_fail (msg, NULL);
+ g_return_val_if_fail (cid, NULL);
+
+ idx = mu_msg_part_find_cid (msg, cid);
+ if (idx < 0) {
+ g_warning ("%s: cannot find %s", __FUNCTION__, cid);
+ return NULL;
+ }
+
+ filepath = mu_msg_part_filepath_cache (msg, idx);
+ if (!filepath) {
+ g_warning ("%s: cannot create filepath", filepath);
+ return NULL;
+ }
+
+ rv = mu_msg_part_save (msg, filepath, idx, FALSE, TRUE);
+ if (!rv) {
+ g_warning ("%s: failed to save %s", __FUNCTION__, filepath);
+ g_free (filepath);
+ filepath = NULL;
+ }
+
+ return filepath;
+}
+
+static void
+on_resource_request_starting (MuMsgBodyView *self, WebKitWebFrame *frame,
+ WebKitWebResource *resource, WebKitNetworkRequest *request,
+ WebKitNetworkResponse *response, gpointer data)
+{
+ const char* uri;
+ MuMsg *msg;
+
+ msg = self->_priv->_message;
+ uri = webkit_network_request_get_uri (request);
+
+ if (g_ascii_strncasecmp (uri, "cid:", 4) == 0) {
+ gchar *filepath;
+ filepath = save_file_for_cid (msg, uri + 4);
+ if (filepath) {
+ gchar *fileuri;
+ fileuri = g_strdup_printf ("file://%s", filepath);
+ webkit_network_request_set_uri (request, fileuri);
+ g_free (fileuri);
+ g_free (filepath);
+ }
+ }
+}
+
+
static void
mu_msg_body_view_init (MuMsgBodyView *obj)
{
obj->_priv = MU_MSG_BODY_VIEW_GET_PRIVATE(obj);
+ obj->_priv->_message = NULL;
+
obj->_priv->_settings = webkit_web_settings_new ();
g_object_set (G_OBJECT(obj->_priv->_settings),
"enable-scripts", FALSE,
@@ -81,7 +143,9 @@ mu_msg_body_view_init (MuMsgBodyView *obj)
webkit_web_view_set_settings (WEBKIT_WEB_VIEW(obj),
obj->_priv->_settings);
webkit_web_view_set_editable (WEBKIT_WEB_VIEW(obj), FALSE);
- /* other settings */
+
+ g_signal_connect (obj, "resource-request-starting",
+ G_CALLBACK (on_resource_request_starting), NULL);
}
static void
@@ -92,6 +156,9 @@ mu_msg_body_view_finalize (GObject *obj)
priv = MU_MSG_BODY_VIEW_GET_PRIVATE(obj);
if (priv && priv->_settings)
g_object_unref (priv->_settings);
+
+ if (priv->_message)
+ mu_msg_unref (priv->_message);
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
@@ -104,7 +171,7 @@ mu_msg_body_view_new (void)
void
-mu_msg_body_view_set_html (MuMsgBodyView *self, const char* html)
+set_html (MuMsgBodyView *self, const char* html)
{
g_return_if_fail (MU_IS_MSG_BODY_VIEW(self));
@@ -115,8 +182,8 @@ mu_msg_body_view_set_html (MuMsgBodyView *self, const char* html)
"");
}
-void
-mu_msg_body_view_set_text (MuMsgBodyView *self, const char* txt)
+static void
+set_text (MuMsgBodyView *self, const char* txt)
{
g_return_if_fail (MU_IS_MSG_BODY_VIEW(self));
@@ -126,3 +193,23 @@ mu_msg_body_view_set_text (MuMsgBodyView *self, const char* txt)
"utf-8",
"");
}
+
+
+void
+mu_msg_body_view_set_message (MuMsgBodyView *self, MuMsg *msg)
+{
+ const char* data;
+
+ g_return_if_fail (self);
+
+ if (self->_priv->_message)
+ mu_msg_unref (self->_priv->_message);
+
+ self->_priv->_message = msg ? mu_msg_ref (msg) : NULL;
+
+ data = msg ? mu_msg_get_body_html (msg) : "";
+ if (data)
+ set_html (self, data);
+ else
+ set_text (self, mu_msg_get_body_text (msg));
+}
diff --git a/widgets/mu-msg-body-view.h b/widgets/mu-msg-body-view.h
index 0d717f3c..45dadd7a 100644
--- a/widgets/mu-msg-body-view.h
+++ b/widgets/mu-msg-body-view.h
@@ -21,6 +21,7 @@
#define __MU_MSG_BODY_VIEW_H__
#include
+#include
G_BEGIN_DECLS
@@ -57,8 +58,8 @@ GType mu_msg_body_view_get_type (void) G_GNUC_CONST;
/* if this is a kind of GtkWidget, it should probably return at GtkWidget* */
GtkWidget* mu_msg_body_view_new (void);
-void mu_msg_body_view_set_html (MuMsgBodyView *self, const char* html);
-void mu_msg_body_view_set_text (MuMsgBodyView *self, const char* html);
+void mu_msg_body_view_set_message (MuMsgBodyView *self, MuMsg *msg);
+
G_END_DECLS
diff --git a/widgets/mu-msg-view.c b/widgets/mu-msg-view.c
index 9834c14f..8d6bde47 100644
--- a/widgets/mu-msg-view.c
+++ b/widgets/mu-msg-view.c
@@ -20,7 +20,10 @@
#include "mu-msg-view.h"
#include "mu-msg-body-view.h"
#include "mu-msg-attach-view.h"
-#include "mu-msg.h"
+#include "mu-msg-header-view.h"
+
+#include
+#include
/* 'private'/'protected' functions */
static void mu_msg_view_class_init (MuMsgViewClass *klass);
@@ -35,6 +38,7 @@ enum {
};
struct _MuMsgViewPrivate {
+ GtkWidget *_headers;
GtkWidget *_body;
GtkWidget *_attach, *_attacharea;
};
@@ -71,41 +75,75 @@ mu_msg_view_class_init (MuMsgViewClass *klass)
static void
on_attach_activated (MuMsgView *self, guint partnum, MuMsg *msg)
{
- char *tmpdir;
-
- tmpdir = mu_util_create_tmpdir ();
- if (!tmpdir)
- return;
-
- mu_msg_mime_part_save (msg, partnum, tmpdir, FALSE, TRUE);
- g_free (tmpdir);
+ gchar* filepath;
+
+ filepath = mu_msg_part_filepath_cache (msg, partnum);
+ if (filepath) {
+ mu_msg_part_save (msg, filepath, partnum, FALSE, TRUE);
+ mu_util_play (filepath);
+ g_free (filepath);
+ }
}
-static void
-mu_msg_view_init (MuMsgView *obj)
+static GtkWidget*
+get_header_widget (MuMsgView *self)
+{
+ return self->_priv->_headers = mu_msg_header_view_new ();
+}
+
+
+static GtkWidget*
+get_body_widget (MuMsgView *self)
{
GtkWidget *scrolledwin;
- obj->_priv = MU_MSG_VIEW_GET_PRIVATE(obj);
-
- obj->_priv->_body = mu_msg_body_view_new ();
+ self->_priv->_body = mu_msg_body_view_new ();
scrolledwin = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER(scrolledwin),
- obj->_priv->_body);
- gtk_box_pack_start (GTK_BOX(obj), scrolledwin,
- TRUE, TRUE, 2);
+ self->_priv->_body);
- obj->_priv->_attacharea = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(obj->_priv->_attacharea),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- obj->_priv->_attach = mu_msg_attach_view_new ();
- gtk_container_add (GTK_CONTAINER(obj->_priv->_attacharea), obj->_priv->_attach);
+ return scrolledwin;
+}
- g_signal_connect (obj->_priv->_attach, "attach-activated",
+static GtkWidget*
+get_attach_widget (MuMsgView *self)
+{
+ /* GtkWidget *scrolledwin; */
+
+ self->_priv->_attacharea = gtk_frame_new ("");
+ /* scrolledwin = gtk_scrolled_window_new (NULL, NULL); */
+ /* gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolledwin), */
+ /* GTK_POLICY_NEVER, */
+ /* GTK_POLICY_AUTOMATIC); */
+
+ self->_priv->_attach = mu_msg_attach_view_new ();
+ gtk_container_add (GTK_CONTAINER(self->_priv->_attacharea),
+ self->_priv->_attach);
+
+ g_signal_connect (self->_priv->_attach, "attach-activated",
G_CALLBACK(on_attach_activated),
- obj);
+ self);
+
+ return self->_priv->_attacharea;
+}
+
+static void
+mu_msg_view_init (MuMsgView *self)
+{
+ self->_priv = MU_MSG_VIEW_GET_PRIVATE(self);
+
+ gtk_box_pack_start (GTK_BOX(self), get_header_widget (self),
+ FALSE, FALSE, 2);
+
+ gtk_box_pack_start (GTK_BOX(self), get_attach_widget (self),
+ FALSE, FALSE, 2);
+
+ gtk_box_pack_start (GTK_BOX(self), get_body_widget (self),
+ TRUE, TRUE, 2);
+
+
+
}
static void
@@ -123,55 +161,31 @@ mu_msg_view_new (void)
static void
-add_attachment_area_maybe (MuMsgView *self, MuMsg *msg)
+update_attachment_area (MuMsgView *self, MuMsg *msg)
{
gint attach_num;
- GList *children, *cur;
- gboolean has_area;
-
- has_area = FALSE;
- cur = children = gtk_container_get_children (GTK_CONTAINER(self));
- while (cur) {
- if (cur->data == self->_priv->_attacharea) {
- has_area = TRUE;
- break;
- }
- cur = g_list_next (cur);
- }
- g_list_free (children);
-
+
attach_num = 0;
if (msg)
attach_num = mu_msg_attach_view_set_message
(MU_MSG_ATTACH_VIEW(self->_priv->_attach), msg);
-
- if (attach_num < 1 && has_area) {
- g_object_ref (self->_priv->_attacharea);
- gtk_container_remove (GTK_CONTAINER(self),
- self->_priv->_attacharea);
- } else if (attach_num >= 1 && !has_area) {
- gtk_box_pack_start (GTK_BOX(self), self->_priv->_attacharea,
- FALSE, FALSE, 0);
+ if (attach_num > 0)
gtk_widget_show_all (self->_priv->_attacharea);
- }
+ else
+ gtk_widget_hide_all (self->_priv->_attacharea);
}
void
mu_msg_view_set_message (MuMsgView *self, MuMsg *msg)
-{
- const char *data;
-
+{
g_return_if_fail (MU_IS_MSG_VIEW(self));
+
+ mu_msg_header_view_set_message (MU_MSG_HEADER_VIEW(self->_priv->_headers),
+ msg);
+ mu_msg_body_view_set_message (MU_MSG_BODY_VIEW(self->_priv->_body),
+ msg);
- data = msg ? mu_msg_get_body_html (msg) : "";
- if (data)
- mu_msg_body_view_set_html (MU_MSG_BODY_VIEW(self->_priv->_body),
- data);
- else
- mu_msg_body_view_set_text (MU_MSG_BODY_VIEW(self->_priv->_body),
- mu_msg_get_body_text (msg));
-
- add_attachment_area_maybe (self, msg);
+ update_attachment_area (self, msg);
}