diff options
-rw-r--r-- | addressbook/ChangeLog | 17 | ||||
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-manager.c | 72 |
2 files changed, 64 insertions, 25 deletions
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 <toshok@ximian.com> + + [ 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 <toshok@ximian.com> [ 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 @@ -386,6 +386,26 @@ open_book_cb (EBook *book, EBookStatus status, ESelectNamesManager *manager) } 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) { Bonobo_ConfigDatabase db; @@ -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 |