From 0652e8e2cd1709a90f301b21daf296069f6d51e5 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 26 Nov 2010 16:42:23 -0500 Subject: [PATCH] [#4639] Fix determining default addressbook if this property is not set in gconf --- .../src/contacts/addressbook.c | 2 + .../src/contacts/addressbook/eds.c | 53 ++++++++++++++++--- .../src/contacts/addressbook/eds.h | 3 ++ 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook.c index bf545a9c30..db232da8cd 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.c +++ b/sflphone-client-gnome/src/contacts/addressbook.c @@ -132,6 +132,7 @@ addressbook_get_books_data() fill_books_data(); addressbook_config_books(); + determine_default_addressbook(); return get_books_data(); } @@ -147,6 +148,7 @@ addressbook_init() fill_books_data(); addressbook_config_books(); + determine_default_addressbook(); // Call books initialization init (); diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c index a26b6bcaf2..370fad4e65 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.c +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c @@ -73,6 +73,12 @@ static gchar *current_name = "Default"; static EBookQueryTest current_test = E_BOOK_QUERY_BEGINS_WITH; + +/** + * Prototypes + */ +void empty_books_data(); + /** * Freeing a hit instance */ @@ -477,6 +483,8 @@ fill_books_data () ESourceList *source_list = NULL; gboolean default_found; + DEBUG ("Addressbook: Fill books data"); + source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources"); if (source_list == NULL) { @@ -491,7 +499,7 @@ fill_books_data () return; } - if (books_data == NULL) { + if (books_data != NULL) { empty_books_data(); books_data = NULL; } @@ -523,10 +531,12 @@ fill_books_data () if (strcmp (prop, "true") == 0) { book_data->isdefault = TRUE; default_found = TRUE; - } else + } else { book_data->isdefault = FALSE; - } else + } + } else { book_data->isdefault = FALSE; + } if (strcmp (absuri+strlen (absuri)-1, "/") == 0) book_data->uri = g_strjoin ("", absuri, e_source_peek_relative_uri (source), NULL); @@ -540,13 +550,38 @@ fill_books_data () g_free (absuri); } - if (!default_found) { - DEBUG ("Addressbook: No default addressbook found, using first addressbook as default"); - book_data_t *book_data = g_slist_nth_data (books_data, 0); - book_data->isdefault = TRUE; + g_object_unref (source_list); +} + +void +determine_default_addressbook() +{ + GSList *list_element = books_data; + gboolean default_found = FALSE; + + while (list_element && !default_found) { + book_data_t *book_data = list_element->data; + + if (book_data->isdefault) + default_found = TRUE; + + list_element = g_slist_next (list_element); } - g_object_unref (source_list); + // reset loop + list_element = books_data; + + while (list_element && !default_found) { + book_data_t *book_data = list_element->data; + + if (book_data->active) { + book_data->isdefault = TRUE; + DEBUG ("Addressbook: No default addressbook found, using %s addressbook as default", book_data->name); + default_found = TRUE; + } + + list_element = g_slist_next (list_element); + } } void @@ -567,6 +602,8 @@ empty_books_data() free_book_data (book_data); } + + } void diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.h b/sflphone-client-gnome/src/contacts/addressbook/eds.h index 361fc88243..26d54206bd 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.h +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.h @@ -166,6 +166,9 @@ get_current_addressbook_test (void); GSList * get_books_data(); +void +determine_default_addressbook(); + G_END_DECLS -- GitLab