X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-gtkhtml-msg-view.c;h=4d40ed36533f307195bab3c96ea664ebe5f34700;hp=75f4362669509b162140db7308d46f9e658695a8;hb=f64c740f4ee8ab71d5842f369beaced86ab521d5;hpb=3f4f089eb3725a99a9c85f757d6be3d7012714eb diff --git a/src/widgets/modest-gtkhtml-msg-view.c b/src/widgets/modest-gtkhtml-msg-view.c index 75f4362..4d40ed3 100644 --- a/src/widgets/modest-gtkhtml-msg-view.c +++ b/src/widgets/modest-gtkhtml-msg-view.c @@ -53,6 +53,7 @@ #include #include #include +#include /* FIXNE: we should have no maemo-deps in widgets/ */ #ifndef MODEST_TOOLKIT_GTK @@ -79,7 +80,6 @@ static void get_property (GObject *object, guint prop_id, GValue *value, GPa static void on_recpt_activated (ModestMailHeaderView *header_view, const gchar *address, ModestGtkhtmlMsgView *msg_view); static void on_show_details (ModestMailHeaderView *header_view, ModestGtkhtmlMsgView *msg_view); static void on_attachment_activated (ModestAttachmentsView * att_view, TnyMimePart *mime_part, gpointer userdata); -static void on_view_images_clicked (GtkButton * button, gpointer self); /* body view signals */ static gboolean on_activate_link (GtkWidget *widget, const gchar *uri, ModestGtkhtmlMsgView *msg_view); @@ -184,6 +184,8 @@ static TnyList *modest_gtkhtml_msg_view_get_selected_attachments (ModestMsgView static TnyList *modest_gtkhtml_msg_view_get_attachments (ModestMsgView *self); static void modest_gtkhtml_msg_view_grab_focus (ModestMsgView *self); static void modest_gtkhtml_msg_view_remove_attachment (ModestMsgView *view, TnyMimePart *attachment); +static void modest_gtkhtml_msg_view_request_fetch_images (ModestMsgView *view); +static gboolean modest_gtkhtml_msg_view_has_blocked_external_images (ModestMsgView *view); static GtkAdjustment *modest_gtkhtml_msg_view_get_vadjustment_default (ModestMsgView *self); static GtkAdjustment *modest_gtkhtml_msg_view_get_hadjustment_default (ModestMsgView *self); static void modest_gtkhtml_msg_view_set_vadjustment_default (ModestMsgView *self, GtkAdjustment *vadj); @@ -196,6 +198,8 @@ static TnyList *modest_gtkhtml_msg_view_get_selected_attachments_default (Modest static TnyList *modest_gtkhtml_msg_view_get_attachments_default (ModestMsgView *self); static void modest_gtkhtml_msg_view_grab_focus_default (ModestMsgView *self); static void modest_gtkhtml_msg_view_remove_attachment_default (ModestMsgView *view, TnyMimePart *attachment); +static gboolean modest_gtkhtml_msg_view_has_blocked_external_images_default (ModestMsgView *view); +static void modest_gtkhtml_msg_view_request_fetch_images_default (ModestMsgView *view); /* internal api */ static void set_header (ModestGtkhtmlMsgView *self, TnyHeader *header); @@ -218,6 +222,8 @@ static TnyList *get_selected_attachments (ModestGtkhtmlMsgView *self); static TnyList *get_attachments (ModestGtkhtmlMsgView *self); static void grab_focus (ModestGtkhtmlMsgView *self); static void remove_attachment (ModestGtkhtmlMsgView *view, TnyMimePart *attachment); +static void request_fetch_images (ModestGtkhtmlMsgView *view); +static gboolean has_blocked_external_images (ModestGtkhtmlMsgView *view); /* list properties */ enum { @@ -239,7 +245,11 @@ struct _ModestGtkhtmlMsgViewPrivate { GtkWidget *headers_box; GtkWidget *html_scroll; GtkWidget *attachments_box; - GtkWidget *view_images_button; + +#ifdef MODEST_TOOLKIT_HILDON2 + GtkWidget *priority_box; + GtkWidget *priority_icon; +#endif /* internal adjustments for set_scroll_adjustments */ GtkAdjustment *hadj; @@ -419,6 +429,8 @@ modest_gtkhtml_msg_view_class_init (ModestGtkhtmlMsgViewClass *klass) klass->get_attachments_func = modest_gtkhtml_msg_view_get_attachments_default; klass->grab_focus_func = modest_gtkhtml_msg_view_grab_focus_default; klass->remove_attachment_func = modest_gtkhtml_msg_view_remove_attachment_default; + klass->request_fetch_images_func = modest_gtkhtml_msg_view_request_fetch_images_default; + klass->has_blocked_external_images_func = modest_gtkhtml_msg_view_has_blocked_external_images_default; g_type_class_add_private (gobject_class, sizeof(ModestGtkhtmlMsgViewPrivate)); @@ -633,11 +645,13 @@ set_scroll_adjustments (ModestGtkhtmlMsgView *self, GtkAdjustment *hadj, GtkAdjustment *vadj) { - ModestGtkhtmlMsgViewPrivate *priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); set_hadjustment (self, hadj); set_vadjustment (self, vadj); +#ifndef MODEST_TOOLKIT_HILDON2 + ModestGtkhtmlMsgViewPrivate *priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); gtk_container_set_focus_vadjustment (GTK_CONTAINER (priv->body_view), vadj); +#endif } static void @@ -1088,14 +1102,15 @@ modest_gtkhtml_msg_view_init (ModestGtkhtmlMsgView *obj) #else priv->mail_header_view = GTK_WIDGET(modest_expander_mail_header_view_new (TRUE)); #endif - priv->view_images_button = gtk_button_new_with_label (_("mail_bd_external_images")); -#ifdef MODEST_TOOLKIT_HILDON2 - hildon_gtk_widget_set_theme_size (priv->view_images_button, - HILDON_SIZE_HALFSCREEN_WIDTH | HILDON_SIZE_FINGER_HEIGHT); -#endif gtk_widget_set_no_show_all (priv->mail_header_view, TRUE); - gtk_widget_set_no_show_all (priv->view_images_button, TRUE); priv->attachments_view = GTK_WIDGET(modest_attachments_view_new (NULL)); +#ifdef MODEST_TOOLKIT_HILDON2 + modest_attachments_view_set_style (MODEST_ATTACHMENTS_VIEW (priv->attachments_view), + MODEST_ATTACHMENTS_VIEW_STYLE_LINKS); +#else + modest_attachments_view_set_style (MODEST_ATTACHMENTS_VIEW (priv->attachments_view), + MODEST_ATTACHMENTS_VIEW_STYLE_SELECTABLE); +#endif g_signal_connect (G_OBJECT(priv->body_view), "activate_link", G_CALLBACK(on_activate_link), obj); @@ -1120,9 +1135,6 @@ modest_gtkhtml_msg_view_init (ModestGtkhtmlMsgView *obj) g_signal_connect (G_OBJECT (priv->attachments_view), "activate", G_CALLBACK (on_attachment_activated), obj); - g_signal_connect (G_OBJECT (priv->view_images_button), "clicked", - G_CALLBACK (on_view_images_clicked), obj); - html_vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW(priv->html_scroll)); g_signal_connect (G_OBJECT (html_vadj), "changed", @@ -1135,20 +1147,20 @@ modest_gtkhtml_msg_view_init (ModestGtkhtmlMsgView *obj) if (priv->mail_header_view) gtk_box_pack_start (GTK_BOX(priv->headers_box), priv->mail_header_view, FALSE, FALSE, 0); - if (priv->view_images_button) { - GtkWidget *hbuttonbox; - - hbuttonbox = gtk_hbutton_box_new (); - gtk_container_add (GTK_CONTAINER (hbuttonbox), priv->view_images_button); + #ifdef MODEST_TOOLKIT_HILDON2 - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_START); - gtk_box_pack_start (GTK_BOX (priv->headers_box), hbuttonbox, TRUE, TRUE, 0); -#else - gtk_box_pack_start (GTK_BOX (priv->headers_box), hbuttonbox, FALSE, FALSE, 0); -#endif - gtk_widget_hide (priv->view_images_button); + priv->priority_icon = gtk_image_new (); + gtk_misc_set_alignment (GTK_MISC (priv->priority_icon), 0.0, 0.5); + if (priv->priority_icon) { + priv->priority_box = (GtkWidget *) + modest_mail_header_view_add_custom_header (MODEST_MAIL_HEADER_VIEW (priv->mail_header_view), + _("mcen_me_editor_message_priority"), + priv->priority_icon, + FALSE, FALSE); + + gtk_widget_hide_all (priv->priority_box); } - +#endif if (priv->attachments_view) { #ifndef MODEST_TOOLKIT_HILDON2 gchar *att_label = g_strconcat (_("mcen_me_viewer_attachments"), ":", NULL); @@ -1475,19 +1487,30 @@ on_attachment_activated (ModestAttachmentsView * att_view, TnyMimePart *mime_par } static void -on_view_images_clicked (GtkButton * button, gpointer self) +request_fetch_images (ModestGtkhtmlMsgView *self) { ModestGtkhtmlMsgViewPrivate *priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); TnyMimePart *part; - modest_mime_part_view_set_view_images (MODEST_MIME_PART_VIEW (priv->body_view), TRUE); - gtk_widget_hide (priv->view_images_button); - part = tny_mime_part_view_get_part (TNY_MIME_PART_VIEW (priv->body_view)); - tny_mime_part_view_set_part (TNY_MIME_PART_VIEW (priv->body_view), part); - tny_msg_set_allow_external_images (TNY_MSG (priv->msg), TRUE); - g_object_unref (part); - + /* The message could have not been downloaded yet */ + if (priv->msg) { + modest_mime_part_view_set_view_images (MODEST_MIME_PART_VIEW (priv->body_view), TRUE); + part = tny_mime_part_view_get_part (TNY_MIME_PART_VIEW (priv->body_view)); + if (part) { + tny_mime_part_view_set_part (TNY_MIME_PART_VIEW (priv->body_view), part); + g_object_unref (part); + } + tny_msg_set_allow_external_images (TNY_MSG (priv->msg), TRUE); + } +} + +static gboolean +has_blocked_external_images (ModestGtkhtmlMsgView *self) +{ + ModestGtkhtmlMsgViewPrivate *priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); + return (modest_mime_part_view_has_external_images (MODEST_MIME_PART_VIEW (priv->body_view)) && + !modest_mime_part_view_get_view_images (MODEST_MIME_PART_VIEW (priv->body_view))); } static gboolean @@ -1495,7 +1518,7 @@ on_activate_link (GtkWidget *widget, const gchar *uri, ModestGtkhtmlMsgView *sel { gboolean result; g_return_val_if_fail (self, FALSE); - + g_signal_emit_by_name (G_OBJECT(self), "activate-link", uri, &result); return result; @@ -1602,8 +1625,6 @@ on_fetch_url (GtkWidget *widget, const gchar *uri, priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); - if (modest_mime_part_view_has_external_images (MODEST_MIME_PART_VIEW (priv->body_view))) - gtk_widget_show (priv->view_images_button); /* * we search for either something starting with cid:, or something * with no prefix at all; this latter case occurs when sending mails @@ -1646,10 +1667,11 @@ set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) ModestGtkhtmlMsgViewPrivate *priv; TnyHeader *header; GtkAdjustment *html_vadj; - + g_return_if_fail (self); - + priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE(self); + modest_mail_header_view_set_loading (MODEST_MAIL_HEADER_VIEW (priv->mail_header_view), FALSE); 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); @@ -1666,12 +1688,15 @@ set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) g_object_ref (G_OBJECT(msg)); priv->msg = msg; } - + if (!msg) { tny_header_view_clear (TNY_HEADER_VIEW (priv->mail_header_view)); modest_attachments_view_set_message (MODEST_ATTACHMENTS_VIEW (priv->attachments_view), NULL); gtk_widget_hide_all (priv->mail_header_view); gtk_widget_hide_all (priv->attachments_box); +#ifdef MODEST_TOOKIT_HILDON2 + gtk_widget_hide_all (priv->priority_box); +#endif 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)); @@ -1687,32 +1712,50 @@ set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) msg); modest_mime_part_view_set_view_images (MODEST_MIME_PART_VIEW (priv->body_view), tny_msg_get_allow_external_images (msg)); - + body = modest_tny_msg_find_body_part (msg, TRUE); if (body) { + ModestAttachmentsView *widget; + tny_mime_part_view_set_part (TNY_MIME_PART_VIEW (priv->body_view), body); g_object_unref (body); - - if(modest_attachments_view_has_attachments (MODEST_ATTACHMENTS_VIEW (priv->attachments_view))) { + widget = MODEST_ATTACHMENTS_VIEW (priv->attachments_view); + + if (modest_attachments_view_has_attachments (widget)) { + GtkLabel *label; + GList *children = NULL; + gchar *text = NULL; + /* Ugly but... */ + children = gtk_container_get_children (GTK_CONTAINER (priv->attachments_box)); + label = GTK_LABEL (children->data); gtk_widget_show_all (priv->attachments_box); + if (modest_attachments_view_get_num_attachments (widget) > 1) { + text = _("mail_va_attachments"); + } else { + text = _("mail_va_attachment"); + } + gtk_label_set_text (label, text); } else { gtk_widget_hide_all (priv->attachments_box); } - } else - tny_mime_part_view_clear (TNY_MIME_PART_VIEW (priv->body_view)); - - if (modest_mime_part_view_has_external_images (MODEST_MIME_PART_VIEW (priv->body_view)) && - !modest_mime_part_view_get_view_images (MODEST_MIME_PART_VIEW (priv->body_view))) { - gtk_widget_show (priv->view_images_button); } else { - gtk_widget_hide (priv->view_images_button); + tny_mime_part_view_clear (TNY_MIME_PART_VIEW (priv->body_view)); } + /* Refresh priority */ + set_priority (self, tny_header_get_flags (header)); + gtk_widget_show (priv->body_view); +#ifdef MODEST_TOOLKIT_HILDON2 + gtk_widget_set_no_show_all (priv->priority_box, TRUE); +#endif gtk_widget_set_no_show_all (priv->attachments_box, TRUE); gtk_widget_show_all (priv->mail_header_view); gtk_widget_set_no_show_all (priv->attachments_box, FALSE); +#ifdef MODEST_TOOLKIT_HILDON2 + gtk_widget_set_no_show_all (priv->priority_box, FALSE); +#endif gtk_widget_set_no_show_all (priv->mail_header_view, TRUE); gtk_widget_queue_resize (GTK_WIDGET(self)); gtk_widget_queue_draw (GTK_WIDGET(self)); @@ -1745,6 +1788,7 @@ set_header (ModestGtkhtmlMsgView *self, TnyHeader *header) } priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE(self); + modest_mail_header_view_set_loading (MODEST_MAIL_HEADER_VIEW (priv->mail_header_view), TRUE); 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); @@ -1763,6 +1807,9 @@ set_header (ModestGtkhtmlMsgView *self, TnyHeader *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); +#ifdef MODEST_TOOLKIT_HILDON2 + gtk_widget_hide_all (priv->priority_box); +#endif 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)); @@ -1838,6 +1885,27 @@ set_priority (ModestGtkhtmlMsgView *self, TnyHeaderFlags flags) priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); modest_mail_header_view_set_priority (MODEST_MAIL_HEADER_VIEW (priv->mail_header_view), flags); + +#ifdef MODEST_TOOLKIT_HILDON2 + gboolean show_priority = FALSE; + TnyHeaderFlags priority_flags; + + priority_flags = flags & TNY_HEADER_FLAG_PRIORITY_MASK; + if (priority_flags == TNY_HEADER_FLAG_HIGH_PRIORITY) { + show_priority = TRUE; + gtk_image_set_from_icon_name (GTK_IMAGE (priv->priority_icon), MODEST_HEADER_ICON_HIGH, GTK_ICON_SIZE_MENU); + } else if (priority_flags == TNY_HEADER_FLAG_LOW_PRIORITY) { + show_priority = TRUE; + gtk_image_set_from_icon_name (GTK_IMAGE (priv->priority_icon), MODEST_HEADER_ICON_LOW, GTK_ICON_SIZE_MENU); + } + + if (show_priority && MODEST_IS_COMPACT_MAIL_HEADER_VIEW (priv->mail_header_view)) { + gtk_widget_show_all (priv->priority_box); + } else { + gtk_widget_hide_all (priv->priority_box); + } +#endif + } /* INCREMENTAL SEARCH IMPLEMENTATION */ @@ -2287,6 +2355,8 @@ modest_msg_view_init (gpointer g, gpointer iface_data) klass->get_attachments_func = modest_gtkhtml_msg_view_get_attachments; klass->grab_focus_func = modest_gtkhtml_msg_view_grab_focus; klass->remove_attachment_func = modest_gtkhtml_msg_view_remove_attachment; + klass->request_fetch_images_func = modest_gtkhtml_msg_view_request_fetch_images; + klass->has_blocked_external_images_func = modest_gtkhtml_msg_view_has_blocked_external_images; return; } @@ -2434,3 +2504,27 @@ modest_gtkhtml_msg_view_remove_attachment_default (ModestMsgView *self, TnyMimeP { remove_attachment (MODEST_GTKHTML_MSG_VIEW (self), attachment); } + +static void +modest_gtkhtml_msg_view_request_fetch_images (ModestMsgView *self) +{ + MODEST_GTKHTML_MSG_VIEW_GET_CLASS (self)->request_fetch_images_func (self); +} + +static void +modest_gtkhtml_msg_view_request_fetch_images_default (ModestMsgView *self) +{ + request_fetch_images (MODEST_GTKHTML_MSG_VIEW (self)); +} + +static gboolean +modest_gtkhtml_msg_view_has_blocked_external_images (ModestMsgView *self) +{ + return MODEST_GTKHTML_MSG_VIEW_GET_CLASS (self)->has_blocked_external_images_func (self); +} + +static gboolean +modest_gtkhtml_msg_view_has_blocked_external_images_default (ModestMsgView *self) +{ + return has_blocked_external_images (MODEST_GTKHTML_MSG_VIEW (self)); +}