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_SCROLLED_WINDOW,
57 modest_tny_msg_view_class_init (ModestTnyMsgViewClass *klass)
59 GObjectClass *gobject_class;
60 gobject_class = (GObjectClass*) klass;
62 parent_class = g_type_class_peek_parent (klass);
63 gobject_class->finalize = modest_tny_msg_view_finalize;
65 g_type_class_add_private (gobject_class, sizeof(ModestTnyMsgViewPrivate));
67 /* signal definitions go here, e.g.: */
68 /* signals[MY_SIGNAL_1] = */
69 /* g_signal_new ("my_signal_1",....); */
70 /* signals[MY_SIGNAL_2] = */
71 /* g_signal_new ("my_signal_2",....); */
76 modest_tny_msg_view_init (ModestTnyMsgView *obj)
78 ModestTnyMsgViewPrivate *priv;
80 priv = MODEST_TNY_MSG_VIEW_GET_PRIVATE(obj);
82 priv->text_view = NULL;
86 modest_tny_msg_view_finalize (GObject *obj)
88 /* no need to unref the text_view */
92 modest_tny_msg_view_new (TnyMsgIface *msg)
95 ModestTnyMsgView* self;
96 ModestTnyMsgViewPrivate *priv;
98 obj = G_OBJECT(g_object_new(MODEST_TYPE_TNY_MSG_VIEW, NULL));
99 self = MODEST_TNY_MSG_VIEW(obj);
100 priv = MODEST_TNY_MSG_VIEW_GET_PRIVATE(self);
102 gtk_scrolled_window_set_policy(self, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
104 priv->text_view = gtk_text_view_new ();
105 gtk_text_view_set_editable (GTK_TEXT_VIEW(priv->text_view), FALSE);
106 gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW(priv->text_view), FALSE);
108 gtk_container_add (GTK_CONTAINER(self), priv->text_view);
111 modest_tny_msg_view_set_message (self, msg);
113 return GTK_WIDGET(self);
119 modest_tny_msg_view_set_message (ModestTnyMsgView *self, TnyMsgIface *msg)
121 ModestTnyMsgViewPrivate *priv;
124 TnyStreamIface *stream;
126 g_return_if_fail (self);
128 priv = MODEST_TNY_MSG_VIEW_GET_PRIVATE(self);
129 buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW(priv->text_view));
131 /* clear the message view */
132 gtk_text_buffer_set_text (buf, "", 0);
134 /* if msg is NULL, do nothing else */
139 /* otherwise... find the body part */
140 stream = TNY_STREAM_IFACE(tny_text_buffer_stream_new(buf));
141 parts = (GList*) tny_msg_iface_get_parts (msg);
143 TnyMsgMimePartIface *part =
144 TNY_MSG_MIME_PART_IFACE(parts->data);
146 if (tny_msg_mime_part_iface_content_type_is (part, "text/plain")) {
147 tny_stream_iface_reset (stream);
148 tny_msg_mime_part_iface_write_to_stream (part, stream);
149 tny_stream_iface_reset (stream);