Move create_container to constructor in details dialog.
[modest] / src / hildon2 / modest-msg-view-window.c
index a05c6d4..3fc077b 100644 (file)
@@ -48,7 +48,8 @@
 #include <modest-text-utils.h>
 #include <modest-account-mgr-helpers.h>
 #include "modest-progress-bar.h"
-#include "hildon/hildon-pannable-area.h"
+#include <hildon/hildon-pannable-area.h>
+#include <hildon/hildon-picker-dialog.h>
 #include "modest-defs.h"
 #include "modest-hildon-includes.h"
 #include "modest-ui-dimming-manager.h"
@@ -57,6 +58,7 @@
 #include <modest-mime-part-view.h>
 #include <modest-isearch-view.h>
 #include <modest-tny-mime-part.h>
+#include <modest-address-book.h>
 #include <math.h>
 #include <errno.h>
 #include <glib/gstdio.h>
@@ -77,17 +79,12 @@ static void  modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
                                                        ModestMsgViewWindow *obj);
 
 static void modest_msg_view_window_disconnect_signals (ModestWindow *self);
-static void modest_msg_view_window_set_zoom (ModestWindow *window,
-                                            gdouble zoom);
+
 static gdouble modest_msg_view_window_get_zoom (ModestWindow *window);
-static gboolean modest_msg_view_window_zoom_minus (ModestWindow *window);
-static gboolean modest_msg_view_window_zoom_plus (ModestWindow *window);
 static gboolean modest_msg_view_window_key_event (GtkWidget *window,
                                                  GdkEventKey *event,
                                                  gpointer userdata);
-static gboolean modest_msg_view_window_window_state_event (GtkWidget *widget, 
-                                                          GdkEventWindowState *event, 
-                                                          gpointer userdata);
+
 static void modest_msg_view_window_update_priority (ModestMsgViewWindow *window);
 
 static void modest_msg_view_window_show_toolbar   (ModestWindow *window,
@@ -175,16 +172,6 @@ enum {
 
 static const GtkToggleActionEntry msg_view_toggle_action_entries [] = {
        { "FindInMessage",    MODEST_TOOLBAR_ICON_FIND,    N_("qgn_toolb_gene_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 }
 };
 
 typedef struct _ModestMsgViewWindowPrivate ModestMsgViewWindowPrivate;
@@ -294,32 +281,11 @@ save_state (ModestWindow *self)
                                   MODEST_CONF_MSG_VIEW_WINDOW_KEY);
 }
 
-
-static void
-restore_settings (ModestMsgViewWindow *self)
-{
-       ModestConf *conf;
-       ModestWindowPrivate *parent_priv = MODEST_WINDOW_GET_PRIVATE (self);
-       GtkAction *action;
-
-       conf = modest_runtime_get_conf ();
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                           "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarNormalScreenMenu");
-       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
-                                     modest_conf_get_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR, NULL));
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                           "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarFullScreenMenu");
-       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
-                                     modest_conf_get_bool (conf, MODEST_CONF_MSG_VIEW_WINDOW_SHOW_TOOLBAR_FULLSCREEN, NULL));
-       modest_widget_memory_restore (conf,
-                                     G_OBJECT(self), 
-                                     MODEST_CONF_MSG_VIEW_WINDOW_KEY);
-}
-
-static gboolean modest_msg_view_window_scroll_child (ModestMsgViewWindow *self,
-                                                    GtkScrollType scroll_type,
-                                                    gboolean horizontal,
-                                                    gpointer userdata)
+static 
+gboolean modest_msg_view_window_scroll_child (ModestMsgViewWindow *self,
+                                             GtkScrollType scroll_type,
+                                             gboolean horizontal,
+                                             gpointer userdata)
 {
        ModestMsgViewWindowPrivate *priv;
        gboolean return_value;
@@ -359,10 +325,7 @@ modest_msg_view_window_class_init (ModestMsgViewWindowClass *klass)
        parent_class            = g_type_class_peek_parent (klass);
        gobject_class->finalize = modest_msg_view_window_finalize;
 
-       modest_window_class->set_zoom_func = modest_msg_view_window_set_zoom;
        modest_window_class->get_zoom_func = modest_msg_view_window_get_zoom;
-       modest_window_class->zoom_minus_func = modest_msg_view_window_zoom_minus;
-       modest_window_class->zoom_plus_func = modest_msg_view_window_zoom_plus;
        modest_window_class->show_toolbar_func = modest_msg_view_window_show_toolbar;
        modest_window_class->disconnect_signals_func = modest_msg_view_window_disconnect_signals;
 
@@ -428,19 +391,9 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
                                      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);
