From 3f4f089eb3725a99a9c85f757d6be3d7012714eb Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Thu, 15 Jan 2009 12:49:28 +0000 Subject: [PATCH] Added TnyHeaderView interface support to ModestGtkhtmlMsgView pmo-trunk-r7152 --- src/hildon2/modest-msg-view-window.c | 4 ++ src/widgets/modest-gtkhtml-msg-view.c | 96 +++++++++++++++++++++++++++++++++ src/widgets/modest-gtkhtml-msg-view.h | 3 ++ src/widgets/modest-msg-view.c | 2 + src/widgets/modest-msg-view.h | 1 + 5 files changed, 106 insertions(+) diff --git a/src/hildon2/modest-msg-view-window.c b/src/hildon2/modest-msg-view-window.c index a40707d..b3f1ab2 100644 --- a/src/hildon2/modest-msg-view-window.c +++ b/src/hildon2/modest-msg-view-window.c @@ -1830,6 +1830,10 @@ message_reader (ModestMsgViewWindow *window, mgr = modest_runtime_get_window_mgr (); /* Msg download completed */ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED)) { + + /* We set the header from model while we're loading */ + + /* Ask the user if he wants to download the message if we're not online */ if (!tny_device_is_online (modest_runtime_get_device())) { diff --git a/src/widgets/modest-gtkhtml-msg-view.c b/src/widgets/modest-gtkhtml-msg-view.c index 569c8cb..75f4362 100644 --- a/src/widgets/modest-gtkhtml-msg-view.c +++ b/src/widgets/modest-gtkhtml-msg-view.c @@ -62,6 +62,7 @@ /* 'private'/'protected' functions */ static void modest_gtkhtml_msg_view_class_init (ModestGtkhtmlMsgViewClass *klass); +static void tny_header_view_init (gpointer g, gpointer iface_data); static void tny_msg_view_init (gpointer g, gpointer iface_data); static void tny_mime_part_view_init (gpointer g, gpointer iface_data); static void modest_mime_part_view_init (gpointer g, gpointer iface_data); @@ -138,6 +139,11 @@ static TnyMimePart* modest_msg_view_mp_get_part_default (TnyMimePartView *self); /* ModestMimePartView implementation */ static gboolean modest_msg_view_mp_is_empty (ModestMimePartView *self); static gboolean modest_msg_view_mp_is_empty_default (ModestMimePartView *self); +/* TnyHeaderView implementation */ +static void modest_msg_view_set_header (TnyHeaderView *self, TnyHeader *header); +static void modest_msg_view_set_header_default (TnyHeaderView *self, TnyHeader *header); +static void modest_msg_view_clear_header (TnyHeaderView *self); +static void modest_msg_view_clear_header_default (TnyHeaderView *self); /* TnyMsgView implementation */ static TnyMsg *modest_msg_view_get_msg (TnyMsgView *self); static TnyMsg *modest_msg_view_get_msg_default (TnyMsgView *self); @@ -192,6 +198,7 @@ static void modest_gtkhtml_msg_view_grab_focus_default (ModestMsgView *self); static void modest_gtkhtml_msg_view_remove_attachment_default (ModestMsgView *view, TnyMimePart *attachment); /* internal api */ +static void set_header (ModestGtkhtmlMsgView *self, TnyHeader *header); static TnyMsg *get_message (ModestGtkhtmlMsgView *self); static void set_message (ModestGtkhtmlMsgView *self, TnyMsg *tny_msg); static gboolean is_empty (ModestGtkhtmlMsgView *self); @@ -292,6 +299,13 @@ modest_gtkhtml_msg_view_get_type (void) NULL /* interface_data */ }; + static const GInterfaceInfo tny_header_view_info = + { + (GInterfaceInitFunc) tny_header_view_init, /* interface_init */ + NULL, /* interface_finalize */ + NULL /* interface_data */ + }; + static const GInterfaceInfo modest_mime_part_view_info = { (GInterfaceInitFunc) modest_mime_part_view_init, /* interface_init */ @@ -324,6 +338,9 @@ modest_gtkhtml_msg_view_get_type (void) "ModestGtkhtmlMsgView", &my_info, 0); + g_type_add_interface_static (my_type, TNY_TYPE_HEADER_VIEW, + &tny_header_view_info); + g_type_add_interface_static (my_type, TNY_TYPE_MIME_PART_VIEW, &tny_mime_part_view_info); @@ -372,6 +389,8 @@ modest_gtkhtml_msg_view_class_init (ModestGtkhtmlMsgViewClass *klass) container_class->forall = forall; container_class->remove = container_remove; + klass->set_header_func = modest_msg_view_set_header_default; + klass->clear_header_func = modest_msg_view_clear_header_default; klass->set_scroll_adjustments = set_scroll_adjustments; klass->get_part_func = modest_msg_view_mp_get_part_default; klass->set_part_func = modest_msg_view_mp_set_part_default; @@ -1712,6 +1731,44 @@ set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) g_timeout_add (250, (GSourceFunc) idle_readjust_scroll, self); } +static void +set_header (ModestGtkhtmlMsgView *self, TnyHeader *header) +{ + ModestGtkhtmlMsgViewPrivate *priv; + GtkAdjustment *html_vadj; + + g_return_if_fail (self); + + if (header == NULL) { + set_message (self, NULL); + return; + } + + priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE(self); + gtk_widget_set_no_show_all (priv->mail_header_view, FALSE); + modest_mime_part_view_set_view_images (MODEST_MIME_PART_VIEW (priv->body_view), FALSE); + + html_vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->html_scroll)); + html_vadj->upper = 0; + html_vadj->page_size = 0; + g_signal_emit_by_name (G_OBJECT (html_vadj), "changed"); + + + if (priv->msg) { + g_object_unref (G_OBJECT(priv->msg)); + } + priv->msg = NULL; + + tny_header_view_set_header (TNY_HEADER_VIEW (priv->mail_header_view), header); + modest_attachments_view_set_message (MODEST_ATTACHMENTS_VIEW (priv->attachments_view), NULL); + gtk_widget_show_all (priv->mail_header_view); + gtk_widget_hide_all (priv->attachments_box); + gtk_widget_set_no_show_all (priv->mail_header_view, TRUE); + tny_mime_part_view_clear (TNY_MIME_PART_VIEW (priv->body_view)); + gtk_widget_queue_resize (GTK_WIDGET(self)); + gtk_widget_queue_draw (GTK_WIDGET(self)); +} + static TnyMsg* get_message (ModestGtkhtmlMsgView *self) @@ -1903,6 +1960,45 @@ remove_attachment (ModestGtkhtmlMsgView *self, TnyMimePart *attachment) } +/* TNY HEADER VIEW IMPLEMENTATION */ + +static void +tny_header_view_init (gpointer g, gpointer iface_data) +{ + TnyHeaderViewIface *klass = (TnyHeaderViewIface *)g; + + klass->set_header = modest_msg_view_set_header; + klass->clear = modest_msg_view_clear_header; + + return; +} + +static void +modest_msg_view_set_header (TnyHeaderView *self, TnyHeader *header) +{ + MODEST_GTKHTML_MSG_VIEW_GET_CLASS (self)->set_header_func (self, header); +} + + +static void +modest_msg_view_set_header_default (TnyHeaderView *self, TnyHeader *header) +{ + set_header (MODEST_GTKHTML_MSG_VIEW (self), header); +} + +static void +modest_msg_view_clear_header (TnyHeaderView *self) +{ + MODEST_GTKHTML_MSG_VIEW_GET_CLASS (self)->clear_header_func (self); +} + + +static void +modest_msg_view_clear_header_default (TnyHeaderView *self) +{ + set_message (MODEST_GTKHTML_MSG_VIEW (self), NULL); +} + /* TNY MSG IMPLEMENTATION */ static void diff --git a/src/widgets/modest-gtkhtml-msg-view.h b/src/widgets/modest-gtkhtml-msg-view.h index 7dbd256..7c0b1a1 100644 --- a/src/widgets/modest-gtkhtml-msg-view.h +++ b/src/widgets/modest-gtkhtml-msg-view.h @@ -59,6 +59,9 @@ struct _ModestGtkhtmlMsgView { struct _ModestGtkhtmlMsgViewClass { GtkContainerClass parent_class; + /* TnyHeaderView interface */ + void (*set_header_func) (TnyHeaderView *self, TnyHeader *header); + void (*clear_header_func) (TnyHeaderView *self); /* TnyMimePartView interface */ TnyMimePart* (*get_part_func) (TnyMimePartView *self); void (*set_part_func) (TnyMimePartView *self, TnyMimePart *part); diff --git a/src/widgets/modest-msg-view.c b/src/widgets/modest-msg-view.c index f8c4bb8..ee55d65 100644 --- a/src/widgets/modest-msg-view.c +++ b/src/widgets/modest-msg-view.c @@ -206,6 +206,8 @@ modest_msg_view_get_type (void) g_type_interface_add_prerequisite (my_type, TNY_TYPE_MIME_PART_VIEW); g_type_interface_add_prerequisite (my_type, + TNY_TYPE_HEADER_VIEW); + g_type_interface_add_prerequisite (my_type, MODEST_TYPE_MIME_PART_VIEW); } diff --git a/src/widgets/modest-msg-view.h b/src/widgets/modest-msg-view.h index 3a7930d..c977650 100644 --- a/src/widgets/modest-msg-view.h +++ b/src/widgets/modest-msg-view.h @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include -- 1.7.9.5