aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog17
-rw-r--r--addressbook/gui/component/select-names/e-select-names-manager.c72
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