aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog143
-rw-r--r--addressbook/gui/component/Makefile.am3
-rw-r--r--addressbook/gui/component/addressbook-migrate.c123
-rw-r--r--addressbook/gui/component/select-names/e-select-names-bonobo.c2
-rw-r--r--addressbook/gui/component/select-names/e-select-names-completion.c79
-rw-r--r--addressbook/gui/component/select-names/e-select-names-manager.c77
-rw-r--r--addressbook/gui/component/select-names/e-select-names-model.c164
-rw-r--r--addressbook/gui/component/select-names/e-select-names-model.h15
-rw-r--r--addressbook/gui/component/select-names/e-select-names-popup.c60
-rw-r--r--addressbook/gui/component/select-names/e-select-names-table-model.c8
-rw-r--r--addressbook/gui/component/select-names/e-select-names-text-model.c44
-rw-r--r--addressbook/gui/component/select-names/e-select-names.c9
-rw-r--r--addressbook/gui/contact-list-editor/e-contact-list-editor.c83
-rw-r--r--addressbook/gui/contact-list-editor/e-contact-list-model.c39
-rw-r--r--addressbook/gui/widgets/e-addressbook-table-adapter.c11
-rw-r--r--addressbook/gui/widgets/e-addressbook-treeview-adapter.c9
-rw-r--r--addressbook/gui/widgets/e-minicard.c28
-rw-r--r--addressbook/gui/widgets/eab-contact-display.c23
-rw-r--r--addressbook/gui/widgets/eab-gui-util.c12
-rw-r--r--addressbook/importers/evolution-ldif-importer.c27
-rw-r--r--addressbook/importers/evolution-vcard-importer.c22
-rw-r--r--addressbook/printing/e-contact-print.c11
-rw-r--r--addressbook/util/Makefile.am4
23 files changed, 521 insertions, 475 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 4550e08d32..177485a04b 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,146 @@
+2004-04-09 Chris Toshok <toshok@ximian.com>
+
+ * importers/evolution-ldif-importer.c (resolve_list_card): use the
+ new e_destination_export_to_vcard_attribute call to build up the
+ attributes.
+
+ * importers/evolution-vcard-importer.c (process_item_fn): if we're
+ importing a vcard that we wrote out previously containing xml in
+ the EMAIL attributes, DTRT and strip it out and use
+ e_destination_export_to_vcard_attribute to build up the proper
+ attribute.
+
+ * util/Makefile.am (libeabutil_la_SOURCES): remove
+ eab-destination.[ch] and add e-destination.[ch].
+
+ * printing/e-contact-print.c (e_contact_print_contact): we don't
+ have to worry about the "<?xml..." EMAIL fields anymore.
+
+ * gui/widgets/eab-gui-util.c (eab_send_contact_list): just use the
+ value as the address (since that's what it is) in the list case.
+
+ * gui/widgets/eab-contact-display.c (render_contact_list): remove
+ the EABDestination stuff from here.
+ (eab_contact_display_render_compact): same.
+
+ * gui/widgets/e-minicard.c (activiate_editor): fix warnings - use
+ EAB_EDITOR instead of G_OBJECT.
+ (add_field): we don't have to worry about the "<?xml..." EMAIL
+ fields anymore.
+ (remodel): same.
+
+ * gui/widgets/e-addressbook-treeview-adapter.c
+ (adapter_get_value): we don't have to worry about the "<?xml..."
+ EMAIL fields anymore.
+
+ * gui/widgets/e-addressbook-table-adapter.c
+ (addressbook_value_at): we don't have to worry about the
+ "<?xml..." EMAIL fields anymore.
+
+ * gui/contact-list-editor/e-contact-list-model.c
+ (contact_list_value_at): eab->e.
+ (contact_list_model_dispose): we're not a GtkObject, we're a
+ GObject. rename _destroy to _dispose, and chain up to the parent
+ class's ::dispose.
+ (e_contact_list_model_class_init): GtkObject -> GObject, and
+ destroy -> dispose.
+ (e_contact_list_model_init): GtkObject -> GObject, and EAB -> E.
+ (e_contact_list_model_add_destination): EAB -> E.
+ (e_contact_list_model_add_email): same.
+ (e_contact_list_model_add_contact): same.
+ (e_contact_list_model_get_destination): same.
+
+ * gui/contact-list-editor/e-contact-list-editor.c
+ (table_drag_data_received_cb): add email num arg to
+ e_contact_list_model_add_contact.
+ (extract_info): fill in the vcard attributes instead of just
+ generating xml.
+ (fill_in_info): extract the values from the vcard attributes.
+
+ * gui/component/select-names/e-select-names-text-model.c
+ (e_select_names_text_model_insert_length): eab->e, and don't
+ sometimes copy, sometimes ::new. always ::new.
+ (e_select_names_text_model_delete): same.
+ (e_select_names_text_model_obj_count): same.
+ (nth_obj_index): same.
+
+ * gui/component/select-names/e-select-names-table-model.c
+ (fill_in_info): eab -> e.
+
+ * gui/component/select-names/e-select-names-popup.c
+ (make_contact_editor_cb): eab -> e.
+ (change_email_num_cb): same.
+ (toggle_html_mail_cb): same.
+ (populate_popup_contact): same, and remove code that checks for
+ <?xml, then imports the EDestination.
+ (quick_add_cb): eab -> e.
+ (populate_popup_nocontact): same.
+ (e_select_names_populate_popup): same.
+
+ * gui/component/select-names/e-select-names-model.h: eab -> e, and
+ remove prototypes for nuked functions.
+
+ * gui/component/select-names/e-select-names-model.c
+ (destination_changed_proxy, send_changed, connect_destination,
+ disconnect_destination): nuke.
+ (e_select_names_model_duplicate): EAB -> E.
+ (e_select_names_model_get_textification): same.
+ (e_select_names_model_get_address_text): same.
+ (e_select_names_model_get_destination): same.
+ (e_select_names_model_export_destinationv): same.
+ (send_changed): same.
+ (e_select_names_model_import_destinationv): same.
+ (e_select_names_model_get_contact): same.
+ (e_select_names_model_contains): same.
+ (e_select_names_model_insert): same, and remove call to
+ connect_destination.
+ (e_select_names_model_append): same.
+ (e_select_names_model_replace): same, and remove call to
+ disconnect/connect_destination.
+ (e_select_names_model_delete): same.
+ (delete_all_iter): nuke.
+ (e_select_names_model_delete_all): use g_object_unref for the
+ foreach call.
+ (e_select_names_model_merge): EAB -> E.
+ (e_select_names_model_name_pos): same.
+ (e_select_names_model_name_pos): same.
+ (e_select_names_model_load_all_contacts): nuke.
+ (e_select_names_model_cancel_all_contact_load): nuke.
+
+ * gui/component/select-names/e-select-names-manager.c
+ (clean_cb, focus_in_cb, focus_out_cb, completion_popup_cb): nuke.
+ (completion_handler): EAB -> E, and the signals are gone.
+
+ * gui/component/select-names/e-select-names-completion.c: in
+ general, s/eab_dest/e_dest and s/EABDest/EDest.
+ (e_select_names_completion_got_book_view_cb): move the
+ e_book_view_start to below the assignment of
+ sequence_complete_received, just to put my mind at ease.
+ (e_select_names_completion_stop_query): un-#if notyet the call to
+ e_book_cancel.
+ (e_select_names_completion_start_query): free the waiting_query
+ before assigning to it.
+
+ * gui/component/select-names/e-select-names-bonobo.c
+ (entry_set_property_fn): remove calls to
+ e_select_names_model_load_all_contacts, since that function is
+ dead.
+
+ * gui/component/addressbook-migrate.c (setup_progress_dialog):
+ take the label to display to the user as an arg.
+ (migrate_contact_lists_for_local_folders): loop over all contacts
+ in all local addressbooks looking for ones that have <?xml in
+ their EMAIL attributes. for the ones we find, call
+ e_destination_export_to_vcard_attribute to build up the proper
+ attribute.
+ (addressbook_migrate): add in a clause for all versions under
+ 1.5.7 to convert contact lists. also, move the unrefs of the
+ sources/groups to outside the if, as they're created outside it.
+
+ * gui/component/Makefile.am (INCLUDES): remove the
+ addressbook/backend/ dirs, since libebook isn't there anymore
+ (nothing is, actually). Add addressbook/util/.
+
2004-04-09 Dan Winship <danw@ximian.com>
* gui/component/addressbook.c (addressbook_new_control): create an
diff --git a/addressbook/gui/component/Makefile.am b/addressbook/gui/component/Makefile.am
index 938385802f..5bd4d381e4 100644
--- a/addressbook/gui/component/Makefile.am
+++ b/addressbook/gui/component/Makefile.am
@@ -7,11 +7,10 @@ INCLUDES = \
-I$(top_srcdir)/shell \
-I$(top_builddir)/shell \
-I$(top_srcdir)/widgets/misc \
+ -I$(top_srcdir)/addressbook/util \
-I$(top_srcdir)/addressbook/gui/contact-editor \
-I$(top_srcdir)/addressbook/gui/contact-list-editor \
-I$(top_srcdir)/addressbook/gui/widgets \
- -I$(top_srcdir)/addressbook/backend \
- -I$(top_builddir)/addressbook/backend \
-I$(top_builddir)/a11y/addressbook \
-DEVOLUTION_DATADIR=\""$(datadir)"\" \
-DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
diff --git a/addressbook/gui/component/addressbook-migrate.c b/addressbook/gui/component/addressbook-migrate.c
index 1878b6504b..7c81a91d17 100644
--- a/addressbook/gui/component/addressbook-migrate.c
+++ b/addressbook/gui/component/addressbook-migrate.c
@@ -22,6 +22,7 @@
#include <glib.h>
#include <string.h>
#include "addressbook-migrate.h"
+#include "e-destination.h"
#include <libebook/e-book-async.h>
#include <libgnome/gnome-i18n.h>
#include <gal/util/e-util.h>
@@ -49,7 +50,7 @@ typedef struct {
} MigrationContext;
static void
-setup_progress_dialog (MigrationContext *context)
+setup_progress_dialog (MigrationContext *context, const char *str)
{
GtkWidget *vbox, *hbox, *w;
@@ -62,9 +63,7 @@ setup_progress_dialog (MigrationContext *context)
gtk_widget_show (vbox);
gtk_container_add (GTK_CONTAINER (context->window), vbox);
- w = gtk_label_new (_("The location and hierarchy of the Evolution contact "
- "folders has changed since Evolution 1.x.\n\nPlease be "
- "patient while Evolution migrates your folders..."));
+ w = gtk_label_new (str);
gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
gtk_widget_show (w);
gtk_box_pack_start_defaults (GTK_BOX (vbox), w);
@@ -735,6 +734,78 @@ migrate_completion_folders (MigrationContext *context)
return TRUE;
}
+static void
+migrate_contact_lists_for_local_folders (MigrationContext *context, ESourceGroup *on_this_computer)
+{
+ GSList *sources, *s;
+
+ sources = e_source_group_peek_sources (on_this_computer);
+ for (s = sources; s; s = s->next) {
+ ESource *source = s->data;
+ EBook *book;
+ EBookQuery *query;
+ GList *l, *contacts;
+ int num_contacts, num_converted;
+
+ book = e_book_new ();
+ if (!e_book_load_source (book, source, TRUE, NULL)) {
+ char *uri = e_source_get_uri (source);
+ g_warning ("failed to migrate contact lists for source %s", uri);
+ g_free (uri);
+ continue;
+ }
+
+ query = e_book_query_any_field_contains ("");
+
+ e_book_get_contacts (book, query, &contacts, NULL);
+
+ num_converted = 0;
+ num_contacts = g_list_length (contacts);
+ for (l = contacts; l; l = l->next) {
+ EContact *contact = l->data;
+ GError *e = NULL;
+ GList *attrs, *attr;
+ gboolean converted = FALSE;
+
+ attrs = e_contact_get_attributes (contact, E_CONTACT_EMAIL);
+ for (attr = attrs; attr; attr = attr->next) {
+ EVCardAttribute *a = attr->data;
+ GList *v = e_vcard_attribute_get_values (a);
+
+ if (v && v->data) {
+ if (!strncmp ((char*)v->data, "<?xml", 5)) {
+ EDestination *dest = e_destination_import ((char*)v->data);
+
+ e_destination_export_to_vcard_attribute (dest, a);
+
+ g_object_unref (dest);
+
+ converted = TRUE;
+ }
+ }
+ }
+
+ if (converted) {
+ e_contact_set_attributes (contact, E_CONTACT_EMAIL, attrs);
+
+ if (!e_book_commit_contact (book,
+ contact,
+ &e))
+ g_warning ("contact add failed: `%s'", e->message);
+ }
+
+ num_converted ++;
+
+ dialog_set_progress (context, (double)num_converted / num_contacts);
+ }
+
+ g_list_foreach (contacts, (GFunc)g_object_unref, NULL);
+ g_list_free (contacts);
+
+ g_object_unref (book);
+ }
+}
+
static MigrationContext*
migration_context_new (AddressbookComponent *component)
{
@@ -774,35 +845,45 @@ addressbook_migrate (AddressbookComponent *component, int major, int minor, int
groups/sources. */
create_groups (context, &on_this_computer, &on_ldap_servers, &personal_source);
- if (major <= 1) {
+ if (major == 1) {
- if (/* we're <= 1.5.2 */
- (major == 1
- && ((minor == 5 && revision <= 2)
- || (minor < 5)))
- ||
- /* we're 0.x */
- (major == 0)) {
+ if (minor < 5 || (minor == 5 && revision <= 2)) {
/* initialize our dialog */
- setup_progress_dialog (context);
+ setup_progress_dialog (context,
+ _("The location and hierarchy of the Evolution contact "
+ "folders has changed since Evolution 1.x.\n\nPlease be "
+ "patient while Evolution migrates your folders..."));
- if (on_this_computer) {
+ if (on_this_computer)
migrate_local_folders (context, on_this_computer, personal_source);
- g_object_unref (on_this_computer);
- }
- if (on_ldap_servers) {
+ if (on_ldap_servers)
migrate_ldap_servers (context, on_ldap_servers);
- g_object_unref (on_ldap_servers);
- }
- if (personal_source)
- g_object_unref (personal_source);
migrate_completion_folders (context);
dialog_close (context);
}
+
+ if (minor <= 5 || (minor == 5 && revision <= 6)) {
+ setup_progress_dialog (context,
+ _("The format of mailing list contacts has changed.\n\n"
+ "Please be patient while Evolution migrates your "
+ "folders..."));
+
+ migrate_contact_lists_for_local_folders (context, on_this_computer);
+
+ dialog_close (context);
+ }
}
+ if (on_this_computer)
+ g_object_unref (on_this_computer);
+ if (on_ldap_servers)
+ g_object_unref (on_ldap_servers);
+ if (personal_source)
+ g_object_unref (personal_source);
+
+
migration_context_free (context);
return TRUE;
diff --git a/addressbook/gui/component/select-names/e-select-names-bonobo.c b/addressbook/gui/component/select-names/e-select-names-bonobo.c
index 1977abe95f..871bb8b3f6 100644
--- a/addressbook/gui/component/select-names/e-select-names-bonobo.c
+++ b/addressbook/gui/component/select-names/e-select-names-bonobo.c
@@ -159,7 +159,6 @@ entry_set_property_fn (BonoboPropertyBag *bag,
g_assert (model != NULL);
e_entry_set_text (E_ENTRY (w), BONOBO_ARG_GET_STRING (arg));
- e_select_names_model_load_all_contacts (model, NULL);
break;
}
@@ -170,7 +169,6 @@ entry_set_property_fn (BonoboPropertyBag *bag,
g_assert (model != NULL);
e_select_names_model_import_destinationv (model, BONOBO_ARG_GET_STRING (arg));
- e_select_names_model_load_all_contacts (model, NULL);
break;
}
diff --git a/addressbook/gui/component/select-names/e-select-names-completion.c b/addressbook/gui/component/select-names/e-select-names-completion.c
index e3fa256dc8..2bf0341e40 100644
--- a/addressbook/gui/component/select-names/e-select-names-completion.c
+++ b/addressbook/gui/component/select-names/e-select-names-completion.c
@@ -36,7 +36,7 @@
#include <libebook/e-contact.h>
#include <addressbook/util/eab-book-util.h>
-#include <addressbook/util/eab-destination.h>
+#include <addressbook/util/e-destination.h>
#include <addressbook/gui/merging/eab-contact-compare.h>
#include <e-util/e-sexp.h>
@@ -97,7 +97,7 @@ static FILE *out;
*/
typedef gchar *(*BookQuerySExp) (ESelectNamesCompletion *);
-typedef ECompletionMatch *(*BookQueryMatchTester) (ESelectNamesCompletion *, EABDestination *);
+typedef ECompletionMatch *(*BookQueryMatchTester) (ESelectNamesCompletion *, EDestination *);
static int
utf8_casefold_collate_len (const gchar *str1, const gchar *str2, int len)
@@ -127,16 +127,16 @@ our_match_destroy (ECompletionMatch *match)
}
static ECompletionMatch *
-make_match (EABDestination *dest, const gchar *menu_form, double score)
+make_match (EDestination *dest, const gchar *menu_form, double score)
{
ECompletionMatch *match;
#if notyet
- EContact *contact = eab_destination_get_contact (dest);
+ EContact *contact = e_destination_get_contact (dest);
#endif
- match = e_completion_match_new (eab_destination_get_name (dest), menu_form, score);
+ match = e_completion_match_new (e_destination_get_name (dest), menu_form, score);
- e_completion_match_set_text (match, eab_destination_get_name (dest), menu_form);
+ e_completion_match_set_text (match, e_destination_get_name (dest), menu_form);
/* Reject any match that has null text fields. */
if (! (e_completion_match_get_match_text (match) && e_completion_match_get_menu_text (match))) {
@@ -152,10 +152,9 @@ make_match (EABDestination *dest, const gchar *menu_form, double score)
match->sort_major = 0;
#endif
- match->sort_minor = eab_destination_get_email_num (dest);
+ match->sort_minor = e_destination_get_email_num (dest);
- match->user_data = dest;
- g_object_ref (dest);
+ match->user_data = g_object_ref (dest);
match->destroy = our_match_destroy;
@@ -175,11 +174,11 @@ sexp_nickname (ESelectNamesCompletion *comp)
}
static ECompletionMatch *
-match_nickname (ESelectNamesCompletion *comp, EABDestination *dest)
+match_nickname (ESelectNamesCompletion *comp, EDestination *dest)
{
ECompletionMatch *match = NULL;
gint len;
- EContact *contact = eab_destination_get_contact (dest);
+ EContact *contact = e_destination_get_contact (dest);
double score;
const char *nickname;
@@ -197,11 +196,11 @@ match_nickname (ESelectNamesCompletion *comp, EABDestination *dest)
if (len == g_utf8_strlen (nickname, -1)) /* boost score on an exact match */
score *= 10;
- name = eab_destination_get_name (dest);
+ name = e_destination_get_name (dest);
if (name && *name)
- str = g_strdup_printf ("'%s' %s <%s>", nickname, name, eab_destination_get_email (dest));
+ str = g_strdup_printf ("'%s' %s <%s>", nickname, name, e_destination_get_email (dest));
else
- str = g_strdup_printf ("'%s' <%s>", nickname, eab_destination_get_email (dest));
+ str = g_strdup_printf ("'%s' <%s>", nickname, e_destination_get_email (dest));
match = make_match (dest, str, score);
g_free (str);
@@ -221,17 +220,17 @@ sexp_email (ESelectNamesCompletion *comp)
}
static ECompletionMatch *
-match_email (ESelectNamesCompletion *comp, EABDestination *dest)
+match_email (ESelectNamesCompletion *comp, EDestination *dest)
{
ECompletionMatch *match;
gint len = strlen (comp->priv->query_text);
- const gchar *name = eab_destination_get_name (dest);
- const gchar *email = eab_destination_get_email (dest);
+ const gchar *name = e_destination_get_name (dest);
+ const gchar *email = e_destination_get_email (dest);
double score;
if (email
&& !utf8_casefold_collate_len (comp->priv->query_text, email, len)
- && !eab_destination_is_evolution_list (dest)) {
+ && !e_destination_is_evolution_list (dest)) {
gchar *str;
@@ -306,7 +305,7 @@ sexp_name (ESelectNamesCompletion *comp)
}
static ECompletionMatch *
-match_name (ESelectNamesCompletion *comp, EABDestination *dest)
+match_name (ESelectNamesCompletion *comp, EDestination *dest)
{
ECompletionMatch *final_match = NULL;
gchar *menu_text = NULL;
@@ -319,13 +318,13 @@ match_name (ESelectNamesCompletion *comp, EABDestination *dest)
gboolean have_given, have_additional, have_family;
EContactName *contact_name;
- contact = eab_destination_get_contact (dest);
+ contact = e_destination_get_contact (dest);
contact_name = e_contact_get (contact, E_CONTACT_NAME);
if (!contact_name)
return NULL;
- email = eab_destination_get_email (dest);
+ email = e_destination_get_email (dest);
match = eab_contact_compare_name_to_string_full (contact, comp->priv->query_text, TRUE /* yes, allow partial matches */,
NULL, &first_match, &match_len);
@@ -411,7 +410,7 @@ sexp_file_as (ESelectNamesCompletion *comp)
}
static ECompletionMatch *
-match_file_as (ESelectNamesCompletion *comp, EABDestination *dest)
+match_file_as (ESelectNamesCompletion *comp, EDestination *dest)
{
const gchar *name;
const gchar *email;
@@ -420,8 +419,8 @@ match_file_as (ESelectNamesCompletion *comp, EABDestination *dest)
double score = 0.00001;
ECompletionMatch *match;
- name = eab_destination_get_name (dest);
- email = eab_destination_get_email (dest);
+ name = e_destination_get_name (dest);
+ email = e_destination_get_email (dest);
if (!(name && *name))
return NULL;
@@ -513,13 +512,13 @@ book_query_sexp (ESelectNamesCompletion *comp)
* string that applies to a given destination.
*/
static ECompletionMatch *
-book_query_score (ESelectNamesCompletion *comp, EABDestination *dest)
+book_query_score (ESelectNamesCompletion *comp, EDestination *dest)
{
ECompletionMatch *best_match = NULL;
gint i;
g_return_val_if_fail (E_IS_SELECT_NAMES_COMPLETION (comp), NULL);
- g_return_val_if_fail (EAB_IS_DESTINATION (dest), NULL);
+ g_return_val_if_fail (E_IS_DESTINATION (dest), NULL);
if (! (comp->priv->query_text && *comp->priv->query_text))
return NULL;
@@ -528,7 +527,7 @@ book_query_score (ESelectNamesCompletion *comp, EABDestination *dest)
ECompletionMatch *this_match = NULL;
- if (book_queries[i].tester && eab_destination_get_contact (dest)) {
+ if (book_queries[i].tester && e_destination_get_contact (dest)) {
this_match = book_queries[i].tester (comp, dest);
}
@@ -555,9 +554,9 @@ book_query_process_card_list (ESelectNamesCompletion *comp, const GList *contact
if (comp->priv->match_contact_lists) {
- EABDestination *dest = eab_destination_new ();
+ EDestination *dest = e_destination_new ();
ECompletionMatch *match;
- eab_destination_set_contact (dest, contact, 0);
+ e_destination_set_contact (dest, contact, 0);
match = book_query_score (comp, dest);
if (match && match->score > 0) {
e_completion_found_match (E_COMPLETION (comp), match);
@@ -575,11 +574,11 @@ book_query_process_card_list (ESelectNamesCompletion *comp, const GList *contact
GList *iter;
gint i;
for (i=0, iter = email; iter; ++i, iter = iter->next) {
- EABDestination *dest = eab_destination_new ();
+ EDestination *dest = e_destination_new ();
gchar *e;
ECompletionMatch *match;
- eab_destination_set_contact (dest, contact, i);
+ e_destination_set_contact (dest, contact, i);
e = iter->data;
if (e && *e) {
@@ -822,9 +821,9 @@ e_select_names_completion_got_book_view_cb (EBook *book, EBookStatus status, EBo
G_CALLBACK (e_select_names_completion_seq_complete_cb),
book_data);
- e_book_view_start (view);
-
book_data->sequence_complete_received = FALSE;
+
+ e_book_view_start (view);
}
static void
@@ -838,8 +837,7 @@ e_select_names_completion_contacts_added_cb (EBookView *book_view, const GList *
/* Save the list of matching cards. */
while (cards) {
- book_data->cached_cards = g_list_prepend (book_data->cached_cards, cards->data);
- g_object_ref (cards->data);
+ book_data->cached_cards = g_list_prepend (book_data->cached_cards, g_object_ref (cards->data));
cards = g_list_next (cards);
}
}
@@ -872,7 +870,9 @@ e_select_names_completion_seq_complete_cb (EBookView *book_view, EBookViewStatus
book_data->cache_complete = TRUE;
if (out)
- fprintf (out, "\tending search, book_data->cache_complete == %d\n", book_data->cache_complete);
+ fprintf (out, "\tending search, book_data->cache_complete == %d, cached_cards = %p\n",
+ book_data->cache_complete,
+ book_data->cached_cards);
if (!book_data->sequence_complete_received) {
book_data->sequence_complete_received = TRUE;
@@ -920,9 +920,7 @@ e_select_names_completion_stop_query (ESelectNamesCompletion *comp)
for (l = comp->priv->book_data; l; l = l->next) {
ESelectNamesCompletionBookData *book_data = l->data;
if (book_data->book_view_tag) {
-#if notyet
- e_book_cancel (book_data->book, book_data->book_view_tag);
-#endif
+ e_book_cancel (book_data->book, NULL);
book_data->book_view_tag = 0;
}
if (book_data->book_view) {
@@ -1035,9 +1033,8 @@ e_select_names_completion_start_query (ESelectNamesCompletion *comp, const gchar
comp->priv->query_text = NULL;
}
} else {
-
+ g_free (comp->priv->waiting_query);
comp->priv->waiting_query = g_strdup (query_text);
-
}
}
diff --git a/addressbook/gui/component/select-names/e-select-names-manager.c b/addressbook/gui/component/select-names/e-select-names-manager.c
index 1b7cbbb38e..d78ac0aef6 100644
--- a/addressbook/gui/component/select-names/e-select-names-manager.c
+++ b/addressbook/gui/component/select-names/e-select-names-manager.c
@@ -25,7 +25,7 @@
#include "e-select-names-completion.h"
#include "e-select-names-popup.h"
#include <addressbook/util/eab-book-util.h>
-#include <addressbook/util/eab-destination.h>
+#include <addressbook/util/e-destination.h>
#include "addressbook/gui/component/addressbook.h"
#include <bonobo/bonobo-object.h>
@@ -153,75 +153,19 @@ populate_popup_cb (EEntry *eentry, GdkEventButton *ev, gint pos, GtkWidget *menu
e_select_names_populate_popup (menu, text_model, ev, pos, GTK_WIDGET (eentry));
}
-#if 0
-static gboolean
-clean_cb (gpointer ptr)
-{
- ESelectNamesManagerEntry *entry = ptr;
-
- e_select_names_model_clean (entry->model, TRUE);
- entry->cleaning_tag = 0;
- return FALSE;
-}
-#endif
-
-static gint
-focus_in_cb (GtkWidget *w, GdkEventFocus *ev, gpointer user_data)
-{
- ESelectNamesManagerEntry *entry = user_data;
-
- if (entry->cleaning_tag) {
- g_source_remove (entry->cleaning_tag);
- entry->cleaning_tag = 0;
- }
-
- e_select_names_model_cancel_all_contact_load (entry->model);
-
- return FALSE;
-}
-
-static gint
-focus_out_cb (GtkWidget *w, GdkEventFocus *ev, gpointer user_data)
-{
-#if 0
- /* XXX fix me */
- ESelectNamesManagerEntry *entry = user_data;
- gboolean visible = e_entry_completion_popup_is_visible (entry->entry);
-
- if (! visible) {
- e_select_names_model_load_all_contacts (entry->model, entry->manager->completion_book, 100);
- if (entry->cleaning_tag == 0)
- entry->cleaning_tag = gtk_timeout_add (100, clean_cb, entry);
- }
-#endif
- return FALSE;
-}
-
-static void
-completion_popup_cb (EEntry *w, gint visible, gpointer user_data)
-{
-#if 0
- /* XXX fix me */
- ESelectNamesManagerEntry *entry = user_data;
-
- if (!visible && !GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (entry->entry->canvas)))
- e_select_names_model_load_all_contacts (entry->model, entry->manager->completion_book, 0);
-#endif
-}
-
static void
completion_handler (EEntry *entry, ECompletionMatch *match)
{
ESelectNamesManagerEntry *mgr_entry;
ESelectNamesTextModel *text_model;
- EABDestination *dest;
+ EDestination *dest;
gint i, pos, start_pos, len;
if (match == NULL || match->user_data == NULL)
return;
mgr_entry = get_entry_info (entry);
- dest = EAB_DESTINATION (match->user_data);
+ dest = E_DESTINATION (match->user_data);
/* Sometimes I really long for garbage collection. Reference
counting makes you feel 31337, but sometimes it is just a
@@ -287,21 +231,6 @@ e_select_names_manager_entry_new (ESelectNamesManager *manager, ESelectNamesMode
G_CALLBACK (populate_popup_cb),
entry);
- g_signal_connect (entry->entry->canvas,
- "focus_in_event",
- G_CALLBACK (focus_in_cb),
- entry);
-
- g_signal_connect (entry->entry->canvas,
- "focus_out_event",
- G_CALLBACK (focus_out_cb),
- entry);
-
- g_signal_connect (entry->entry,
- "completion_popup",
- G_CALLBACK (completion_popup_cb),
- entry);
-
g_object_set_data (G_OBJECT (entry->entry), "entry_info", entry);
g_object_set_data (G_OBJECT (entry->entry), "select_names_model", model);
g_object_set_data (G_OBJECT (entry->entry), "select_names_text_model", text_model);
diff --git a/addressbook/gui/component/select-names/e-select-names-model.c b/addressbook/gui/component/select-names/e-select-names-model.c
index 74bda7a74b..506eb40124 100644
--- a/addressbook/gui/component/select-names/e-select-names-model.c
+++ b/addressbook/gui/component/select-names/e-select-names-model.c
@@ -41,7 +41,7 @@ struct _ESelectNamesModelPrivate {
gchar *id;
gchar *title;
- GList *data; /* of EABDestination */
+ GList *data; /* of EDestination */
gint limit;
@@ -157,12 +157,6 @@ e_select_names_model_changed (ESelectNamesModel *model)
}
}
-static void
-destination_changed_proxy (EABDestination *dest, gpointer closure)
-{
- e_select_names_model_changed (E_SELECT_NAMES_MODEL (closure));
-}
-
/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
ESelectNamesModel *
@@ -183,7 +177,7 @@ e_select_names_model_duplicate (ESelectNamesModel *old)
model->priv->title = g_strdup (old->priv->title);
for (iter = old->priv->data; iter != NULL; iter = g_list_next (iter)) {
- EABDestination *dup = eab_destination_copy (EAB_DESTINATION (iter->data));
+ EDestination *dup = e_destination_copy (E_DESTINATION (iter->data));
e_select_names_model_append (model, dup);
}
@@ -211,8 +205,8 @@ e_select_names_model_get_textification (ESelectNamesModel *model, const char *se
GList *iter = model->priv->data;
while (iter) {
- EABDestination *dest = EAB_DESTINATION (iter->data);
- strv[i] = (gchar *) eab_destination_get_textrep (dest, FALSE);
+ EDestination *dest = E_DESTINATION (iter->data);
+ strv[i] = (gchar *) e_destination_get_textrep (dest, FALSE);
++i;
iter = g_list_next (iter);
}
@@ -251,8 +245,8 @@ e_select_names_model_get_address_text (ESelectNamesModel *model, const char *sep
GList *iter = model->priv->data;
while (iter) {
- EABDestination *dest = EAB_DESTINATION (iter->data);
- strv[i] = (gchar *) eab_destination_get_address (dest);
+ EDestination *dest = E_DESTINATION (iter->data);
+ strv[i] = (gchar *) e_destination_get_address (dest);
if (strv[i])
++i;
iter = g_list_next (iter);
@@ -303,57 +297,51 @@ e_select_names_model_at_limit (ESelectNamesModel *model)
return model->priv->limit >= 0 && g_list_length (model->priv->data) >= model->priv->limit;
}
-const EABDestination *
+const EDestination *
e_select_names_model_get_destination (ESelectNamesModel *model, gint index)
{
g_return_val_if_fail (model && E_IS_SELECT_NAMES_MODEL (model), NULL);
g_return_val_if_fail (0 <= index, NULL);
g_return_val_if_fail (index < g_list_length (model->priv->data), NULL);
- return EAB_DESTINATION (g_list_nth_data (model->priv->data, index));
+ return E_DESTINATION (g_list_nth_data (model->priv->data, index));
}
gchar *
e_select_names_model_export_destinationv (ESelectNamesModel *model)
{
- EABDestination **destv;
+ EDestination **destv;
gchar *str;
gint i, len = 0;
GList *j;
g_return_val_if_fail (model && E_IS_SELECT_NAMES_MODEL (model), NULL);
len = g_list_length (model->priv->data);
- destv = g_new0 (EABDestination *, len+1);
+ destv = g_new0 (EDestination *, len+1);
for (i=0, j = model->priv->data; j != NULL; j = g_list_next (j)) {
- EABDestination *dest = EAB_DESTINATION (j->data);
+ EDestination *dest = E_DESTINATION (j->data);
if (dest)
destv[i++] = dest;
}
- str = eab_destination_exportv (destv);
+ str = e_destination_exportv (destv);
g_free (destv);
return str;
}
-static void send_changed (EABDestination *dest, EContact *contact, gpointer closure)
-{
- ESelectNamesModel *model = closure;
- e_select_names_model_changed (model);
-}
-
void
e_select_names_model_import_destinationv (ESelectNamesModel *model,
gchar *destinationv)
{
- EABDestination **destv;
+ EDestination **destv;
gint i;
g_return_if_fail (model && E_IS_SELECT_NAMES_MODEL (model));
- destv = eab_destination_importv (destinationv);
+ destv = e_destination_importv (destinationv);
e_select_names_model_delete_all (model);
@@ -361,7 +349,6 @@ e_select_names_model_import_destinationv (ESelectNamesModel *model,
return;
for (i = 0; destv[i]; i++) {
- eab_destination_use_contact (destv[i], send_changed, model);
e_select_names_model_append (model, destv[i]);
}
g_free (destv);
@@ -370,21 +357,21 @@ e_select_names_model_import_destinationv (ESelectNamesModel *model,
EContact *
e_select_names_model_get_contact (ESelectNamesModel *model, gint index)
{
- const EABDestination *dest;
+ const EDestination *dest;
g_return_val_if_fail (model && E_IS_SELECT_NAMES_MODEL (model), NULL);
g_return_val_if_fail (0 <= index, NULL);
g_return_val_if_fail (index < g_list_length (model->priv->data), NULL);
dest = e_select_names_model_get_destination (model, index);
- return dest ? eab_destination_get_contact (dest) : NULL;
+ return dest ? e_destination_get_contact (dest) : NULL;
}
const gchar *
e_select_names_model_get_string (ESelectNamesModel *model, gint index)
{
- const EABDestination *dest;
+ const EDestination *dest;
g_return_val_if_fail (model && E_IS_SELECT_NAMES_MODEL (model), NULL);
g_return_val_if_fail (0 <= index, NULL);
@@ -392,34 +379,19 @@ e_select_names_model_get_string (ESelectNamesModel *model, gint index)
dest = e_select_names_model_get_destination (model, index);
- return dest ? eab_destination_get_textrep (dest, FALSE) : "";
-}
-
-static void
-connect_destination (ESelectNamesModel *model, EABDestination *dest)
-{
- g_signal_connect (dest,
- "changed",
- G_CALLBACK (destination_changed_proxy),
- model);
-}
-
-static void
-disconnect_destination (ESelectNamesModel *model, EABDestination *dest)
-{
- g_signal_handlers_disconnect_by_func (dest, destination_changed_proxy, model);
+ return dest ? e_destination_get_textrep (dest, FALSE) : "";
}
gboolean
-e_select_names_model_contains (ESelectNamesModel *model, const EABDestination *dest)
+e_select_names_model_contains (ESelectNamesModel *model, const EDestination *dest)
{
GList *iter;
g_return_val_if_fail (E_IS_SELECT_NAMES_MODEL (model), FALSE);
- g_return_val_if_fail (EAB_IS_DESTINATION (dest), FALSE);
+ g_return_val_if_fail (E_IS_DESTINATION (dest), FALSE);
for (iter = model->priv->data; iter != NULL; iter = g_list_next (iter)) {
- if (iter->data != NULL && eab_destination_equal (dest, EAB_DESTINATION (iter->data)))
+ if (iter->data != NULL && e_destination_equal (dest, E_DESTINATION (iter->data)))
return TRUE;
}
@@ -427,12 +399,12 @@ e_select_names_model_contains (ESelectNamesModel *model, const EABDestination *d
}
void
-e_select_names_model_insert (ESelectNamesModel *model, gint index, EABDestination *dest)
+e_select_names_model_insert (ESelectNamesModel *model, gint index, EDestination *dest)
{
g_return_if_fail (model != NULL);
g_return_if_fail (E_IS_SELECT_NAMES_MODEL (model));
g_return_if_fail (0 <= index && index <= g_list_length (model->priv->data));
- g_return_if_fail (dest && EAB_IS_DESTINATION (dest));
+ g_return_if_fail (dest && E_IS_DESTINATION (dest));
if (e_select_names_model_at_limit (model)) {
/* FIXME: This is bad. */
@@ -440,8 +412,6 @@ e_select_names_model_insert (ESelectNamesModel *model, gint index, EABDestinatio
return;
}
- connect_destination (model, dest);
-
model->priv->data = g_list_insert (model->priv->data, dest, index);
g_object_ref (dest);
@@ -450,10 +420,10 @@ e_select_names_model_insert (ESelectNamesModel *model, gint index, EABDestinatio
}
void
-e_select_names_model_append (ESelectNamesModel *model, EABDestination *dest)
+e_select_names_model_append (ESelectNamesModel *model, EDestination *dest)
{
g_return_if_fail (model && E_IS_SELECT_NAMES_MODEL (model));
- g_return_if_fail (dest && EAB_IS_DESTINATION (dest));
+ g_return_if_fail (dest && E_IS_DESTINATION (dest));
if (e_select_names_model_at_limit (model)) {
/* FIXME: This is bad. */
@@ -461,8 +431,6 @@ e_select_names_model_append (ESelectNamesModel *model, EABDestination *dest)
return;
}
- connect_destination (model, dest);
-
model->priv->data = g_list_append (model->priv->data, dest);
g_object_ref (dest);
@@ -471,7 +439,7 @@ e_select_names_model_append (ESelectNamesModel *model, EABDestination *dest)
}
void
-e_select_names_model_replace (ESelectNamesModel *model, gint index, EABDestination *dest)
+e_select_names_model_replace (ESelectNamesModel *model, gint index, EDestination *dest)
{
GList *node;
const gchar *new_str, *old_str;
@@ -480,15 +448,13 @@ e_select_names_model_replace (ESelectNamesModel *model, gint index, EABDestinati
g_return_if_fail (model != NULL);
g_return_if_fail (E_IS_SELECT_NAMES_MODEL (model));
g_return_if_fail (model->priv->data == NULL || (0 <= index && index < g_list_length (model->priv->data)));
- g_return_if_fail (dest && EAB_IS_DESTINATION (dest));
+ g_return_if_fail (dest && E_IS_DESTINATION (dest));
- new_str = eab_destination_get_textrep (dest, FALSE);
+ new_str = e_destination_get_textrep (dest, FALSE);
new_strlen = new_str ? strlen (new_str) : 0;
if (model->priv->data == NULL) {
- connect_destination (model, dest);
-
model->priv->data = g_list_append (model->priv->data, dest);
g_object_ref (dest);
@@ -498,10 +464,7 @@ e_select_names_model_replace (ESelectNamesModel *model, gint index, EABDestinati
if (node->data != dest) {
- disconnect_destination (model, EAB_DESTINATION (node->data));
- connect_destination (model, dest);
-
- old_str = eab_destination_get_textrep (EAB_DESTINATION (node->data), FALSE);
+ old_str = e_destination_get_textrep (E_DESTINATION (node->data), FALSE);
old_strlen = old_str ? strlen (old_str) : 0;
g_object_unref (node->data);
@@ -521,16 +484,15 @@ void
e_select_names_model_delete (ESelectNamesModel *model, gint index)
{
GList *node;
- EABDestination *dest;
+ EDestination *dest;
g_return_if_fail (model != NULL);
g_return_if_fail (E_IS_SELECT_NAMES_MODEL (model));
g_return_if_fail (0 <= index && index < g_list_length (model->priv->data));
node = g_list_nth (model->priv->data, index);
- dest = EAB_DESTINATION (node->data);
+ dest = E_DESTINATION (node->data);
- disconnect_destination (model, dest);
g_object_unref (dest);
model->priv->data = g_list_remove_link (model->priv->data, node);
@@ -550,20 +512,18 @@ e_select_names_model_clean (ESelectNamesModel *model, gboolean clean_last_entry)
iter = model->priv->data;
while (iter) {
- EABDestination *dest;
+ EDestination *dest;
next = g_list_next (iter);
if (next == NULL && !clean_last_entry)
break;
- dest = iter->data ? EAB_DESTINATION (iter->data) : NULL;
+ dest = iter->data ? E_DESTINATION (iter->data) : NULL;
- if (dest == NULL || eab_destination_is_empty (dest)) {
- if (dest) {
- disconnect_destination (model, dest);
+ if (dest == NULL || e_destination_empty (dest)) {
+ if (dest)
g_object_unref (dest);
- }
model->priv->data = g_list_remove_link (model->priv->data, iter);
g_list_free_1 (iter);
changed = TRUE;
@@ -576,19 +536,12 @@ e_select_names_model_clean (ESelectNamesModel *model, gboolean clean_last_entry)
e_select_names_model_changed (model);
}
-static void
-delete_all_iter (gpointer data, gpointer closure)
-{
- disconnect_destination (E_SELECT_NAMES_MODEL (closure), EAB_DESTINATION (data));
- g_object_unref (data);
-}
-
void
e_select_names_model_delete_all (ESelectNamesModel *model)
{
g_return_if_fail (model != NULL && E_IS_SELECT_NAMES_MODEL (model));
- g_list_foreach (model->priv->data, delete_all_iter, model);
+ g_list_foreach (model->priv->data, (GFunc)g_object_unref, model);
g_list_free (model->priv->data);
model->priv->data = NULL;
@@ -609,9 +562,9 @@ e_select_names_model_overwrite_copy (ESelectNamesModel *dest, ESelectNamesModel
e_select_names_model_delete_all (dest);
len = e_select_names_model_count (src);
for (i = 0; i < len; ++i) {
- const EABDestination *d = e_select_names_model_get_destination (src, i);
+ const EDestination *d = e_select_names_model_get_destination (src, i);
if (d)
- e_select_names_model_append (dest, eab_destination_copy (d));
+ e_select_names_model_append (dest, e_destination_copy (d));
}
}
@@ -628,9 +581,9 @@ e_select_names_model_merge (ESelectNamesModel *dest, ESelectNamesModel *src)
len = e_select_names_model_count (src);
for (i = 0; i < len; ++i) {
- const EABDestination *d = e_select_names_model_get_destination (src, i);
+ const EDestination *d = e_select_names_model_get_destination (src, i);
if (d && !e_select_names_model_contains (dest, d))
- e_select_names_model_append (dest, eab_destination_copy (d));
+ e_select_names_model_append (dest, e_destination_copy (d));
}
}
@@ -648,7 +601,7 @@ e_select_names_model_name_pos (ESelectNamesModel *model, gint seplen, gint index
iter = model->priv->data;
while (iter && i <= index) {
rp += len + (i > 0 ? seplen : 0);
- str = eab_destination_get_textrep (EAB_DESTINATION (iter->data), FALSE);
+ str = e_destination_get_textrep (E_DESTINATION (iter->data), FALSE);
len = str ? g_utf8_strlen (str, -1) : 0;
++i;
iter = g_list_next (iter);
@@ -678,7 +631,7 @@ e_select_names_model_text_pos (ESelectNamesModel *model, gint seplen, gint pos,
iter = model->priv->data;
while (iter != NULL) {
- str = eab_destination_get_textrep (EAB_DESTINATION (iter->data), FALSE);
+ str = e_destination_get_textrep (E_DESTINATION (iter->data), FALSE);
len = str ? g_utf8_strlen (str, -1) : 0;
if (sp <= pos && pos <= sp + len + adj) {
@@ -717,39 +670,6 @@ e_select_names_model_text_pos (ESelectNamesModel *model, gint seplen, gint pos,
}
void
-e_select_names_model_load_all_contacts (ESelectNamesModel *model, EBook *book)
-{
- GList *iter;
-
- g_return_if_fail (E_IS_SELECT_NAMES_MODEL (model));
- g_return_if_fail (book == NULL || E_IS_BOOK (book));
-
- for (iter = model->priv->data; iter != NULL; iter = g_list_next (iter)) {
- EABDestination *dest = EAB_DESTINATION (iter->data);
- if (!eab_destination_is_empty (dest)) {
-
- eab_destination_load_contact (dest, book);
- }
- }
-}
-
-void
-e_select_names_model_cancel_all_contact_load (ESelectNamesModel *model)
-{
- GList *iter;
-
- g_return_if_fail (E_IS_SELECT_NAMES_MODEL (model));
-
- for (iter = model->priv->data; iter != NULL; iter = g_list_next (iter)) {
- EABDestination *dest = EAB_DESTINATION (iter->data);
- if (!eab_destination_is_empty (dest)) {
-
- eab_destination_cancel_contact_load (dest);
- }
- }
-}
-
-void
e_select_names_model_freeze (ESelectNamesModel *model)
{
g_return_if_fail (E_IS_SELECT_NAMES_MODEL (model));
diff --git a/addressbook/gui/component/select-names/e-select-names-model.h b/addressbook/gui/component/select-names/e-select-names-model.h
index 0d21ee86b3..8bb8e3778b 100644
--- a/addressbook/gui/component/select-names/e-select-names-model.h
+++ b/addressbook/gui/component/select-names/e-select-names-model.h
@@ -16,7 +16,7 @@
#include <stdio.h>
#include <e-util/e-list.h>
#include <libebook/e-contact.h>
-#include <addressbook/util/eab-destination.h>
+#include <addressbook/util/e-destination.h>
#define E_TYPE_SELECT_NAMES_MODEL (e_select_names_model_get_type ())
#define E_SELECT_NAMES_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_SELECT_NAMES_MODEL, ESelectNamesModel))
@@ -54,18 +54,18 @@ gint e_select_names_model_get_limit (ESelectNamesModel
void e_select_names_model_set_limit (ESelectNamesModel *model, gint limit);
gboolean e_select_names_model_at_limit (ESelectNamesModel *model);
-const EABDestination *e_select_names_model_get_destination (ESelectNamesModel *model, gint index);
+const EDestination *e_select_names_model_get_destination (ESelectNamesModel *model, gint index);
gchar *e_select_names_model_export_destinationv (ESelectNamesModel *model);
void e_select_names_model_import_destinationv (ESelectNamesModel *model,
gchar *destinationv);
EContact *e_select_names_model_get_contact (ESelectNamesModel *model, gint index);
const gchar *e_select_names_model_get_string (ESelectNamesModel *model, gint index);
-gboolean e_select_names_model_contains (ESelectNamesModel *model, const EABDestination *dest);
+gboolean e_select_names_model_contains (ESelectNamesModel *model, const EDestination *dest);
-void e_select_names_model_insert (ESelectNamesModel *model, gint index, EABDestination *dest);
-void e_select_names_model_append (ESelectNamesModel *model, EABDestination *dest);
-void e_select_names_model_replace (ESelectNamesModel *model, gint index, EABDestination *dest);
+void e_select_names_model_insert (ESelectNamesModel *model, gint index, EDestination *dest);
+void e_select_names_model_append (ESelectNamesModel *model, EDestination *dest);
+void e_select_names_model_replace (ESelectNamesModel *model, gint index, EDestination *dest);
void e_select_names_model_delete (ESelectNamesModel *model, gint index);
void e_select_names_model_delete_all (ESelectNamesModel *model);
void e_select_names_model_overwrite_copy (ESelectNamesModel *dest, ESelectNamesModel *src);
@@ -76,9 +76,6 @@ void e_select_names_model_clean (ESelectNamesModel *model, gboolea
void e_select_names_model_name_pos (ESelectNamesModel *model, gint seplen, gint index, gint *pos, gint *length);
void e_select_names_model_text_pos (ESelectNamesModel *model, gint seplen, gint pos, gint *index, gint *start_pos, gint *length);
-void e_select_names_model_load_all_contacts (ESelectNamesModel *model, EBook *book);
-void e_select_names_model_cancel_all_contact_load (ESelectNamesModel *model);
-
/* This is a mildly annoying freeze/thaw pair, in that it only applies to the 'changed'
signal and not to 'resized'. This could cause unexpected results in some cases. */
void e_select_names_model_freeze (ESelectNamesModel *model);
diff --git a/addressbook/gui/component/select-names/e-select-names-popup.c b/addressbook/gui/component/select-names/e-select-names-popup.c
index eb7c7c5e88..0ad6fda909 100644
--- a/addressbook/gui/component/select-names/e-select-names-popup.c
+++ b/addressbook/gui/component/select-names/e-select-names-popup.c
@@ -36,7 +36,6 @@
#include <gtk/gtkcheckmenuitem.h>
#include <gtk/gtkradiomenuitem.h>
#include <gtk/gtkseparatormenuitem.h>
-#include <gtk/gtklabel.h>
#include <libgnome/gnome-i18n.h>
#include <addressbook/util/eab-book-util.h>
@@ -52,13 +51,13 @@
typedef struct _PopupInfo PopupInfo;
struct _PopupInfo {
ESelectNamesTextModel *text_model;
- EABDestination *dest;
+ EDestination *dest;
gint pos;
gint index;
};
static PopupInfo *
-popup_info_new (ESelectNamesTextModel *text_model, EABDestination *dest, gint pos, gint index)
+popup_info_new (ESelectNamesTextModel *text_model, EDestination *dest, gint pos, gint index)
{
PopupInfo *info = g_new0 (PopupInfo, 1);
info->text_model = text_model;
@@ -105,10 +104,10 @@ static void
make_contact_editor_cb (EBook *book, gpointer user_data)
{
if (book) {
- EABDestination *dest = EAB_DESTINATION (user_data);
+ EDestination *dest = E_DESTINATION (user_data);
EContact *contact;
- contact = (EContact *) eab_destination_get_contact (dest);
+ contact = (EContact *) e_destination_get_contact (dest);
if (e_contact_get (contact, E_CONTACT_IS_LIST)) {
EContactListEditor *ce;
ce = e_addressbook_show_contact_list_editor (book, contact, FALSE, TRUE);
@@ -140,7 +139,7 @@ change_email_num_cb (GtkWidget *w, gpointer user_data)
{
PopupInfo *info = (PopupInfo *) user_data;
gint n;
- EABDestination *dest;
+ EDestination *dest;
if (info == NULL)
return;
@@ -150,9 +149,9 @@ change_email_num_cb (GtkWidget *w, gpointer user_data)
n = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (w), "number"));
- if (n != eab_destination_get_email_num (info->dest)) {
- dest = eab_destination_new ();
- eab_destination_set_contact (dest, eab_destination_get_contact (info->dest), n);
+ if (n != e_destination_get_email_num (info->dest)) {
+ dest = e_destination_new ();
+ e_destination_set_contact (dest, e_destination_get_contact (info->dest), n);
e_select_names_model_replace (info->text_model->source, info->index, dest);
}
}
@@ -177,7 +176,7 @@ toggle_html_mail_cb (GtkWidget *w, gpointer user_data)
{
PopupInfo *info = (PopupInfo *) user_data;
GtkCheckMenuItem *item = GTK_CHECK_MENU_ITEM (w);
- const EABDestination *dest;
+ const EDestination *dest;
if (info == NULL)
return;
@@ -185,7 +184,7 @@ toggle_html_mail_cb (GtkWidget *w, gpointer user_data)
dest = info->dest;
item = GTK_CHECK_MENU_ITEM (item);
- eab_destination_set_html_mail_pref ((EABDestination *) dest, item->active);
+ e_destination_set_html_mail_pref ((EDestination *) dest, item->active);
}
#endif
@@ -197,7 +196,7 @@ populate_popup_contact (GtkWidget *pop, gboolean list, PopupInfo *info)
GtkWidget *menuitem;
GList *email_list;
- contact = eab_destination_get_contact (info->dest);
+ contact = e_destination_get_contact (info->dest);
#if TOO_MANY_MENU_ITEMS
menuitem = gtk_separator_menu_item_new();
@@ -227,7 +226,7 @@ populate_popup_contact (GtkWidget *pop, gboolean list, PopupInfo *info)
menuitem = gtk_check_menu_item_new_with_label (_("Send HTML Mail?"));
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem),
- eab_destination_get_html_mail_pref (info->dest));
+ e_destination_get_html_mail_pref (info->dest));
g_signal_connect (menuitem, "toggled",
G_CALLBACK (toggle_html_mail_cb),
info);
@@ -245,23 +244,14 @@ populate_popup_contact (GtkWidget *pop, gboolean list, PopupInfo *info)
if (g_list_length (email_list) > 1) {
GList *l;
GSList *radiogroup = NULL;
- gint n = eab_destination_get_email_num (info->dest);
+ gint n = e_destination_get_email_num (info->dest);
gint j = g_list_length (email_list) - 1;
for (l = g_list_last (email_list); l; l = l->prev) {
char *email = l->data;
char *label = NULL;
- if (!strncmp (email, "<?xml", 5)) {
- EABDestination *dest = eab_destination_import (email);
- if (dest) {
- label = g_strdup (eab_destination_get_textrep (dest, TRUE));
- g_object_unref (dest);
- }
- }
- else {
- label = g_strdup (email);
- }
+ label = g_strdup (email);
if (list) {
menuitem = gtk_menu_item_new_with_label (label);
@@ -286,7 +276,7 @@ populate_popup_contact (GtkWidget *pop, gboolean list, PopupInfo *info)
g_free (label);
}
} else {
- menuitem = gtk_menu_item_new_with_label (eab_destination_get_email (info->dest));
+ menuitem = gtk_menu_item_new_with_label (e_destination_get_email (info->dest));
gtk_widget_show (menuitem);
gtk_menu_shell_prepend (GTK_MENU_SHELL (pop), menuitem);
}
@@ -303,7 +293,7 @@ populate_popup_contact (GtkWidget *pop, gboolean list, PopupInfo *info)
? EVOLUTION_IMAGESDIR "/" LIST_ICON_FILENAME
: EVOLUTION_IMAGESDIR "/" CONTACT_ICON_FILENAME);
gtk_widget_show (image);
- menuitem = gtk_image_menu_item_new_with_label (eab_destination_get_name (info->dest));
+ menuitem = gtk_image_menu_item_new_with_label (e_destination_get_name (info->dest));
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem),
image);
gtk_widget_show (menuitem);
@@ -314,7 +304,7 @@ static void
quick_add_cb (GtkWidget *w, gpointer user_data)
{
PopupInfo *info = (PopupInfo *) user_data;
- e_contact_quick_add_free_form (eab_destination_get_address (info->dest), NULL, NULL);
+ e_contact_quick_add_free_form (e_destination_get_address (info->dest), NULL, NULL);
}
static void
@@ -337,7 +327,7 @@ populate_popup_nocontact (GtkWidget *pop, PopupInfo *info)
#if TOO_MANY_MENU_ITEMS
menuitem = gtk_check_menu_item_new_with_label (_("Send HTML Mail?"));
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem),
- eab_destination_get_html_mail_pref (info->dest));
+ e_destination_get_html_mail_pref (info->dest));
g_signal_connect (menuitem, "toggled",
G_CALLBACK (toggle_html_mail_cb),
info);
@@ -349,9 +339,9 @@ populate_popup_nocontact (GtkWidget *pop, PopupInfo *info)
gtk_widget_show (menuitem);
gtk_menu_shell_prepend (GTK_MENU_SHELL (pop), menuitem);
- str = eab_destination_get_name (info->dest);
+ str = e_destination_get_name (info->dest);
if (! (str && *str))
- str = eab_destination_get_email (info->dest);
+ str = e_destination_get_email (info->dest);
if (! (str && *str))
str = _("Unnamed Contact");
@@ -366,7 +356,7 @@ e_select_names_populate_popup (GtkWidget *menu, ESelectNamesTextModel *text_mode
{
ESelectNamesModel *model;
PopupInfo *info;
- EABDestination *dest;
+ EDestination *dest;
gint index;
g_return_if_fail (GTK_IS_MENU_SHELL (menu));
@@ -381,14 +371,14 @@ e_select_names_populate_popup (GtkWidget *menu, ESelectNamesTextModel *text_mode
return;
/* XXX yuck, why does this return a const? */
- dest = (EABDestination *)e_select_names_model_get_destination (model, index);
- if (eab_destination_is_empty (dest))
+ dest = (EDestination *)e_select_names_model_get_destination (model, index);
+ if (e_destination_empty (dest))
return;
info = popup_info_new (text_model, dest, pos, index);
- if (eab_destination_get_contact (dest)) {
- populate_popup_contact (menu, eab_destination_is_evolution_list (dest), info);
+ if (e_destination_get_contact (dest)) {
+ populate_popup_contact (menu, e_destination_is_evolution_list (dest), info);
} else {
populate_popup_nocontact (menu, info);
}
diff --git a/addressbook/gui/component/select-names/e-select-names-table-model.c b/addressbook/gui/component/select-names/e-select-names-table-model.c
index 4ff3e3c41a..0072e7d9fd 100644
--- a/addressbook/gui/component/select-names/e-select-names-table-model.c
+++ b/addressbook/gui/component/select-names/e-select-names-table-model.c
@@ -117,8 +117,8 @@ fill_in_info (ESelectNamesTableModel *model)
model->data = g_new(ESelectNamesTableModelData, count);
for (i = 0; i < count; ++i) {
- const EABDestination *dest = e_select_names_model_get_destination (model->source, i);
- EContact *contact = dest ? eab_destination_get_contact (dest) : NULL;
+ const EDestination *dest = e_select_names_model_get_destination (model->source, i);
+ EContact *contact = dest ? e_destination_get_contact (dest) : NULL;
if (contact) {
model->data[i].name = e_contact_get(contact, E_CONTACT_FILE_AS);
@@ -128,8 +128,8 @@ fill_in_info (ESelectNamesTableModel *model)
if (model->data[i].email == 0)
model->data[i].email = g_strdup("");
} else {
- const gchar *name = eab_destination_get_name (dest);
- const gchar *email = eab_destination_get_email (dest);
+ const gchar *name = e_destination_get_name (dest);
+ const gchar *email = e_destination_get_email (dest);
model->data[i].name = g_strdup (name && *name ? name : email);
model->data[i].email = g_strdup (email);
diff --git a/addressbook/gui/component/select-names/e-select-names-text-model.c b/addressbook/gui/component/select-names/e-select-names-text-model.c
index e885de5bf6..c207e02d79 100644
--- a/addressbook/gui/component/select-names/e-select-names-text-model.c
+++ b/addressbook/gui/component/select-names/e-select-names-text-model.c
@@ -372,9 +372,9 @@ e_select_names_text_model_insert_length (ETextModel *model, gint pos, const gcha
/* Is this a quoted or an unquoted separator we are dealing with? */
if (ut == g_utf8_get_char(text_model->sep) && index >= 0) {
- const EABDestination *dest = e_select_names_model_get_destination (source, index);
+ const EDestination *dest = e_select_names_model_get_destination (source, index);
if (dest) {
- const gchar *str = eab_destination_get_textrep (dest, FALSE);
+ const gchar *str = e_destination_get_textrep (dest, FALSE);
int j;
const char *jp;
@@ -400,8 +400,8 @@ e_select_names_text_model_insert_length (ETextModel *model, gint pos, const gcha
if (index == -1) {
EReposAbsolute repos;
- e_select_names_model_insert (source, 0, eab_destination_new ());
- e_select_names_model_insert (source, 0, eab_destination_new ());
+ e_select_names_model_insert (source, 0, e_destination_new ());
+ e_select_names_model_insert (source, 0, e_destination_new ());
repos.model = model;
repos.pos = -1; /* At end */
@@ -420,7 +420,7 @@ e_select_names_text_model_insert_length (ETextModel *model, gint pos, const gcha
(e_select_names_model_get_string (source, ins_point) == NULL))
|| (ins_point > 0 && (e_select_names_model_get_string (source, ins_point-1) == NULL)))) {
- e_select_names_model_insert (source, ins_point, eab_destination_new ());
+ e_select_names_model_insert (source, ins_point, e_destination_new ());
repos.model = model;
repos.pos = pos;
@@ -435,10 +435,10 @@ e_select_names_text_model_insert_length (ETextModel *model, gint pos, const gcha
const gchar *str = e_select_names_model_get_string (source, index);
gchar *str1 = g_strndup (str, offset);
gchar *str2 = g_strdup (str+offset);
- EABDestination *d1 = eab_destination_new (), *d2 = eab_destination_new ();
+ EDestination *d1 = e_destination_new (), *d2 = e_destination_new ();
- eab_destination_set_raw (d1, str1);
- eab_destination_set_raw (d2, str2);
+ e_destination_set_raw (d1, str1);
+ e_destination_set_raw (d2, str2);
e_select_names_model_replace (source, index, d1);
e_select_names_model_insert (source, index+1, d2);
@@ -498,12 +498,10 @@ e_select_names_text_model_insert_length (ETextModel *model, gint pos, const gcha
if (new_str->len) {
- EABDestination *dest;
- dest = index >= 0 ? eab_destination_copy (e_select_names_model_get_destination (source, index)) : eab_destination_new ();
- eab_destination_set_raw (dest, new_str->str);
+ EDestination *dest;
+ dest = e_destination_new ();
+ e_destination_set_raw (dest, new_str->str);
e_select_names_model_replace (source, index, dest);
-
- /* e_select_names_model_replace (source, index, dest); */
if (this_length > 0) {
repos.model = model;
@@ -589,7 +587,7 @@ e_select_names_text_model_delete (ETextModel *model, gint pos, gint length)
if (index+1 < e_select_names_model_count (source)) {
EReposDeleteShift repos;
- EABDestination *new_dest;
+ EDestination *new_dest;
const gchar *str1 = e_select_names_model_get_string (source, index);
const gchar *str2 = e_select_names_model_get_string (source, index+1);
gchar *new_str;
@@ -613,8 +611,8 @@ e_select_names_text_model_delete (ETextModel *model, gint pos, gint length)
e_select_names_model_delete (source, index+1);
- new_dest = eab_destination_new ();
- eab_destination_set_raw (new_dest, new_str);
+ new_dest = e_destination_new ();
+ e_destination_set_raw (new_dest, new_str);
e_select_names_model_replace (source, index, new_dest);
g_free (new_str);
@@ -689,7 +687,7 @@ e_select_names_text_model_delete (ETextModel *model, gint pos, gint length)
char *np;
int i;
EReposDeleteShift repos;
- EABDestination *dest;
+ EDestination *dest;
new_str = g_new0 (char, strlen (str) * 6 + 1); /* worse case it can't be any longer than this */
@@ -718,8 +716,8 @@ e_select_names_text_model_delete (ETextModel *model, gint pos, gint length)
np = g_utf8_next_char (np);
}
- dest = index >= 0 ? eab_destination_copy (e_select_names_model_get_destination (source, index)) : eab_destination_new ();
- eab_destination_set_raw (dest, new_str);
+ dest = e_destination_new ();
+ e_destination_set_raw (dest, new_str);
e_select_names_model_replace (source, index, dest);
if (out)
@@ -764,10 +762,10 @@ e_select_names_text_model_obj_count (ETextModel *model)
count = i = e_select_names_model_count (source);
while (i > 0) {
- const EABDestination *dest;
+ const EDestination *dest;
--i;
dest = e_select_names_model_get_destination (source, i);
- if (eab_destination_get_contact (dest) == NULL)
+ if (e_destination_get_contact (dest) == NULL)
--count;
}
@@ -783,8 +781,8 @@ nth_obj_index (ESelectNamesModel *source, gint n)
N = e_select_names_model_count (source);
do {
- const EABDestination *dest = e_select_names_model_get_destination (source, i);
- if (eab_destination_get_contact (dest))
+ const EDestination *dest = e_select_names_model_get_destination (source, i);
+ if (e_destination_get_contact (dest))
--n;
++i;
} while (n >= 0 && i < N);
diff --git a/addressbook/gui/component/select-names/e-select-names.c b/addressbook/gui/component/select-names/e-select-names.c
index cd8a2141f3..94ccef34c8 100644
--- a/addressbook/gui/component/select-names/e-select-names.c
+++ b/addressbook/gui/component/select-names/e-select-names.c
@@ -21,7 +21,10 @@
#include <config.h>
#include <string.h>
#include <glib.h>
-#include <gtk/gtk.h>
+#include <gtk/gtkalignment.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkstock.h>
#include <libgnome/gnome-i18n.h>
#include <gal/e-table/e-table-simple.h>
@@ -214,7 +217,7 @@ real_add_address_cb (int model_row, gpointer closure)
ESelectNamesChild *child = closure;
ESelectNames *names = child->names;
const EContact *contact;
- EABDestination *dest = eab_destination_new ();
+ EDestination *dest = e_destination_new ();
gint mapped_row;
mapped_row = e_table_subset_view_to_model_row (E_TABLE_SUBSET (names->without), model_row);
@@ -222,7 +225,7 @@ real_add_address_cb (int model_row, gpointer closure)
contact = eab_model_contact_at (EAB_MODEL(names->model), mapped_row);
if (contact != NULL) {
- eab_destination_set_contact (dest, (EContact*)contact, 0);
+ e_destination_set_contact (dest, (EContact*)contact, 0);
e_select_names_model_append (child->source, dest);
e_select_names_model_clean (child->source, FALSE);
diff --git a/addressbook/gui/contact-list-editor/e-contact-list-editor.c b/addressbook/gui/contact-list-editor/e-contact-list-editor.c
index 0c762ff982..22dccfcb67 100644
--- a/addressbook/gui/contact-list-editor/e-contact-list-editor.c
+++ b/addressbook/gui/contact-list-editor/e-contact-list-editor.c
@@ -23,9 +23,12 @@
#include "e-contact-list-editor.h"
#include <string.h>
-#include <glib.h>
+
#include <libgnome/gnome-i18n.h>
#include <libgnomeui/gnome-window-icon.h>
+#include <gtk/gtkentry.h>
+#include <gtk/gtktogglebutton.h>
+
#include <bonobo/bonobo-ui-container.h>
#include <bonobo/bonobo-ui-util.h>
#include <bonobo/bonobo-window.h>
@@ -868,7 +871,8 @@ table_drag_data_received_cb (ETable *table, int row, int col,
if (!e_contact_get (contact, E_CONTACT_IS_LIST)) {
e_contact_list_model_add_contact (E_CONTACT_LIST_MODEL (editor->model),
- contact);
+ contact,
+ 0 /* Hard-wired for default e-mail */);
changed = TRUE;
}
@@ -916,7 +920,6 @@ extract_info(EContactListEditor *editor)
EContact *contact = editor->contact;
if (contact) {
int i;
- GList *email_list;
char *image_data;
gsize image_data_len;
char *string = gtk_editable_get_chars(GTK_EDITABLE (editor->list_name_entry), 0, -1);
@@ -932,19 +935,19 @@ extract_info(EContactListEditor *editor)
e_contact_set (contact, E_CONTACT_LIST_SHOW_ADDRESSES,
GINT_TO_POINTER (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(editor->visible_addrs_checkbutton))));
- email_list = NULL;
+ e_vcard_remove_attributes (E_VCARD (contact), "", EVC_EMAIL);
+
/* then refill it from the contact list model */
for (i = 0; i < e_table_model_row_count (editor->model); i ++) {
- const EABDestination *dest = e_contact_list_model_get_destination (E_CONTACT_LIST_MODEL (editor->model), i);
- gchar *dest_xml = eab_destination_export (dest);
- if (dest_xml)
- email_list = g_list_append (email_list, dest_xml);
- }
+ const EDestination *dest = e_contact_list_model_get_destination (E_CONTACT_LIST_MODEL (editor->model), i);
+ EVCardAttribute *attr;
- e_contact_set (contact, E_CONTACT_EMAIL, email_list);
+ attr = e_vcard_attribute_new (NULL, EVC_EMAIL);
- g_list_foreach (email_list, (GFunc) g_free, NULL);
- g_list_free (email_list);
+ e_vcard_add_attribute (E_VCARD (contact), attr);
+
+ e_destination_export_to_vcard_attribute (dest, attr);
+ }
if (editor->image_set
&& e_image_chooser_get_image_data (E_IMAGE_CHOOSER (editor->list_image),
@@ -976,7 +979,7 @@ fill_in_info(EContactListEditor *editor)
GList *iter;
file_as = e_contact_get_const (editor->contact, E_CONTACT_FILE_AS);
- email_list = e_contact_get (editor->contact, E_CONTACT_EMAIL);
+ email_list = e_contact_get_attributes (editor->contact, E_CONTACT_EMAIL);
is_evolution_list = GPOINTER_TO_INT (e_contact_get (editor->contact, E_CONTACT_IS_LIST));
show_addresses = GPOINTER_TO_INT (e_contact_get (editor->contact, E_CONTACT_LIST_SHOW_ADDRESSES));
@@ -992,18 +995,54 @@ fill_in_info(EContactListEditor *editor)
e_contact_list_model_remove_all (E_CONTACT_LIST_MODEL (editor->model));
for (iter = email_list; iter; iter = iter->next) {
- char *dest_xml = iter->data;
- EABDestination *dest;
-
- /* g_message ("incoming xml: [%s]", dest_xml); */
- dest = eab_destination_import (dest_xml);
-
- if (dest != NULL) {
- e_contact_list_model_add_destination (E_CONTACT_LIST_MODEL (editor->model), dest);
+ EVCardAttribute *attr = iter->data;
+ GList *p;
+ EDestination *list_dest = e_destination_new ();
+ char *contact_uid = NULL;
+ char *email = NULL;
+ char *name = NULL;
+ int email_num = -1;
+ gboolean html_pref = FALSE;
+
+ for (p = e_vcard_attribute_get_params (attr); p; p = p->next) {
+ EVCardAttributeParam *param = p->data;
+ const char *param_name = e_vcard_attribute_param_get_name (param);
+ if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_CONTACT_UID)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ contact_uid = v ? v->data : NULL;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_EMAIL_NUM)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ email_num = v ? atoi (v->data) : -1;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_NAME)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ name = v ? v->data : NULL;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_EMAIL)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ email = v ? v->data : NULL;
+ }
+ else if (!g_ascii_strcasecmp (param_name,
+ EVC_X_DEST_HTML_MAIL)) {
+ GList *v = e_vcard_attribute_param_get_values (param);
+ html_pref = v ? !g_ascii_strcasecmp (v->data, "true") : FALSE;
+ }
}
+
+ if (contact_uid) e_destination_set_contact_uid (list_dest, contact_uid, email_num);
+ if (name) e_destination_set_name (list_dest, name);
+ if (email) e_destination_set_email (list_dest, email);
+ e_destination_set_html_mail_pref (list_dest, html_pref);
+
+ e_contact_list_model_add_destination (E_CONTACT_LIST_MODEL (editor->model), list_dest);
}
- g_list_foreach (email_list, (GFunc) g_free, NULL);
+ g_list_foreach (email_list, (GFunc) e_vcard_attribute_free, NULL);
g_list_free (email_list);
photo = e_contact_get (editor->contact, E_CONTACT_LOGO);
diff --git a/addressbook/gui/contact-list-editor/e-contact-list-model.c b/addressbook/gui/contact-list-editor/e-contact-list-model.c
index c7fd626372..8a22da19db 100644
--- a/addressbook/gui/contact-list-editor/e-contact-list-model.c
+++ b/addressbook/gui/contact-list-editor/e-contact-list-model.c
@@ -30,7 +30,7 @@ contact_list_value_at (ETableModel *etc, int col, int row)
{
EContactListModel *model = E_CONTACT_LIST_MODEL (etc);
- return (void *) eab_destination_get_textrep (model->data[row], TRUE);
+ return (void *) e_destination_get_textrep (model->data[row], TRUE);
}
/* This function sets the value at a particular point in our ETableModel. */
@@ -80,7 +80,7 @@ contact_list_value_to_string (ETableModel *etc, int col, const void *value)
}
static void
-contact_list_model_destroy (GtkObject *o)
+contact_list_model_dispose (GObject *o)
{
EContactListModel *model = E_CONTACT_LIST_MODEL (o);
int i;
@@ -96,17 +96,17 @@ contact_list_model_destroy (GtkObject *o)
model->data_count = 0;
model->data_alloc = 0;
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (o);
+ (* G_OBJECT_CLASS (parent_class)->dispose) (o);
}
static void
-e_contact_list_model_class_init (GtkObjectClass *object_class)
+e_contact_list_model_class_init (GObjectClass *object_class)
{
ETableModelClass *model_class = (ETableModelClass *) object_class;
parent_class = g_type_class_ref (PARENT_TYPE);
- object_class->destroy = contact_list_model_destroy;
+ object_class->dispose = contact_list_model_dispose;
model_class->column_count = contact_list_col_count;
model_class->row_count = contact_list_row_count;
@@ -121,13 +121,13 @@ e_contact_list_model_class_init (GtkObjectClass *object_class)
}
static void
-e_contact_list_model_init (GtkObject *object)
+e_contact_list_model_init (GObject *object)
{
EContactListModel *model = E_CONTACT_LIST_MODEL(object);
model->data_alloc = 10;
model->data_count = 0;
- model->data = g_new (EABDestination*, model->data_alloc);
+ model->data = g_new (EDestination*, model->data_alloc);
}
GType
@@ -172,16 +172,16 @@ e_contact_list_model_new ()
}
void
-e_contact_list_model_add_destination (EContactListModel *model, EABDestination *dest)
+e_contact_list_model_add_destination (EContactListModel *model, EDestination *dest)
{
g_return_if_fail (E_IS_CONTACT_LIST_MODEL (model));
- g_return_if_fail (EAB_IS_DESTINATION (dest));
+ g_return_if_fail (E_IS_DESTINATION (dest));
e_table_model_pre_change (E_TABLE_MODEL (model));
if (model->data_count + 1 >= model->data_alloc) {
model->data_alloc *= 2;
- model->data = g_renew (EABDestination*, model->data, model->data_alloc);
+ model->data = g_renew (EDestination*, model->data, model->data_alloc);
}
model->data[model->data_count ++] = dest;
@@ -194,28 +194,29 @@ void
e_contact_list_model_add_email (EContactListModel *model,
const char *email)
{
- EABDestination *new_dest;
+ EDestination *new_dest;
g_return_if_fail (E_IS_CONTACT_LIST_MODEL (model));
g_return_if_fail (email != NULL);
- new_dest = eab_destination_new ();
- eab_destination_set_email (new_dest, email);
+ new_dest = e_destination_new ();
+ e_destination_set_email (new_dest, email);
e_contact_list_model_add_destination (model, new_dest);
}
void
e_contact_list_model_add_contact (EContactListModel *model,
- EContact *contact)
+ EContact *contact,
+ int email_num)
{
- EABDestination *new_dest;
+ EDestination *new_dest;
g_return_if_fail (E_IS_CONTACT_LIST_MODEL (model));
g_return_if_fail (E_IS_CONTACT (contact));
- new_dest = eab_destination_new ();
- eab_destination_set_contact (new_dest, contact, 0); /* Hard-wired for default e-mail */
+ new_dest = e_destination_new ();
+ e_destination_set_contact (new_dest, contact, email_num);
e_contact_list_model_add_destination (model, new_dest);
}
@@ -229,7 +230,7 @@ e_contact_list_model_remove_row (EContactListModel *model, int row)
e_table_model_pre_change (E_TABLE_MODEL (model));
g_object_unref (model->data[row]);
- memmove (model->data + row, model->data + row + 1, sizeof (EABDestination*) * (model->data_count - row - 1));
+ memmove (model->data + row, model->data + row + 1, sizeof (EDestination*) * (model->data_count - row - 1));
model->data_count --;
e_table_model_row_deleted (E_TABLE_MODEL (model), row);
@@ -255,7 +256,7 @@ e_contact_list_model_remove_all (EContactListModel *model)
}
-const EABDestination *
+const EDestination *
e_contact_list_model_get_destination (EContactListModel *model, int row)
{
g_return_val_if_fail (E_IS_CONTACT_LIST_MODEL (model), NULL);
diff --git a/addressbook/gui/widgets/e-addressbook-table-adapter.c b/addressbook/gui/widgets/e-addressbook-table-adapter.c
index aec91ae329..c3fadfdf23 100644
--- a/addressbook/gui/widgets/e-addressbook-table-adapter.c
+++ b/addressbook/gui/widgets/e-addressbook-table-adapter.c
@@ -5,7 +5,6 @@
#include "e-addressbook-table-adapter.h"
#include "eab-contact-merging.h"
#include "eab-gui-util.h"
-#include "util/eab-destination.h"
#include <libxml/tree.h>
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
@@ -92,16 +91,6 @@ addressbook_value_at (ETableModel *etc, int col, int row)
value = e_contact_get_const((EContact*)eab_model_contact_at (priv->model, row), col);
- if (value && !strncmp (value, "<?xml", 5)) {
- EABDestination *dest = eab_destination_import (value);
- if (dest) {
- /* XXX blech, we leak this */
- value = g_strdup (eab_destination_get_textrep (dest, TRUE));
- g_object_unref (dest);
- }
- }
-
-
return (void *)(value ? value : "");
}
diff --git a/addressbook/gui/widgets/e-addressbook-treeview-adapter.c b/addressbook/gui/widgets/e-addressbook-treeview-adapter.c
index 592f9d2b03..2d0c4b8c93 100644
--- a/addressbook/gui/widgets/e-addressbook-treeview-adapter.c
+++ b/addressbook/gui/widgets/e-addressbook-treeview-adapter.c
@@ -379,15 +379,6 @@ adapter_get_value (GtkTreeModel *tree_model,
v = e_card_simple_get_const(simple, column);
- if (v && !strncmp (v, "<?xml", 5)) {
- EABDestination *dest = eab_destination_import (v);
- if (dest) {
- /* XXX blech, we leak this */
- v = g_strdup (eab_destination_get_textrep (dest, TRUE));
- g_object_unref (dest);
- }
- }
-
g_value_init (value, G_TYPE_STRING);
g_value_set_string (value, (v ? v : ""));
}
diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c
index 36038eef48..fdaf1692ba 100644
--- a/addressbook/gui/widgets/e-minicard.c
+++ b/addressbook/gui/widgets/e-minicard.c
@@ -39,7 +39,7 @@
#include "e-minicard-label.h"
#include "e-minicard-view.h"
#include "e-contact-editor.h"
-#include "util/eab-destination.h"
+#include "util/e-destination.h"
static void e_minicard_init (EMinicard *card);
static void e_minicard_class_init (EMinicardClass *klass);
@@ -537,12 +537,12 @@ activiate_editor(GnomeCanvasItem *item)
if (e_contact_get (e_minicard->contact, E_CONTACT_IS_LIST)) {
EContactListEditor *editor = eab_show_contact_list_editor (book, e_minicard->contact,
FALSE, e_minicard->editable);
- e_minicard->editor = G_OBJECT (editor);
+ e_minicard->editor = EAB_EDITOR (editor);
}
else {
EContactEditor *editor = eab_show_contact_editor (book, e_minicard->contact,
FALSE, e_minicard->editable);
- e_minicard->editor = G_OBJECT (editor);
+ e_minicard->editor = EAB_EDITOR (editor);
}
g_object_ref (e_minicard->editor);
@@ -746,17 +746,6 @@ add_field (EMinicard *e_minicard, EContactField field, gdouble left_width)
name = g_strdup_printf("%s:", e_contact_pretty_name (field));
string = e_contact_get (e_minicard->contact, field);
- /* Magically convert embedded XML into an address. */
- if (!strncmp (string, "<?xml", 5)) {
- EABDestination *dest = eab_destination_import (string);
- if (dest != NULL) {
- gchar *new_string = g_strdup (eab_destination_get_textrep (dest, TRUE));
- g_free (string);
- string = new_string;
- g_object_unref (dest);
- }
- }
-
new_item = e_minicard_label_new(group);
gnome_canvas_item_set( new_item,
"width", e_minicard->width - 4.0,
@@ -852,17 +841,6 @@ remodel( EMinicard *e_minicard )
string = e_contact_get(e_minicard->contact, field);
if (string && *string) {
- /* Magically convert embedded XML into an address. */
- if (!strncmp (string, "<?xml", 4)) {
- EABDestination *dest = eab_destination_import (string);
- if (dest != NULL) {
- gchar *new_string = g_strdup (eab_destination_get_textrep (dest, TRUE));
- g_free (string);
- string = new_string;
- g_object_unref (dest);
- }
- }
-
e_minicard->fields = g_list_append(e_minicard->fields, minicard_field);
g_object_set(minicard_field->label,
"field", string,
diff --git a/addressbook/gui/widgets/eab-contact-display.c b/addressbook/gui/widgets/eab-contact-display.c
index d5e62d323a..a1dc832550 100644
--- a/addressbook/gui/widgets/eab-contact-display.c
+++ b/addressbook/gui/widgets/eab-contact-display.c
@@ -23,7 +23,6 @@
#include "eab-contact-display.h"
#include "e-util/e-html-utils.h"
-#include "util/eab-destination.h"
#include <string.h>
#include <libgnome/gnome-i18n.h>
@@ -243,14 +242,9 @@ render_contact_list (GtkHTMLStream *html_stream, EContact *contact)
email_list = e_contact_get (contact, E_CONTACT_EMAIL);
for (l = email_list; l; l = l->next) {
- EABDestination *dest = eab_destination_import (l->data);
- if (dest) {
- const char *textrep = eab_destination_get_textrep (dest, TRUE);
- char *html = e_text_to_html (textrep, E_TEXT_TO_HTML_CONVERT_ADDRESSES);
- gtk_html_stream_printf (html_stream, "%s<br>", html);
- g_free (html);
- g_object_unref (dest);
- }
+ char *html = e_text_to_html (l->data, E_TEXT_TO_HTML_CONVERT_ADDRESSES);
+ gtk_html_stream_printf (html_stream, "%s<br>", html);
+ g_free (html);
}
gtk_html_stream_printf (html_stream, "</td></tr></table>");
}
@@ -499,14 +493,9 @@ eab_contact_display_render_compact (EABContactDisplay *display, EContact *contac
email_list = e_contact_get (contact, E_CONTACT_EMAIL);
for (l = email_list; l; l = l->next) {
- EABDestination *dest = eab_destination_import (l->data);
- if (dest) {
- const char *textrep = eab_destination_get_textrep (dest, TRUE);
- char *html = e_text_to_html (textrep, 0);
- gtk_html_stream_printf (html_stream, "%s, ", html);
- g_free (html);
- g_object_unref (dest);
- }
+ char *html = e_text_to_html (l->data, 0);
+ gtk_html_stream_printf (html_stream, "%s, ", html);
+ g_free (html);
}
gtk_html_stream_printf (html_stream, "</td></tr></table>");
}
diff --git a/addressbook/gui/widgets/eab-gui-util.c b/addressbook/gui/widgets/eab-gui-util.c
index f08e2122ce..3ad9ae7a9f 100644
--- a/addressbook/gui/widgets/eab-gui-util.c
+++ b/addressbook/gui/widgets/eab-gui-util.c
@@ -29,7 +29,7 @@
#include <gal/util/e-util.h>
#include "eab-gui-util.h"
#include "util/eab-book-util.h"
-#include "util/eab-destination.h"
+#include "util/e-destination.h"
#include "widgets/misc/e-image-chooser.h"
#include "widgets/misc/e-source-selector.h"
@@ -703,14 +703,8 @@ eab_send_contact_list (GList *contacts, EABDisposition disposition)
addr = NULL;
if (iterator && iterator->data) {
if (is_list) {
- /* We need to decode the list entries, which are XMLified EABDestinations. */
- EABDestination *dest = eab_destination_import ((char*)iterator->data);
- if (dest != NULL) {
- name = g_strdup (eab_destination_get_name (dest));
- addr = g_strdup (eab_destination_get_email (dest));
- g_object_unref (dest);
- }
-
+ /* XXX we should probably try to get the name from the attribute parameter here.. */
+ addr = g_strdup ((char*)iterator->data);
} else { /* is just a plain old card */
EContactName *contact_name = e_contact_get (contact, E_CONTACT_NAME);
if (contact_name) {
diff --git a/addressbook/importers/evolution-ldif-importer.c b/addressbook/importers/evolution-ldif-importer.c
index 77babb95a5..c7a883dc4e 100644
--- a/addressbook/importers/evolution-ldif-importer.c
+++ b/addressbook/importers/evolution-ldif-importer.c
@@ -32,7 +32,7 @@
#include <importer/evolution-importer.h>
#include <importer/GNOME_Evolution_Importer.h>
#include <widgets/misc/e-source-selector.h>
-#include <util/eab-destination.h>
+#include <util/e-destination.h>
#define COMPONENT_FACTORY_IID "OAFIID:GNOME_Evolution_Addressbook_LDIF_ImporterFactory"
#define COMPONENT_IID "OAFIID:GNOME_Evolution_Addressbook_LDIF_Importer"
@@ -353,7 +353,8 @@ getNextLDIFEntry( FILE *f )
static void
resolve_list_card (LDIFImporter *gci, EContact *contact)
{
- GList *email, *l, *new_email = NULL;
+ GList *email, *l;
+ GList *email_attrs = NULL;
char *full_name;
/* set file_as to full_name so we don't later try and figure
@@ -372,26 +373,26 @@ resolve_list_card (LDIFImporter *gci, EContact *contact)
/* break list chains here, since we don't support them just yet */
if (dn_contact && !e_contact_get (dn_contact, E_CONTACT_IS_LIST)) {
- EABDestination *dest;
- gchar *dest_xml;
+ EDestination *dest;
+ EVCardAttribute *attr = e_vcard_attribute_new (NULL, EVC_EMAIL);
/* Hard-wired for default e-mail, since netscape only exports 1 email address */
- dest = eab_destination_new ();
- eab_destination_set_contact (dest, dn_contact, 0);
- dest_xml = eab_destination_export (dest);
+ dest = e_destination_new ();
+ e_destination_set_contact (dest, dn_contact, 0);
+
+ e_destination_export_to_vcard_attribute (dest, attr);
+
g_object_unref (dest);
- if (dest_xml) {
- new_email = g_list_append (new_email, dest_xml);
- }
+ email_attrs = g_list_append (email_attrs, attr);
}
}
- e_contact_set (contact, E_CONTACT_EMAIL, new_email);
+ e_contact_set_attributes (contact, E_CONTACT_EMAIL, email_attrs);
g_list_foreach (email, (GFunc) g_free, NULL);
g_list_free (email);
- g_list_foreach (new_email, (GFunc) g_free, NULL);
- g_list_free (new_email);
+ g_list_foreach (email_attrs, (GFunc) e_vcard_attribute_free, NULL);
+ g_list_free (email_attrs);
}
static GList *
diff --git a/addressbook/importers/evolution-vcard-importer.c b/addressbook/importers/evolution-vcard-importer.c
index 83bec58892..f457cefafc 100644
--- a/addressbook/importers/evolution-vcard-importer.c
+++ b/addressbook/importers/evolution-vcard-importer.c
@@ -40,13 +40,13 @@
#include <bonobo/bonobo-shlib-factory.h>
#include <bonobo/bonobo-control.h>
-
#include <libebook/e-book.h>
#include <importer/evolution-importer.h>
#include <importer/GNOME_Evolution_Importer.h>
#include <widgets/misc/e-source-selector.h>
#include <util/eab-book-util.h>
+#include <util/e-destination.h>
#define COMPONENT_FACTORY_IID "OAFIID:GNOME_Evolution_Addressbook_VCard_ImporterFactory"
#define COMPONENT_IID "OAFIID:GNOME_Evolution_Addressbook_VCard_Importer"
@@ -70,6 +70,7 @@ process_item_fn (EvolutionImporter *importer,
VCardImporter *gci = (VCardImporter *) closure;
EContact *contact;
EContactPhoto *photo;
+ GList *attrs, *attr;
if (gci->iterator == NULL)
gci->iterator = gci->contactlist;
@@ -105,6 +106,25 @@ process_item_fn (EvolutionImporter *importer,
e_contact_photo_free (photo);
}
+ /* Deal with our XML EDestination stuff in EMAIL attributes, if there is any. */
+ attrs = e_contact_get_attributes (contact, E_CONTACT_EMAIL);
+ for (attr = attrs; attr; attr = attr->next) {
+ EVCardAttribute *a = attr->data;
+ GList *v = e_vcard_attribute_get_values (a);
+
+ if (v && v->data) {
+ if (!strncmp ((char*)v->data, "<?xml", 5)) {
+ EDestination *dest = e_destination_import ((char*)v->data);
+
+ e_destination_export_to_vcard_attribute (dest, a);
+
+ g_object_unref (dest);
+
+ }
+ }
+ }
+ e_contact_set_attributes (contact, E_CONTACT_EMAIL, attrs);
+
/* FIXME Error checking */
e_book_add_contact (gci->book, contact, NULL);
diff --git a/addressbook/printing/e-contact-print.c b/addressbook/printing/e-contact-print.c
index 39094d18a3..3b2dde2c18 100644
--- a/addressbook/printing/e-contact-print.c
+++ b/addressbook/printing/e-contact-print.c
@@ -41,7 +41,6 @@
#include <libebook/e-book-async.h>
#include <libebook/e-contact.h>
#include <gal/util/e-util.h>
-#include <addressbook/util/eab-destination.h>
#define SCALE 5
#define HYPHEN_PIXELS 20
@@ -475,16 +474,6 @@ e_contact_print_contact (EContact *contact, EContactPrintContext *ctxt)
char *string;
string = e_contact_get(contact, field);
- if (string && !strncmp (string, "<?xml", 4)) {
- EABDestination *dest = eab_destination_import (string);
- if (dest != NULL) {
- gchar *new_string = g_strdup (eab_destination_get_address (dest));
- g_free (string);
- string = new_string;
- g_object_unref (dest);
- }
- }
-
if (string && *string) {
double xoff = 0;
e_contact_output(ctxt->pc, ctxt->style->body_font, ctxt->x + xoff, ctxt->y, -1, e_contact_pretty_name (field));
diff --git a/addressbook/util/Makefile.am b/addressbook/util/Makefile.am
index 6cb70de06a..6d5592139d 100644
--- a/addressbook/util/Makefile.am
+++ b/addressbook/util/Makefile.am
@@ -14,8 +14,8 @@ noinst_LTLIBRARIES = libeabutil.la
libeabutil_la_SOURCES = \
eab-marshal.c \
- eab-destination.c \
- eab-destination.h \
+ e-destination.c \
+ e-destination.h \
eab-book-util.c \
eab-book-util.h