1 /* modest-tny-msg-view.c */
3 /* insert (c)/licensing information) */
5 #include "modest-tny-msg-view.h"
6 /* include other impl specific header files */
8 /* 'private'/'protected' functions */
9 static void modest_tny_msg_view_class_init (ModestTnyMsgViewClass *klass);
10 static void modest_tny_msg_view_init (ModestTnyMsgView *obj);
11 static void modest_tny_msg_view_finalize (GObject *obj);
20 typedef struct _ModestTnyMsgViewPrivate ModestTnyMsgViewPrivate;
21 struct _ModestTnyMsgViewPrivate {
24 #define MODEST_TNY_MSG_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
25 MODEST_TYPE_TNY_MSG_VIEW, \
26 ModestTnyMsgViewPrivate))
28 static GtkContainerClass *parent_class = NULL;
30 /* uncomment the following if you have defined any signals */
31 /* static guint signals[LAST_SIGNAL] = {0}; */
34 modest_tny_msg_view_get_type (void)
36 static GType my_type = 0;
38 static const GTypeInfo my_info = {
39 sizeof(ModestTnyMsgViewClass),
41 NULL, /* base finalize */
42 (GClassInitFunc) modest_tny_msg_view_class_init,
43 NULL, /* class finalize */
44 NULL, /* class data */
45 sizeof(ModestTnyMsgView),
47 (GInstanceInitFunc) modest_tny_msg_view_init,
49 //my_type = g_type_register_static (GTK_TYPE_FRAME,
50 my_type = g_type_register_static (GTK_TYPE_TEXT_VIEW,
58 modest_tny_msg_view_class_init (ModestTnyMsgViewClass *klass)
60 GObjectClass *gobject_class;
61 gobject_class = (GObjectClass*) klass;
63 parent_class = g_type_class_peek_parent (klass);
64 gobject_class->finalize = modest_tny_msg_view_finalize;
66 g_type_class_add_private (gobject_class, sizeof(ModestTnyMsgViewPrivate));
68 /* signal definitions go here, e.g.: */
69 /* signals[MY_SIGNAL_1] = */
70 /* g_signal_new ("my_signal_1",....); */
71 /* signals[MY_SIGNAL_2] = */
72 /* g_signal_new ("my_signal_2",....); */
77 modest_tny_msg_view_init (ModestTnyMsgView *obj)
79 ModestTnyMsgViewPrivate *priv;
81 priv = MODEST_TNY_MSG_VIEW_GET_PRIVATE(obj);
83 priv->text_view = NULL;
87 modest_tny_msg_view_finalize (GObject *obj)
89 /* no need to unref the text_view */
93 modest_tny_msg_view_new (TnyMsgIface *msg)
96 ModestTnyMsgView* self;
97 ModestTnyMsgViewPrivate *priv;
99 obj = G_OBJECT(g_object_new(MODEST_TYPE_TNY_MSG_VIEW, NULL));
100 self = MODEST_TNY_MSG_VIEW(obj);
101 priv = MODEST_TNY_MSG_VIEW_GET_PRIVATE(self);
103 priv->text_view = gtk_text_view_new ();
104 gtk_text_view_set_editable (GTK_TEXT_VIEW(priv->text_view), FALSE);
105 gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW(priv->text_view), FALSE);
107 gtk_container_add (GTK_CONTAINER(self), priv->text_view);
110 modest_tny_msg_view_set_message (self, msg);
112 return GTK_WIDGET(self);
118 modest_tny_msg_view_set_message (ModestTnyMsgView *self, TnyMsgIface *msg)
120 ModestTnyMsgViewPrivate *priv;
123 TnyStreamIface *stream;
125 g_return_if_fail (self);
127 priv = MODEST_TNY_MSG_VIEW_GET_PRIVATE(self);
128 buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->text_view));
130 /* clear the message view */
131 gtk_text_buffer_set_text (buf, "", 0);
133 /* if msg is NULL, do nothing else */
138 /* otherwise... find the body part */
139 stream = TNY_STREAM_IFACE(tny_text_buffer_stream_new(buf));
140 parts = (GList*) tny_msg_iface_get_parts (msg);
142 TnyMsgMimePartIface *part =
143 TNY_MSG_MIME_PART_IFACE(parts->data);
145 if (tny_msg_mime_part_iface_content_type_is (part, "text/plain")) {
146 tny_stream_iface_reset (stream);
147 tny_msg_mime_part_iface_write_to_stream (part, stream);
148 tny_stream_iface_reset (stream);