Removed some G_CRITICALS
[modest] / src / widgets / modest-msg-view-window.c
index bd2a5d9..cae371e 100644 (file)
@@ -37,7 +37,7 @@
 #include "modest-marshal.h"
 #include "modest-platform.h"
 #include <modest-utils.h>
-#include <modest-maemo-utils.h>
+#include <modest-toolkit-utils.h>
 #include <modest-tny-msg.h>
 #include <modest-msg-view-window.h>
 #include "modest-msg-view-window-ui-dimming.h"
 #include <modest-tny-folder.h>
 #include <modest-text-utils.h>
 #include <modest-account-mgr-helpers.h>
-#include <hildon/hildon-pannable-area.h>
-#include <hildon/hildon-picker-dialog.h>
-#include <hildon/hildon-app-menu.h>
+#include <modest-toolkit-factory.h>
+#include <modest-scrollable.h>
+#include <modest-isearch-toolbar.h>
 #include "modest-defs.h"
-#include "modest-hildon-includes.h"
 #include "modest-ui-dimming-manager.h"
 #include <gdk/gdkkeysyms.h>
 #include <modest-tny-account.h>
 #include <modest-account-protocol.h>
 #include <modest-icon-names.h>
 #include <modest-ui-actions.h>
+#include <modest-window-mgr.h>
 #include <tny-camel-msg.h>
+#include <modest-icon-names.h>
+
+#ifdef MODEST_PLATFORM_MAEMO
+#include <modest-maemo-utils.h>
+#endif
+
+#ifdef MODEST_TOOLKIT_HILDON2
+#include <hildon/hildon.h>
+#endif
 
 #define MYDOCS_ENV "MYDOCSDIR"
 #define DOCS_FOLDER ".documents"
@@ -78,7 +87,7 @@ struct _ModestMsgViewWindowPrivate {
 
        GtkWidget   *msg_view;
        GtkWidget   *main_scroll;
-       GtkWidget   *find_toolbar;
+       GtkWidget   *isearch_toolbar;
        gchar       *last_search;
 
        /* Progress observers */
@@ -129,13 +138,13 @@ static void  modest_msg_view_window_class_init   (ModestMsgViewWindowClass *klas
 static void  modest_msg_view_window_init         (ModestMsgViewWindow *obj);
 static void  modest_header_view_observer_init    (ModestHeaderViewObserverIface *iface_class);
 static void  modest_msg_view_window_finalize     (GObject *obj);
-static void  modest_msg_view_window_show_find_toolbar   (GtkWidget *obj, gpointer data);
-static void  modest_msg_view_window_find_toolbar_close  (GtkWidget *widget,
-                                                        ModestMsgViewWindow *obj);
-static void  modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
-                                                        ModestMsgViewWindow *obj);
-static void  modest_msg_view_window_toggle_find_toolbar (GtkWidget *obj,
-                                                        gpointer data);
+static void  modest_msg_view_window_show_isearch_toolbar   (GtkWidget *obj, gpointer data);
+static void  modest_msg_view_window_isearch_toolbar_close  (GtkWidget *widget,
+                                                           ModestMsgViewWindow *obj);
+static void  modest_msg_view_window_isearch_toolbar_search (GtkWidget *widget,
+                                                           ModestMsgViewWindow *obj);
+static void  modest_msg_view_window_toggle_isearch_toolbar (GtkWidget *obj,
+                                                           gpointer data);
 static void modest_msg_view_window_disconnect_signals (ModestWindow *self);
 
 static gdouble modest_msg_view_window_get_zoom    (ModestWindow *window);
@@ -253,7 +262,7 @@ static const GtkActionEntry msg_view_toolbar_action_entries [] = {
 };
 
 static const GtkToggleActionEntry msg_view_toggle_action_entries [] = {
-       { "FindInMessage",    MODEST_TOOLBAR_ICON_FIND,    N_("qgn_toolb_gene_find"), "<CTRL>F", NULL, G_CALLBACK (modest_msg_view_window_toggle_find_toolbar), FALSE },
+       { "FindInMessage",    MODEST_TOOLBAR_ICON_FIND,    N_("qgn_toolb_gene_find"), "<CTRL>F", NULL, G_CALLBACK (modest_msg_view_window_toggle_isearch_toolbar), FALSE },
 };
 
 #define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
@@ -282,8 +291,8 @@ modest_msg_view_window_get_type (void)
                        (GInstanceInitFunc) modest_msg_view_window_init,
                        NULL
                };
