[evolution/gnome-3-38] I#1122 - ENameSelectorEntry: Missing contacts in the lookup
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/gnome-3-38] I#1122 - ENameSelectorEntry: Missing contacts in the lookup
- Date: Mon, 12 Oct 2020 15:38:09 +0000 (UTC)
commit f45a425f84a5757a19c6a691af04f04ad107daf6
Author: Milan Crha <mcrha redhat com>
Date: Mon Oct 12 17:32:25 2020 +0200
I#1122 - ENameSelectorEntry: Missing contacts in the lookup
Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1122
src/e-util/e-name-selector-entry.c | 29 +++++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
---
diff --git a/src/e-util/e-name-selector-entry.c b/src/e-util/e-name-selector-entry.c
index a7a14f47ba..38b565f78e 100644
--- a/src/e-util/e-name-selector-entry.c
+++ b/src/e-util/e-name-selector-entry.c
@@ -430,11 +430,20 @@ describe_contact (EContact *contact)
return g_string_free (description, FALSE);
}
+static gchar *
+describe_contact_source (EBookClient *client,
+ EContact *contact)
+{
+ return g_strdup_printf ("%p\n%s", client, (const gchar *) e_contact_get_const (contact,
E_CONTACT_UID));
+}
+
static gboolean
is_duplicate_contact_and_remember (ENameSelectorEntry *nsentry,
+ EBookClient *client,
EContact *contact)
{
gchar *description;
+ gchar *source_ident, *known_source_ident;
g_return_val_if_fail (E_IS_NAME_SELECTOR_ENTRY (nsentry), FALSE);
g_return_val_if_fail (E_IS_CONTACT (contact), FALSE);
@@ -445,12 +454,24 @@ is_duplicate_contact_and_remember (ENameSelectorEntry *nsentry,
return FALSE;
}
- if (g_hash_table_lookup (nsentry->priv->known_contacts, description)) {
+ source_ident = describe_contact_source (client, contact);
+ known_source_ident = g_hash_table_lookup (nsentry->priv->known_contacts, description);
+
+ /* It's known, from the same book with the same UID */
+ if (g_strcmp0 (known_source_ident, source_ident) == 0) {
+ g_free (description);
+ g_free (source_ident);
+ return FALSE;
+ }
+
+ /* It's known, but from a different book or with a different UID - then skip it */
+ if (known_source_ident) {
g_free (description);
+ g_free (source_ident);
return TRUE;
}
- g_hash_table_insert (nsentry->priv->known_contacts, description, GINT_TO_POINTER (1));
+ g_hash_table_insert (nsentry->priv->known_contacts, description, source_ident);
return FALSE;
}
@@ -2364,7 +2385,7 @@ generate_contact_rows (EContactStore *contact_store,
if (!contact_uid)
return 0; /* Can happen with broken databases */
- if (is_duplicate_contact_and_remember (name_selector_entry, contact))
+ if (is_duplicate_contact_and_remember (name_selector_entry, e_contact_store_get_client
(contact_store, iter), contact))
return 0;
if (e_contact_get (contact, E_CONTACT_IS_LIST))
@@ -3429,7 +3450,7 @@ e_name_selector_entry_init (ENameSelectorEntry *name_selector_entry)
name_selector_entry->priv->minimum_query_length = 3;
name_selector_entry->priv->show_address = FALSE;
name_selector_entry->priv->block_entry_changed_signal = FALSE;
- name_selector_entry->priv->known_contacts = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
NULL);
+ name_selector_entry->priv->known_contacts = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
g_free);
/* Edit signals */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]