X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-address-book.c;h=80c1d1cad5e3c09e9bae41745eb6dd968aeaf56a;hb=314a04dab0f8cca9d89d5b3f940fa2bb4371b28f;hp=c1360bca42d672cbe957861de623a19ccdd78a19;hpb=83cfbd96aa351d1ffc91d409cacb26ad1ec7df2d;p=modest diff --git a/src/hildon2/modest-address-book.c b/src/hildon2/modest-address-book.c index c1360bc..80c1d1c 100644 --- a/src/hildon2/modest-address-book.c +++ b/src/hildon2/modest-address-book.c @@ -49,6 +49,7 @@ #include #include #include +#include static OssoABookContactModel *contact_model = NULL; static EBook *book = NULL; @@ -123,13 +124,79 @@ open_addressbook () return TRUE; /* FIXME */ } +typedef struct _OpenAddressbookSyncInfo { + gboolean retval; + GMainLoop *mainloop; +} OpenAddressbookSyncInfo; + +static void +get_book_view_sync_cb (EBook *book, EBookStatus status, EBookView *bookview, gpointer data) +{ + OpenAddressbookSyncInfo *info = (OpenAddressbookSyncInfo *) data; + + if (status != E_BOOK_ERROR_OK) { + g_object_unref (book); + book = NULL; + info->retval = FALSE; + g_main_loop_quit (info->mainloop); + return; + } + book_view = bookview; + + if (contact_model) +#if MODEST_ABOOK_API < 4 + osso_abook_tree_model_set_book_view (OSSO_ABOOK_TREE_MODEL (contact_model), + book_view); +#else /* MODEST_ABOOK_API < 4 */ + osso_abook_list_store_set_book_view (OSSO_ABOOK_LIST_STORE (contact_model), + book_view); +#endif /* MODEST_ABOOK_API < 4 */ + + e_book_view_start (book_view); + info->retval = TRUE; + g_main_loop_quit (info->mainloop); +} + +static void +book_open_sync_cb (EBook *view, EBookStatus status, gpointer data) +{ + EBookQuery *query = NULL; + OpenAddressbookSyncInfo *info = (OpenAddressbookSyncInfo *) data; + + if (status != E_BOOK_ERROR_OK) { + g_object_unref (book); + book = NULL; + info->retval = FALSE; + g_main_loop_quit (info->mainloop); + return; + } + query = e_book_query_any_field_contains (""); + e_book_async_get_book_view (book, query, NULL, -1, get_book_view_sync_cb, info); + e_book_query_unref (query); +} + static gboolean open_addressbook_sync () { + OpenAddressbookSyncInfo *info; + gboolean retval; + book = e_book_new_system_addressbook (NULL); if (!book) return FALSE; + info = g_slice_new (OpenAddressbookSyncInfo); + info->mainloop = g_main_loop_new (NULL, FALSE); + info->retval = FALSE; + if (e_book_async_open (book, FALSE, book_open_sync_cb, info) == E_BOOK_ERROR_OK) { + GDK_THREADS_LEAVE (); + g_main_loop_run (info->mainloop); + GDK_THREADS_ENTER (); + } + retval = info->retval; + g_main_loop_unref (info->mainloop); + g_slice_free (OpenAddressbookSyncInfo, info); + /* Make it launch a main loop */ return e_book_open (book, FALSE, NULL); } @@ -468,25 +535,30 @@ run_add_email_addr_to_contact_dlg(const gchar * contact_name) gboolean run_dialog = TRUE; add_email_addr_to_contact_dlg = - gtk_dialog_new_with_buttons(_("mcen_ti_add_email_title"), NULL, + gtk_dialog_new_with_buttons(_AB("addr_ti_sel_contact"), NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _HL("wdgt_bd_done"), 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), + HILDON_MARGIN_DOUBLE); +#endif /*Set app_name & state_save related tags to the window */ 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); 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); @@ -500,7 +572,7 @@ run_add_email_addr_to_contact_dlg(const gchar * contact_name) 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); @@ -540,77 +612,40 @@ static GSList * select_email_addrs_for_contact(GList * email_addr_list) { GtkWidget *select_email_addr_dlg = NULL; - GtkWidget *view = NULL, *scrolledwindow = NULL; - GtkTreeSelection *selection = NULL; - GtkCellRenderer *renderer = NULL; - GtkTreeViewColumn *col = NULL; - GtkListStore *list_store = NULL; - GtkTreeModel *model = NULL; - GtkTreeIter iter; - GList *pathslist = NULL, *node = NULL; - gint result = -1; - gchar *email_addr = NULL; GSList *selected_email_addr_list = NULL; + GList *node; + GtkWidget *selector; + gint result = -1; if (!email_addr_list) return NULL; - select_email_addr_dlg = - gtk_dialog_new_with_buttons(_("mcen_ti_select_email_title"), - NULL, - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - _HL("wdgt_bd_done"), GTK_RESPONSE_ACCEPT, NULL); - gtk_dialog_set_has_separator(GTK_DIALOG(select_email_addr_dlg), FALSE); - - /* Make the window approximately big enough, because it doesn't resize to be big enough - * for the window title text: */ - gtk_window_set_default_size (GTK_WINDOW (select_email_addr_dlg), MODEST_DIALOG_WINDOW_MAX_HEIGHT, -1); - - scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(select_email_addr_dlg)->vbox), scrolledwindow, TRUE, - TRUE, 0); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - - view = gtk_tree_view_new(); - col = gtk_tree_view_column_new(); - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); - gtk_tree_view_column_pack_start(col, renderer, TRUE); - gtk_tree_view_column_add_attribute(col, renderer, "text", 0); - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); - gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); - gtk_container_add(GTK_CONTAINER(scrolledwindow), view); - - list_store = gtk_list_store_new(1, G_TYPE_STRING); - model = GTK_TREE_MODEL(list_store); - gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); + select_email_addr_dlg = hildon_picker_dialog_new (NULL); + gtk_window_set_title (GTK_WINDOW (select_email_addr_dlg), _("mcen_ti_select_email_title")); + selector = hildon_touch_selector_new_text (); for (node = email_addr_list; node != NULL && node->data != NULL; node = node->next) { + gchar *email_addr; email_addr = g_strstrip(g_strdup(node->data)); - gtk_list_store_append(list_store, &iter); - gtk_list_store_set(list_store, &iter, 0, email_addr, -1); + hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), email_addr); g_free(email_addr); } - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (list_store), &iter); - gtk_tree_selection_select_iter (selection, &iter); + hildon_picker_dialog_set_selector (HILDON_PICKER_DIALOG (select_email_addr_dlg), + HILDON_TOUCH_SELECTOR (selector)); + gtk_window_set_default_size (GTK_WINDOW (select_email_addr_dlg), MODEST_DIALOG_WINDOW_MAX_HEIGHT, -1); + gtk_widget_show_all(select_email_addr_dlg); result = gtk_dialog_run(GTK_DIALOG(select_email_addr_dlg)); - if (result == GTK_RESPONSE_ACCEPT) { - pathslist = gtk_tree_selection_get_selected_rows(selection, NULL); - for (node = pathslist; node != NULL; node = node->next) { - if (gtk_tree_model_get_iter(model, &iter, (GtkTreePath *) node->data)) { - gtk_tree_model_get(model, &iter, 0, &email_addr, -1); - selected_email_addr_list = - g_slist_append(selected_email_addr_list, g_strdup(email_addr)); - g_free(email_addr); - } - } + if (result == GTK_RESPONSE_OK) { + gchar *current_text; + + current_text = hildon_touch_selector_get_current_text (HILDON_TOUCH_SELECTOR (selector)); + selected_email_addr_list = g_slist_append (selected_email_addr_list, current_text); + } - gtk_list_store_clear(list_store); gtk_widget_destroy(select_email_addr_dlg); return selected_email_addr_list; } @@ -683,7 +718,7 @@ show_check_names_banner (gpointer userdata) GtkWidget **banner = (GtkWidget **) userdata; gdk_threads_enter (); - *banner = modest_platform_animation_banner (NULL, NULL, _("mail_ib_checking_names")); + *banner = hildon_banner_show_animation (NULL, NULL, _("mail_ib_checking_names")); gdk_threads_leave (); return FALSE; @@ -843,12 +878,32 @@ modest_address_book_check_names (ModestRecptEditor *recpt_editor, gboolean updat } +typedef struct _GetContactsInfo { + GMainLoop *mainloop; + GList *result; +} GetContactsInfo; + +static void +get_contacts_for_name_cb (EBook *book, + EBookStatus status, + GList *list, + gpointer userdata) +{ + GetContactsInfo *info = (GetContactsInfo *) userdata; + + if (status == E_BOOK_ERROR_OK) + info->result = list; + + g_main_loop_quit (info->mainloop); +} + static GList * get_contacts_for_name (const gchar *name) { EBookQuery *full_name_book_query = NULL; GList *result; gchar *unquoted; + GetContactsInfo *info; if (name == NULL) return NULL; @@ -857,8 +912,19 @@ get_contacts_for_name (const gchar *name) full_name_book_query = e_book_query_field_test (E_CONTACT_FULL_NAME, E_BOOK_QUERY_CONTAINS, unquoted); g_free (unquoted); - e_book_get_contacts (book, full_name_book_query, &result, NULL); + /* TODO: Make it launch a mainloop */ + info = g_slice_new (GetContactsInfo); + info->mainloop = g_main_loop_new (NULL, FALSE); + info->result = NULL; + if (e_book_async_get_contacts (book, full_name_book_query, get_contacts_for_name_cb, info) == 0) { + GDK_THREADS_LEAVE (); + g_main_loop_run (info->mainloop); + GDK_THREADS_ENTER (); + } + result = info->result; e_book_query_unref (full_name_book_query); + g_main_loop_unref (info->mainloop); + g_slice_free (GetContactsInfo, info); return result; }