-#ifdef MODEST_TOOLKIT_GTK
-               my_type = g_type_register_static (MODEST_TYPE_WINDOW,
+#ifndef MODEST_TOOLKIT_HILDON2
+               my_type = g_type_register_static (MODEST_TYPE_SHELL_WINDOW,
                                                  "ModestMsgViewWindow",
                                                  &my_info, 0);
 #else
@@ -349,7 +358,7 @@ modest_msg_view_window_scroll_child (ModestMsgViewWindow *self,
        }
 
        if (step)
-               modest_maemo_utils_scroll_pannable((HildonPannableArea *) priv->main_scroll, 0, step);
+               modest_scrollable_scroll ((ModestScrollable *) priv->main_scroll, 0, step);
 
        return (gboolean) step;
 }
@@ -375,12 +384,10 @@ static void
 modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
 {
        GObjectClass *gobject_class;
-       HildonWindowClass *hildon_window_class;
        ModestWindowClass *modest_window_class;
        GtkBindingSet *binding_set;
 
        gobject_class = (GObjectClass*) klass;
-       hildon_window_class = (HildonWindowClass *) klass;
        modest_window_class = (ModestWindowClass *) klass;
 
        parent_class            = g_type_class_peek_parent (klass);
@@ -469,11 +476,6 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
                g_error_free (error);
                error = NULL;
        }
-       /* ****** */
-
-       /* Add accelerators */
-       gtk_window_add_accel_group (GTK_WINDOW (obj), 
-                                   gtk_ui_manager_get_accel_group (parent_priv->ui_manager));
        
        priv->is_search_result = FALSE;
        priv->is_outbox = FALSE;
@@ -547,17 +549,15 @@ init_window (ModestMsgViewWindow *obj)
        priv->msg_view = GTK_WIDGET (tny_platform_factory_new_msg_view (modest_tny_platform_factory_get_instance ()));
        modest_msg_view_set_shadow_type (MODEST_MSG_VIEW (priv->msg_view), GTK_SHADOW_NONE);
        main_vbox = gtk_vbox_new  (FALSE, 6);
-       /****** HILDON2:START
-        * create panning widget, and set parameters
-        */
-       priv->main_scroll = hildon_pannable_area_new ();
+
+       priv->main_scroll = modest_toolkit_factory_create_scrollable (modest_runtime_get_toolkit_factory ());
+       modest_scrollable_set_horizontal_policy (MODEST_SCROLLABLE (priv->main_scroll), GTK_POLICY_AUTOMATIC);
         g_object_set (G_OBJECT (priv->main_scroll),
-                     "mov-mode", HILDON_MOVEMENT_MODE_BOTH,
-                     "hovershoot-max", 0,
+                     "movement-mode", MODEST_MOVEMENT_MODE_BOTH,
+                     "horizontal-max-overshoot", 0,
                      NULL);
        gtk_container_add (GTK_CONTAINER (priv->main_scroll), priv->msg_view);
        gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_scroll, TRUE, TRUE, 0);
-       /****** HILDON2:END */
        gtk_container_add   (GTK_CONTAINER(obj), main_vbox);
 
        /* NULL-ize fields if the window is destroyed */
@@ -847,20 +847,15 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
        /* First add out toolbar ... */
        modest_msg_view_window_show_toolbar (MODEST_WINDOW (obj), TRUE);
 
