X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-gtkhtml-msg-view.c;h=994f926dbeb0de313fc7a53a3360364751865ba2;hb=63951a450b16e144c215ecbac88c37c80dd823a0;hp=ef2f62efad2e149ac1f160d402850d7148dffb16;hpb=9e841a78f02548773fc6a2f31e9546daa5cca086;p=modest diff --git a/src/widgets/modest-gtkhtml-msg-view.c b/src/widgets/modest-gtkhtml-msg-view.c index ef2f62e..994f926 100644 --- a/src/widgets/modest-gtkhtml-msg-view.c +++ b/src/widgets/modest-gtkhtml-msg-view.c @@ -86,6 +86,7 @@ static gboolean on_activate_link (GtkWidget *widget, const gchar *uri, ModestGtk static gboolean on_fetch_url (GtkWidget *widget, const gchar *uri, TnyStream *stream, ModestGtkhtmlMsgView *msg_view); static gboolean on_link_hover (GtkWidget *widget, const gchar *uri, ModestGtkhtmlMsgView *msg_view); +static void on_limit_error (GtkWidget *widget, ModestGtkhtmlMsgView *msg_view); #ifdef MAEMO_CHANGES static void on_tap_and_hold (GtkWidget *widget, gpointer userdata); @@ -172,6 +173,7 @@ static gboolean modest_msg_view_search_default (ModestISearchView *self, const g static gboolean modest_msg_view_search_next (ModestISearchView *self); static gboolean modest_msg_view_search_next_default (ModestISearchView *self); /* ModestMsgView implementation */ +static void modest_gtkhtml_msg_view_set_msg_with_other_body (ModestMsgView *self, TnyMsg *msg, TnyMimePart *other_body); static GtkAdjustment *modest_gtkhtml_msg_view_get_vadjustment (ModestMsgView *self); static GtkAdjustment *modest_gtkhtml_msg_view_get_hadjustment (ModestMsgView *self); static void modest_gtkhtml_msg_view_set_vadjustment (ModestMsgView *self, GtkAdjustment *vadj); @@ -185,7 +187,9 @@ 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 void modest_gtkhtml_msg_view_set_branding (ModestMsgView *view, const gchar *brand_name, const GdkPixbuf *brand_icon); static gboolean modest_gtkhtml_msg_view_has_blocked_external_images (ModestMsgView *view); +static void modest_gtkhtml_msg_view_set_msg_with_other_body_default (ModestMsgView *view, TnyMsg *msg, TnyMimePart *part); 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); @@ -200,11 +204,12 @@ 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); +static void modest_gtkhtml_msg_view_set_branding_default (ModestMsgView *view, const gchar *brand_name, const GdkPixbuf *brand_icon); /* 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 void set_message (ModestGtkhtmlMsgView *self, TnyMsg *tny_msg, TnyMimePart *other_body); static gboolean is_empty (ModestGtkhtmlMsgView *self); static void set_zoom (ModestGtkhtmlMsgView *self, gdouble zoom); static gdouble get_zoom (ModestGtkhtmlMsgView *self); @@ -223,6 +228,7 @@ 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 void set_branding (ModestGtkhtmlMsgView *view, const gchar *brand_name, const GdkPixbuf *brand_icon); static gboolean has_blocked_external_images (ModestGtkhtmlMsgView *view); /* list properties */ @@ -238,16 +244,19 @@ struct _ModestGtkhtmlMsgViewPrivate { GtkWidget *body_view; GtkWidget *mail_header_view; GtkWidget *attachments_view; - GtkWidget *priority_icon; TnyMsg *msg; /* embedded elements */ GtkWidget *headers_box; - GtkWidget *priority_box; GtkWidget *html_scroll; GtkWidget *attachments_box; +#ifdef MODEST_TOOLKIT_HILDON2 + GtkWidget *priority_box; + GtkWidget *priority_icon; +#endif + /* internal adjustments for set_scroll_adjustments */ GtkAdjustment *hadj; GtkAdjustment *vadj; @@ -414,6 +423,7 @@ modest_gtkhtml_msg_view_class_init (ModestGtkhtmlMsgViewClass *klass) klass->zoom_plus_func = modest_msg_view_zoom_plus_default; klass->search_func = modest_msg_view_search_default; klass->search_next_func = modest_msg_view_search_next_default; + klass->set_msg_with_other_body_func = modest_gtkhtml_msg_view_set_msg_with_other_body_default; klass->get_vadjustment_func = modest_gtkhtml_msg_view_get_vadjustment_default; klass->get_hadjustment_func = modest_gtkhtml_msg_view_get_hadjustment_default; klass->set_vadjustment_func = modest_gtkhtml_msg_view_set_vadjustment_default; @@ -427,6 +437,7 @@ modest_gtkhtml_msg_view_class_init (ModestGtkhtmlMsgViewClass *klass) 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->set_branding_func = modest_gtkhtml_msg_view_set_branding_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)); @@ -586,6 +597,8 @@ set_hadjustment_values (ModestGtkhtmlMsgView *self, { GtkAllocation view_allocation; GtkAdjustment *hadj = get_hadjustment (self); + gint full_width = 0; + ModestGtkhtmlMsgViewPrivate *priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); get_view_allocation (self, &view_allocation); hadj->page_size = view_allocation.width; @@ -595,11 +608,20 @@ set_hadjustment_values (ModestGtkhtmlMsgView *self, hadj->lower = 0; hadj->upper = view_allocation.width; + /* Get the real width of the embedded html */ + if (priv->html_scroll && GTK_WIDGET_VISIBLE(priv->html_scroll)) { + GtkAdjustment *html_hadj; + html_hadj = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (priv->html_scroll)); + full_width += html_hadj->upper; + } + + hadj->upper = MAX (view_allocation.width, full_width); + reclamp_adjustment (hadj, value_changed); } -static void +static void set_vadjustment_values (ModestGtkhtmlMsgView *self, gboolean *value_changed) { @@ -1065,7 +1087,6 @@ modest_gtkhtml_msg_view_init (ModestGtkhtmlMsgView *obj) { ModestGtkhtmlMsgViewPrivate *priv; GtkAdjustment *html_vadj; - GtkWidget *separator; GTK_WIDGET_UNSET_FLAGS (obj, GTK_NO_WINDOW); gtk_widget_set_redraw_on_allocate (GTK_WIDGET (obj), TRUE); @@ -1115,6 +1136,8 @@ modest_gtkhtml_msg_view_init (ModestGtkhtmlMsgView *obj) G_CALLBACK(on_fetch_url), obj); g_signal_connect (G_OBJECT(priv->body_view), "link_hover", G_CALLBACK(on_link_hover), obj); + g_signal_connect (G_OBJECT(priv->body_view), "limit_error", + G_CALLBACK(on_limit_error), obj); #ifdef MAEMO_CHANGES g_signal_connect (G_OBJECT(priv->body_view), "motion-notify-event", G_CALLBACK (motion_notify_event), obj); @@ -1144,7 +1167,8 @@ 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); - + +#ifdef MODEST_TOOLKIT_HILDON2 priv->priority_icon = gtk_image_new (); gtk_misc_set_alignment (GTK_MISC (priv->priority_icon), 0.0, 0.5); if (priv->priority_icon) { @@ -1156,7 +1180,7 @@ modest_gtkhtml_msg_view_init (ModestGtkhtmlMsgView *obj) 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); @@ -1173,8 +1197,10 @@ modest_gtkhtml_msg_view_init (ModestGtkhtmlMsgView *obj) g_free (att_label); } +#ifndef MODEST_TOOLKIT_HILDON2 separator = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX(priv->headers_box), separator, FALSE, FALSE, 0); +#endif gtk_widget_set_parent (priv->headers_box, GTK_WIDGET (obj)); @@ -1500,6 +1526,14 @@ request_fetch_images (ModestGtkhtmlMsgView *self) } } +static void +set_branding (ModestGtkhtmlMsgView *self, const gchar *brand_name, const GdkPixbuf *brand_icon) +{ + ModestGtkhtmlMsgViewPrivate *priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); + + modest_mail_header_view_set_branding (MODEST_MAIL_HEADER_VIEW (priv->mail_header_view), brand_name, brand_icon); +} + static gboolean has_blocked_external_images (ModestGtkhtmlMsgView *self) { @@ -1535,6 +1569,11 @@ on_link_hover (GtkWidget *widget, const gchar *uri, ModestGtkhtmlMsgView *self) return result; } +static void +on_limit_error (GtkWidget *widget, ModestGtkhtmlMsgView *msg_view) +{ + g_signal_emit_by_name (G_OBJECT (msg_view), "limit-error"); +} static TnyMimePart * @@ -1657,16 +1696,15 @@ on_fetch_url (GtkWidget *widget, const gchar *uri, } static void -set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) +set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg, TnyMimePart *other_body) { TnyMimePart *body; ModestGtkhtmlMsgViewPrivate *priv; TnyHeader *header; - TnyHeaderFlags flags; 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); @@ -1685,13 +1723,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)); @@ -1703,12 +1743,17 @@ set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) tny_header_view_set_header (TNY_HEADER_VIEW (priv->mail_header_view), header); g_object_unref (header); - modest_attachments_view_set_message (MODEST_ATTACHMENTS_VIEW(priv->attachments_view), - msg); + modest_attachments_view_set_message (MODEST_ATTACHMENTS_VIEW (priv->attachments_view), + other_body?NULL: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 (other_body) { + body = other_body; + g_object_ref (body); + } else { + body = modest_tny_msg_find_body_part (msg, TRUE); + } if (body) { ModestAttachmentsView *widget; @@ -1724,11 +1769,15 @@ set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) children = gtk_container_get_children (GTK_CONTAINER (priv->attachments_box)); label = GTK_LABEL (children->data); gtk_widget_show_all (priv->attachments_box); +#ifdef MODEST_TOOLKIT_HILDON2 if (modest_attachments_view_get_num_attachments (widget) > 1) { text = _("mail_va_attachments"); } else { text = _("mail_va_attachment"); } +#else + text = _("mail_va_attachment"); +#endif gtk_label_set_text (label, text); } else { gtk_widget_hide_all (priv->attachments_box); @@ -1739,20 +1788,18 @@ set_message (ModestGtkhtmlMsgView *self, TnyMsg *msg) } /* Refresh priority */ - flags = tny_header_get_flags (header); - flags = flags && TNY_HEADER_FLAG_PRIORITY_MASK; - if (flags == TNY_HEADER_FLAG_NORMAL_PRIORITY) { - gtk_widget_hide_all (priv->priority_box); - } else { - gtk_widget_show_all (priv->priority_box); - } + 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)); @@ -1780,7 +1827,7 @@ set_header (ModestGtkhtmlMsgView *self, TnyHeader *header) g_return_if_fail (self); if (header == NULL) { - set_message (self, NULL); + set_message (self, NULL, NULL); return; } @@ -1804,7 +1851,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)); @@ -1875,15 +1924,17 @@ static void set_priority (ModestGtkhtmlMsgView *self, TnyHeaderFlags flags) { ModestGtkhtmlMsgViewPrivate *priv; - TnyHeaderFlags priority_flags; - gboolean show_priority = FALSE; g_return_if_fail (MODEST_IS_GTKHTML_MSG_VIEW (self)); priv = MODEST_GTKHTML_MSG_VIEW_GET_PRIVATE (self); modest_mail_header_view_set_priority (MODEST_MAIL_HEADER_VIEW (priv->mail_header_view), flags); - priority_flags = flags & TNY_HEADER_FLAG_PRIORITY_MASK; +#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); @@ -1897,6 +1948,8 @@ set_priority (ModestGtkhtmlMsgView *self, TnyHeaderFlags flags) } else { gtk_widget_hide_all (priv->priority_box); } +#endif + } /* INCREMENTAL SEARCH IMPLEMENTATION */ @@ -2055,7 +2108,7 @@ modest_msg_view_clear_header (TnyHeaderView *self) static void modest_msg_view_clear_header_default (TnyHeaderView *self) { - set_message (MODEST_GTKHTML_MSG_VIEW (self), NULL); + set_message (MODEST_GTKHTML_MSG_VIEW (self), NULL, NULL); } /* TNY MSG IMPLEMENTATION */ @@ -2125,7 +2178,7 @@ modest_msg_view_clear (TnyMsgView *self) static void modest_msg_view_clear_default (TnyMsgView *self) { - set_message (MODEST_GTKHTML_MSG_VIEW (self), NULL); + set_message (MODEST_GTKHTML_MSG_VIEW (self), NULL, NULL); } static TnyMimePartView* @@ -2195,7 +2248,7 @@ modest_msg_view_mp_set_part_default (TnyMimePartView *self, { g_return_if_fail ((part == NULL) || TNY_IS_MSG (part)); - set_message (MODEST_GTKHTML_MSG_VIEW (self), TNY_MSG (part)); + set_message (MODEST_GTKHTML_MSG_VIEW (self), TNY_MSG (part), NULL); } static void @@ -2334,6 +2387,7 @@ modest_msg_view_init (gpointer g, gpointer iface_data) { ModestMsgViewIface *klass = (ModestMsgViewIface *)g; + klass->set_msg_with_other_body_func = modest_gtkhtml_msg_view_set_msg_with_other_body; klass->get_vadjustment_func = modest_gtkhtml_msg_view_get_vadjustment; klass->get_hadjustment_func = modest_gtkhtml_msg_view_get_hadjustment; klass->set_vadjustment_func = modest_gtkhtml_msg_view_set_vadjustment; @@ -2347,11 +2401,24 @@ modest_msg_view_init (gpointer g, gpointer iface_data) 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->set_branding_func = modest_gtkhtml_msg_view_set_branding; klass->has_blocked_external_images_func = modest_gtkhtml_msg_view_has_blocked_external_images; return; } +static void +modest_gtkhtml_msg_view_set_msg_with_other_body (ModestMsgView *self, TnyMsg *msg, TnyMimePart *other_body) +{ + MODEST_GTKHTML_MSG_VIEW_GET_CLASS (self)->set_msg_with_other_body_func (self, msg, other_body); +} + +static void +modest_gtkhtml_msg_view_set_msg_with_other_body_default (ModestMsgView *self, TnyMsg *msg, TnyMimePart *other_body) +{ + set_message (MODEST_GTKHTML_MSG_VIEW (self), msg, other_body); +} + static GtkAdjustment* modest_gtkhtml_msg_view_get_vadjustment (ModestMsgView *self) { @@ -2508,6 +2575,18 @@ modest_gtkhtml_msg_view_request_fetch_images_default (ModestMsgView *self) request_fetch_images (MODEST_GTKHTML_MSG_VIEW (self)); } +static void +modest_gtkhtml_msg_view_set_branding (ModestMsgView *self, const gchar *brand_name, const GdkPixbuf *brand_icon) +{ + MODEST_GTKHTML_MSG_VIEW_GET_CLASS (self)->set_branding_func (self, brand_name, brand_icon); +} + +static void +modest_gtkhtml_msg_view_set_branding_default (ModestMsgView *self, const gchar *brand_name, const GdkPixbuf *brand_icon) +{ + set_branding (MODEST_GTKHTML_MSG_VIEW (self), brand_name, brand_icon); +} + static gboolean modest_gtkhtml_msg_view_has_blocked_external_images (ModestMsgView *self) {