@@ -495,8 +448,6 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
        hildon_program_add_window (hildon_program_get_instance(),
                                   HILDON_WINDOW(obj));
 
-       modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
-                                           GTK_WINDOW(obj),"applications_email_viewer");
 }
 
 
@@ -780,6 +731,7 @@ select_next_valid_row (GtkTreeModel *model,
                                if (msg_is_visible (header, is_outbox)) {
                                        next = gtk_tree_model_get_path (model, &tmp_iter);
                                        *row_reference = gtk_tree_row_reference_new (model, next);
+                                       gtk_tree_path_free (next);
                                        retval = TRUE;
                                        finished = TRUE;
                                }
@@ -809,6 +761,7 @@ select_next_valid_row (GtkTreeModel *model,
                                   message */
                                finished = TRUE;
                        }
+                       gtk_tree_path_free (next);
                } else {
                        /* If there are no more messages and we don't
                           want to start again in the first one then
@@ -819,8 +772,6 @@ select_next_valid_row (GtkTreeModel *model,
 
        /* Free */
        gtk_tree_path_free (path);
-       if (next)
-               gtk_tree_path_free (next);
 
        return retval;
 }
@@ -876,8 +827,6 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
        g_object_unref (toolbar_rules_group);
        g_object_unref (clipboard_rules_group);
 
-       restore_settings (MODEST_MSG_VIEW_WINDOW(obj));
-       
        /* g_signal_connect (G_OBJECT(obj), "delete-event", G_CALLBACK(on_delete_event), obj); */
 
        priv->clipboard_change_handler = g_signal_connect (G_OBJECT (gtk_clipboard_get (GDK_SELECTION_PRIMARY)), "owner-change", G_CALLBACK (modest_msg_view_window_clipboard_owner_change), obj);
@@ -902,10 +851,6 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
                          G_CALLBACK (modest_msg_view_window_key_event),
                          NULL);
 
-       g_signal_connect (G_OBJECT (obj), "window-state-event",
-                         G_CALLBACK (modest_msg_view_window_window_state_event),
-                         NULL);
-
        g_signal_connect (G_OBJECT (obj), "move-focus",
                          G_CALLBACK (on_move_focus), obj);
 
@@ -1023,7 +968,7 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
 
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
        update_window_title (MODEST_MSG_VIEW_WINDOW (window));
-       gtk_widget_show_all (GTK_WIDGET (window));
+       /* gtk_widget_show_all (GTK_WIDGET (window)); */
        modest_msg_view_window_update_priority (window);
 
        /* Check dimming rules */
@@ -1057,7 +1002,7 @@ modest_msg_view_window_new_for_search_result (TnyMsg *msg,
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
        
        update_window_title (window);
-       gtk_widget_show_all (GTK_WIDGET (window));
+       /* gtk_widget_show_all (GTK_WIDGET (window));*/
        modest_msg_view_window_update_priority (window);
 
        /* Check dimming rules */
@@ -1087,7 +1032,7 @@ modest_msg_view_window_new_for_attachment (TnyMsg *msg,
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
        update_window_title (MODEST_MSG_VIEW_WINDOW (obj));
 
-       gtk_widget_show_all (GTK_WIDGET (obj));
+       /* gtk_widget_show_all (GTK_WIDGET (obj)); */
 
        /* Check dimming rules */
        modest_ui_actions_check_toolbar_dimming_rules (MODEST_WINDOW (obj));
@@ -1430,14 +1375,12 @@ modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
                hildon_find_toolbar_highlight_entry (HILDON_FIND_TOOLBAR (priv->find_toolbar), TRUE);
        } else {
                gtk_widget_hide (priv->find_toolbar);
+               modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
        }
 
        /* update the toggle buttons status */
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage");
        modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsFindInMessageMenu");
-       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
-       
 }
 
 static void
@@ -1505,27 +1448,6 @@ modest_msg_view_window_find_toolbar_search (GtkWidget *widget,
                
 }
 
-static void
-modest_msg_view_window_set_zoom (ModestWindow *window,
-                                gdouble zoom)
-{
-       ModestMsgViewWindowPrivate *priv;
-       ModestWindowPrivate *parent_priv;
-       GtkAction *action = NULL;
-       gint int_zoom = (gint) rint (zoom*100.0+0.1);
-     
-       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window));
-
-       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
-       parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
-       modest_zoomable_set_zoom (MODEST_ZOOMABLE (priv->msg_view), zoom);
-
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                           "/MenuBar/ViewMenu/ZoomMenu/Zoom50Menu");
-
-       gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), int_zoom);
-}
-
 static gdouble
 modest_msg_view_window_get_zoom (ModestWindow *window)
 {
@@ -1538,61 +1460,6 @@ modest_msg_view_window_get_zoom (ModestWindow *window)
 }
 
 static gboolean