-       /****** HILDON2:START
-        * adds the toolbar
-        */
-       /* ... and later the find toolbar. This way find toolbar will
-          be shown over the other */
-       priv->find_toolbar = hildon_find_toolbar_new (NULL);
-       hildon_window_add_toolbar (HILDON_WINDOW (obj), GTK_TOOLBAR (priv->find_toolbar));
-       gtk_widget_set_no_show_all (priv->find_toolbar, TRUE);
-       g_signal_connect (G_OBJECT (priv->find_toolbar), "close", 
-                         G_CALLBACK (modest_msg_view_window_find_toolbar_close), obj);
-       g_signal_connect (G_OBJECT (priv->find_toolbar), "search", 
-                         G_CALLBACK (modest_msg_view_window_find_toolbar_search), obj);
+       priv->isearch_toolbar = modest_toolkit_factory_create_isearch_toolbar (modest_runtime_get_toolkit_factory (),
+                                                                              NULL);
+       modest_window_add_toolbar (MODEST_WINDOW (obj), GTK_TOOLBAR (priv->isearch_toolbar));
+       gtk_widget_set_no_show_all (priv->isearch_toolbar, TRUE);
+       g_signal_connect (G_OBJECT (priv->isearch_toolbar), "isearch-close", 
+                         G_CALLBACK (modest_msg_view_window_isearch_toolbar_close), obj);
+       g_signal_connect (G_OBJECT (priv->isearch_toolbar), "isearch-search", 
+                         G_CALLBACK (modest_msg_view_window_isearch_toolbar_search), obj);
        priv->last_search = NULL;
-       /****** HILDON2:END */
 
        /* Init the clipboard actions dim status */
        modest_msg_view_grab_focus(MODEST_MSG_VIEW (priv->msg_view));
@@ -1542,52 +1537,50 @@ modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
 
 /* Used for the Ctrl+F accelerator */
 static void
