diff options
Diffstat (limited to 'addressbook')
-rw-r--r-- | addressbook/ChangeLog | 20 | ||||
-rw-r--r-- | addressbook/backend/ebook/e-destination.c | 33 | ||||
-rw-r--r-- | addressbook/backend/ebook/e-destination.h | 2 | ||||
-rw-r--r-- | addressbook/gui/component/e-address-popup.c | 8 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-completion.c | 40 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-model.c | 48 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-model.h | 1 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names.c | 4 |
8 files changed, 138 insertions, 18 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index f4bbac447a..1a43fb44a2 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,23 @@ +2001-04-16 Jon Trowbridge <trow@ximian.com> + + * backend/ebook/e-destination.c (e_destination_get_name): Added. + + * gui/component/select-names/e-select-names.c + (real_add_address_cb): Use e_select_names_model_append. It's + nicer. + + * gui/component/select-names/e-select-names-model.c + (e_select_names_model_append): Added. + + * gui/component/select-names/e-select-names-completion.c + (book_query_process_card_list): Filter out completion matches that + don't have an associated e-mail address. + (book_query_score): Give a bonus to the primary address, so that + it always comes up first in the completion results. + + * gui/component/e-address-popup.c (e_address_popup_refresh_names): + Convert utf8 strings into gtk strings before displaying. + 2001-04-14 Christopher James Lahey <clahey@ximian.com> * backend/ebook/e-book-view-listener.c, diff --git a/addressbook/backend/ebook/e-destination.c b/addressbook/backend/ebook/e-destination.c index a44ce3ddc8..e6fdb3ee43 100644 --- a/addressbook/backend/ebook/e-destination.c +++ b/addressbook/backend/ebook/e-destination.c @@ -36,6 +36,7 @@ struct _EDestinationPrivate { ECard *card; gint card_email_num; + gchar *name; gchar *string; gchar *string_email; gchar *string_email_verbose; @@ -147,10 +148,12 @@ e_destination_clear_card (EDestination *dest) static void e_destination_clear_strings (EDestination *dest) { + g_free (dest->priv->name); g_free (dest->priv->string); g_free (dest->priv->string_email); g_free (dest->priv->string_email_verbose); + dest->priv->name = NULL; dest->priv->string = NULL; dest->priv->string_email = NULL; dest->priv->string_email_verbose = NULL; @@ -245,6 +248,28 @@ e_destination_get_strlen (const EDestination *dest) } const gchar * +e_destination_get_name (const EDestination *dest) +{ + struct _EDestinationPrivate *priv; + g_return_val_if_fail (dest && E_IS_DESTINATION (dest), NULL); + + priv = (struct _EDestinationPrivate *)dest->priv; /* cast out const */ + + if (priv->name == NULL) { + + if (priv->card) { + + priv->name = e_card_name_to_string (priv->card->name); + + } + + } + + return priv->name; + +} + +const gchar * e_destination_get_email (const EDestination *dest) { struct _EDestinationPrivate *priv; @@ -296,10 +321,10 @@ e_destination_get_email_verbose (const EDestination *dest) const gchar *email = e_destination_get_email (dest); if (priv->card) { - - priv->string_email_verbose = g_strdup_printf ("%s <%s>", - e_card_name_to_string (priv->card->name), - email); + gchar *n = e_card_name_to_string (priv->card->name); + priv->string_email_verbose = g_strdup_printf ("%s <%s>", n, email); + g_free (n); + } else { return email; diff --git a/addressbook/backend/ebook/e-destination.h b/addressbook/backend/ebook/e-destination.h index d0af6b0d23..3c6de6e316 100644 --- a/addressbook/backend/ebook/e-destination.h +++ b/addressbook/backend/ebook/e-destination.h @@ -67,6 +67,8 @@ gint e_destination_get_email_num (const EDestination *); const gchar *e_destination_get_string (const EDestination *); gint e_destination_get_strlen (const EDestination *); /* a convenience function... */ +const gchar *e_destination_get_name (const EDestination *); + const gchar *e_destination_get_email (const EDestination *); const gchar *e_destination_get_email_verbose (const EDestination *); diff --git a/addressbook/gui/component/e-address-popup.c b/addressbook/gui/component/e-address-popup.c index 19afd29baf..7aebeacf21 100644 --- a/addressbook/gui/component/e-address-popup.c +++ b/addressbook/gui/component/e-address-popup.c @@ -167,7 +167,9 @@ e_address_popup_refresh_names (EAddressPopup *pop) { if (pop->name_widget) { if (pop->name && *pop->name) { - gtk_label_set_text (GTK_LABEL (pop->name_widget), pop->name); + gchar *s = e_utf8_to_gtk_string (pop->name_widget, pop->name); + gtk_label_set_text (GTK_LABEL (pop->name_widget), s); + g_free (s); gtk_widget_show (pop->name_widget); } else { gtk_widget_hide (pop->name_widget); @@ -176,7 +178,9 @@ e_address_popup_refresh_names (EAddressPopup *pop) if (pop->email_widget) { if (pop->email && *pop->email) { - gtk_label_set_text (GTK_LABEL (pop->email_widget), pop->email); + gchar *s = e_utf8_to_gtk_string (pop->email_widget, pop->email); + gtk_label_set_text (GTK_LABEL (pop->email_widget), s); + g_free (s); gtk_widget_show (pop->email_widget); } else { gtk_widget_hide (pop->email_widget); 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 88ab176bf6..cebd57791f 100644 --- a/addressbook/gui/component/select-names/e-select-names-completion.c +++ b/addressbook/gui/component/select-names/e-select-names-completion.c @@ -36,6 +36,7 @@ #include <addressbook/backend/ebook/e-book-util.h> #include <addressbook/backend/ebook/e-destination.h> +#include <addressbook/backend/ebook/e-card-simple.h> #include "e-select-names-completion.h" struct _ESelectNamesCompletionPrivate { @@ -416,12 +417,30 @@ book_query_score (ESelectNamesCompletion *comp, EDestination *dest, double *scor if (best_string) { ECard *card = e_destination_get_card (dest); if (e_list_length (card->email) > 1) { + ECardSimple *simp; const gchar *email = e_destination_get_email (dest); + const gchar *simp_email; + if (email && strstr (best_string, email) == NULL) { gchar *tmp = g_strdup_printf ("%s <%s>", best_string, email); g_free (best_string); best_string = tmp; } + + /* Give a small bonus to the primary/secondary e-mail address, so that they will + always come in the correct order in the listing. */ + if (email) { + simp = e_card_simple_new (card); + simp_email = e_card_simple_get_email (simp, E_CARD_SIMPLE_EMAIL_ID_EMAIL); + if (simp_email && !g_strcasecmp (simp_email, email)) { + best_score += 0.2; + } + simp_email = e_card_simple_get_email (simp, E_CARD_SIMPLE_EMAIL_ID_EMAIL_2); + if (simp_email && !g_strcasecmp (simp_email, email)) { + best_score += 0.1; + } + gtk_object_unref (GTK_OBJECT (simp)); + } } } @@ -439,20 +458,27 @@ book_query_process_card_list (ESelectNamesCompletion *comp, const GList *cards) gint i; for (i=0; i<e_list_length (card->email); ++i) { EDestination *dest = e_destination_new (); + const gchar *email; gchar *match_text; double score = -1; e_destination_set_card (dest, card, i); + email = e_destination_get_email (dest); + + if (email && *email) { - match_text = book_query_score (comp, dest, &score); - if (match_text && score > 0) { - - e_completion_found_match_full (E_COMPLETION (comp), match_text, score, dest, - (GtkDestroyNotify) gtk_object_unref); + match_text = book_query_score (comp, dest, &score); + if (match_text && score > 0) { + + e_completion_found_match_full (E_COMPLETION (comp), match_text, score, dest, + (GtkDestroyNotify) gtk_object_unref); + } else { + gtk_object_unref (GTK_OBJECT (dest)); + } + g_free (match_text); } else { gtk_object_unref (GTK_OBJECT (dest)); } - g_free (match_text); } } @@ -902,7 +928,7 @@ e_select_names_completion_begin (ECompletion *comp, const gchar *text, gint pos, ESelectNamesCompletion *selcomp = E_SELECT_NAMES_COMPLETION (comp); const gchar *str; gint index, j; - + g_return_if_fail (comp != NULL); g_return_if_fail (E_IS_SELECT_NAMES_COMPLETION (comp)); g_return_if_fail (text != NULL); 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 59d7bc7c24..1baf729b3e 100644 --- a/addressbook/gui/component/select-names/e-select-names-model.c +++ b/addressbook/gui/component/select-names/e-select-names-model.c @@ -355,7 +355,22 @@ e_select_names_model_changed (ESelectNamesModel *model) g_free (model->priv->addr_text); model->priv->addr_text = NULL; - gtk_signal_emit(GTK_OBJECT(model), e_select_names_model_signals[E_SELECT_NAMES_MODEL_CHANGED]); +#if 0 + { + GList *i = model->priv->data; + gint j = 0; + g_print ("ESelectNamesModel state:\n"); + while (i) { + EDestination *dest = (EDestination *) i->data; + g_print ("%d: %s <%s>\n", j, e_destination_get_string (dest), e_destination_get_email (dest)); + i = g_list_next (i); + ++j; + } + g_print ("\n"); + } +#endif + + gtk_signal_emit (GTK_OBJECT(model), e_select_names_model_signals[E_SELECT_NAMES_MODEL_CHANGED]); } void @@ -375,6 +390,20 @@ e_select_names_model_insert (ESelectNamesModel *model, gint index, EDestination } void +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 && E_IS_DESTINATION (dest)); + + model->priv->data = g_list_append (model->priv->data, dest); + + gtk_object_ref (GTK_OBJECT (dest)); + gtk_object_sink (GTK_OBJECT (dest)); + + e_select_names_model_changed (model); +} + +void e_select_names_model_replace (ESelectNamesModel *model, gint index, EDestination *dest) { GList *node; @@ -518,8 +547,16 @@ e_select_names_model_text_pos (ESelectNamesModel *model, gint pos, gint *index, while (iter != NULL) { len = e_destination_get_strlen (E_DESTINATION (iter->data)); - if (sp <= pos && pos <= sp + len + adj) +#if 0 + g_print ("text_pos: %d %d %d %d\n", len, sp, pos, adj); +#endif + + if (sp <= pos && pos <= sp + len + adj) { +#if 0 + g_print ("breaking\n"); +#endif break; + } sp += len + adj + 1; adj = 1; @@ -532,9 +569,16 @@ e_select_names_model_text_pos (ESelectNamesModel *model, gint pos, gint *index, ++sp; /* skip past "magic space" */ if (iter == NULL) { +#if 0 + g_print ("text_pos ended NULL\n"); +#endif i = -1; sp = -1; len = 0; + } else { +#if 0 + g_print ("text_pos got index %d\n", i); +#endif } if (index) 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 ab7477762c..2e1c970ef7 100644 --- a/addressbook/gui/component/select-names/e-select-names-model.h +++ b/addressbook/gui/component/select-names/e-select-names-model.h @@ -55,6 +55,7 @@ ECard *e_select_names_model_get_card (ESelectNamesModel *mod const gchar *e_select_names_model_get_string (ESelectNamesModel *model, gint index); 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); diff --git a/addressbook/gui/component/select-names/e-select-names.c b/addressbook/gui/component/select-names/e-select-names.c index 30dc482e85..b2468402c8 100644 --- a/addressbook/gui/component/select-names/e-select-names.c +++ b/addressbook/gui/component/select-names/e-select-names.c @@ -146,9 +146,7 @@ real_add_address_cb (int model_row, e_destination_set_card (dest, card, 0); - e_select_names_model_insert (child->source, - e_select_names_model_count (child->source), - dest); + e_select_names_model_append (child->source, dest); e_select_names_model_clean (child->source); gtk_object_unref(GTK_OBJECT(card)); |