#include <gtk/gtkcellrenderertext.h>
#include <gtk/gtktreeselection.h>
#include <gtk/gtkentry.h>
+#include <modest-maemo-utils.h>
static OssoABookContactModel *contact_model = NULL;
static EBook *book = NULL;
static EBookView * book_view = NULL;
-static GSList *get_recipients_for_given_contact(EContact * contact);
+static GSList *get_recipients_for_given_contact (EContact * contact, gboolean *canceled);
static void commit_contact(EContact * contact, gboolean is_new);
-static gchar *get_email_addr_from_user(const gchar * given_name);
+static gchar *get_email_addr_from_user(const gchar * given_name, gboolean *canceled);
static gchar *ui_get_formatted_email_id(gchar * current_given_name,
gchar * current_sur_name, gchar * current_email_id);
-static gchar *run_add_email_addr_to_contact_dlg(const gchar * contact_name);
+static gchar *run_add_email_addr_to_contact_dlg(const gchar * contact_name, gboolean *canceled);
static GSList *select_email_addrs_for_contact(GList * email_addr_list);
-static gboolean resolve_address (const gchar *address, GSList **resolved_addresses, gchar **contact_id);
+static gboolean resolve_address (const gchar *address, GSList **resolved_addresses, gchar **contact_id, gboolean *canceled);
static gchar *unquote_string (const gchar *str);
for (node = contacts_list; node != NULL; node = g_list_next (node)) {
EContact *contact = (EContact *) node->data;
+ gboolean canceled;
- email_addrs_per_contact = get_recipients_for_given_contact (contact);
+ email_addrs_per_contact = get_recipients_for_given_contact (contact, &canceled);
if (email_addrs_per_contact) {
econtact_id = (gchar *) e_contact_get_const (contact, E_CONTACT_UID);
modest_recpt_editor_add_resolved_recipient (MODEST_RECPT_EDITOR (recpt_editor),
* @param Contact of type #EContact
* @return List of resolved recipient strings, to be freed by calling function.
*/
-static GSList *get_recipients_for_given_contact(EContact * contact)
+static GSList *
+get_recipients_for_given_contact (EContact * contact,
+ gboolean *canceled)
{
gchar *givenname = NULL;
gchar *familyname = NULL;
/*Launch the 'Add e-mail addr to contact' dialog if required */
if (email_not_present) {
#if MODEST_ABOOK_API < 4
- display_name = osso_abook_contact_get_display_name(contact);
+ display_name = osso_abook_contact_get_display_name(contact);
#else
OssoABookContact *abook_contact;
-
+
abook_contact = osso_abook_contact_new_from_template (contact);
display_name = osso_abook_contact_get_display_name(abook_contact);
#endif
- emailid = get_email_addr_from_user(display_name);
+ emailid = get_email_addr_from_user(display_name, canceled);
if (emailid) {
e_contact_set(contact, E_CONTACT_EMAIL_1, emailid);
commit_contact(contact, FALSE);
* @return E-mail address string entered by user, to be freed by calling function.
*/
static gchar *
-get_email_addr_from_user(const gchar * given_name)
+get_email_addr_from_user(const gchar * given_name, gboolean *canceled)
{
gchar *notification = NULL;
gchar *email_addr = NULL;
g_free(notification);
if (note_response == GTK_RESPONSE_OK) {
- email_addr = run_add_email_addr_to_contact_dlg(given_name);
+ email_addr = run_add_email_addr_to_contact_dlg (given_name, canceled);
}
return email_addr;
* It allows user to enter an e-mail address, and shows appropriate infonote if the
* entered string is not a valid e-mail address.
*
+ * It must return TRUE in canceled if the dialog was canceled by the user
+ *
* @param contact_name Full name of the contact
* @return E-mail address string entered by user, to be freed by calling function.
*/
static gchar *
-run_add_email_addr_to_contact_dlg(const gchar * contact_name)
+run_add_email_addr_to_contact_dlg(const gchar * contact_name,
+ gboolean *canceled)
{
GtkWidget *add_email_addr_to_contact_dlg = NULL;
GtkSizeGroup *size_group = NULL;
gchar *new_email_addr = NULL;
gboolean run_dialog = TRUE;
+ g_return_val_if_fail (canceled, NULL);
+
+ *canceled = FALSE;
+
add_email_addr_to_contact_dlg =
- gtk_dialog_new_with_buttons(_AB("addr_ti_sel_contact"), NULL,
+ gtk_dialog_new_with_buttons(_("mcen_ti_add_email_title"), NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- _HL("wdgt_bd_done"), GTK_RESPONSE_ACCEPT, NULL);
+ _HL("wdgt_bd_save"), GTK_RESPONSE_ACCEPT, NULL);
gtk_dialog_set_has_separator(GTK_DIALOG(add_email_addr_to_contact_dlg), FALSE);
#ifdef MODEST_TOOLKIT_HILDON2
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (add_email_addr_to_contact_dlg)->vbox),
size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
name_label = gtk_label_new(contact_name);
- gtk_misc_set_alignment(GTK_MISC(name_label), 0, 0);
+ gtk_misc_set_alignment(GTK_MISC(name_label), 0.0, 0.5);
cptn_cntrl =
- hildon_caption_new(size_group, _("mcen_ia_add_email_name"), name_label, NULL,
- HILDON_CAPTION_OPTIONAL);
+ modest_maemo_utils_create_captioned (size_group, NULL,
+ _("mcen_ia_add_email_name"), FALSE,
+ name_label);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(add_email_addr_to_contact_dlg)->vbox), cptn_cntrl,
FALSE, FALSE, 0);
- email_entry = gtk_entry_new();
- cptn_cntrl =
- hildon_caption_new(size_group, _("mcen_fi_add_email_name"), email_entry, NULL,
- HILDON_CAPTION_OPTIONAL);
+ email_entry = hildon_entry_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH);
+ cptn_cntrl = modest_maemo_utils_create_captioned (size_group, NULL,
+ _("mcen_fi_add_email_name"), FALSE,
+ email_entry);
hildon_gtk_entry_set_input_mode(GTK_ENTRY(email_entry), HILDON_GTK_INPUT_MODE_FULL);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(add_email_addr_to_contact_dlg)->vbox), cptn_cntrl,
TRUE, TRUE, 0);
if (result == GTK_RESPONSE_ACCEPT) {
const gchar *invalid_char_offset = NULL;
- new_email_addr = g_strdup(gtk_entry_get_text(GTK_ENTRY(email_entry)));
+ new_email_addr = g_strdup(hildon_entry_get_text(HILDON_ENTRY(email_entry)));
new_email_addr = g_strstrip(new_email_addr);
if (!modest_text_utils_validate_email_address (new_email_addr, &invalid_char_offset)) {
gtk_widget_grab_focus(email_entry);
g_free(new_email_addr);
new_email_addr = NULL;
}
+ } else {
+ *canceled = TRUE;
}
}
char_in_string);
g_free (char_in_string);
hildon_banner_show_information (NULL, NULL, message );
- g_free (message);
+ g_free (message);
result = FALSE;
} else if (strstr (address, "@") == NULL) {
/* here goes searching in addressbook */
+ gboolean canceled;
gchar *contact_id = NULL;
GSList *resolved_addresses = NULL;
- result = resolve_address (address, &resolved_addresses, &contact_id);
+ result = resolve_address (address, &resolved_addresses, &contact_id, &canceled);
if (result) {
gint new_length;
recipients = modest_recpt_editor_get_recipients (recpt_editor);
new_length = g_utf8_strlen (recipients, -1);
offset_delta = offset_delta + new_length - last_length;
- last_length = new_length;
+ last_length = new_length;
+ } else if (canceled) {
+ /* We have to remove the recipient if not resolved */
+ modest_recpt_editor_replace_with_resolved_recipient (recpt_editor,
+ &start_iter, &end_iter,
+ NULL,
+ NULL);
}
} else {
/* this address is not valid, select it and return control to user showing banner */
}
static gboolean
-resolve_address (const gchar *address, GSList **resolved_addresses, gchar **contact_id)
+resolve_address (const gchar *address,
+ GSList **resolved_addresses,
+ gchar **contact_id,
+ gboolean *canceled)
{
GList *resolved_contacts;
guint banner_timeout;
GtkWidget *banner = NULL;
+ g_return_val_if_fail (canceled, FALSE);
+
+ *canceled = FALSE;
banner_timeout = g_timeout_add (500, show_check_names_banner, &banner);
contact_model = osso_abook_contact_model_new ();
if (!open_addressbook_sync ()) {
+ hide_check_names_banner (&banner, banner_timeout);
if (contact_model) {
g_object_unref (contact_model);
contact_model = NULL;
}
return FALSE;
}
+ hide_check_names_banner (&banner, banner_timeout);
resolved_contacts = get_contacts_for_name (address);
if (resolved_contacts == NULL) {
/* no matching contacts for the search string */
modest_platform_run_information_dialog (NULL, _("mcen_nc_no_matching_contacts"), FALSE);
- hide_check_names_banner (&banner, banner_timeout);
-
return FALSE;
}
/* show a dialog to select the contact from the resolved ones */
g_list_free (resolved_contacts);
- hide_check_names_banner (&banner, banner_timeout);
resolved_contacts = select_contacts_for_name_dialog (address);
banner_timeout = g_timeout_add (500, show_check_names_banner, &banner);
}
-
+
/* get the resolved contacts (can be no contact) */
if (resolved_contacts) {
gboolean found;
EContact *contact = (EContact *) resolved_contacts->data;
- *resolved_addresses = get_recipients_for_given_contact (contact);
- hide_check_names_banner (&banner, banner_timeout);
+ *resolved_addresses = get_recipients_for_given_contact (contact, canceled);
if (*resolved_addresses) {
*contact_id = g_strdup (e_contact_get_const (contact, E_CONTACT_UID));
found = TRUE;
} else {
/* cancelled dialog to select more than one contact or
* selected no contact */
- hide_check_names_banner (&banner, banner_timeout);
return FALSE;
}
if (*p == '\\') {
g_string_append_unichar (buffer, g_utf8_get_char (p));
p = g_utf8_next_char (p);
-
+
}
g_string_append_unichar (buffer, g_utf8_get_char (p));
p = g_utf8_next_char (p);