-modest_msg_view_window_toggle_find_toolbar (GtkWidget *obj,
-                                           gpointer data)
+modest_msg_view_window_toggle_isearch_toolbar (GtkWidget *obj,
+                                              gpointer data)
 {
        ModestMsgViewWindow *window = MODEST_MSG_VIEW_WINDOW (data);
        ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
-       if (GTK_WIDGET_VISIBLE (priv->find_toolbar)) {
-               modest_msg_view_window_find_toolbar_close (obj, data);
+       if (GTK_WIDGET_VISIBLE (priv->isearch_toolbar)) {
+               modest_msg_view_window_isearch_toolbar_close (obj, data);
        } else {
-               modest_msg_view_window_show_find_toolbar (obj, data);
+               modest_msg_view_window_show_isearch_toolbar (obj, data);
        }
 }
 
 /* Handler for menu option */
 static void
-modest_msg_view_window_show_find_toolbar (GtkWidget *obj,
-                                         gpointer data)
+modest_msg_view_window_show_isearch_toolbar (GtkWidget *obj,
+                                            gpointer data)
 {
        ModestMsgViewWindow *window = MODEST_MSG_VIEW_WINDOW (data);
        ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
-       gtk_widget_show (priv->find_toolbar);
-       /****** HILDON2:START */
-       hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
-       /****** HILDON2:END */
+       gtk_widget_show (priv->isearch_toolbar);
+       modest_isearch_toolbar_highlight_entry (MODEST_ISEARCH_TOOLBAR (priv->isearch_toolbar), TRUE);
 }
 
-/* Handler for click on the "X" close button in find toolbar */
+/* Handler for click on the "X" close button in isearch toolbar */
 static void
-modest_msg_view_window_find_toolbar_close (GtkWidget *widget,
-                                          ModestMsgViewWindow *obj)
+modest_msg_view_window_isearch_toolbar_close (GtkWidget *widget,
+                                             ModestMsgViewWindow *obj)
 {
        ModestMsgViewWindowPrivate *priv;
 
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
 
        /* Hide toolbar */
-       gtk_widget_hide (priv->find_toolbar);
+       gtk_widget_hide (priv->isearch_toolbar);
        modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
 }
 
 static void
-modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
-                                          ModestMsgViewWindow *obj)
+modest_msg_view_window_isearch_toolbar_search (GtkWidget *widget,
+                                              ModestMsgViewWindow *obj)
 {
-       gchar *current_search;
+       const gchar *current_search;
        ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (obj);
 
        if (modest_mime_part_view_is_empty (MODEST_MIME_PART_VIEW (priv->msg_view))) {
@@ -1595,10 +1588,9 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
                return;
        }
 
-       g_object_get (G_OBJECT (widget), "prefix", &current_search, NULL);
+       current_search = modest_isearch_toolbar_get_search (MODEST_ISEARCH_TOOLBAR (widget));
 
        if ((current_search == NULL) || (strcmp (current_search, "") == 0)) {
-               g_free (current_search);
                modest_platform_system_banner (NULL, NULL, _CS("ecdg_ib_find_rep_enter_text"));
                return;
        }
@@ -1611,29 +1603,23 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
                                                     priv->last_search);
                if (!result) {
                        modest_platform_system_banner (NULL, NULL, 
-                                                       _HL("ckct_ib_find_no_matches"));
+                                                       _HL_IB_FIND_NO_MATCHES);
                        g_free (priv->last_search);
                        priv->last_search = NULL;
                } else {
-                       /****** HILDON2:START */
-                       hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
-                       /****** HILDON2:END */
+                       modest_isearch_toolbar_highlight_entry (MODEST_ISEARCH_TOOLBAR (priv->isearch_toolbar), TRUE);
                }
        } else {
                if (!modest_isearch_view_search_next (MODEST_ISEARCH_VIEW (priv->msg_view))) {
                        modest_platform_system_banner (NULL, NULL, 
-                                                       _HL("ckct_ib_find_search_complete"));
+                                                       _HL_IB_FIND_COMPLETE);
                        g_free (priv->last_search);
                        priv->last_search = NULL;
                } else {
-                       /****** HILDON2:START */
-                       hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
-                       /****** HILDON2:END */
+                       modest_isearch_toolbar_highlight_entry (MODEST_ISEARCH_TOOLBAR (priv->isearch_toolbar), TRUE);
                }
        }
        
-       g_free (current_search);
-               
 }
 
 static void
@@ -1695,7 +1681,7 @@ modest_msg_view_window_zoom_plus (ModestWindow *window)
 
        /* set zoom level */
        int_zoom = (gint) rint (zoom_level*100.0+0.1);
-       banner_text = g_strdup_printf (_HL("wdgt_ib_zoom"), int_zoom);
+       banner_text = g_strdup_printf (_HL_IB_ZOOM, int_zoom);
        modest_platform_information_banner (GTK_WIDGET (window), NULL, banner_text);
        g_free (banner_text);
        modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
@@ -1736,7 +1722,7 @@ modest_msg_view_window_zoom_minus (ModestWindow *window)
 
        /* set zoom level */
        int_zoom = (gint) rint (zoom_level*100.0+0.1);
-       banner_text = g_strdup_printf (_HL("wdgt_ib_zoom"), int_zoom);
+       banner_text = g_strdup_printf (_HL_IB_ZOOM, int_zoom);
        modest_platform_information_banner (GTK_WIDGET (window), NULL, banner_text);
        g_free (banner_text);
        modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom_level);
