diff options
author | Chris Toshok <toshok@ximian.com> | 2002-09-23 05:38:18 +0800 |
---|---|---|
committer | Chris Toshok <toshok@src.gnome.org> | 2002-09-23 05:38:18 +0800 |
commit | 40dc05f68b7c8c7c813cf17fa5fc02c962183101 (patch) | |
tree | dcaa76217a1d70a60c5d96069e9befdc64f931ed /addressbook | |
parent | f09e18ada3cfd6767b6fdbcf8cc9794bfbdcfafe (diff) | |
download | gsoc2013-evolution-40dc05f68b7c8c7c813cf17fa5fc02c962183101.tar.gz gsoc2013-evolution-40dc05f68b7c8c7c813cf17fa5fc02c962183101.tar.zst gsoc2013-evolution-40dc05f68b7c8c7c813cf17fa5fc02c962183101.zip |
[ Fixes #28165, 29171 ] check to see if the value has really changed. the
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).
svn path=/trunk/; revision=18154
Diffstat (limited to 'addressbook')
-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 |