Dbus open message faster user feedback (WIP 1)
[modest] / src / gnome / modest-msg-view-window.c
index 2b5c155..000f090 100644 (file)
 #include "modest-ui-actions.h"
 #include <modest-widget-memory.h>
 #include <modest-runtime.h>
-
+#include <modest-main-window-ui.h>
+#include "modest-msg-view-window-ui-dimming.h"
+#include "modest-defs.h"
 #include <widgets/modest-msg-view-window.h>
 #include <widgets/modest-window-priv.h>
 #include "widgets/modest-msg-view.h"
+#include "modest-ui-dimming-manager.h"
 
 
 static void  modest_msg_view_window_class_init   (ModestMsgViewWindowClass *klass);
 static void  modest_msg_view_window_init         (ModestMsgViewWindow *obj);
 static void  modest_msg_view_window_finalize     (GObject *obj);
 
+static void  modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
+                                                        gpointer data);
+
 /* list my signals */
 enum {
        /* MY_SIGNAL_1, */
@@ -57,6 +63,9 @@ struct _ModestMsgViewWindowPrivate {
        GtkWidget   *toolbar;
        GtkWidget   *menubar;
        GtkWidget   *msg_view;
+
+       gchar *msg_uid;
+       TnyMimePart *other_body;
 };
 
 #define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
@@ -65,38 +74,19 @@ struct _ModestMsgViewWindowPrivate {
 /* globals */
 static GtkWindowClass *parent_class = NULL;
 
-/* Action entries */
-static const GtkActionEntry modest_action_entries [] = {
-
-       /* Toplevel menus */
-       { "Edit", NULL, N_("_Edit") },
-       { "Actions", NULL, N_("_Actions") },
-       { "Help", NULL, N_("_Help") },
-       { "Email", NULL, N_("E_mail") },
-
-       /* EDIT */
-       { "EditUndo",        GTK_STOCK_UNDO,   N_("_Undo"), "<CTRL>Z",        N_("Undo last action"),  NULL },
-       { "EditRedo",        GTK_STOCK_REDO,   N_("_Redo"), "<shift><CTRL>Z", N_("Redo previous action"),  NULL },
-       { "Cut",         GTK_STOCK_CUT,    N_("Cut"),   "<CTRL>X",        N_("_Cut"), G_CALLBACK (modest_ui_actions_on_cut)   },
-       { "Copy",        GTK_STOCK_COPY,   N_("Copy"),  "<CTRL>C",        N_("Copy"), G_CALLBACK (modest_ui_actions_on_copy) },
-       { "Paste",       GTK_STOCK_PASTE,  N_("Paste"), "<CTRL>V",        N_("Paste"), G_CALLBACK (modest_ui_actions_on_paste) },
-       { "EditDelete",      GTK_STOCK_DELETE, N_("_Delete"),      "<CTRL>Q",         N_("Delete"), NULL },
-       { "SelectAll",   NULL,         N_("Select all"),   "<CTRL>A",         N_("Select all"), G_CALLBACK (modest_ui_actions_on_select_all) },
-       { "EditDeselectAll", NULL,             N_("Deselect all"), "<Shift><CTRL>A",  N_("Deselect all"), NULL },
-
-       /* ACTIONS */
-       { "ActionsNewMessage",  MODEST_STOCK_NEW_MAIL, N_("_New"), "<CTRL>N", N_("Compose new message"), G_CALLBACK (modest_ui_actions_on_new_msg) },
-       { "ActionsReply",       MODEST_STOCK_REPLY, N_("_Reply"),         NULL, N_("Reply to a message"), G_CALLBACK (modest_ui_actions_on_reply) },
-       { "ActionsReplyAll",    MODEST_STOCK_REPLY_ALL, N_("Reply to all"),   NULL, N_("Reply to all"), G_CALLBACK (modest_ui_actions_on_reply_all) },
-       { "ActionsForward",     MODEST_STOCK_FORWARD, N_("_Forward"),       NULL, N_("Forward a message"), G_CALLBACK (modest_ui_actions_on_forward) },
-       { "ActionsBounce",      NULL, N_("_Bounce"),        NULL, N_("Bounce a message"),          NULL },
-       { "ActionsSendReceive", GTK_STOCK_REFRESH, N_("Send/Receive"),   NULL, N_("Send and receive messages"), NULL },
-       { "ActionsDelete",      MODEST_STOCK_DELETE, N_("Delete message"), NULL, N_("Delete messages"), G_CALLBACK (modest_ui_actions_on_delete) },
-
-       /* HELP */
-       { "HelpAbout", GTK_STOCK_ABOUT, N_("About"), NULL, N_("About Modest"), G_CALLBACK (modest_ui_actions_on_about) },
+static const GtkToggleActionEntry msg_view_toggle_action_entries [] = {
+       { "FindInMessage",    GTK_STOCK_FIND,    N_("mcen_me_viewer_find"), NULL, NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
+       { "ToolsFindInMessage", NULL, N_("mcen_me_viewer_find"), "<CTRL>F", NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
 };
 
+static const GtkRadioActionEntry msg_view_zoom_action_entries [] = {
+       { "Zoom50", NULL, N_("mcen_me_viewer_50"), NULL, NULL, 50 },
+       { "Zoom80", NULL, N_("mcen_me_viewer_80"), NULL, NULL, 80 },
+       { "Zoom100", NULL, N_("mcen_me_viewer_100"), NULL, NULL, 100 },
+       { "Zoom120", NULL, N_("mcen_me_viewer_120"), NULL, NULL, 120 },
+       { "Zoom150", NULL, N_("mcen_me_viewer_150"), NULL, NULL, 150 },
+       { "Zoom200", NULL, N_("mcen_me_viewer_200"), NULL, NULL, 200 }
+};
 
 GType
 modest_msg_view_window_get_type (void)
@@ -123,6 +113,23 @@ modest_msg_view_window_get_type (void)
 }
 
 static void
+save_state (ModestWindow *self)
+{
+       modest_widget_memory_save (modest_runtime_get_conf (),
+                                  G_OBJECT(self), 
+                                  MODEST_CONF_MSG_VIEW_WINDOW_KEY);
+}
+
+
+static void
+restore_settings (ModestWindow *self)
+{
+       modest_widget_memory_restore (modest_runtime_get_conf (),
+                                     G_OBJECT(self), 
+                                     MODEST_CONF_MSG_VIEW_WINDOW_KEY);
+}
+
+static void
 modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
 {
        GObjectClass *gobject_class;
@@ -132,6 +139,9 @@ modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
        gobject_class->finalize = modest_msg_view_window_finalize;
 
        g_type_class_add_private (gobject_class, sizeof(ModestMsgViewWindowPrivate));
+
+       ModestWindowClass *modest_window_class = (ModestWindowClass *) klass;
+       modest_window_class->save_state_func = save_state;
 }
 
 static void
@@ -140,29 +150,16 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
        ModestMsgViewWindowPrivate *priv;
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
 
-       priv->toolbar       = NULL;
-       priv->menubar       = NULL;
-       priv->msg_view      = NULL;
-}
-
-static void
-save_settings (ModestMsgViewWindow *self)
-{
-       modest_widget_memory_save (modest_runtime_get_conf (),
-                                   G_OBJECT(self), "modest-msg-view-window");
+       priv->toolbar  = NULL;
+       priv->menubar  = NULL;
+       priv->msg_view = NULL;
+       priv->msg_uid  = NULL;
+       priv->other_body = NULL;
 }
 
 
 static void
-restore_settings (ModestMsgViewWindow *self)
-{
-       modest_widget_memory_restore (modest_runtime_get_conf (),
-                                     G_OBJECT(self), "modest-msg-view-window");
-}
-
-
-static void
-init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
+init_window (ModestMsgViewWindow *obj, TnyMsg *msg, TnyMimePart *other_body)
 {
        GtkWidget *main_vbox, *scrolled_window;
        ModestMsgViewWindowPrivate *priv;
@@ -171,8 +168,14 @@ init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
        parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
 
-       priv->msg_view = modest_msg_view_new (msg);
-       main_vbox = gtk_vbox_new  (FALSE, 6);
+       priv->msg_view = GTK_WIDGET (tny_platform_factory_new_msg_view (modest_tny_platform_factory_get_instance ()));
+       if (other_body) {
+               priv->other_body = g_object_ref (other_body);
+               modest_msg_view_set_msg_with_other_body (MODEST_MSG_VIEW (priv->msg_view), msg, other_body);
+       } else {
+               tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+       }
+       main_vbox = gtk_vbox_new  (FALSE, 0);
        
        gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0);
        gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0);
@@ -181,7 +184,7 @@ init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
                                        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
        gtk_container_add (GTK_CONTAINER (scrolled_window), 
                           priv->msg_view);
-       gtk_box_pack_start (GTK_BOX(main_vbox), scrolled_window, TRUE, TRUE, 6);
+       gtk_box_pack_start (GTK_BOX(main_vbox), scrolled_window, TRUE, TRUE, 0);
 
        gtk_widget_show_all (GTK_WIDGET(main_vbox));
        gtk_container_add   (GTK_CONTAINER(obj), main_vbox);
@@ -190,7 +193,16 @@ init_window (ModestMsgViewWindow *obj, TnyMsg *msg)
 
 static void
 modest_msg_view_window_finalize (GObject *obj)
-{      
+{
+       ModestMsgViewWindowPrivate *priv;
+
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
+
+       if (priv->other_body != NULL) {
+               g_object_unref (priv->other_body);
+               priv->other_body = NULL;
+       }
+
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
@@ -199,13 +211,28 @@ modest_msg_view_window_finalize (GObject *obj)
 static gboolean
 on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMsgViewWindow *self)
 {
-       save_settings (self);
+       modest_window_save_state (MODEST_WINDOW(self));
        return FALSE;
 }
 
 
+gboolean
+modest_msg_view_window_is_other_body (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv = NULL;
+
+       g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+       return (priv->other_body != NULL);
+}
+
 ModestWindow *
-modest_msg_view_window_new (TnyMsg *msg, const gchar *account)
+modest_msg_view_window_new_with_other_body (TnyMsg *msg, 
+                                           TnyMimePart *other_body,
+                                           const gchar *modest_account_name, 
+                                           const gchar *mailbox, /* ignored */
+                                           const gchar *msg_uid)
 {
        GObject *obj;
        ModestMsgViewWindowPrivate *priv;
@@ -213,7 +240,10 @@ modest_msg_view_window_new (TnyMsg *msg, const gchar *account)
        GtkActionGroup *action_group;
        GError *error = NULL;
        TnyHeader *header = NULL;
-       const gchar *subject = NULL;
+       gchar *subject = NULL;
+       ModestDimmingRulesGroup *menu_rules_group = NULL;
+       ModestDimmingRulesGroup *toolbar_rules_group = NULL;
+       ModestDimmingRulesGroup *clipboard_rules_group = NULL;
 
        g_return_val_if_fail (msg, NULL);
 
@@ -221,16 +251,33 @@ modest_msg_view_window_new (TnyMsg *msg, const gchar *account)
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
        parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
 
-       modest_window_set_active_account (MODEST_WINDOW(obj), account);
+       priv->msg_uid = g_strdup (msg_uid);
+
+       modest_window_set_active_account (MODEST_WINDOW(obj), modest_account_name);
        
        parent_priv->ui_manager = gtk_ui_manager_new();
        action_group = gtk_action_group_new ("ModestMsgViewWindowActions");
+       gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
 
        /* Add common actions */
        gtk_action_group_add_actions (action_group,
                                      modest_action_entries,
                                      G_N_ELEMENTS (modest_action_entries),
                                      obj);
+       gtk_action_group_add_toggle_actions (action_group,
+                                            modest_toggle_action_entries,
+                                            G_N_ELEMENTS (modest_toggle_action_entries),
+                                            obj);
+       gtk_action_group_add_toggle_actions (action_group,
+                                            msg_view_toggle_action_entries,
+                                            G_N_ELEMENTS (msg_view_toggle_action_entries),
+                                            obj);
+       gtk_action_group_add_radio_actions (action_group,
+                                           msg_view_zoom_action_entries,
+                                           G_N_ELEMENTS (msg_view_zoom_action_entries),
+                                           100,
+                                           G_CALLBACK (modest_ui_actions_on_change_zoom),
+                                           obj);
        gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 0);
        g_object_unref (action_group);
 
@@ -257,28 +304,79 @@ modest_msg_view_window_new (TnyMsg *msg, const gchar *account)
        gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
 
        /* Init window */
-       init_window (MODEST_MSG_VIEW_WINDOW(obj), msg);
-       restore_settings (MODEST_MSG_VIEW_WINDOW(obj));
+       init_window (MODEST_MSG_VIEW_WINDOW(obj), msg, other_body);
+       restore_settings (MODEST_WINDOW(obj));
 
        header = tny_msg_get_header (msg);
-       if (header)
-               subject = tny_header_get_subject (header);
+       if (other_body) {
+               gchar *description;
+
+               description = modest_tny_mime_part_get_header_value (other_body, "Content-Description");
+               if (description) {
+                       g_strstrip (description);
+                       subject = description;
+               }
+       } else {
+               if (header)
+                       subject = tny_header_dup_subject (header);
+       }
+
        
        if (subject != NULL)
                gtk_window_set_title (GTK_WINDOW (obj), subject);
        else
                gtk_window_set_title (GTK_WINDOW(obj), "Modest");
+       g_free (subject);
 
        if (header)
                g_object_unref (header);
 
        gtk_window_set_icon_from_file (GTK_WINDOW(obj), MODEST_APP_ICON, NULL);
 
+       parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
+
+       menu_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_MENU, FALSE);
+       toolbar_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_TOOLBAR, TRUE);
+       clipboard_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_CLIPBOARD, FALSE);
+
+       /* Add common dimming rules */
+       modest_dimming_rules_group_add_rules (menu_rules_group, 
+                                             modest_msg_view_menu_dimming_entries,
+                                             G_N_ELEMENTS (modest_msg_view_menu_dimming_entries),
+                                             MODEST_WINDOW (obj));
+       modest_dimming_rules_group_add_rules (toolbar_rules_group, 
+                                             modest_msg_view_toolbar_dimming_entries,
+                                             G_N_ELEMENTS (modest_msg_view_toolbar_dimming_entries),
+                                             MODEST_WINDOW (obj));
+       modest_dimming_rules_group_add_rules (clipboard_rules_group, 
+                                             modest_msg_view_clipboard_dimming_entries,
+                                             G_N_ELEMENTS (modest_msg_view_clipboard_dimming_entries),
+                                             MODEST_WINDOW (obj));
+
+       /* Insert dimming rules group for this window */
+       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group);
+       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, toolbar_rules_group);
+       modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, clipboard_rules_group);
+       g_object_unref (menu_rules_group);
+       g_object_unref (toolbar_rules_group);
+       g_object_unref (clipboard_rules_group);
+
        g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj);
 
        return MODEST_WINDOW(obj);
 }
 