@@ -1753,7 +1739,7 @@ modest_msg_view_window_key_event (GtkWidget *window,
 
        focus = gtk_window_get_focus (GTK_WINDOW (window));
 
-       /* for the find toolbar case */
+       /* for the isearch toolbar case */
        if (focus && GTK_IS_ENTRY (focus)) {
                if (event->keyval == GDK_BackSpace) {
                        GdkEvent *copy;
@@ -1910,6 +1896,7 @@ message_reader_performer (gboolean canceled,
        info = (MsgReaderInfo *) user_data;
        if (canceled || err) {
                update_window_title (MODEST_MSG_VIEW_WINDOW (parent_window));
+               modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (parent_window));
                goto frees;
        }
 
@@ -1970,7 +1957,7 @@ message_reader (ModestMsgViewWindow *window,
 
        /* We set the header from model while we're loading */
        tny_header_view_set_header (TNY_HEADER_VIEW (priv->msg_view), header);
-       gtk_window_set_title (GTK_WINDOW (window), _CS("ckdg_pb_updating"));
+       modest_window_set_title (MODEST_WINDOW (window), _CS("ckdg_pb_updating"));
 
        if (header)
                folder = NULL;
@@ -2199,6 +2186,59 @@ view_msg_cb (ModestMailOperation *mail_op,
                        gtk_tree_row_reference_free (row_reference);
                self = (ModestMsgViewWindow *) modest_mail_operation_get_source (mail_op);
                if (self) {
+                       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+                       /* First we check if the parent is a folder window */
+                       if (priv->msg_uid && !modest_window_mgr_get_folder_window (MODEST_WINDOW_MGR (modest_runtime_get_window_mgr ()))) {
+                               gboolean is_merge;
+                               TnyAccount *account = NULL;
+                               GtkWidget *header_window = NULL;
+
+                               is_merge = g_str_has_prefix (priv->msg_uid, "merge:");
+
+                               /* Get the account */
+                               if (!is_merge)
+                                       account = tny_account_store_find_account (TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()),
+                                                                                 priv->msg_uid);
+
+                               if (is_merge || account) {
+                                       TnyFolder *folder = NULL;
+
+                                       /* Try to get the message, if it's already downloaded
+                                          we don't need to connect */
+                                       if (account) {
+                                               folder = modest_tny_folder_store_find_folder_from_uri (TNY_FOLDER_STORE (account), 
+                                                                                                      priv->msg_uid);
+                                       } else {
+                                               ModestTnyAccountStore *account_store;
+                                               ModestTnyLocalFoldersAccount *local_folders_account;
+
+                                               account_store = modest_runtime_get_account_store ();
+                                               local_folders_account = MODEST_TNY_LOCAL_FOLDERS_ACCOUNT (
+                                                       modest_tny_account_store_get_local_folders_account (account_store));
+                                               folder = modest_tny_local_folders_account_get_merged_outbox (local_folders_account);
+                                               g_object_unref (local_folders_account);
+                                       }
+                                       if (account) g_object_unref (account);
+
+                                       if (folder) {
+                                               header_window = (GtkWidget *)
+                                                       modest_header_window_new (
+                                                               folder, 
+                                                               modest_window_get_active_account (MODEST_WINDOW (self)), 
+                                                               modest_window_get_active_mailbox (MODEST_WINDOW (self)));
+                                               if (!modest_window_mgr_register_window (modest_runtime_get_window_mgr (),
+                                                                                       MODEST_WINDOW (header_window),
+                                                                                       NULL)) {
+                                                       gtk_widget_destroy (GTK_WIDGET (header_window));
+                                               } else {
+                                                       gtk_widget_show_all (GTK_WIDGET (header_window));
+                                               }
+                                               g_object_unref (folder);
+                                       }
+                               }
+                       }
+
+
                        /* Restore window title */
                        update_window_title (self);
                        modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (self));
@@ -2384,20 +2424,20 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
        if (!parent_priv->toolbar) {
                parent_priv->toolbar = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
                                                                  "/ToolBar");
+
+#ifdef MODEST_TOOLKIT_HILDON2
                gtk_toolbar_set_icon_size (GTK_TOOLBAR (parent_priv->toolbar), HILDON_ICON_SIZE_FINGER);
+#else
+               gtk_toolbar_set_icon_size (GTK_TOOLBAR (parent_priv->toolbar), GTK_ICON_SIZE_LARGE_TOOLBAR);
+#endif
                gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE);
 
                priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext");
                priv->prev_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageBack");
                toolbar_resize (MODEST_MSG_VIEW_WINDOW (self));
 
-               /****** HILDON2:START
-                * attach toolbar to window
-                */
-               /* Add to window */
-               hildon_window_add_toolbar (HILDON_WINDOW (self), 
+               modest_window_add_toolbar (MODEST_WINDOW (self), 
                                           GTK_TOOLBAR (parent_priv->toolbar));
-               /****** HILDON2:END */
 
        }
 
@@ -3185,7 +3225,7 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window,
                /* In Hildon 2.2 save and delete operate over all the attachments as there's no
                 * selection available */
                mime_parts = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view));
-               if (mime_parts && !modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, FALSE)) {
+               if (mime_parts && !modest_toolkit_utils_select_attachments (GTK_WINDOW (window), mime_parts, FALSE)) {
                        g_object_unref (mime_parts);
                        return;
                }
@@ -3226,12 +3266,11 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window,
                                                              num), num);
        }
 
