Added "Add to Contacts" to the message editor window
authorSergio Villar Senin <svillar@igalia.com>
Mon, 9 Nov 2009 18:22:39 +0000 (19:22 +0100)
committerSergio Villar Senin <svillar@igalia.com>
Mon, 9 Nov 2009 18:36:09 +0000 (19:36 +0100)
Fixes NB#144914 (5/8)

src/hildon2/modest-address-book.c
src/hildon2/modest-msg-edit-window.c
src/modest-ui-actions.c
src/modest-ui-dimming-rules.c
src/widgets/modest-msg-edit-window.h

index dea223d..2aaaf56 100644 (file)
@@ -1214,10 +1214,13 @@ modest_address_book_add_address_list_with_selector (GSList *address_list, GtkWin
        g_object_ref (selector);
 
        for (node = address_list; 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;
+               const gchar *recipient = (const gchar *) node->data;
+               if (modest_text_utils_validate_recipient (recipient, NULL)) {
+                       if (!modest_address_book_has_address (recipient)) {
+                               hildon_touch_selector_append_text ((HildonTouchSelector *) selector,
+                                                                  recipient);
+                               contacts_to_add = TRUE;
+                       }
                }
        }
 
index 08f88da..093ed65 100644 (file)
@@ -3439,6 +3439,42 @@ modest_msg_edit_window_check_names (ModestMsgEditWindow *window, gboolean add_to
 
 }
 
+void
+modest_msg_edit_window_add_to_contacts (ModestMsgEditWindow *self)
+{
+       GSList *recipients = NULL;
+       ModestMsgEditWindowPrivate *priv;
+       gchar *joined, *after_remove, *to, *cc, *bcc;
+
+       priv = MODEST_MSG_EDIT_WINDOW_GET_PRIVATE (self);
+
+       /* First of all check names */
+       if (!modest_msg_edit_window_check_names (self, FALSE))
+               return;
+
+       /* Don't add the from obviously */
+       to  =  g_strdup (modest_recpt_editor_get_recipients ((ModestRecptEditor *) priv->to_field));
+       cc  =  g_strdup (modest_recpt_editor_get_recipients ((ModestRecptEditor *) priv->cc_field));
+       bcc =  g_strdup (modest_recpt_editor_get_recipients ((ModestRecptEditor *) priv->bcc_field));
+
+       joined = modest_text_utils_join_addresses (NULL, to, cc, bcc);
+       g_free (to);
+       g_free (cc);
+       g_free (bcc);
+
+       after_remove = modest_text_utils_remove_duplicate_addresses (joined);
+       g_free (joined);
+
+       recipients = modest_text_utils_split_addresses_list (after_remove);
+       g_free (after_remove);
+
+       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);
+       }
+}
+
 static void
 modest_msg_edit_window_add_attachment_clicked (GtkButton *button,
                                               ModestMsgEditWindow *window)
@@ -4336,16 +4372,18 @@ setup_menu (ModestMsgEditWindow *self)
        modest_window_add_to_menu (MODEST_WINDOW (self), _("mcen_me_editor_checknames"), NULL,
                                   MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_check_names),
                                   NULL);
+       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_me_inbox_undo"), "<Ctrl>z",
                                   MODEST_WINDOW_MENU_CALLBACK (modest_ui_actions_on_undo),
                                   MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_undo));
 
-       priv->cc_button = modest_toolkit_factory_create_check_menu (modest_runtime_get_toolkit_factory (),
-                                                                   _("mcen_me_editor_showcc"));
-       modest_togglable_set_active (priv->cc_button,
-                                    FALSE);
-       modest_window_add_item_to_menu (MODEST_WINDOW (self), priv->cc_button,
-                                       NULL);
+       priv->cc_button = hildon_check_button_new (0);
+       gtk_button_set_label (GTK_BUTTON (priv->cc_button), _("mcen_me_editor_showcc"));
+       hildon_check_button_set_active (HILDON_CHECK_BUTTON (priv->cc_button),
+                                       FALSE);
+       modest_window_add_item_to_menu (MODEST_WINDOW (self), priv->cc_button, NULL);
        g_signal_connect (G_OBJECT (priv->cc_button), "toggled",
                          G_CALLBACK (on_cc_button_toggled), (gpointer) self);
 
index 8f88d16..a471477 100644 (file)
@@ -692,9 +692,10 @@ modest_ui_actions_on_close_window (GtkAction *action, ModestWindow *win)
 void
 modest_ui_actions_add_to_contacts (GtkAction *action, ModestWindow *win)
 {
-       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
-
-       modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+       if (MODEST_IS_MSG_VIEW_WINDOW (win))
+               modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+       else if (MODEST_IS_MSG_EDIT_WINDOW (win))
+               modest_msg_edit_window_add_to_contacts (MODEST_MSG_EDIT_WINDOW (win));
 }
 
 void
index a46f727..dfbeb42 100644 (file)
@@ -2156,9 +2156,12 @@ modest_ui_dimming_rules_on_add_to_contacts (ModestWindow *win, gpointer user_dat
        if (recipients) {
                GSList *node;
                for (node = recipients; node != NULL; node = g_slist_next (node)) {
-                       if (!modest_address_book_has_address ((const gchar *) node->data)) {
-                               has_recipients_to_add = TRUE;
-                               break;
+                       const gchar *recipient = (const gchar *) node->data;
+                       if (modest_text_utils_validate_recipient (recipient, NULL)) {
+                               if (!modest_address_book_has_address (recipient)) {
+                                       has_recipients_to_add = TRUE;
+                                       break;
+                               }
                        }
                }
                g_slist_foreach (recipients, (GFunc) g_free, NULL);
index 113c3b1..655d383 100644 (file)
@@ -374,6 +374,15 @@ gboolean            modest_msg_edit_window_can_redo               (ModestMsgEdit
 void            modest_msg_edit_window_select_contacts    (ModestMsgEditWindow *window);
 
 /**
+ * modest_msg_edit_window_add_to_contacts:
+ * @self: a #ModestMsgEditWindow
+ *
+ * activates the add to contacts use. It shows the add to contacts
+ * dialog to select the recipient to add.
+ */
+void            modest_msg_edit_window_add_to_contacts     (ModestMsgEditWindow *self);
+
+/**
  * modest_msg_edit_window_check_names:
  * @window: a #ModestMsgEditWindow
  * @add_to_addressbook: if TRUE, add valid addresses to the addressbook