Changed g_log levels in all app. Idea is reducing the number of debug
[modest] / src / gnome / modest-msg-view-window.c
1 /* Copyright (c) 2006, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 #include <glib/gi18n.h>
30 #include <string.h>
31 #include <tny-account-store.h>
32 #include <tny-simple-list.h>
33 #include <modest-tny-msg.h>
34 #include "modest-icon-names.h"
35 #include "modest-ui-actions.h"
36 #include <modest-widget-memory.h>
37 #include <modest-runtime.h>
38 #include <modest-main-window-ui.h>
39 #include "modest-msg-view-window-ui-dimming.h"
40 #include "modest-defs.h"
41 #include <widgets/modest-msg-view-window.h>
42 #include <widgets/modest-window-priv.h>
43 #include "widgets/modest-msg-view.h"
44 #include "modest-ui-dimming-manager.h"
45
46
47 static void  modest_msg_view_window_class_init   (ModestMsgViewWindowClass *klass);
48 static void  modest_msg_view_window_init         (ModestMsgViewWindow *obj);
49 static void  modest_msg_view_window_finalize     (GObject *obj);
50
51 static void  modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
52                                                          gpointer data);
53
54 /* list my signals */
55 enum {
56         /* MY_SIGNAL_1, */
57         /* MY_SIGNAL_2, */
58         LAST_SIGNAL
59 };
60
61 typedef struct _ModestMsgViewWindowPrivate ModestMsgViewWindowPrivate;
62 struct _ModestMsgViewWindowPrivate {
63         GtkWidget   *toolbar;
64         GtkWidget   *menubar;
65         GtkWidget   *msg_view;
66
67         gchar *msg_uid;
68         TnyMimePart *other_body;
69 };
70
71 #define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
72                                                     MODEST_TYPE_MSG_VIEW_WINDOW, \
73                                                     ModestMsgViewWindowPrivate))
74 /* globals */
75 static GtkWindowClass *parent_class = NULL;
76
77 static const GtkToggleActionEntry msg_view_toggle_action_entries [] = {
78         { "FindInMessage",    GTK_STOCK_FIND,    N_("mcen_me_viewer_find"), NULL, NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
79         { "ToolsFindInMessage", NULL, N_("mcen_me_viewer_find"), "<CTRL>F", NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
80 };
81
82 static const GtkRadioActionEntry msg_view_zoom_action_entries [] = {
83         { "Zoom50", NULL, N_("mcen_me_viewer_50"), NULL, NULL, 50 },
84         { "Zoom80", NULL, N_("mcen_me_viewer_80"), NULL, NULL, 80 },
85         { "Zoom100", NULL, N_("mcen_me_viewer_100"), NULL, NULL, 100 },
86         { "Zoom120", NULL, N_("mcen_me_viewer_120"), NULL, NULL, 120 },
87         { "Zoom150", NULL, N_("mcen_me_viewer_150"), NULL, NULL, 150 },
88         { "Zoom200", NULL, N_("mcen_me_viewer_200"), NULL, NULL, 200 }
89 };
90
91 GType
92 modest_msg_view_window_get_type (void)
93 {
94         static GType my_type = 0;
95         if (!my_type) {
96                 static const GTypeInfo my_info = {
97                         sizeof(ModestMsgViewWindowClass),
98                         NULL,           /* base init */
99                         NULL,           /* base finalize */
100                         (GClassInitFunc) modest_msg_view_window_class_init,
101                         NULL,           /* class finalize */
102                         NULL,           /* class data */
103                         sizeof(ModestMsgViewWindow),
104                         1,              /* n_preallocs */
105                         (GInstanceInitFunc) modest_msg_view_window_init,
106                         NULL
107                 };
108                 my_type = g_type_register_static (MODEST_TYPE_WINDOW,
109                                                   "ModestMsgViewWindow",
110                                                   &my_info, 0);
111         }
112         return my_type;
113 }
114
115 static void
116 save_state (ModestWindow *self)
117 {
118         modest_widget_memory_save (modest_runtime_get_conf (),
119                                    G_OBJECT(self), 
120                                    MODEST_CONF_MSG_VIEW_WINDOW_KEY);
121 }
122
123
124 static void
125 restore_settings (ModestWindow *self)
126 {
127         modest_widget_memory_restore (modest_runtime_get_conf (),
128                                       G_OBJECT(self), 
129                                       MODEST_CONF_MSG_VIEW_WINDOW_KEY);
130 }
131
132 static void
133 modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
134 {
135         GObjectClass *gobject_class;
136         gobject_class = (GObjectClass*) klass;
137
138         parent_class            = g_type_class_peek_parent (klass);
139         gobject_class->finalize = modest_msg_view_window_finalize;
140
141         g_type_class_add_private (gobject_class, sizeof(ModestMsgViewWindowPrivate));
142
143         ModestWindowClass *modest_window_class = (ModestWindowClass *) klass;
144         modest_window_class->save_state_func = save_state;
145 }
146
147 static void
148 modest_msg_view_window_init (ModestMsgViewWindow *obj)
149 {
150         ModestMsgViewWindowPrivate *priv;
151         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
152
153         priv->toolbar  = NULL;
154         priv->menubar  = NULL;
155         priv->msg_view = NULL;
156         priv->msg_uid  = NULL;
157         priv->other_body = NULL;
158 }
159
160
161 static void
162 init_window (ModestMsgViewWindow *obj, TnyMsg *msg, TnyMimePart *other_body)
163 {
164         GtkWidget *main_vbox, *scrolled_window;
165         ModestMsgViewWindowPrivate *priv;
166         ModestWindowPrivate *parent_priv;
167         
168         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
169         parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
170
171         priv->msg_view = GTK_WIDGET (tny_platform_factory_new_msg_view (modest_tny_platform_factory_get_instance ()));
172         if (other_body) {
173                 priv->other_body = g_object_ref (other_body);
174                 modest_msg_view_set_msg_with_other_body (MODEST_MSG_VIEW (priv->msg_view), msg, other_body);
175         } else {
176                 tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
177         }
178         main_vbox = gtk_vbox_new  (FALSE, 0);
179         
180         gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0);
181         gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0);
182         scrolled_window = gtk_scrolled_window_new (NULL, NULL);
183         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
184                                         GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
185         gtk_container_add (GTK_CONTAINER (scrolled_window), 
186                            priv->msg_view);
187         gtk_box_pack_start (GTK_BOX(main_vbox), scrolled_window, TRUE, TRUE, 0);
188
189         gtk_widget_show_all (GTK_WIDGET(main_vbox));
190         gtk_container_add   (GTK_CONTAINER(obj), main_vbox);
191 }
192
193
194 static void
195 modest_msg_view_window_finalize (GObject *obj)
196 {
197         ModestMsgViewWindowPrivate *priv;
198
199         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
200
201         if (priv->other_body != NULL) {
202                 g_object_unref (priv->other_body);
203                 priv->other_body = NULL;
204         }
205
206         G_OBJECT_CLASS(parent_class)->finalize (obj);
207 }
208
209
210
211 static gboolean
212 on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMsgViewWindow *self)
213 {
214         modest_window_save_state (MODEST_WINDOW(self));
215         return FALSE;
216 }
217
218
219 gboolean
220 modest_msg_view_window_is_other_body (ModestMsgViewWindow *self)
221 {
222         ModestMsgViewWindowPrivate *priv = NULL;
223
224         g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
225         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
226
227         return (priv->other_body != NULL);
228 }
229
230 ModestWindow *
231 modest_msg_view_window_new_with_other_body (TnyMsg *msg, 
232                                             TnyMimePart *other_body,
233                                             const gchar *modest_account_name, 
234                                             const gchar *mailbox, /* ignored */
235                                             const gchar *msg_uid)
236 {
237         GObject *obj;
238         ModestMsgViewWindowPrivate *priv;
239         ModestWindowPrivate *parent_priv;
240         GtkActionGroup *action_group;
241         GError *error = NULL;
242         TnyHeader *header = NULL;
243         gchar *subject = NULL;
244         ModestDimmingRulesGroup *menu_rules_group = NULL;
245         ModestDimmingRulesGroup *toolbar_rules_group = NULL;
246         ModestDimmingRulesGroup *clipboard_rules_group = NULL;
247
248         g_return_val_if_fail (msg, NULL);
249
250         obj = g_object_new(MODEST_TYPE_MSG_VIEW_WINDOW, NULL);
251         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
252         parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
253
254         priv->msg_uid = g_strdup (msg_uid);
255
256         modest_window_set_active_account (MODEST_WINDOW(obj), modest_account_name);
257         
258         parent_priv->ui_manager = gtk_ui_manager_new();
259         action_group = gtk_action_group_new ("ModestMsgViewWindowActions");
260         gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
261
262         /* Add common actions */
263         gtk_action_group_add_actions (action_group,
264                                       modest_action_entries,
265                                       G_N_ELEMENTS (modest_action_entries),
266                                       obj);
267         gtk_action_group_add_toggle_actions (action_group,
268                                              modest_toggle_action_entries,
269                                              G_N_ELEMENTS (modest_toggle_action_entries),
270                                              obj);
271         gtk_action_group_add_toggle_actions (action_group,
272                                              msg_view_toggle_action_entries,
273                                              G_N_ELEMENTS (msg_view_toggle_action_entries),
274                                              obj);
275         gtk_action_group_add_radio_actions (action_group,
276                                             msg_view_zoom_action_entries,
277                                             G_N_ELEMENTS (msg_view_zoom_action_entries),
278                                             100,
279                                             G_CALLBACK (modest_ui_actions_on_change_zoom),
280                                             obj);
281         gtk_ui_manager_insert_action_group (parent_priv->ui_manager, action_group, 0);
282         g_object_unref (action_group);
283
284         
285         /* Load the UI definition */
286         gtk_ui_manager_add_ui_from_file (parent_priv->ui_manager,
287                                          MODEST_UIDIR "modest-msg-view-window-ui.xml",
288                                          &error);
289         if (error) {
290                 g_printerr ("modest: could not merge modest-msg-view-window-ui.xml: %s\n", error->message);
291                 g_error_free (error);
292                 error = NULL;
293         }
294         /* ****** */
295
296         /* Add accelerators */
297         gtk_window_add_accel_group (GTK_WINDOW (obj), 
298                                     gtk_ui_manager_get_accel_group (parent_priv->ui_manager));
299
300         /* Toolbar / Menubar */
301         priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar");
302         priv->menubar = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/MenuBar");
303
304         gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE);
305
306         /* Init window */
307         init_window (MODEST_MSG_VIEW_WINDOW(obj), msg, other_body);
308         restore_settings (MODEST_WINDOW(obj));
309
310         header = tny_msg_get_header (msg);
311         if (other_body) {
312                 gchar *description;
313
314                 description = modest_tny_mime_part_get_header_value (other_body, "Content-Description");
315                 if (description) {
316                         g_strstrip (description);
317                         subject = description;
318                 }
319         } else {
320                 if (header)
321                         subject = tny_header_dup_subject (header);
322         }
323
324         
325         if (subject != NULL)
326                 gtk_window_set_title (GTK_WINDOW (obj), subject);
327         else
328                 gtk_window_set_title (GTK_WINDOW(obj), "Modest");
329         g_free (subject);
330
331         if (header)
332                 g_object_unref (header);
333
334         gtk_window_set_icon_from_file (GTK_WINDOW(obj), MODEST_APP_ICON, NULL);
335
336         parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
337
338         menu_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_MENU, FALSE);
339         toolbar_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_TOOLBAR, TRUE);
340         clipboard_rules_group = modest_dimming_rules_group_new (MODEST_DIMMING_RULES_CLIPBOARD, FALSE);
341
342         /* Add common dimming rules */
343         modest_dimming_rules_group_add_rules (menu_rules_group, 
344                                               modest_msg_view_menu_dimming_entries,
345                                               G_N_ELEMENTS (modest_msg_view_menu_dimming_entries),
346                                               MODEST_WINDOW (obj));
347         modest_dimming_rules_group_add_rules (toolbar_rules_group, 
348                                               modest_msg_view_toolbar_dimming_entries,
349                                               G_N_ELEMENTS (modest_msg_view_toolbar_dimming_entries),
350                                               MODEST_WINDOW (obj));
351         modest_dimming_rules_group_add_rules (clipboard_rules_group, 
352                                               modest_msg_view_clipboard_dimming_entries,
353                                               G_N_ELEMENTS (modest_msg_view_clipboard_dimming_entries),
354                                               MODEST_WINDOW (obj));
355
356         /* Insert dimming rules group for this window */
357         modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, menu_rules_group);
358         modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, toolbar_rules_group);
359         modest_ui_dimming_manager_insert_rules_group (parent_priv->ui_dimming_manager, clipboard_rules_group);
360         g_object_unref (menu_rules_group);
361         g_object_unref (toolbar_rules_group);
362         g_object_unref (clipboard_rules_group);
363
364         g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj);
365
366         return MODEST_WINDOW(obj);
367 }
368
369 ModestWindow *
370 modest_msg_view_window_new_for_attachment (TnyMsg *msg, 
371                                            const gchar *modest_account_name, 
372                                            const gchar *mailbox, /* ignored */
373                                            const gchar *msg_uid)
374 {
375
376         return modest_msg_view_window_new_with_other_body (msg, NULL, modest_account_name, mailbox, msg_uid);
377
378 }
379
380
381 TnyMsg*
382 modest_msg_view_window_get_message (ModestMsgViewWindow *self)
383 {
384         GtkWidget *msg_view;    
385         g_return_val_if_fail (self, NULL);
386
387         msg_view = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self)->msg_view;
388
389         return tny_msg_view_get_msg (TNY_MSG_VIEW(msg_view));
390 }
391
392 const gchar*
393 modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
394 {
395         ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
396         TnyMsg *msg;
397         TnyHeader *header;
398         const gchar *retval = NULL;
399
400         msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
401         msg = modest_msg_view_window_get_message (self);
402
403         if (!msg)
404                 return NULL;
405
406         header = tny_msg_get_header (msg);
407         g_free (priv->msg_uid);
408         if (header) {
409                 priv->msg_uid = tny_header_dup_uid (header);
410                 g_object_unref (header);
411         }
412         g_object_unref (msg);
413
414         return priv->msg_uid;
415 }
416
417 ModestWindow*   
418 modest_msg_view_window_new_with_header_model (TnyMsg *msg, 
419                                               const gchar *modest_account_name, 
420                                               const gchar *mailbox, /*ignored*/
421                                               const gchar *msg_uid,
422                                               GtkTreeModel *model, 
423                                               GtkTreeRowReference *row_reference)
424 {
425         /* Currently we simply redirect to new constructor. It should store a
426            reference to the header list model, to enable next/prev message
427            actions */
428         g_debug ("partially implemented %s", __FUNCTION__);
429
430         return modest_msg_view_window_new_for_attachment (msg, modest_account_name, NULL, msg_uid);
431 }
432
433
434 gboolean
435 modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
436 {
437         g_warning ("not implemented %s", __FUNCTION__);
438         return FALSE;
439 }
440
441 gboolean
442 modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
443 {
444         g_warning ("not implemented %s", __FUNCTION__);
445         return FALSE;
446 }
447
448 void
449 modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart *mime_part)
450 {
451         g_warning ("not implemented %s", __FUNCTION__);
452 }
453
454 void
455 modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, TnyList *mime_parts)
456 {
457         g_warning ("not implemented %s", __FUNCTION__);
458 }
459 void
460 modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean get_all)
461 {
462         g_warning ("not implemented %s", __FUNCTION__);
463 }
464
465 TnyHeader *
466 modest_msg_view_window_get_header (ModestMsgViewWindow *self)
467 {
468         TnyMsg *msg;
469         TnyHeader *header = NULL;
470
471         msg = modest_msg_view_window_get_message (self);
472         if (msg) {
473                 header = tny_msg_get_header (msg);
474                 g_object_unref (msg);
475         }
476         return header;
477 }
478
479 TnyFolderType
480 modest_msg_view_window_get_folder_type (ModestMsgViewWindow *window)
481 {
482         ModestMsgViewWindowPrivate *priv;
483         TnyMsg *msg;
484         TnyFolderType folder_type;
485
486         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
487
488         folder_type = TNY_FOLDER_TYPE_UNKNOWN;
489
490         msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
491         if (msg) {
492                 TnyFolder *folder;
493
494                 folder = tny_msg_get_folder (msg);
495                 if (folder) {
496                         folder_type = tny_folder_get_folder_type (folder);
497                         g_object_unref (folder);
498                 }
499                 g_object_unref (msg);
500         }
501
502         return folder_type;
503 }
504
505 /* NOT IMPLEMENTED METHODS */
506
507 gboolean 
508 modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
509 {
510         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
511         return TRUE;
512 }
513
514 gboolean 
515 modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
516 {
517         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
518         return TRUE;
519 }
520
521 gboolean 
522 modest_msg_view_window_transfer_mode_enabled (ModestMsgViewWindow *self)
523 {
524         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
525         return FALSE;
526 }
527
528 gboolean  
529 modest_msg_view_window_toolbar_on_transfer_mode     (ModestMsgViewWindow *self)
530 {
531         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
532         return FALSE;
533 }
534
535
536 TnyList *         
537 modest_msg_view_window_get_attachments (ModestMsgViewWindow *win)
538 {
539         TnyList *result;
540
541         result = tny_simple_list_new ();
542         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
543         return result;  
544 }
545
546 gboolean 
547 modest_msg_view_window_is_search_result (ModestMsgViewWindow *window)
548 {
549         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
550         return FALSE;   
551 }
552
553 gboolean 
554 modest_msg_view_window_has_headers_model (ModestMsgViewWindow *window)
555 {
556         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
557         return FALSE;   
558 }
559
560 static void 
561 modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
562                                             gpointer data)
563 {
564         g_warning ("NOT IMPLEMENTED %s", __FUNCTION__);
565         return FALSE;   
566 }
567
568 void
569 modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
570 {
571         modest_ui_actions_on_add_to_contacts (NULL, MODEST_WINDOW (self));
572 }
573
574 void
575 modest_msg_view_window_fetch_images (ModestMsgViewWindow *self)
576 {
577         ModestMsgViewWindowPrivate *priv;
578         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
579
580         modest_msg_view_request_fetch_images (MODEST_MSG_VIEW (priv->msg_view));
581 }
582
583 gboolean 
584 modest_msg_view_window_has_blocked_external_images (ModestMsgViewWindow *self)
585 {
586         ModestMsgViewWindowPrivate *priv;
587         priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
588
589         g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), FALSE);
590
591         return modest_msg_view_has_blocked_external_images (MODEST_MSG_VIEW (priv->msg_view));
592 }
593
594 void
595 modest_msg_view_window_reload (ModestMsgViewWindow *self)
596 {
597         /* Not implemented */
598         return;
599 }