-       /****** HILDON2:START
-        * creation of hildon file chooser dialog for saving
-        */
-       save_dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (window), 
-                                                     GTK_FILE_CHOOSER_ACTION_SAVE);
-       /****** HILDON2:END */
+       /* Creation of hildon file chooser dialog for saving */
+       save_dialog = modest_toolkit_factory_create_file_chooser_dialog (modest_runtime_get_toolkit_factory (),
+                                                                        "",
+                                                                        (GtkWindow *) window,
+                                                                        GTK_FILE_CHOOSER_ACTION_SAVE);
 
        /* Get last used folder */
        conf_folder = modest_conf_get_string (modest_runtime_get_conf (),
@@ -3341,7 +3380,7 @@ modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean
        g_object_unref (tmp);
        g_object_unref (iter);
 
-       if (!modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, TRUE) ||
+       if (!modest_toolkit_utils_select_attachments (GTK_WINDOW (window), mime_parts, TRUE) ||
            tny_list_get_length (mime_parts) == 0) {
                g_object_unref (mime_parts);
                return;
@@ -3454,7 +3493,7 @@ update_window_title (ModestMsgViewWindow *window)
                subject = g_strdup (_("mail_va_no_subject"));
        }
 
-       gtk_window_set_title (GTK_WINDOW (window), subject);
+       modest_window_set_title (MODEST_WINDOW (window), subject);
 }
 
 
@@ -3621,51 +3660,45 @@ setup_menu (ModestMsgViewWindow *self)
 {
        g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(self));
 