+ModestWindow *
+modest_msg_view_window_new_for_attachment (TnyMsg *msg, 
+                                          const gchar *modest_account_name, 
+                                          const gchar *mailbox, /* ignored */
+                                          const gchar *msg_uid)
+{
+
+       return modest_msg_view_window_new_with_other_body (msg, NULL, modest_account_name, mailbox, msg_uid);
+
+}
+
 
 TnyMsg*
 modest_msg_view_window_get_message (ModestMsgViewWindow *self)
@@ -288,34 +386,223 @@ modest_msg_view_window_get_message (ModestMsgViewWindow *self)
 
        msg_view = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self)->msg_view;
 
-       return modest_msg_view_get_message (MODEST_MSG_VIEW(msg_view));
+       return tny_msg_view_get_msg (TNY_MSG_VIEW(msg_view));
+}
+
+const gchar*
+modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+       TnyMsg *msg;
+       TnyHeader *header;
+       const gchar *retval = NULL;
+
+       msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
+       msg = modest_msg_view_window_get_message (self);
+
+       if (!msg)
+               return NULL;
+
+       header = tny_msg_get_header (msg);
+       g_free (priv->msg_uid);
+       if (header) {
+               priv->msg_uid = tny_header_dup_uid (header);
+               g_object_unref (header);
+       }
+       g_object_unref (msg);
+
+       return priv->msg_uid;
+}
+
+ModestWindow *
+modest_msg_view_window_new_from_uid (const gchar *modest_account_name,
+                                    const gchar *mailbox,
+                                    const gchar *msg_uid)
+{
+       /* NOT IMPLEMENTED */
+       return NULL;
 }
 
 ModestWindow*   
 modest_msg_view_window_new_with_header_model (TnyMsg *msg, 
-                                             const gchar *account, 
+                                             const gchar *modest_account_name, 
+                                             const gchar *mailbox, /*ignored*/
+                                             const gchar *msg_uid,
                                              GtkTreeModel *model, 
-                                             GtkTreeIter iter)
+                                             GtkTreeRowReference *row_reference)
 {
        /* Currently we simply redirect to new constructor. It should store a
           reference to the header list model, to enable next/prev message
           actions */
-       g_message ("partially implemented %s", __FUNCTION__);
+       g_debug ("partially implemented %s", __FUNCTION__);
 
-       return modest_msg_view_window_new (msg, account);
+       return modest_msg_view_window_new_for_attachment (msg, modest_account_name, NULL, msg_uid);
 }
 
 
 gboolean
 modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
 {
-       g_message ("not implemented %s", __FUNCTION__);
+       g_warning ("not implemented %s", __FUNCTION__);
        return FALSE;
 }
 
 gboolean
 modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
 {
-       g_message ("not implemented %s", __FUNCTION__);
+       g_warning ("not implemented %s", __FUNCTION__);
+       return FALSE;
+}
+
+void
+modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart *mime_part)
+{
+       g_warning ("not implemented %s", __FUNCTION__);
+}
+
+void
+modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *mime_parts)
+{
+       g_warning ("not implemented %s", __FUNCTION__);
+}
+void
+modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean get_all)
+{
+       g_warning ("not implemented %s", __FUNCTION__);
+}
+
+TnyHeader *
+modest_msg_view_window_get_header (ModestMsgViewWindow *self)
+{
+       TnyMsg *msg;
+       TnyHeader *header = NULL;
+
+       msg = modest_msg_view_window_get_message (self);
+       if (msg) {
+               header = tny_msg_get_header (msg);
+               g_object_unref (msg);
+       }
+       return header;
+}
+
+TnyFolderType
+modest_msg_view_window_get_folder_type (ModestMsgViewWindow *window)
+{
+       ModestMsgViewWindowPrivate *priv;
+       TnyMsg *msg;
+       TnyFolderType folder_type;
+
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
+
+       folder_type = TNY_FOLDER_TYPE_UNKNOWN;
+
+       msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
+       if (msg) {
+               TnyFolder *folder;
+
+               folder = tny_msg_get_folder (msg);
+               if (folder) {
+                       folder_type = tny_folder_get_folder_type (folder);
+                       g_object_unref (folder);
+               }
+               g_object_unref (msg);
+       }
+
+       return folder_type;
+}
+
+/* NOT IMPLEMENTED METHODS */
+
+gboolean 
+modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
+{
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
+       return TRUE;
+}
+
+gboolean 
+modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
+{
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
+       return TRUE;
+}
+
+gboolean 
+modest_msg_view_window_transfer_mode_enabled (ModestMsgViewWindow *self)
+{
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
+       return FALSE;
+}
+
+gboolean  
+modest_msg_view_window_toolbar_on_transfer_mode     (ModestMsgViewWindow *self)
+{
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
        return FALSE;
 }