-modest_msg_view_window_zoom_plus (ModestWindow *window)
-{
-       ModestWindowPrivate *parent_priv;
-       GtkRadioAction *zoom_radio_action;
-       GSList *group, *node;
-
-       parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
-       zoom_radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                                                        "/MenuBar/ViewMenu/ZoomMenu/Zoom50Menu"));
-
-       group = gtk_radio_action_get_group (zoom_radio_action);
-
-       if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (group->data))) {
-               hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_max_zoom_level_reached"));
-               return FALSE;
-       }
-
-       for (node = group; node != NULL; node = g_slist_next (node)) {
-               if ((node->next != NULL) && gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (node->next->data))) {
-                       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (node->data), TRUE);
-                       return TRUE;
-               }
-       }
-       return FALSE;
-}
-
-static gboolean
-modest_msg_view_window_zoom_minus (ModestWindow *window)
-{
-       ModestWindowPrivate *parent_priv;
-       GtkRadioAction *zoom_radio_action;
-       GSList *group, *node;
-
-       parent_priv = MODEST_WINDOW_GET_PRIVATE (window);
-       zoom_radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (parent_priv->ui_manager, 
-                                                                        "/MenuBar/ViewMenu/ZoomMenu/Zoom50Menu"));
-
-       group = gtk_radio_action_get_group (zoom_radio_action);
-
-       for (node = group; node != NULL; node = g_slist_next (node)) {
-               if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (node->data))) {
-                       if (node->next != NULL) {
-                               gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (node->next->data), TRUE);
-                               return TRUE;
-                       } else {
-                         hildon_banner_show_information (NULL, NULL, dgettext("hildon-common-strings", "ckct_ib_min_zoom_level_reached"));
-                               return FALSE;
-                       }
-                       break;
-               }
-       }
-       return FALSE;
-}
-
-static gboolean
 modest_msg_view_window_key_event (GtkWidget *window,
                                  GdkEventKey *event,
                                  gpointer userdata)
@@ -2172,33 +2039,6 @@ toolbar_resize (ModestMsgViewWindow *self)
                
 }
 
-static gboolean
-modest_msg_view_window_window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata)
-{
-       if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-               ModestWindowPrivate *parent_priv;
-               ModestWindowMgr *mgr;
-               gboolean is_fullscreen;
-               GtkAction *fs_toggle_action;
-               gboolean active;
-
-               mgr = modest_runtime_get_window_mgr ();
-               is_fullscreen = (modest_window_mgr_get_fullscreen_mode (mgr))?1:0;
-
-               parent_priv = MODEST_WINDOW_GET_PRIVATE (widget);
-               
-               fs_toggle_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ViewMenu/ViewToggleFullscreenMenu");
-               active = (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (fs_toggle_action)))?1:0;
-               if (is_fullscreen != active) {
-                       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (fs_toggle_action), is_fullscreen);
-               }
-               toolbar_resize (MODEST_MSG_VIEW_WINDOW (widget));
-       }
-
-       return FALSE;
-
-}
-
 static void
 modest_msg_view_window_show_toolbar (ModestWindow *self,
                                     gboolean show_toolbar)
@@ -2208,9 +2048,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
        GtkWidget *reply_button = NULL, *menu = NULL;
        GtkWidget *placeholder = NULL;
        gint insert_index;
-       const gchar *action_name;
-       GtkAction *action;
-       
+
        parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(self);
 
@@ -2235,12 +2073,12 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
                insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
                gtk_container_add (GTK_CONTAINER (priv->progress_toolitem), priv->progress_bar);
                gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (priv->progress_toolitem), insert_index);
-               
+
                /* Connect cancel 'clicked' signal to abort progress mode */
                g_signal_connect(priv->cancel_toolitem, "clicked",
                                 G_CALLBACK(cancel_progressbar),
                                 self);
-               
+
                /* Add it to the observers list */
                priv->progress_widgets = g_slist_prepend(priv->progress_widgets, priv->progress_bar);
 
@@ -2248,7 +2086,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
                hildon_window_add_toolbar (HILDON_WINDOW (self), 
                                           GTK_TOOLBAR (parent_priv->toolbar));
 
-               /* Set reply button tap and hold menu */        
+               /* Set reply button tap and hold menu */
                reply_button = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
                                                          "/ToolBar/ToolbarMessageReply");
                menu = gtk_ui_manager_get_widget (parent_priv->ui_manager, 
@@ -2271,20 +2109,6 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
                gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE);
                gtk_widget_hide (GTK_WIDGET (parent_priv->toolbar));
        }