-       /****** HILDON2:START
-        * add actions to hildon window menu
-        */
-
        /* Settings menu buttons */
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_find"), NULL,
-                                          APP_MENU_CALLBACK (modest_msg_view_window_show_find_toolbar),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_find_in_msg));
-
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self),
-                                          dngettext(GETTEXT_PACKAGE,
-                                                    "mcen_me_move_message",
-                                                    "mcen_me_move_messages",
-                                                    1),
-                                          NULL,
-                                          APP_MENU_CALLBACK (modest_ui_actions_on_move_to),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_move_to));
-
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_read"), NULL,
-                                          APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_read),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_read_msg_in_view));
-
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_mark_as_unread"), NULL,
-                                          APP_MENU_CALLBACK (modest_ui_actions_on_mark_as_unread),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_unread_msg_in_view));
-
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_save_attachments"), NULL,
-                                          APP_MENU_CALLBACK (modest_ui_actions_save_attachments),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_save_attachments));
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_remove_attachments"), NULL,
-                                          APP_MENU_CALLBACK (modest_ui_actions_remove_attachments),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_remove_attachments));
-
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_new_message"), "<Control>n",
-                                          APP_MENU_CALLBACK (modest_ui_actions_on_new_msg),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_new_msg));
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_viewer_addtocontacts"), NULL,
-                                          APP_MENU_CALLBACK (modest_ui_actions_add_to_contacts),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_add_to_contacts));
-
-       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_ti_message_properties"), NULL,
-                                          APP_MENU_CALLBACK (modest_ui_actions_on_details),
-                                          MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_details));
-
-       /****** HILDON2:END */
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_viewer_find"), NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_msg_view_window_show_isearch_toolbar),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_find_in_msg));
+
+       modest_window_add_to_menu (MODEST_WINDOW (self),
+                                  dngettext(GETTEXT_PACKAGE,
+                                            "mcen_me_move_message",
+                                            "mcen_me_move_messages",
+                                            1),
+                                  NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_move_to),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_move_to));
+
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_inbox_mark_as_read"), NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_mark_as_read),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_read_msg_in_view));
+
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_inbox_mark_as_unread"), NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_mark_as_unread),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_mark_as_unread_msg_in_view));
+
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_viewer_save_attachments"), NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_save_attachments),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_save_attachments));
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_inbox_remove_attachments"), NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_remove_attachments),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_remove_attachments));
+
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_new_message"), "<Control>n",
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_new_msg),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_new_msg));
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_viewer_addtocontacts"), NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_add_to_contacts),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_add_to_contacts));
+
+       modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_ti_message_properties"), NULL,
+                                  MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_details),
+                                  MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_details));
 }
 
 void
@@ -3675,7 +3708,6 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
        GSList *recipients = NULL;
        TnyMsg *msg = NULL;
-       gboolean contacts_to_add = FALSE;
 
        msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
        if (msg == NULL) {
@@ -3691,56 +3723,11 @@ modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
                g_object_unref (msg);
        }
 
-       if (recipients != NULL) {
-         /****** HILDON2:START 
-          * shows dialog with addresses not present in addressbook. User can choose one to 
-          * add it to addressbook.
-          * */
-               GtkWidget *picker_dialog;
-               GtkWidget *selector;
-               GSList *node;
-               gchar *selected = NULL;
-
-               selector = hildon_touch_selector_new_text ();
-               g_object_ref (selector);
-
-               for (node = recipients; node != NULL; node = g_slist_next (node)) {
-                       if (!modest_address_book_has_address ((const gchar *) node->data)) {
-                               hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), 
-                                                                  (const gchar *) node->data);
-                               contacts_to_add = TRUE;
-                       }
-               }
-
-               if (contacts_to_add) {
-                       gint picker_result;
-
-                       picker_dialog = hildon_picker_dialog_new (GTK_WINDOW (self));
-                       gtk_window_set_title (GTK_WINDOW (picker_dialog), _("mcen_me_viewer_addtocontacts"));
-
-                       hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (picker_dialog), 
-                                                          HILDON_TOUCH_SELECTOR (selector));
-                       
-                       picker_result = gtk_dialog_run (GTK_DIALOG (picker_dialog));
-
-                       if (picker_result == GTK_RESPONSE_OK) {
-                               selected = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector));
-                       }
-                       gtk_widget_destroy (picker_dialog);
-
-                       if (selected)
-                               modest_address_book_add_address (selected, (GtkWindow *) self);
-                       g_free (selected);
-
-               } else {
-
-                       g_object_unref (selector);
-
-               }
-               /****** HILDON2:END */
+       if (recipients) {
+               /* Offer the user to add recipients to the address book */
+               modest_address_book_add_address_list_with_selector (recipients, (GtkWindow *) self);
+               g_slist_foreach (recipients, (GFunc) g_free, NULL); g_slist_free (recipients);
        }
-       
-       if (recipients) {g_slist_foreach (recipients, (GFunc) g_free, NULL); g_slist_free (recipients);}
 }
 
 static gboolean