+
+
+TnyList *         
+modest_msg_view_window_get_attachments (ModestMsgViewWindow *win)
+{
+       TnyList *result;
+
+       result = tny_simple_list_new ();
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
+       return result;  
+}
+
+gboolean 
+modest_msg_view_window_is_search_result (ModestMsgViewWindow *window)
+{
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
+       return FALSE;   
+}
+
+gboolean 
+modest_msg_view_window_has_headers_model (ModestMsgViewWindow *window)
+{
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
+       return FALSE;   
+}
+
+static void 
+modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
+                                           gpointer data)
+{
+       g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
+       return FALSE;   
+}
+
+void
+modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
+{
+       modest_ui_actions_on_add_to_contacts (NULL, MODEST_WINDOW (self));
+}
+
+void
+modest_msg_view_window_fetch_images (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv;
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+       modest_msg_view_request_fetch_images (MODEST_MSG_VIEW (priv->msg_view));
+}
+
+gboolean 
+modest_msg_view_window_has_blocked_external_images (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv;
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+
+       g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
+
+       return modest_msg_view_has_blocked_external_images (MODEST_MSG_VIEW (priv->msg_view));
+}
+
+void
+modest_msg_view_window_reload (ModestMsgViewWindow *self)
+{
+       /* Not implemented */
+       return;
+}