-
-       /* Update also the actions (to update the toggles in the
-          menus), we have to do it manually because some other window
-          of the same time could have changed it (remember that the
-          toolbar fullscreen mode is shared by all the windows of the
-          same type */
-       if (modest_window_mgr_get_fullscreen_mode (modest_runtime_get_window_mgr ()))
-               action_name = "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarFullScreenMenu";
-       else
-               action_name = "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarNormalScreenMenu";
-
-       action = gtk_ui_manager_get_action (parent_priv->ui_manager, action_name);
-       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action),
-                                                           show_toolbar);
 }
 
 static void 
@@ -2626,23 +2450,23 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window,
                ModestWindowMgr *mgr;
                ModestWindow *msg_win = NULL;
                gboolean found;
-               
+
                header = tny_msg_get_header (TNY_MSG (mime_part));
-               mgr = modest_runtime_get_window_mgr ();         
+               mgr = modest_runtime_get_window_mgr ();
                found = modest_window_mgr_find_registered_header (mgr, header, &msg_win);
 
                if (found) {
                        /* if it's found, but there is no msg_win, it's probably in the process of being created;
                         * thus, we don't do anything */
                        g_warning ("window for is already being created");
-               } else { 
+               } else {
                        /* it's not found, so create a new window for it */
                        modest_window_mgr_register_header (mgr, header, attachment_uid); /* register the uid before building the window */
                        gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
                        if (!account)
                                account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
                        msg_win = modest_msg_view_window_new_for_attachment (TNY_MSG (mime_part), account, attachment_uid);
-                       modest_window_set_zoom (MODEST_WINDOW (msg_win), 
+                       modest_window_set_zoom (MODEST_WINDOW (msg_win),
                                                modest_window_get_zoom (MODEST_WINDOW (window)));
                        modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window));
                        gtk_widget_show_all (GTK_WIDGET (msg_win));
@@ -2929,7 +2753,7 @@ show_remove_attachment_information (gpointer userdata)
        }
 
        priv->remove_attachment_banner = g_object_ref (
-               hildon_banner_show_animation (NULL, NULL, _("mcen_ib_removing_attachment")));
+               hildon_banner_show_animation (NULL, NULL, _("mcen_me_inbox_remove_attachments")));
 
        gdk_threads_leave ();
 
@@ -3189,3 +3013,82 @@ on_fetch_image (ModestMsgView *msgview,
 
        return TRUE;;
 }
+
+static GSList *
+all_recipients_list (TnyMsg *msg)
+{
+       TnyHeader *header = NULL;
+       GSList *recipients = NULL;
+       gchar *from = NULL, *to = NULL, *cc = NULL, *bcc = NULL;
+
+       if (msg == NULL)
+               return NULL;
+
+       header = tny_msg_get_header (msg);
+       if (header == NULL)
+               return NULL;
+
+       from = tny_header_dup_from (header);
+       to = tny_header_dup_to (header);
+       cc = tny_header_dup_cc (header);
+       bcc = tny_header_dup_bcc (header);
+
+       recipients = NULL;
+       if (from)
+               recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (from));
+       if (to)
+               recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (to));
+       if (cc)
+               recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (cc));
+       if (bcc)
+               recipients = g_slist_concat (recipients, modest_text_utils_split_addresses_list (bcc));
+
+       g_free (from);
+       g_free (to);
+       g_free (cc);
+       g_free (bcc);
+
+       return recipients;
+}
+
+void
+modest_msg_view_window_add_to_contacts (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv;
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+       GSList *recipients = NULL;
+       TnyMsg *msg = NULL;
+
+       msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
+       if (msg == NULL) return;
+       recipients = all_recipients_list (msg);
+
+       if (recipients != NULL) {
+               GtkWidget *picker_dialog;
+               GtkWidget *selector;
+               GSList *node;
+               gchar *selected;
+
+               picker_dialog = hildon_picker_dialog_new (GTK_WINDOW (self));
+               gtk_window_set_title (GTK_WINDOW (picker_dialog), _("mcen_me_viewer_addtocontacts"));
+
+               selector = hildon_touch_selector_new_text ();
+               for (node = recipients; node != NULL; node = g_slist_next (node)) {
+                       hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), (const gchar *) node->data);
+               }
+
+               hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (picker_dialog), 
+                                                  HILDON_TOUCH_SELECTOR (selector));
+
+               gtk_dialog_run (GTK_DIALOG (picker_dialog));
+               selected = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector));
+               gtk_widget_destroy (picker_dialog);
+
+               if (selected)
+                       modest_address_book_add_address (selected);
+               g_free (selected);
+       }
+       
+       if (recipients) {g_slist_foreach (recipients, (GFunc) g_free, NULL); g_slist_free (recipients);}
+       g_object_unref (msg);
+}