diff options
Diffstat (limited to 'addressbook/gui/component')
5 files changed, 87 insertions, 14 deletions
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)); |