From 40dc05f68b7c8c7c813cf17fa5fc02c962183101 Mon Sep 17 00:00:00 2001 From: Chris Toshok Date: Sun, 22 Sep 2002 21:38:18 +0000 Subject: [ Fixes #28165, 29171 ] check to see if the value has really changed. the 2002-09-22 Chris Toshok [ Fixes #28165, 29171 ] * gui/component/select-names/e-select-names-manager.c (uris_listener): check to see if the value has really changed. the way the preferences dialog works is such that we'll get called when any of the Folder Options are changed (default folders, offline stuff, etc.) we really only want to tear down and build back up the completion books if the autocomplete folder setting changed. (read_completion_books_from_db): cache the folder list, and call load_completion_books. (load_completion_books): new function, loads from the cached_folder_list. (e_select_names_manager_init): init cached_folder_list to NULL. (e_select_names_manager_destroy): g_free (cached_folder_list). svn path=/trunk/; revision=18154 --- addressbook/ChangeLog | 17 +++++ .../select-names/e-select-names-manager.c | 72 ++++++++++++++-------- 2 files changed, 64 insertions(+), 25 deletions(-) (limited to 'addressbook') diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 07d7a190f6..f9e4f4bcf2 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,20 @@ +2002-09-22 Chris Toshok + + [ Fixes #28165, 29171 ] + * gui/component/select-names/e-select-names-manager.c + (uris_listener): check to see if the value has really changed. + the way the preferences dialog works is such that we'll get called + when any of the Folder Options are changed (default folders, + offline stuff, etc.) we really only want to tear down and build + back up the completion books if the autocomplete folder setting + changed. + (read_completion_books_from_db): cache the folder list, and call + load_completion_books. + (load_completion_books): new function, loads from the + cached_folder_list. + (e_select_names_manager_init): init cached_folder_list to NULL. + (e_select_names_manager_destroy): g_free (cached_folder_list). + 2002-09-20 Chris Toshok [ Fixes #30483 ] diff --git a/addressbook/gui/component/select-names/e-select-names-manager.c b/addressbook/gui/component/select-names/e-select-names-manager.c index b8b95507b6..5c24e482fa 100644 --- a/addressbook/gui/component/select-names/e-select-names-manager.c +++ b/addressbook/gui/component/select-names/e-select-names-manager.c @@ -385,6 +385,26 @@ open_book_cb (EBook *book, EBookStatus status, ESelectNamesManager *manager) gtk_object_unref (GTK_OBJECT (manager)); /* unref ourself (matches ref before the load_uri call below) */ } +static void +load_completion_books (ESelectNamesManager *manager) +{ + EFolderListItem *folders = e_folder_list_parse_xml (manager->cached_folder_list); + EFolderListItem *f; + + for (f = folders; f && f->physical_uri; f++) { + char *uri; + EBook *book = e_book_new (); + gtk_object_ref (GTK_OBJECT (manager)); /* ref ourself before our async call */ + + if (!strncmp (f->physical_uri, "file:", 5)) + uri = g_strdup_printf ("%s/addressbook.db", f->physical_uri); + else + uri = g_strdup (f->physical_uri); + addressbook_load_uri (book, uri, (EBookCallback)open_book_cb, manager); + } + e_folder_list_free_items (folders); +} + static void read_completion_books_from_db (ESelectNamesManager *manager) { @@ -401,23 +421,9 @@ read_completion_books_from_db (ESelectNamesManager *manager) CORBA_exception_free (&ev); if (val) { - EFolderListItem *folders = e_folder_list_parse_xml (val); - EFolderListItem *f; - - for (f = folders; f && f->physical_uri; f++) { - char *uri; - EBook *book = e_book_new (); - gtk_object_ref (GTK_OBJECT (manager)); /* ref ourself before our async call */ - - if (!strncmp (f->physical_uri, "file:", 5)) - uri = g_strdup_printf ("%s/addressbook.db", f->physical_uri); - else - uri = g_strdup (f->physical_uri); - addressbook_load_uri (book, uri, (EBookCallback)open_book_cb, manager); - } - e_folder_list_free_items (folders); - - g_free (val); + g_free (manager->cached_folder_list); + manager->cached_folder_list = val; + load_completion_books(manager); } } @@ -428,16 +434,29 @@ uris_listener (BonoboListener *listener, char *event_name, { ESelectNamesManager *manager = E_SELECT_NAMES_MANAGER (user_data); GList *l; - for (l = manager->entries; l; l = l->next) { - ESelectNamesManagerEntry *entry = l->data; - e_select_names_completion_clear_books (E_SELECT_NAMES_COMPLETION (entry->comp)); - } + Bonobo_ConfigDatabase db; + char *val; - g_list_foreach (manager->completion_books, (GFunc)gtk_object_unref, NULL); - g_list_free (manager->completion_books); - manager->completion_books = NULL; + db = addressbook_config_database (NULL); + + val = bonobo_config_get_string (db, "/Addressbook/Completion/uris", NULL); - read_completion_books_from_db (manager); + if (val) { + if (!manager->cached_folder_list || strcmp (val, manager->cached_folder_list)) { + for (l = manager->entries; l; l = l->next) { + ESelectNamesManagerEntry *entry = l->data; + e_select_names_completion_clear_books (E_SELECT_NAMES_COMPLETION (entry->comp)); + } + + g_list_foreach (manager->completion_books, (GFunc)gtk_object_unref, NULL); + g_list_free (manager->completion_books); + manager->completion_books = NULL; + + g_free (manager->cached_folder_list); + manager->cached_folder_list = val; + load_completion_books (manager); + } + } } /** @@ -614,6 +633,7 @@ e_select_names_manager_init (ESelectNamesManager *manager) manager->sections = NULL; manager->entries = NULL; manager->completion_books = NULL; + manager->cached_folder_list = NULL; } static void @@ -641,6 +661,8 @@ e_select_names_manager_destroy (GtkObject *object) manager->completion_books = NULL; bonobo_event_source_client_remove_listener (addressbook_config_database (NULL), manager->listener_id, NULL); + + g_free (manager->cached_folder_list); } static void -- cgit