From 91aa221f5c85328288e402e48e2f853f20846405 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandre.savard@savoirfairelinux.com> Date: Fri, 26 Nov 2010 11:28:24 -0500 Subject: [PATCH] [#4637] Fix opening default addressbook at sflphone init --- .../src/contacts/addressbook.c | 2 +- .../src/contacts/addressbook/eds.c | 101 +++++++----------- .../src/contacts/addressbook/eds.h | 4 +- .../src/contacts/searchbar.c | 21 +++- 4 files changed, 62 insertions(+), 66 deletions(-) diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook.c index 37012d54b5..bf545a9c30 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.c +++ b/sflphone-client-gnome/src/contacts/addressbook.c @@ -133,7 +133,7 @@ addressbook_get_books_data() fill_books_data(); addressbook_config_books(); - return books_data; + return get_books_data(); } /** diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c index 6e2dc08ca2..054622bd1b 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.c +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c @@ -64,6 +64,8 @@ static int pixbuf_size = 32; */ int remaining_books_to_open; +GSList *books_data = NULL; + /** * Current selected addressbook's uri and uid, initialized with default */ @@ -451,65 +453,27 @@ eds_async_open_callback (EBook *book, EBookStatus status, gpointer closure) void init () { - GError *err = NULL; - gchar *absuri, *reluri; - - EBook *default_addressbook = e_book_new_default_addressbook (&err); - - if (err) - ERROR ("Addressbook: Error: Could not create new book from source: %s", err->message); - - ESource *default_source = e_book_get_source (default_addressbook); - - // DEBUG ("Addressbook: Default source relative uri %s", e_source_peek_relative_uri (default_source)); - // DEBUG ("Addressbook: Default source absolute uri %s", e_source_peek_absolute_uri (default_source)); - - if (current_uri) { - g_free (current_uri); - current_uri = NULL; - } + GSList *book_list_iterator; + book_data_t *book_data; - if (current_uid) { - g_free (current_uid); - current_uid = NULL; - } + DEBUG ("Addressbook: Init default addressbook"); - if (strcmp (current_name, "Default") != 0) { - g_free (current_name); - current_name = NULL; + if (books_data == NULL) { + DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__); + return; } - // TODO: This should work but return a NULL pointer ... - // if (! (group = e_source_peek_group (default_source))); - - // ERROR ("Addressbook: Error: No group found for default addressbook"); - - absuri = g_strdup (e_source_peek_absolute_uri (default_source)); - // absuri = g_strdup (e_source_group_peek_base_uri (group)); - reluri = g_strdup (e_source_peek_relative_uri (default_source)); - - if (!absuri) { - absuri = g_malloc (1); - *absuri = 0; - } + // Iterate throw the list + for (book_list_iterator = books_data; book_list_iterator != NULL; + book_list_iterator = book_list_iterator->next) { + book_data = (book_data_t *) book_list_iterator->data; - if (!reluri) { - reluri = g_malloc (1); - *reluri = 0; + if (book_data->isdefault) { + current_uri = book_data->uri; + current_uid = book_data->uid; + current_name = book_data->name; + } } - - // Do not overwrite current_name for default - // current_name = g_strdup (e_source_peek_name (default_source)); - - current_uid = g_strdup (e_source_peek_uid (default_source)); - - if (strcmp (absuri+strlen (absuri)-1, "/") == 0) - current_uri = g_strjoin ("", absuri, reluri, NULL); - else - current_uri = g_strjoin ("/", absuri, reluri, NULL); - - g_free (absuri); - g_free (reluri); } @@ -522,7 +486,7 @@ fill_books_data () GSList *list, *l; ESourceList *source_list = NULL; remaining_books_to_open = 0; - books_data = NULL; + gboolean default_found; source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources"); @@ -538,14 +502,14 @@ fill_books_data () return; } + // in case default property is not set for any addressbook + default_found = FALSE; for (l = list; l != NULL; l = l->next) { ESourceGroup *group = l->data; GSList *sources = NULL, *m; - gchar *absuri; - - absuri = g_strdup (e_source_group_peek_base_uri (group)); + gchar *absuri = g_strdup (e_source_group_peek_base_uri (group)); sources = e_source_group_peek_sources (group); @@ -561,12 +525,13 @@ fill_books_data () const gchar *property_name = "default"; const gchar *prop = e_source_get_property (source, property_name); - if (prop) - if (strcmp (prop, "true") == 0) + if (prop) { + if (strcmp (prop, "true") == 0) { book_data->isdefault = TRUE; - else + default_found = TRUE; + } else book_data->isdefault = FALSE; - else + } else book_data->isdefault = FALSE; if (strcmp (absuri+strlen (absuri)-1, "/") == 0) @@ -581,6 +546,12 @@ 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); } @@ -662,7 +633,7 @@ set_current_addressbook (const gchar *name) if (!books_data) { DEBUG ("Addressbook: No books data (%s:%d)", __FILE__, __LINE__); - return NULL; + return; } // Iterate throw the list @@ -697,3 +668,9 @@ get_current_addressbook_test (void) { return current_test; } + +GSList * +get_books_data() +{ + return books_data; +} diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.h b/sflphone-client-gnome/src/contacts/addressbook/eds.h index 51b8421c9b..361fc88243 100644 --- a/sflphone-client-gnome/src/contacts/addressbook/eds.h +++ b/sflphone-client-gnome/src/contacts/addressbook/eds.h @@ -76,7 +76,6 @@ typedef struct { gboolean isdefault; } book_data_t; -GSList *books_data; /** * Free a contact entry @@ -164,6 +163,9 @@ set_current_addressbook_test (EBookQueryTest test); EBookQueryTest get_current_addressbook_test (void); +GSList * +get_books_data(); + G_END_DECLS diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c index 09d3085e4a..e0f6960f13 100644 --- a/sflphone-client-gnome/src/contacts/searchbar.c +++ b/sflphone-client-gnome/src/contacts/searchbar.c @@ -77,6 +77,8 @@ static void cbox_changed_cb (GtkWidget *widget, gpointer user_data UNUSED) { gchar *name; + DEBUG ("Searchbar: CBOX changed callback"); + name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget)); set_current_addressbook (name); @@ -93,6 +95,8 @@ void update_searchbar_addressbook_list() book_data_t *book_data; GSList *books_data = addressbook_get_books_data(); + DEBUG ("Searchbar: Update addressbook list"); + // we must disconnect signal from teh cbox while updating its content gtk_signal_disconnect (cbox, cboxSignalId); @@ -365,6 +369,9 @@ GtkWidget* contacts_searchbar_new () int count, cbox_height, cbox_width; GtkTreeIter iter, activeIter; GtkCellRenderer *cell; + // gchar *current_addressbook = NULL; + + DEBUG ("Addressbook: Create addressbook search bar"); ret = gtk_hbox_new (FALSE, 0); @@ -380,13 +387,14 @@ GtkWidget* contacts_searchbar_new () count = 0; gboolean activeIsSet = FALSE; - for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator - = book_list_iterator->next) { + for (book_list_iterator = books_data; book_list_iterator != NULL; + book_list_iterator = book_list_iterator->next) { book_data = (book_data_t *) book_list_iterator->data; if (book_data->active) { gtk_list_store_append (liststore, &iter); + gtk_list_store_set (liststore, &iter, 0, book_data->name, -1); if (book_data->isdefault) { @@ -398,6 +406,8 @@ GtkWidget* contacts_searchbar_new () } } + // current_addressbook = get_current_addressbook(); + cbox = gtk_combo_box_new_with_model ( (GtkTreeModel *) liststore); if (activeIsSet) @@ -413,11 +423,14 @@ GtkWidget* contacts_searchbar_new () gtk_widget_set_size_request (GTK_WIDGET (cbox), cbox_width, 26); cboxSignalId = gtk_signal_connect (GTK_OBJECT (cbox), "changed", G_CALLBACK (cbox_changed_cb), NULL); + // cbox_changed_cb (GTK_WIDGET (cbox), NULL); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbox), cell, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbox), cell, "text", 0, NULL); + + #if GTK_CHECK_VERSION(2,16,0) // GdkPixbuf *pixbuf; @@ -464,6 +477,10 @@ GtkWidget* contacts_searchbar_new () g_free (tooltip_text); + + // current_addressbook = gtk_combo_box_get_active_text (GTK_COMBO_BOX (cbox)); + // set_current_addressbook (current_addressbook); + return ret; } -- GitLab