aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui/component')
-rw-r--r--addressbook/gui/component/e-address-popup.c8
-rw-r--r--addressbook/gui/component/select-names/e-select-names-completion.c40
-rw-r--r--addressbook/gui/component/select-names/e-select-names-model.c48
-rw-r--r--addressbook/gui/component/select-names/e-select-names-model.h1
-rw-r--r--addressbook/gui/component/select-names/e-select-names.c4
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));